我有一个可以本地或远程运行的脚本(通过WinRM),但我希望它在远程计算机上运行时的行为略有不同。我意识到我可以通过切换到脚本以确定它是在本地还是远程运行,但我想知道脚本本身是否有可能检测它是否正在远程运行?
答案 0 :(得分:10)
Get-Host
返回Name
:
PS> (Get-Host).Name ConsoleHost PS> (Invoke-Command -ComputerName dev2 -Script {Get-Host}).Name ServerRemoteHost
答案 1 :(得分:6)
if ($PSSenderInfo) {
"Running remote"
}
else {
"Running local"
}
答案 2 :(得分:1)
检查$profile
是否定义对我有用。我不知道这有多可靠,但是various sources表示远程会话中没有加载配置文件。我无法检查计算机名称,因为我没有任何方法事先知道哪台机器是本地机器,哪台机器是远程机器。
$RunningLocally = $profile -ne $null
答案 3 :(得分:0)
你可以在$ MyInvocation中检查computername:
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
答案 4 :(得分:0)
我认为你的脚本测试是否可能
$myinvocation.mycommand.path -eq $null
然后如果true
通过Invoke-command远程运行。
我没有准确测试它,但我认为它可以正常工作。