[powershell] PowerShell에서 CMD 명령 실행

PowerShell 명령을 실행하는 데 많은 문제가 있습니다. CMD 프롬프트 창에서 실행되는 명령을 실행하는 것뿐입니다.

다음은 명령입니다.

"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME

나는 성공하지 못한 채 다음을 시도했습니다 (나는 작동하는 것을 시도하고 얻기 위해 이것의 많은 반복을 시도했습니다. 구문은 아마도 모두 망가졌습니다) :

$TEXT = $textbox.Text #$textbox is where the user enters the PC name.
$CMDCOMMAND = "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"
Start-Process '"$CMDCOMMAND" $TEXT'
#iex -Command ('"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"' $TEXT)

이 명령은 사용자가 텍스트 상자에서 지정한 컴퓨터에 대한 SCCM 원격 연결 창을 엽니 다.



답변

이 시도:

& "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME

PowerShell에서 문자열 “…”은 문자열 일 뿐이며 PowerShell은이를 화면에 반영하여 평가합니다. PowerShell에서 이름이 문자열로 된 명령을 실행하도록하려면 call operator를 사용합니다 &.


답변

PowerShell에서 외부 적으로 배치 파일을 실행하거나 변환하려면 (특히 예약 된 모든 작업 스크립트에 인증서에 서명하려는 경우) 간단히 PowerShell 스크립트 (예 : deletefolders.ps1)를 만듭니다.

스크립트에 다음을 입력하십시오.

cmd.exe /c "rd /s /q C:\#TEMP\test1"

cmd.exe /c "rd /s /q C:\#TEMP\test2"

cmd.exe /c "rd /s /q C:\#TEMP\test3"

* 각 명령은 cmd.exe를 다시 호출하는 새 줄에 입력해야합니다.

이제이 스크립트를 서명하고 PowerShell에서 실행하여 명령 프롬프트에 cmd직접 명령을 출력 할 수 있습니다.

배치 파일을 실행하는 것보다 훨씬 안전한 방법입니다!


답변

한 가지 해결책은 PowerShell에서 CMD로 명령 을 파이프하는 것입니다. 다음 명령을 실행하면 명령이 notepad.exeCMD로 파이프 되어 메모장 응용 프로그램이 열립니다.

PS C:\> "notepad.exe" | cmd

명령이 CMD에서 실행되면 PowerShell 프롬프트로 돌아가고 PowerShell 스크립트를 계속 실행할 수 있습니다.


편집

CMD의 시작 메시지가 표시됩니다.

mklement0 점에서,이 방법은 쇼 CMD의 시작 메시지. 위의 방법을 사용하여 출력을 다른 터미널에 복사하면 시작 메시지도 함께 복사됩니다.


답변

이 정보가 필요한 사람들을 위해 :

나는 당신 PATH이 PS 스크립트 에서 당신의 명령을 거의 실행할 수 있다는 것을 알았고 그것은 작동해야합니다.

때때로이 명령을 사전 실행해야 할 수 있습니다. cmd.exe /c

PS 스크립트에서 git 호출

PS 스크립트를 대량으로 사용 하는 git클라이언트 를 다시 포장해야했습니다 Chocolatey(모르는 사람들에게는 일종의 Windows 용 앱 스토어입니다).

한 번 , 다음과 같은 명령 git이 있음을 알았습니다.PATH

$ca_bundle = git config --get http.sslCAInfo

변수 에 git crt파일 의 위치를 ​​저장합니다 $ca_bundle.

앱을 찾고

현재 SO 포스트 와이 SO 포스트 의 조합 인 또 다른 예 는 where명령 의 사용입니다.

$java_exe = cmd.exe /c where java

변수 에 java.exe파일 의 위치를 ​​저장합니다 $java_exe.


답변

이 외부 프로그램을 시작하려면 Invoke-Command cmdlet을 사용해야합니다. 일반적으로 노력없이 작동합니다.

둘 이상의 명령이 필요한 경우 -scriptblock옵션 과 함께 Invoke-Expression cmdlet을 사용해야합니다 .


답변