2011-08-13 62 views
4

我想發出一個PowerShell命令,以便爲Web服務器上的所有網站返回連接字符串(具體而言,我正在查找數據庫名稱值)。使用powershell從多個web.config文件中獲取dbname

所以我想看到的東西像

site1的數據庫名=羅斯文

站點2 DBNAME =惠譽

site3 DBNAME = demodb的

我已經嘗試使用IIS Powershell管理單元...我以爲我是這樣關閉的:

PS C:\ Windows \ system32> Get-WebApplication | GET-WebConfiguration型濾波器/的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」電子書中檢查此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

完美!非常感謝。感謝幫助 –

相關問題