查看IIS 7.5管理器时>应用程序池,最后一列列出" Applications"。此列显示此appPool与之关联的应用程序池/网站的数量。
我试图弄清楚如何使用Powershell查询此列/信息。这里的最终目标是有一个我可以运行的脚本,告诉我是否有任何应用程序池用于超过1个网站或应用程序。
运行时,我无法找到如何查询此信息:
get-itemproperty IIS:\AppPools\(AppPoolName) | format-list *
我没看到这个属性。我不确定这个列是属性,如果没有,是否有最好的方法来检查AppPools是否被用于超过1个网站/应用程序?
答案 0 :(得分:4)
Applications属性在格式文件中定义,其代码驻留在iisprovider.format.ps1xml文件中(在webadmin模块文件夹中)。
<TableColumnItem>
<ScriptBlock>
$pn = $_.Name
$sites = get-webconfigurationproperty "/system.applicationHost/sites/site/application[@applicationPool=`'$pn`'and @path='/']/parent::*" machine/webroot/apphost -name name
$apps = get-webconfigurationproperty "/system.applicationHost/sites/site/application[@applicationPool=`'$pn`'and @path!='/']" machine/webroot/apphost -name path
$arr = @()
if ($sites -ne $null) {$arr += $sites}
if ($apps -ne $null) {$arr += $apps}
if ($arr.Length -gt 0) {
$out = ""
foreach ($s in $arr) {$out += $s.Value + "`n"}
$out.Substring(0, $out.Length - 1)
}
</ScriptBlock>
</TableColumnItem>
您可以取出代码并在格式文件之外使用它,只需为要查询的apppool名称分配$ pn。这是代码的简化版本:
$pn = 'pool1'
$sites = get-webconfigurationproperty "/system.applicationHost/sites/site/application[@applicationPool='$pn' and @path='/']/parent::*" machine/webroot/apphost -name name
$apps = get-webconfigurationproperty "/system.applicationHost/sites/site/application[@applicationPool='$pn' and @path!='/']" machine/webroot/apphost -name path
$sites,$apps | foreach {$_.value}
答案 1 :(得分:1)
我接受了这个:
Import-Module WebAdministration
function Get-WebAppPoolApplications($webAppPoolName) {
$result = @()
$webAppPool = Get-Item ( Join-Path 'IIS:\AppPools' $webAppPoolName )
if ( $webAppPool -ne $null ) {
$webSites = Get-ChildItem 'IIS:\Sites'
$webSites | % {
$webApplications = Get-ChildItem ( Join-Path 'IIS:\Sites' $_.Name ) |
where { $_.NodeType -eq 'application' }
$result += $webApplications |
where { $_.applicationPool -eq $webAppPoolName }
}
}
$result
}
答案 2 :(得分:0)
$SiteApps = get-item IIS:\Sites* $arraySize = ($SiteApps.count -1)
$i = 0
$t = 0
for ($i=0; $i -le $arraySize; $i ++) # start at the beg of the array
{
for ($t=($i+1); $t -le $arraySize; $t++)
{
if ($siteApps[$i].applicationpool -eq $siteApps[$t].applicationpool)
{
$web1 = $siteApps[$i].name
$webappPool = $siteApps[$i].applicationpool
$web2 = $siteApps[$t].name $answer = $answer + "The website "$web1" is sharing the AppPool "webAppPool" with website "$web2". "
}
}
}