【问题标题】:Pulling dbname from web.config using powershell使用 powershell 从 web.config 中提取 dbname
【发布时间】:2019-07-24 16:51:45
【问题描述】:

在这里找到了我的一部分答案,Get dbname from multiple web.config files with powershell

但需要它通过 IIS 站点和这些“站点”内的所有 Web 应用程序进行递归。我在每个“站点”中有多个带有多个 Web 应用程序的 IIS“站点”,需要检查每个 web.config 文件并提取使用的数据库。无法弄清楚如何递归上面链接中的代码。

    #Code from link above.

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 " "
}

希望这样可以为每个 IIS 站点和 IIS 站点中的每个 Web 应用程序输出每个 web.config 文件的数据库名称。目前这只查看 IIS 站点中的第一个 Web 应用程序,不查看 IIS 站点中的任何其他应用程序,也不会查看 IIS 站点的 web.config 是否具有到数据库的连接字符串。

【问题讨论】:

    标签: powershell iis web-config


    【解决方案1】:

    这是给你的代码,从你的参考我改变了循环机制而不是实际的逻辑来获取数据库名称。

    Import-Module WebAdministration
    
    Get-Website | % {
    
        $AppList = Get-WebApplication -Site $_.Name 
        foreach ( $app in $AppList )
        {
            $app.PhysicalPath
            $webConfigFile = [xml](Get-Content "$($app.PhysicalPath)\Web.config")
    
            # NEED TO CHECK WEATHER THE $webConfigFile  FILE EXIST OR NOT
    
            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"])"
                }
            }
    
        } # END OF INNER FOR EACH LOOP
    
    } # END OF OUTER FOR EACH LOOP
    

    【讨论】:

    • 尼拉吉;有没有办法同时提取网站 web.config 的详细信息?这将提取所有网站 Web 应用程序的信息,但不会抓取网站的根目录。要获得所用数据库的完整列表,需要网站根 web.config 及其所有 Web 应用程序。感谢您对此的帮助。
    • 这似乎也跳过了 WebApps,它抓住了站点中的第一个并移动到下一个站点。因此,例如我有 3 个网站,每个网站都有 3 个 webapps,输出将只显示 3 行输出,每个网站的第一个 webapp,它应该显示 9 行,每个 Web 应用程序一行,这种情况下 3,每个网站,本例 3. 3*3=9
    • foreach ( $app in $AppList ) 这一行是站点内每个 webapp 的循环。尝试打印 webapps 列表,这样你就可以知道循环中发生了什么..
    • 我已经测试了 2 个站点和每个站点 2 个 webapp,它适用于我,因为这是我自动化的一部分,所以这也适用于你。可能这需要一些小改动
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多