7

我有一个可以在本地或远程(通过 WinRM)运行的脚本,但是我希望它在远程计算机上运行时的行为略有不同。我意识到我可以将开关传递给脚本以识别它是在本地运行还是远程运行,但我想知道脚本本身是否可以检测它是否在远程运行?

4

5 回答 5

11

Get-Host返回,除其他信息外Name

PS> (Get-Host).Name
控制台主机
PS> (Invoke-Command -ComputerName dev2 -Script {Get-Host}).Name
服务器远程主机
于 2012-11-15T10:04:52.530 回答
6
    if ($PSSenderInfo) {
        "Running remote"
    }
    else {
        "Running local"
    }
于 2015-09-02T23:41:25.797 回答
1

检查是否$profile已定义对我有用。我不知道这有多可靠,但各种 消息来源表明远程会话中没有加载任何配置文件。我无法检查计算机名,因为我无法提前知道哪台机器是本地机器,哪台机器是远程机器。

$RunningLocally = $profile -ne $null
于 2015-04-27T13:11:04.417 回答
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
于 2012-11-15T09:09:56.140 回答
0

我认为如果你的脚本测试有可能

$myinvocation.mycommand.path -eq $null

然后如果是true通过调用命令远程运行。

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

于 2012-11-15T10:04:02.293 回答