gpt4 book ai didi

powershell - 调用命令并使用参数运行 ps1

转载 作者:行者123 更新时间:2023-12-05 05:45:58 24 4
gpt4 key购买 nike

我正在尝试使用 invoke-command 运行脚本,以使用一些相关参数为端点安装 defender。

如果我使用 invoke-command 运行标准 ps1,它可以正常工作。但是,如果我运行以下命令:

Invoke-Command -ComputerName NAME -FilePath \\srv\share\install.ps1 -OnboardingScript \\srv\share\WindowsDefenderATPonboardingscript.cmd -Passive

我收到“找不到与参数名称‘OnboardingScript’匹配的参数”。有人可以帮助我了解如何调用命令并运行带参数的脚本吗?

install.ps1 文件中已经定义的参数

https://github.com/microsoft/mdefordownlevelserver/blob/main/Install.ps1

提前致谢

最佳答案

你的 Invoke-Command调用有一个语法问题,如Santiago Squarzon指出:

任何传递参数 - 路径被传递到 -FilePath 的脚本可以看到的参数 - 必须是通过 -ArgumentList (-Args) 参数指定为数组

# Simplified example with - of necessity - *positional* arguments only.
# See below.
Invoke-Command -ComputerName NAME -FilePath .\foo.ps1 -Args 'bar', 'another arg'

同样适用于更常见的调用形式,它通过(可能位置隐含的)使用脚本 block ({ ... }) code>-ScriptBlock 参数.

但是,有一个问题:只有位置参数可以通过这种方式传递,这:

  • (a) 要求目标脚本支持所有感兴趣参数的位置参数绑定(bind)...

  • (b) ... 这明显排除了传递 switch 参数(类型 [switch]),例如 -Passive在你的电话中。

  • (c) 要求您以正确的顺序传递不变的位置参数。


解决方法:

使用基于-ScriptBlock 的调用,它允许常规参数传递,通常支持命名 参数(包括开关):

  • 如果像您的情况一样,脚本文件也可以通过远程 session 可见的 UNC 路径访问,您可以简单地从调用它在远程脚本 block 中
  • 注意:您的情况不需要,但您通常可能需要 $using: references为了将来自本地 session 的值合并到参数中 - 请参阅下面的示例。
Invoke-Command -ComputerName NAME {
& \\srv\share\install.ps1 -OnboardingScript \\srv\share\WindowsDefenderATPonboardingscript.cmd -Passive
}
  • 否则(通常是调用方本地的脚本文件):

使用$using: 引用将脚本文件的内容(源代码)传递给远程 session ,在那里将其解析为脚本 block ,然后执行该脚本 block 带有感兴趣的参数:

$scriptContent = Get-Content -Raw \\srv\share\install.ps1
Invoke-Command -ComputerName NAME {
& ([scriptblock]::Create($using:scriptContent)) -OnboardingScript \\srv\share\WindowsDefenderATPonboardingscript.cmd -Passive
}

小警告:由于原始脚本文件的源代码是在远程 session 的内存中执行的,因此与文件相关的反射信息将不可用,例如报告脚本文件的完整路径和目录路径的自动变量($PSCommandPath$PSScriptRoot)。

也就是说,这同样适用于 -FilePath 参数的使用,它本质上使用了相同的技术,即在幕后将源代码而不是文件复制到远程 session 。

关于powershell - 调用命令并使用参数运行 ps1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71252754/

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