2014-04-06 1 views
0

아주 간단한 스크립트에 문제가 있습니다. 근본적으로 뭔가 빠져 있다고 생각합니다. 특정 장치가 COM 포트에 연결되어 있는지 확인하고, 장치가 발견되면 COM1으로 다시 매핑합니다.변수에서 cmd 명령 "포트 변경"을 실행하십시오.

change port com1 /d 
$ComNum = (change port) -match 'COM.+19h2kp0' -replace '^(COM\d+).+','$1' 
$changeport = ("change port COM1=" + $ComNum) 
$changeport 

그것은 완벽하게 작동하는 것 같다, 내가 얻을 출력 문제는 출력이 완벽한 외모에도 불구하고, 명령이 실제로 실행되지 않는다는 것입니다

change port COM1=COM4 

입니다. 변수에서 cmd 명령을 실행하는 Powershell 제한이 있습니까?

미리 감사드립니다.

답변

1

단순히 변수를 인쇄하는 것입니다 (실제로 반환하는 것). Invoke-Expression, Invoke-Command을 사용하거나 & (Call operator)을 사용하여 호출해야합니다.

+0

감사합니다. Invoke-Expression이 명령을 실행하는 것 같지만 PowerShell에서 포트 변경 명령을 실행할 때 어떤 이유로 COM 포트가 매핑 된 것으로 표시되지만 응용 프로그램에서는 그렇게 생각하지 않습니다. CMD.exe에서 명령을 실행하면 다시 매핑되고 응용 프로그램이 행복해집니다. PowerShell에서 CMD로 명령을 보내는 방법이 있습니까? – user3216526

+0

시도'& cmd/c $ changeport' –

+0

아니요, 실제로 그걸 시도하고있었습니다. Powershell은 포트를 매핑 된 것으로 표시하지만 CMD는 매핑하지 않습니다. Powershell과 CMD가 변경 포트에 대해 다른 출력을 표시하는 것은 매우 이상합니다. – user3216526