我的任务是连接到其他VM并执行某些任务,.....并传递任务参数。我为此使用Invoke-Expression,..... 现在,当我直接在invoke-expression中传递静态路径时,效果很好,但是当我将其分配给varible并追加到invoke-expression时。它不起作用
我尝试通过提供静态路径来正常工作并在远程vm上执行批处理,问题是路径是动态的
Static is working fine has shown below:
$server="slc10XXX.XX.XXXX.com"
$username="XXXXXXX"
$password="XXXXXX@321"
$pass = ConvertTo-SecureString -AsPlainText $password -Force
$cred = New-Object System.Management.Automation.PSCredential -
ArgumentList $username, $pass
$path="cmd.exe /c C:\Task6-MASSUOW\chay.bat"
Invoke-Command -ComputerName $server -credential $cred -ErrorAction Stop
-ScriptBlock {Invoke-Expression -Command:"cmd.exe /c C:\Task6-
MASSUOW\chay.bat"}
Getting issue in below code when i assign $path:
$server="slc10XXX.XX.XXXX.com"
$username="XXXXXXX"
$password="XXXXXX@321"
$pass = ConvertTo-SecureString -AsPlainText $password -Force
$cred = New-Object System.Management.Automation.PSCredential -
ArgumentList $username, $pass
$path="cmd.exe /c C:\Task6-MASSUOW\chay.bat"
Invoke-Command -ComputerName $server -credential $cred -ErrorAction Stop
-ScriptBlock {Invoke-Expression -Command:"$path"}
PowerShell.exe:无法将参数绑定到参数“ Command”,因为 它为空。在第1行:char:1 + PowerShell.exe -ExecutionPolicy绕过-File'C:\ Users \ chaj \ Documents ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:未指定:(无法绑定arg ...,因为它为null。:String)[],RemoteException + FullyQualifiedErrorId:NativeCommandError在C:\ Users \ chaj \ Documents \ String \ Chat1.ps1:8 char:1 +调用命令-ComputerName $ server -credential $ cred -ErrorAction S ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidData:(:) [Invoke-Expression],ParameterBindingValidationException + FullyQualifiedErrorId:ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.InvokeExpre ssionCommand + PSComputerName:slc10XXXX.XX.XXXX.com
答案 0 :(得分:0)
这是因为"$path"
是作为字符串文字发送到远程服务器的。该表达式将在此处求值,但是远程会话中未定义$path
。这就是为什么它为空。
例如,您可以这样做:
Invoke-Command -ComputerName $server -Credential $cred -ErrorAction Stop -ScriptBlock {
param($path)
Invoke-Expression -Command:$path
} -ArgumentList "cmd.exe /c C:\Task6-MASSUOW\chay.bat"
或更简单:
Invoke-Command -Script { & $Args[0] } -Arg "C:\Task6-MASSUOW\chay.bat" -Computer $server -Cred $cred -EA Stop