
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
ArgumentList
Ich 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.