2013-12-17 13 views
5

Cách truy xuất số lượng ứng dụng được liên kết với một IIS AppPool cụ thể thông qua lệnh PowerShell?PowerShell: truy xuất số lượng ứng dụng trong AppPool

Chúng ta có thể thấy các ứng dụng liên quan đến bằng tay sử dụng:

Get-Item IIS:\AppPools\AppPoolName 

Tuy nhiên, nếu chúng ta muốn tự chọn cột Applications, nó không phải là có thể. Ngoài ra, cột Applications không được liệt kê trong phạm vi | Get-Member *.

  1. Tại sao cột không được liệt kê?
  2. Cách tìm số lượng ứng dụng được liên kết với một IIS AppPool cụ thể bằng PowerShell?

Trả lời

10

Bí quyết là: PowerShell thiết lập cái gọi là "tệp định nghĩa xem" cho PowerShell biết cách định dạng đối tượng (ví dụ: đối tượng được định dạng dưới dạng danh sách hoặc bảng, cột nào được hiển thị, v.v.). Các tệp đó có thể được tìm thấy tại C:\Windows\System32\WindowsPowerShell\v1.0 và tất cả đều kết thúc bằng .format.ps1xml.

Để trả lời câu hỏi ban đầu: Các tập tin C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WebAdministration\iisprovider.format.ps1xml chứa định nghĩa khung nhìn cho các loại AppPool trong đó xác định một cột tính toán tìm kiếm như thế này:

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

này trả lời tại sao cột tự nó không phải là một thành viên của AppPool kiểu. Câu hỏi thứ hai có thể dễ dàng trả lời tại giải nén mã cần thiết từ "scriptlet" ở trên:

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

tôi giải quyết vấn đề này tương tự cho nhiều giờ cho đến khi cuối cùng khi đến giải pháp. Câu trả lời từ D.R. rất hữu ích nhưng nó không hiệu quả với tôi. Sau một số chỉnh sửa, tôi đã đưa ra đoạn mã dưới đây để lấy số lượng ứng dụng trong một nhóm ứng dụng.

Tôi nhận thấy rằng phần này của mã nd @path!='/' đã ném số lượng.

$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

tôi đã kết thúc với Bộ luật sau (về cơ bản tương tự như trên, nhưng khác nhau được định dạng)

$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

câu trả lời của bạn không thêm bất cứ điều gì vào chủ đề này. Đây phải là một bình luận nhưng bạn thật đáng buồn không thể đăng chúng ... Cảm ơn bạn đã chỉ ra rằng bài đăng trên có vấn đề về định dạng. – Wndrr

Các vấn đề liên quan