这是我之前提供给客户的命令:
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-Command
cmdlet以支持直接从web下载和执行脚本。