2012-05-10 6 views
4

При просмотре в диспетчере IIS 7.5> пулов приложений в последнем столбце перечислены «Приложения». В этом столбце показано количество пулов приложений/сайтов, с которыми связан этот appPool.Панели приложений IIS 7.5/IIS Manager: Приложения

Я пытаюсь выяснить, как запросить этот столбец/информацию, используя Powershell. Конечная цель здесь заключается в том, чтобы иметь сценарий, который я мог бы запустить, который сказал бы мне, если какой-либо прикладной пул используется для более чем одного веб-сайта или приложения.

Я не могу найти, как запросить эту информацию, при запуске:

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

Я не вижу это свойство. Я не уверен, что этот столбец является свойством, если нет, есть ли лучший способ проверить, используются ли AppPools для более чем одного веб-сайта/приложения?

+0

Также для добавления ... при запуске команды get-itemproperty IIS: \ AppPools \ (AppPoolName) Снова я вижу столбец Applijitons , но я не могу найти, как запросить только эту информацию. Даже когда вы сохраняете информацию в переменной и конвейером, чтобы получить член, я не вижу свойства, чтобы получить информацию о столбцах «Приложения». –

ответ

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". " 
} 
} 
} 
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 = '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} 
+0

Хотелось бы, чтобы я видел ваше сообщение раньше, вот что я в итоге придумал: (извините за форматирование, ограниченное пространство) $ SiteApps = get-item IIS: \ Sites \ * $ arraySize = ($ SiteApps.count -1) $ i = 0 $ t = 0 для ($ i = 0; $ i -le $ arraySize; $ i ++) # начать с начала массива {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 + «Веб-сайт« $ web1 »делится AppPool« webAppPool »с веб-сайтом« $ web2 ».»}}} –

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 
} 
Смежные вопросы