如何检查Powershell脚本是否正在远程运行

时间:2012-11-15 09:01:05

标签: powershell powershell-remoting

我有一个可以本地或远程运行的脚本(通过WinRM),但我希望它在远程计算机上运行时的行为略有不同。我意识到我可以通过切换到脚本以确定它是在本地还是远程运行,但我想知道脚本本身是否有可能检测它是否正在远程运行?

5 个答案:

答案 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远程运行。

我没有准确测试它,但我认为它可以正常工作。