如何使用powershell远程连接到计算机本身

How to remote to the computer itself with powershell

现在我需要 运行 远程机器上的脚本来做一些部署工作,使用:

Invoke-Command -ComputerName $hostName -Credential $cred -ScriptBlock $scriptBlock

如果 $hostName 是调用此命令的计算机,则报告:

message : Access is denied. For more information, see the about_Remote_Troubleshooting Help topic.
+ CategoryInfo          : OpenError: (myMachineName:String) [], PSRemotingTransportException
+ FullyQualifiedErrorId : AccessDenied,PSSessionStateBroken

我想运行无论是远程还是本地机器都统一命令。

更新: 我正在使用 Azure 中的机器。此命令有效:

Invoke-Command -ComputerName XXX -Credential $cred -ScriptBlock $scriptBlock

但这个不是:

Invoke-Command -ComputerName XXX.cloudapp.net -Credential $cred -ScriptBlock $scriptBlock

有人可以帮忙吗?

localhost 作为计算机名称传递:

Invoke-Command -ComputerName <b>localhost</b> -Credential $cred -ScriptBlock $scriptBlock

如@CB 所述,使用计算机的主机名也应该可行。在问题的评论中:

Invoke-Command -ComputerName <b>$env:COMPUTERNAME</b> -Credential $cred `
  -ScriptBlock $scriptBlock

如果您在别处需要 FQDN 并且只想删除 Invoke-Command 语句的域部分,您可以像这样删除它:

Invoke-Command -ComputerName <b>($hostname -replace '\..*')</b> -Credential $cred `
  -ScriptBlock $scriptBlock

要根据给定的主机名是否是本地主机的名称来处理目标计算机名称,您可以这样做:

$server = if (($hostname -replace '\..*') -eq $env:COMPUTERNAME) {
            'localhost'
          } else {
            $hostname
          }

Invoke-Command -ComputerName $server -Credential $cred -ScriptBlock $scriptBlock

请注意,无论哪种方式,WinRM 都必须在本地计算机上启用才能运行。