我正在尝试编写PowerShell脚本以使用winrm从远程计算机获取输出。我基本上在invoke-command中运行一个invoke web request命令。但我得到的输出不同于我在远程计算机上运行相同的代码时,任何帮助将不胜感激。以下是代码段的示例:
$url = "https://yahoo/finance"
$s = (New-PSSession -ComputerName computername -Credential domain\abcd)
$result = Invoke-Command -Session $s -ScriptBlock {$response = try { Invoke-WebRequest $url} catch { $_.Exception.Response.StatusCode.value__ }
write-host $response
}
write-host $response
答案 0 :(得分:0)
您需要向我们展示错误/问题,或者至少解释一下。您的代码中也存在问题。
$ url不对。
这......
$ url =" https://yahoo/finance"
应该是......
$ url =" https://www.yahoo.com/finance"
Write-Host清除缓冲区,因此,使用后不会返回任何内容。避免使用它。您不需要它来写入屏幕,只需使用变量名称。
这......
$ url =" https://yahoo/finance"
......不会在这里工作
$ result = Invoke-Command -Session $ s -ScriptBlock {$ response = try {Invoke-WebRequest $ url} catch {$ _.Exception.Response.StatusCode.value__}
...因为$ url是一个局部变量,并且不能像你使用它那样在远程机器上使用。
您需要将此本地变量设置为远程可用。要求做以下......
关于远程变量
LONGDESCRIPTION
您可以在远程计算机上运行的命令中使用变量。 只需为变量赋值,然后使用变量 价值的地方。
默认情况下,假定定义远程命令中的变量 在命令运行的会话中。您也可以使用变量 在本地会话中定义的,但您必须将它们标识为 命令中的局部变量。
使用本地变量
您也可以在远程命令中使用局部变量,但必须这样做 表示该变量是在本地会话中定义的。
从Windows PowerShell 3.0开始,您可以使用“使用范围” 用于标识远程命令中的局部变量的修饰符。
使用的语法如下:
$Using:<VariableName>
$ps = "Windows PowerShell"
Invoke-Command -ComputerName S1 -ScriptBlock {
Get-WinEvent -LogName $Using:ps
}
使用PowerShell访问远程会话中的本地变量
偶尔我会遇到一个使用PowerShell 2.0版的系统 我需要运行一个需要访问的远程命令 局部变量。我永远不会记得如何完成这项任务,所以我 以为我会写一篇关于它的博客作为对我自己的提醒 其他人可能会发现自己处于同一场景中。
http://mikefrobbins.com/2017/11/09/access-local-variables-in-a-remote-session-with-powershell
你也很复杂。使用Invoke-Command不需要New-PSSession。您只需使用-computername参数即可。 如果您需要与远程主机建立长期/扩展连接,或者需要将该远程主机的cmdlet代理到您的计算机,则只需要一个会话。