2012-11-15 288 views
4

我有一個腳本可以在本地或遠程運行(通過WinRM),但是我希望它在遠程計算機上運行時的行爲稍有不同。我意識到我可以將腳本切換到腳本以確定腳本是在本地還是遠程運行,但是我想知道腳本本身是否可以檢測它是否在遠程運行?如何檢查Powershell腳本是否正在遠程運行

+0

你如何調用腳本用於在遠程? –

+0

我正在使用Invoke-Command –

回答

8

Get-Host回報,除其他信息Name

 
PS> (Get-Host).Name 
ConsoleHost 
PS> (Invoke-Command -ComputerName dev2 -Script {Get-Host}).Name 
ServerRemoteHost 
+0

+1這是正確的方式! –

0

你可以在$ MyInvocation檢查計算機名:

PS>Invoke-Command -ComputerName smacnt01 -ScriptBlock {$MyInvocation} 

PSComputerName : smacnt01 
RunspaceId  : 333f5333-0ca5-4461-8f38-cb086fbd1ea4 
MyCommand  : $MyInvocation 
BoundParameters : {} 
UnboundArguments : {} 
ScriptLineNumber : 0 
OffsetInLine  : 0 
HistoryId  : -1 
ScriptName  : 
Line    : 
PositionMessage : 
InvocationName : 
PipelineLength : 1 
PipelinePosition : 1 
ExpectingInput : False 
CommandOrigin : Runspace 
+0

感謝Kayasax的迴應,不知道我將如何使用它來判斷腳本是否在遠程運行。除非腳本獲得啓動遠程調用的計算機名稱的某種方式,才能將其與$ MyInvocation中的值進行比較? –

+0

在你啓動invoke-command的腳本中你可以調用$ env:computername no? –

+0

這將工作,但我想避免傳遞給腳本額外的值,而是讓腳本找出它在$ Myinvocation –

0

我認爲這是可能在你的腳本測試,如果

$myinvocation.mycommand.path -eq $null 

那麼如果是true通過調用命令遠程運行。

我還沒有準確測試,但我認爲它可以工作。

0

檢查是否$profile是我定義的作品。我不知道這有多可靠,但varioussources建議在遠程會話中不加載配置文件。我無法檢查計算機名稱,因爲我無法預先知道哪臺機器是本地的,哪臺是遠程的。

$RunningLocally = $profile -ne $null 
2
if ($PSSenderInfo) { 
     "Running remote" 
    } 
    else { 
     "Running local" 
    } 
相關問題