web-dev-qa-db-ja.com

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リモート接続ウィンドウを開くだけです。

61
user3585839

これを試して:

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

PowerShellでは、文字列 "..."は単なる文字列であり、PowerShellはそれを画面にエコーすることによって評価します。名前が文字列であるコマンドをPowerShellに実行させるには、呼び出し演算子&を使用します。

69
Keith Hill

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からコマンドPrompt/cmdに直接コマンドを出力して実行できます。

バッチファイルを実行するよりもはるかに安全な方法です。

39
Armand G.

1つの解決策は、PowerShellからCMDへのコマンドのパイプ接続です。次のコマンドを実行するとnotepad.exeコマンドがCMDにパイプされ、それによってメモ帳アプリケーションが開きます。

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

コマンドがCMDで実行されると、PowerShellプロンプトに戻り、PowerShellスクリプトを引き続き実行できます。


編集

CMSの起動メッセージが表示される

mklement が指摘するように、このメソッドはCMDの起動メッセージを表示します。上記の方法で他の端末に出力をコピーしようとすると、起動メッセージも一緒にコピーされます。

1
reelyard

この外部プログラムを起動するには、Invoke-Commandコマンドレットを使用する必要があります。通常それは努力なしで動作します。

複数のコマンドが必要な場合は、Invoke-Expressionコマンドレットを-scriptblockオプションと共に使用する必要があります。

0
Tim Christin

この情報が必要な人のために:

私はあなたがPSスクリプトからあなたのPATHにあるコマンドをほとんど実行できることを考え出しました、そしてそれはうまくいくはずです。

cmd.exe /cを使ってこのコマンドを起動する必要があるかもしれません。

PSスクリプトからgitを呼び出す

私はgitに包まれたChocolateyクライアントを再パッケージしなければなりませんでした(知らないかもしれない人にとっては、これはWindows用の一種のアプリストアです)。

gitPATHに入ったら、次のようなコマンドが見つかりました。

$ca_bundle = git config --get http.sslCAInfo

gitcrtファイルの場所を$ca_bundle変数に格納します。

アプリを探す

現在のSO postと this SO post を組み合わせた別の例は、whereコマンドの使用です。

$Java_exe = cmd.exe /c where Java

Java.exeファイルの場所を$Java_exe変数に格納します。

0
avi.elkharrat