2012-11-15 252 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" 
    } 
相关问题