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遠程處理和範圍。任何人都可以解釋這種行爲嗎?
我會給一個鏡頭,但我想避免的變通,如,因爲我期待運行腳本是相當複雜。必須通過Invoke-Command運行每個命令將是一件痛苦的事情。使用Enter/Exit-PSSession將是最方便的,因爲我只需用這些命令來包圍我的腳本。 – Moskie 2010-02-04 00:39:41
如果它是一個腳本,那麼你可以做到這一點'調用命令-FilePath myscript.ps1'和PowerShell將文件移動到遠程計算機並執行它。 – 2010-02-04 03:18:34
謝謝,我最終走了這條路,所以我會把你的標記作爲答案。但是這個概念的「互動」會議是一個小含糊不清......這似乎合乎邏輯的我,當我有一個腳本執行命令,進入一個新的會話時,它後面的命令將在新的會話中運行。猜猜不...再次感謝! – Moskie 2010-02-05 17:31:08