我正在尝试使用 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
去搞清楚。