Powershell 使用invoke命令调用web请求无效

Powershell 使用invoke命令调用web请求无效,powershell,Powershell,我正在尝试编写PowerShell脚本,以便使用winrm从远程计算机获取输出。我基本上是在invoke命令中运行invokewebrequest命令。但是我得到的输出与我在远程计算机上运行相同代码时的输出不同,任何帮助都将不胜感激。下面是代码片段的示例: $url = "https://yahoo/finance" $s = (New-PSSession -ComputerName computername -Credential domain\abcd) $result = Invoke

我正在尝试编写PowerShell脚本,以便使用winrm从远程计算机获取输出。我基本上是在invoke命令中运行invokewebrequest命令。但是我得到的输出与我在远程计算机上运行相同代码时的输出不同,任何帮助都将不胜感激。下面是代码片段的示例:

$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

您需要向我们展示错误/问题,或者至少解释一下。您的代码中也存在问题

$url不正确

这个

$url=

应该是这个

$url=

写入主机会清除缓冲区,因此,在使用它之后不会返回任何内容。避免使用它。您不需要将其写入屏幕,只需使用变量名即可

这个

$url=

。。。在这里不行

$result=Invoke命令-Session$s-ScriptBlock{$response=try{Invoke WebRequest$url}catch{$\异常.response.StatusCode.value}

…因为$url是一个局部变量,不能像您使用它的方式在远程计算机上使用

您需要将此局部变量设置为远程可用。需要执行以下操作

关于远程变量

长描述

可以在远程计算机上运行的命令中使用变量。 只需给变量赋值,然后在 价值所在地

默认情况下,假定远程命令中的变量已定义 在命令运行的会话中。您还可以使用变量 在本地会话中定义的,但必须将其标识为 命令中的局部变量

使用局部变量

也可以在远程命令中使用局部变量,但必须 指示变量是在本地会话中定义的

从Windows PowerShell 3.0开始,您可以使用使用范围 用于在远程命令中标识局部变量的修饰符

使用的语法如下所示:

使用PowerShell访问远程会话中的本地变量

偶尔我会遇到一个安装了PowerShell 2.0版的系统 我需要运行一个远程命令来访问它 局部变量。我永远记不起如何完成那个任务,所以我 我想我会写一篇关于它的博客来提醒我自己和 其他人可能会发现自己处于同样的情况

您也解决了这个问题。使用Invoke命令不需要新的PSSession。您只需使用-computername参数即可。
如果需要到远程主机的长期/扩展连接,或者需要将cmdlet从该远程主机代理到您的计算机,则只需要会话。

谢谢!我可以使用远程变量语法使其工作。URL只是一个示例。我没有使用确切的URL。我还使用了计算机名为p的invoke命令呃你的建议。
$Using:<VariableName>

$ps = "Windows PowerShell"
Invoke-Command -ComputerName S1 -ScriptBlock {
  Get-WinEvent -LogName $Using:ps
}