【问题标题】:Get dbname from multiple web.config files with powershell使用 powershell 从多个 web.config 文件中获取 dbname
【发布时间】:2011-08-13 22:07:04
【问题描述】:

我想发出一个 powershell 命令来为我返回一个 web 服务器上所有网站的连接字符串(特别是我正在寻找 db 名称值)......

所以我想看看类似的东西

site1 dbname=Northwind

site2 dbname=Fitch

site3 dbname=DemoDB

我尝试过使用 IIS Powershell 管理单元...我想我已经接近了:

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

但是...查看结果后...我的答案似乎不在其中

我对 powershell 很陌生 - 请原谅我的无知和缺乏经验

任何帮助表示赞赏!

谢谢!

【问题讨论】:

  • 别忘了将最有用的答案标记为“正确”。

标签: iis powershell web-config


【解决方案1】:

希望这能让您入门。这只是假设在 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 " "
}

【讨论】:

  • 完美!太感谢了。感谢帮助
【解决方案2】:

这个post 可能会给你一个开始的想法。基本上将 web.config 文件作为 XML 文件加载,然后只需找到连接字符串所在的节点即可。

执行 $myFile = ([xml] Get-Content web.config) 之类的操作。然后,您可以将其通过管道传输到 Get-Member ( $myFile | Get-Member -MemberType 属性) 以开始进入文件以查看哪个节点拥有它。我不在电脑前,我可以向您展示一些屏幕截图以进行更多解释,但您可以从 PowerShell.com“Master PowerShell”电子书中查看chapter,该电子书很好地解释了如何使用 XML。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2012-06-08
    • 1970-01-01
    相关资源
    最近更新 更多