4

IIS 7.5マネージャー>アプリケーションプールを見ると、最後の列に「アプリケーション」が表示されます。この列には、このappPoolが関連付けられているアプリケーションプール/Webサイトの数が表示されます。

Powershellを使用してこの列/情報をクエリする方法を理解しようとしています。ここでの最終目標は、複数のWebサイトまたはアプリでアプリケーションプールが使用されているかどうかを通知するスクリプトを実行できるようにすることです。

実行中にこの情報を照会する方法が見つかりません:

get-itemproperty IIS:\AppPools\(AppPoolName) | format-list *

この物件は見当たりません。この列がプロパティであるかどうかわからない場合は、AppPoolsが複数のWebサイト/アプリケーションで使用されているかどうかを確認するための最良の方法はありますか?

4

3 に答える 3

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>

コードを取り出して、フォーマット ファイルの外で使用できます。クエリを実行するアプリケーション プール名に $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}
于 2012-05-11T08:31:43.253 に答える
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
}
于 2012-09-05T10:18:58.123 に答える
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". " 
}
}
}
于 2012-05-14T17:58:10.117 に答える