2010-02-03 58 views
3

下面是試圖在服務器上創建一個遠程會話,然後使用WMI來獲取服務器的IIS應用程序池的列表的示例腳本,並列出他們的名字:PowerShell的遠程會話和範圍的問題:命令出現在本地運行

function Test-Remoting 
    { 
     [CmdletBinding()] 
     param 
     ( 
     ) 
     begin 
     { 
      Enter-PSSession TestServer 
      $appPools = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPool" -Authentication 6 
      $appPools | ForEach-Object { 
       $appPool = $_; 
       $appPool.Name 
      } 
      Exit-PSSession 
     }  
    } 

該函數包含在名爲「Test-Remoting.ps1」的文件中。我打開PowerShell中,光盤插入包含此文件,點源在該文件的目錄,並調用函數:

PS C:\Users\moskie> . .\Test-Remoting.ps1 
PS C:\Users\moskie> Test-Remoting 

但這個腳本的結果是應用程序池的我本地列表機和 TESTSERVER。

替代地,如果我運行下面的線(等同於該函數的那些)手動在PowerShell提示符,我獲得在遠程服務器上的應用程序池的列表:

PS C:\Users\moskie> Enter-PSSession TestServer 
[TestServer]: PS C:\> $appPools = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPool" -Authentication 6 
[TestServer]: PS C:\> $appPools | ForEach-Object { $appPool = $_; $appPools.Name } 
<a list of the names of the application pools on TestServer> 
[TestServer]: PS C:\> 

我認爲有一個我不知道的概念,關於PowerShell遠程處理和範圍。任何人都可以解釋這種行爲嗎?

回答

5

我相信進入/退出-PSSession將意味着更多的交互使用。從輸入-PSSession將幫助:

SYNOPSIS 
    Starts an interactive session with a remote computer. 

在腳本中,使用新的PSSession和Invoke命令,像這樣:

$session = New-PSSession server01 
Invoke-Command -Session $session {hostname} 
Remove-PSSession -Session $session 

更新:要執行一個完整的腳本遠程使用FilePath參數在調用命令:

icm server01 -FilePath C:\users\keith\myscript.ps1 -arg 1,2 

這將腳本複製到遠程計算機SERVER01並與提供的參數有執行它秒。

+0

我會給一個鏡頭,但我想避免的變通,如,因爲我期待運行腳本是相當複雜。必須通過Invoke-Command運行每個命令將是一件痛苦的事情。使用Enter/Exit-PSSession將是最方便的,因爲我只需用這些命令來包圍我的腳本。 – Moskie 2010-02-04 00:39:41

+0

如果它是一個腳本,那麼你可以做到這一點'調用命令-FilePath myscript.ps1'和PowerShell將文件移動到遠程計算機並執行它。 – 2010-02-04 03:18:34

+0

謝謝,我最終走了這條路,所以我會把你的標記作爲答案。但是這個概念的「互動」會議是一個小含糊不清......這似乎合乎邏輯的我,當我有一個腳本執行命令,進入一個新的會話時,它後面的命令將在新的會話中運行。猜猜不...再次感謝! – Moskie 2010-02-05 17:31:08

相關問題