为存储为字符串的PS脚本提供参数



这是我之前提供给客户的命令:

iex ((New-Object System.Net.WebClient).DownloadString('URL'))

从URL位置以字符串形式下载PS脚本并执行该脚本。

现在我需要传递参数给这个脚本

iex (((New-Object System.Net.WebClient).DownloadString('URL')) -Parameter 'parameter')

不工作,因为字符串不接受参数

我需要创建一个简单的命令(这很重要),它将从URL下载脚本并接受参数。否则,我会将这个字符串保存到ps1文件中,并通过参数

执行它你能帮我吗?我是PS的新手

尝试以下方法:

& ([scriptblock]::Create(
(New-Object System.Net.WebClient).DownloadString('URL')
)) 'Parameter'

注意:

  • 上面的脚本文本在作用域中运行,由于使用了&,调用操作符,就像本地调用脚本文件一样,而Invoke-Expression(iex)在当前作用域中运行它,即好像它是用.调用的,点源操作符。如果您想要此行为,请将&更改为.

  • 要下载脚本,您可以选择使用PowerShell的Invoke-RestMethod(irm) cmdlet:Invoke-RestMethod 'URL'irm 'URL'

  • [scriptblock]::Create()创建一个PowerShell脚本块,它可以被&(或.)调用,同时也接受参数。


至于你试过的:

Invoke-Expression(iex)——通常应该避免——在执行从web下载的脚本文件内容时有几个缺点:

  • 它不支持传递参数,正如你所发现的。

  • 脚本文本中的exit语句将导致当前PowerShell会话作为一个整体退出

  • 如上所述,代码直接在调用者的作用域中执行,因此它的变量、函数、…在执行后的会话中逗留(然而,使用& { iex '...' }很容易避免这种情况)。

GitHub issue #5909讨论了增强Invoke-Commandcmdlet以支持直接从web下载和执行脚本。

最新更新