PowerShell에서 CMD 명령 실행


87

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 원격 연결 창을 엽니 다.


사용중인 SCCM 버전이 확실하지 않지만 07에는 "-1"이 필요하지만 2012 년에는 CmRcViewer를 시작할 때 필요하지 않습니다. 참고로.
Kevin_

답변:


102

이 시도:

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

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


훌륭합니다. 대부분의 cmd 명령에서 작동합니까?
user3585839 jul.

4
예,하지만 이름이나 경로에 공백이없는 exe에는 필요하지 않습니다. 예를 들어, ipconfig.exe를 사용하지 않고도 실행할 수 있습니다 &. 사용해야하는 유일한 시간 &은 문자열 형식으로 명령 이름을 호출하는 것입니다. 그리고 경로 나 파일 이름에 공백이있을 때 "문자열 형식"을 사용해야합니다.
Keith Hill

17
&PowerShell은 전체 문자열이 실행 파일의 이름이라고 생각하기 때문에 명령 줄 문자열을 구성하고를 사용하여 실행하는 것은 작동하지 않는다고 추가합니다 . 대신 실행 파일의 이름 만 인용하고 나중에 실행 파일의 매개 변수를 넣으십시오.
Bill_Stewart 2014

&과 사이의 차이점은 무엇입니까 cmd?
Timo

1
&PowerShell 호출 (일명 호출) 연산자입니다. 명령의 이름이나 exe 경로가 포함 된 문자열 인 경우 명령을 실행할 수 있습니다. 스크립트 블록 (예 :) &{$foo=42}또는 CommandIno 개체 (예 : $cmd = Get-Command Get-Date; &$cmd. cmd다른 껍질입니다. 참고 &이 설정하는 스크립트 블록 후 점에 유의 있도록 자식 범위에서 실행을 $foo완료 위의, $foo더 이상 설정되지 않습니다.
Keith Hill

56

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직접 명령을 출력 할 수 있습니다.

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


이것은 나를 위해 잘 작동했습니다. 나는 실행하려고했다 : sc query serviceNamePowerShell에서 실행될 것이라고 생각했지만 출력은 없습니다. 나는 & 기술의 여러 반복을 시도했지만 주사위는 없었다. 그러나 권장하는 방식으로 실행하십시오. 다음으로 cmd.exe /? 나를 기다린 다른 경이로움을보기 위해. 나는 필요할 때만 cmd를 실행하는 것을 좋아합니다.
Paul Masek

9

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

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

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


편집

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

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


&그렇지 않은 경우에도 작동 할 수 있습니다 . 예는 & "mklink"동안 나를 위해 작동하지 않았다 "mklink" | cmd
moudrick

2

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

나는 당신 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.


1
당신은 필요 cmd /c의 호출을 위해 내부 같은 명령을 mklink. 반대로은 where.exe외부 프로그램이므로 직접 호출 할 수 있습니다. 그러나 이름이 PowerShell의 기본 제공 where별칭 (for Where-Object) 과 충돌 하므로 where.exe; 예 : where.exe java.
mklement0

또는 Get-Command전화 대신 PowerShell을 사용 cmd합니까? 이전과 동일 :$java_exe = $(Get-Command java.exe).Source
dtasev

-1

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

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


1
이 경우 Invoke-Command가 필요하지 않습니다 (Keith Hill의 답변 참조).
Bill_Stewart 2014

네 동의합니다. 스크립팅 솔루션에 대해 더 많이 생각하고있었습니다.
Tim Christin

4
명령이 스크립트에서 실행되는지 여부는 중요하지 않습니다. 이 경우에도 Invoke-Command를 사용할 필요는 없습니다.
Bill_Stewart 2014


예없이 "답변"을 제공하지 마십시오.
AX
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.