2013-12-17 13 views
5

Jak odzyskać liczbę aplikacji powiązanych z określonym serwerem aplikacji IIS za pomocą polecenia PowerShell?PowerShell: pobieranie wielu aplikacji w AppPool

Widzimy powiązane aplikacje ręcznie za pomocą:

Get-Item IIS:\AppPools\AppPoolName 

Jednakże, jeśli chcesz ręcznie wybrać kolumnę Applications, to nie jest możliwe. Ponadto kolumna Applications nie jest wymieniona w ramach | Get-Member *.

  1. Dlaczego kolumny nie ma na liście?
  2. Jak znaleźć liczbę aplikacji powiązanych z określonym pakietem aplikacji IIS przy użyciu programu PowerShell?

Odpowiedz

10

Podstęp: PowerShell utworzył tak zwane "pliki definicji widoku", które informują PowerShell, jak formatować obiekty (np. Czy obiekt jest sformatowany jako lista lub tabela, które kolumny są wyświetlane itp.). Pliki te można znaleźć pod numerem C:\Windows\System32\WindowsPowerShell\v1.0 i kończą się na .format.ps1xml.

Aby odpowiedzieć na oryginalne pytanie: Plik C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WebAdministration\iisprovider.format.ps1xml zawiera definicję widoku dla danego typu AppPool który definiuje kolumny obliczona wygląda tak:

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

Ten odpowiada, dlaczego sama kolumna nie jest członkiem AppPool rodzaj. Drugie pytanie może być łatwo odpowiedzieć teraz wydobycia niezbędnego kodu z „scriptlet” powyżej:

$applicationsInAppPoolCount = @(Get-WebConfigurationProperty `"/system.applicationHost/sites/site/application[@applicationPool=`'$appPool`'and @path!='/']"` "machine/webroot/apphost" -name path).Count 
2

miałem do czynienia z tym samym numerze na wiele godzin, aż w końcu przybyciu do rozwiązania. Odpowiedź D.R. był bardzo pomocny, ale nie działał dla mnie. Po kilku poprawkach wpadłem na poniższy kod, który pobiera liczbę aplikacji w puli aplikacji.

Zauważyłem, że ta część kodu nd @path!='/' odrzuciła liczbę.

$appPool = "REPLACE ME with a value from your app pool" 
@(Get-WebConfigurationProperty "/system.applicationHost/sites/site/application[@applicationPool=`'$appPool`']" "machine/webroot/apphost" -name path).Count 
0

skończyło się następujący kod (w zasadzie taki sam jak wyżej, ale różnie sformatowane)

$appPools = Get-ChildItem –Path IIS:\AppPools 
foreach ($apppool in $apppools) { 
    $appoolName = $apppool.Name 
    [string] $NumberOfApplications = (Get-WebConfigurationProperty "/system.applicationHost/sites/site/application[@applicationPool='$appoolName']" "machine/webroot/apphost" -name path).Count 
    Write-Output "AppPool name: $appoolName has $NumberOfApplications applications" 
} 
+0

Twoja odpowiedź nie dodaje nic do tego wątku. To powinien być komentarz, ale niestety nie możesz ich jeszcze opublikować ... Dziękujemy za zwrócenie uwagi, że powyższy post ma problem z formatowaniem. – Wndrr

Powiązane problemy