繁体   English   中英

使用 powershell 从多个 web.config 文件中获取 dbname

[英]Get dbname from multiple web.config files with powershell

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

所以我想看到类似的东西

site1 dbname=Northwind

site2 dbname=Fitch

site3 dbname=DemoDB

我曾尝试使用 IIS Powershell 管理单元...我以为我很接近这个:

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

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

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

任何帮助表示赞赏!

谢谢!

希望这能让你开始。 这只是假设在 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 " "
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM