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

문서를 참조하십시오 호출 명령.

관련 정보