2011-08-13 17 views
4

Webサーバー上のすべてのWebサイトに対して接続文字列(具体的にはdb name値を探しています)を返すpowershellコマンドを発行したいと思います...powershellを使用して複数のweb.configファイルからdbnameを取得

だから私は

SITE1 DBNAME = Northwindの

サイト2 dbnameに=フィッチ

site3 DBNAME = DEMODB

のようなものを見たいのですが

私はIIS Powershellスナップインを使用しようとしました...私はこれに近いと思った:

PS C:\ Windows \ system32> Get-WebApplication |取得-WebConfiguration -filter /のconnectionStrings/*

けど...結果を見た後...私の答えはそこにあるように表示されません

私はPowerShellのに非常に新しいです - ので、私のignornanceを言い訳と未経験

何か助けに感謝します!

ありがとうございました!

+0

最も有用な回答に「正しい」とマークすることを忘れないでください。 –

答えて

0

これはpostで始まると思います。基本的にweb.configファイルをXMLファイルとしてロードし、接続文字列があるノードを見つけます。

$ myFile =([xml] Get-Content web.config)のような操作を行います。次にそのファイルをGet-Member($ myFile | Get-Member -MemberTypeプロパティ)にパイプして、ファイルに作業を開始して、どのノードにそのファイルがあるかを調べることができます。私はもっ​​と説明するためのスクリーンショットを表示できるコンピュータではありませんが、PowerShell.comの "Master PowerShell" e-bookからこのchapterをチェックすると、XMLをうまく扱うことが説明されています。

8

うまくいけば、これであなたが始められます。これは、Webアプリケーションの物理パスの物理パスにweb.configファイルが存在することを前提としています。 Webアプリケーション内の他のweb.configファイルを見つけることは繰り返されません。また、接続文字列がconnectionStrings構成要素内にあることも前提としています。

Import-Module WebAdministration 

Get-WebApplication | ` 
ForEach-Object { 

$webConfigFile = [xml](Get-Content "$($_.PhysicalPath)\Web.config") 
Write-Host "Web Application: $($_.path)" 
foreach($connString in $webConfigFile.configuration.connectionStrings.add) 
{ 
    Write-Host "Connection String $($connString.name): $($connString.connectionString)" 
    $dbRegex = "((Initial\sCatalog)|((Database)))\s*=(?<ic>[a-z\s0-9]+?);" 
    $found = $connString.connectionString -match $dbRegex 
    if ($found) 
    { 
    Write-Host "Database: $($Matches["ic"])" 
    } 

} 
Write-Host " " 
} 
+0

パーフェクト!どうもありがとうございます。助けを感謝する –