
我想在遠端機器上運行這樣的命令
Invoke-Command -ComputerName $RemoteMachine -Credential $Cred `
-ScriptBlock { echo MYPASS | "C:\Program Files (x86)\AnyDesk\AnyDesk.exe" --set-password}
但是,我收到這個錯誤
At C:\Users\user\Desktop\anydesk.ps1:14 char:33
+ ... o MYPASS | "C:\Program Files (x86)\AnyDesk\AnyDesk.exe" --set-pass ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Expressions are only allowed as the first element of a pipeline.
看來使用管道時指定程式的路徑有問題。我該如何解決這個問題?
更新:
由於我想在具有多個命令的腳本區塊中使用它,並將變數傳遞給腳本區塊,因此以下修改也不起作用。
$NewPassword = 'Mahmood00'
Invoke-Command -ComputerName $RemoteMachine -Credential $Cred -ScriptBlock {
& {
Param(param1)
'echo $param1 | "C:\Program Files (x86)\AnyDesk\AnyDesk.exe" --set-password'
} } ArgumentList = $Using:NewPassword
那有文法問題。如果我使用
$NewPassword = 'Mahmood00'
Invoke-Command -ComputerName $RemoteMachine -Credential $Cred -ScriptBlock {
& Param(param1){
'echo $param1 | "C:\Program Files (x86)\AnyDesk\AnyDesk.exe" --set-password'
} } ArgumentList = $Using:NewPassword
我收到此錯誤:
A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command,
更新2:
使用局部變數也不起作用。見下文:
Invoke-Command -ComputerName $RemoteMachine -Credential $Cred -ScriptBlock {
& {
$param1 = $Using:NewPassword
cmd /c 'echo $param1 | "C:\Program Files (x86)\AnyDesk\AnyDesk.exe" --set-password'
} }
密碼實際上是 $param1 而不是該變數的值。
答案1
這應該有效:
$NewPassword = 'Mahmood00'
Invoke-Command -ComputerName $RemoteMachine -Credential $Cred -ScriptBlock {
Param($NewPassword)
$Expression = 'echo {0} | "C:\Program Files (x86)\AnyDesk\AnyDesk.exe" --set-password' -f $NewPassword
Start-Process cmd.exe -ArgumentList "/c $Expression"
} -ArgumentList $NewPassword
你不需要$Using:Varname
這個,你可以正常地將它傳遞給Scriptblock
答案2
我建議對整個管道執行遠端“cmd /c”。若要將環境變數從您的電腦傳遞到遠端,請使用 參數
ArgumentList
。
未經測試,類似:
Invoke-Command -ComputerName $RemoteMachine -Credential $Cred
-ScriptBlock {
Param ($param1)
'echo $param1 | "C:\Program Files (x86)\AnyDesk\AnyDesk.exe" --set-password'}
ArgumentList = $Using:NewPassword
請參閱文檔 調用命令。