2011-10-27 32 views
0

我使用PowerShell遠程通過WMI使自己的IIS6網站列表(客戶機的Windows 7 64位和服務器是Windows 2003)當通過WMI讀取IIS6網站ServerBindings時,Powershell Remoting中是否存在錯誤?

的問題是,下面不工作:

$websites = Invoke-Command -ComputerName SEVER_NAME -UseSSL { Get-WmiObject -ComputerName SEVER_NAME -Namespace 'root\MicrosoftIISv2' -Class IISWebServerSetting } 

$websites[0].ServerBindings[0].Port 

$null,但

$websites[0].ServerBindings.Count 

回報1

我可以使用此解決方案,但它不是conveniant:

$websites = Invoke-Command -ComputerName SEVER_NAME -UseSSL { 
    Get-WmiObject -ComputerName SEVER_NAME -Namespace 'root\MicrosoftIISv2' -Class IISWebServerSetting | 
    Select-Object ServerComment, @{ 
     Name="ServerBindingPorts"; Expression = 
     { 
      $ports = @(); 
      foreach ($tmpServerBinding in $_.ServerBindings) 
      { 
       $ports += $tmpServerBinding.Port 
      }; 
      return $ports; 
     } 
    },@{ 
     Name="SecureBindingPorts"; Expression = 
     { 
      $ports = @(); 
      foreach ($tmpSecureBinding in $_.SecureBindings) 
      { 
       $ports += $tmpSecureBinding.Port 
      }; 
      return $ports; 
     } 
    } 
} 

然後我就可以得到端口這樣:

$websites[0].ServerBindingPorts 

我有同樣的問題與SecureBindings財產。

這是一個錯誤還是我錯過了什麼? 我是powershell新手,但我做了幾個小時谷歌,發現我的問題沒有答案。

回答

0

WMI和WMI的cmdlet已經做遠程的,這是-server參數上Get-WMIObject所以你:

$websites = Get-WmiObject -ComputerName SEVER_NAME -Namespace 'root\MicrosoftIISv2' -Class IISWebServerSetting 

這將避免需要:

$websites = Invoke-Command -ComputerName SEVER_NAME -UseSSL { Get-WmiObject -ComputerName SEVER_NAME -Namespace 'root\MicrosoftIISv2' -Class IISWebServerSetting } 

可以同樣用做通過WS-MAN遠程連載程序,這可能會有所幫助。

另外:

港是$空

什麼是PortIIsWebServerSetting上沒有Port財產。

,也是你的自定義屬性的表情很複雜:

@{ 
    Name="SecureBindingPorts"; Expression = 
    { 
     $ports = @(); 
     foreach ($tmpSecureBinding in $_.SecureBindings) 
     { 
      $ports += $tmpSecureBinding.Port 
     }; 
     return $ports; 
    } 
} 

而是更好地使用PowerShell的處理名單與管道能力:

@{Name="SecureBindingPorts"; Expression = { @($_.SecureBindings | %{ $_.Port }) }} 

在那裏我使用@(...),以確保我總是即使在SecureBindings屬性中有零個或一個對象,也可以獲取集合。

+0

謝謝,我會給直接的WMI嘗試。至於Port,$ websites [0] .ServerBindings [0] .Port是$ null,ServerBidnings [0]具有這樣的屬性。關於流程列表與管道,謝謝 - 我確定一定有一些捷徑,但正如我所說,我仍然是一個Powershell新手:) –

+0

直接WMI調用服務器給我「訪問被拒絕」。我不確定我是否會打開另一個遠程通道到我的服務器,這就是我決定使用Powershell Remoting的原因。你知道如何讓PS Remoting + WMI + IIS6以它應該的方式工作嗎? –

+0

@PiotrOwsiak WMI訪問被拒絕是DCOM權限(如果DCOM阻止其他人(例如防火牆)的錯誤不同)。回覆。 'Port'爲空我會從WMI自描述的方式開始(從「SecureBindings」的成員類型開始)。由於我沒有IIS6運行,我無法嘗試在這裏。 – Richard

相關問題