具有多个参数的 powershell 调用运算符?

具有多个参数的 powershell 调用运算符?

我正在尝试使用 powershell 调用运算符来运行以下命令:

“C:\Program Files (x86)\PuTTY\plink.exe” “-v -agent -m C:\Scripts\idrac_powerup_commands.txt root@[服务器名称]”

当前代码

$runputtyscript = @()
$runputtyscript += "-v"
$runputtyscript += "-agent"
$runputtyscript += "-m C:\Scripts\idrac_powerup_commands.txt"

& 'C:\Program Files (x86)\PuTTY\plink.exe' $allArgs root@servername

问题

这会执行,但是脚本不会像从命令行执行原始字符串那样使用命令执行文件。它向我显示了管理控制台(因此它已登录,使用公钥进行身份验证等)但它还没有运行我要求它运行的脚本。

我尝试过的事情

  • 将 -m 的文件名部分移至其自己的参数
  • 将 -m 的文件名部分放在引号内

问题

也许更简洁的提问方式:在 powershell 中,使用具有自己参数的参数的正确方法是什么(例如“-m [filename] -v -a”带有调用运算符(&)?

答案1

你可能会遇到变量未被 Win32 二进制文件处理的情况。你可以使用双引号来缓解这种情况:

'C:\Program Files (x86)\PuTTY\plink.exe' "$allArgs" root@servername

不久前我在使用 netsh 时也遇到了同样的问题。

答案2

您几乎已经明白了。每个参数都必须是一个单独的数组元素。($allargs ?)

$runputtyscript = @()
$runputtyscript += "-v"
$runputtyscript += "-agent"
$runputtyscript += "-m"
$runputtyscript += "C:\Scripts\idrac_powerup_commands.txt"

& 'C:\Program Files (x86)\PuTTY\plink.exe' $runputtyscript root@servername

我会将它添加到路径并直接运行它:

$env:path += ';C:\Program Files (x86)\PuTTY'
plink -v -agent -m C:\Scripts\idrac_powerup_commands.txt root@servername

或者在不改变路径的情况下,不使用引号对空格进行反引用:

C:\Program` Files` (x86)\PuTTY\plink.exe -v -agent -m C:\Scripts\idrac_powerup_commands.txt root@servername

答案3

出于某种原因,以以下方式编写它会导致它在 powershell 提示符下以及在调用 powershell.exe C:\Path\To\Script.ps1 的命令提示符下完美运行

& 'C:\Program Files (x86)\PuTTY\plink.exe' -v -agent -m C:\Scripts\idrac_powerup_commands.txt root@servername | Write-Host

去搞清楚。

相关内容