How to check if a Powershell script is running remotely

后端 未结 5 1822
渐次进展
渐次进展 2020-12-19 09:04

I have a script that can be run either locally or remotely (via WinRM), however I would like it to behave slightly differently when run on a remote machine. I realise that

相关标签:
5条回答
  • 2020-12-19 09:08

    Get-Host returns, amongst other information a Name:

    PS> (Get-Host).Name
    ConsoleHost
    PS> (Invoke-Command -ComputerName dev2 -Script {Get-Host}).Name
    ServerRemoteHost
    
    0 讨论(0)
  • 2020-12-19 09:17

    Checking whether $profile is defined works for me. I don't know how reliable this is, but various sources suggest that no profile is loaded in the remote session. I couldn't check the computername, as I don't have any way of knowing in advance which machine is local and which is remote.

    $RunningLocally = $profile -ne $null
    
    0 讨论(0)
  • 2020-12-19 09:28
        if ($PSSenderInfo) {
            "Running remote"
        }
        else {
            "Running local"
        }
    
    0 讨论(0)
  • 2020-12-19 09:31

    I think it's possible in your script test if

    $myinvocation.mycommand.path -eq $null
    

    then if is true is running remotely via Invoke-command.

    I have not test it accurately but I think it can work.

    0 讨论(0)
  • 2020-12-19 09:35

    you can check computername in $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 讨论(0)
提交回复
热议问题