gpt4 book ai didi

powershell - 将参数提供给存储为字符串的 PS 脚本

转载 作者:行者123 更新时间:2023-12-04 07:15:44 28 4
gpt4 key购买 nike

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

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'
笔记:
  • 由于使用了 &,上面在子作用域中运行脚本文本。 , call operator ,就像在本地调用脚本文件时发生的那样,而 Invoke-Expression ( iex ) 在当前范围内运行它,即好像它是用 . 调用的, dot-sourcing operator .更改 &.如果你想要这种行为。
  • 要下载脚本,您也可以使用 PowerShell 的 Invoke-RestMethod ( irm ) cmdlet: Invoke-RestMethod 'URL'irm 'URL'
  • [scriptblock]::Create() 创建一个 PowerShell script block ,然后可以使用 & 调用(或 . ),同时也接受参数。

  • 至于 你试过什么 : Invoke-Expression ( iex ) - 应该 generally be avoided - 在执行从 Web 下载的脚本文件内容时有几个缺点:
  • 正如您所发现的,它不支持传递参数。
  • exit脚本文本中的语句将导致当前 PowerShell session 作为一个整体退出。
  • 如前所述,代码直接在调用者的作用域中执行,因此它的变量、函数、...在执行后仍留在 session 中(但是,使用 & { iex '...' } 很容易避免这种情况)。

  • GitHub issue #5909讨论增强 Invoke-Command cmdlet 以稳健地支持直接从 Web 下载和执行脚本。

    关于powershell - 将参数提供给存储为字符串的 PS 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68776648/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com