在powershell中寫入應用程式的完整路徑

在powershell中寫入應用程式的完整路徑

我想在遠端機器上運行這樣的命令

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

請參閱文檔 調用命令

相關內容