Den vollständigen Pfad einer Anwendung in Powershell schreiben

Den vollständigen Pfad einer Anwendung in Powershell schreiben

Ich möchte einen Befehl auf einem Remote-Computer wie diesen ausführen

Invoke-Command -ComputerName $RemoteMachine -Credential $Cred `
    -ScriptBlock { echo MYPASS | "C:\Program Files (x86)\AnyDesk\AnyDesk.exe" --set-password}

Allerdings bekomme ich diesen Fehler

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.

Es scheint, dass bei der Angabe des Programmpfads bei Verwendung von Pipes ein Problem auftritt. Wie kann ich das beheben?

AKTUALISIEREN:

Da ich das in einem Scriptblock mit mehreren Befehlen verwenden und dabei auch Variablen an den Scriptblock übergeben möchte, funktioniert auch die folgende Modifikation nicht.

$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

Das hat ein Syntaxproblem. Wenn ich benutze

$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
              

Ich erhalte diesen Fehler:

A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command, 

UPDATE 2:

Die Verwendung einer lokalen Variable funktioniert auch nicht. Siehe unten:

Invoke-Command -ComputerName $RemoteMachine -Credential $Cred -ScriptBlock {        
         &   {
         $param1 = $Using:NewPassword
         cmd /c 'echo $param1 | "C:\Program Files (x86)\AnyDesk\AnyDesk.exe" --set-password'
          } } 

Das Passwort ist tatsächlich $param1 und nicht der Wert dieser Variable.

Antwort1

Das sollte funktionieren:

$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

Das ist nicht nötig $Using:Varname, Sie können es einfach normal an den Scriptblock übergeben

Antwort2

ArgumentListIch würde vorschlagen, für die gesamte Pipe ein Remote-„cmd /c“ auszuführen. Verwenden Sie den Parameter, um Umgebungsvariablen von Ihrem Computer an die Remote-Remote-Einheit zu übergeben .

Ohne Testen etwas wie:

Invoke-Command -ComputerName $RemoteMachine -Credential $Cred
-ScriptBlock {
  Param ($param1)
  'echo $param1 | "C:\Program Files (x86)\AnyDesk\AnyDesk.exe" --set-password'}
  ArgumentList = $Using:NewPassword

Siehe die Dokumentation von Aufruf-Befehl.

verwandte Informationen