我有一个可以在本地或远程(通过WinRM的)运行的脚本,但是我想在远程机器上运行它表现略有不同。 我知道我可以在交换机传递给脚本,以确定它是否是本地或远程运行,但我想知道这是否是可能的脚本本身来检测它是否是远程运行?
Answer 1:
Get-Host
的回报,除其他信息的Name
:
PS> (Get-Host).Name ConsoleHost PS> (Invoke-Command -ComputerName dev2 -Script {Get-Host}).Name ServerRemoteHost
Answer 2:
if ($PSSenderInfo) {
"Running remote"
}
else {
"Running local"
}
Answer 3:
核查是否$profile
是我定义的作品。 我不知道如何可靠,这是,但各种 来源表明,没有配置文件在远程会话中加载。 我无法检查计算机名,因为我没有提前知道的任何方式哪台机器是局部的,这是遥控器。
$RunningLocally = $profile -ne $null
Answer 4:
你可以在$ 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
Answer 5:
我认为这是可能在你的脚本测试,如果
$myinvocation.mycommand.path -eq $null
然后,如果是true
经由调用指令远程运行。
我还没有准确的测试,但我认为它可以工作。
文章来源: How to check if a Powershell script is running remotely