2017-01-31 14 views
0

Abbasのおかげで、次のコードにより、cmdSプロセスを呼び出してPowerShellスクリプトを使用してコマンドを渡すことができます。powershellのCMDプロセスID(PID)を使用してCMDに入力を渡す

$psi = New-Object System.Diagnostics.ProcessStartInfo; 
$psi.FileName = "cmd.exe"; #process file 
$psi.UseShellExecute = $false; #start the process from it's own executable file 
$psi.RedirectStandardInput = $true; #enable the process to read from standard input 

$p = [System.Diagnostics.Process]::Start($psi); 

Start-Sleep -s 2 #wait 2 seconds so that the process can be up and running 

$p.StandardInput.WriteLine("dir"); #StandardInput property of the Process is a .NET StreamWriter object 

ここで、すでに存在するCMDプロセスを使用する方法を教えてください。

より良い言葉では、実行しているcmd.exeプロセスのPIDを使用して、コマンドを渡します。

私はコードが動作するはずだと思うCMDがSYSTEM

として実行されていることを確認したい、SYSTEMとして実行されているコマンドシェルをチェック:@ファルコンさんのコメントに基づいて

+0

PowerShellをお持ちの場合、なぜcmdが必要なのですか? PowerShellができないことはあなたのために何をするつもりですか? –

+0

@ JeroenMostert - 特定のレガシプログラムは、PowerShellから直接呼び出されたときに正しく応答しません。 PowerShellがクォートとパラメータの受け渡しをどのように処理するかが原因です。しかし、一般的には、プロセスを手に入れるのではなく、私のコマンドをバッチファイルに書き、それを '&" CMD/C $ batchfilename "'で呼び出すことにしました。 [スペースと引用符で囲まれたパラメータでPowerShellでEXEファイルを実行する方法]を参照してください(http://stackoverflow.com/questions/1673967/how-to-run-an-exe-file-in-powershell-with-parameters-スペース付き引用符)はここにあります。 –

+1

@JeffZeitlin:私は、*既存の* cmdインスタンスとやりとりしたいと思ういくつかのシナリオを考えることができるので、具体的に質問しました。この場合、cmdの使用は完全に不要になるはずです。 –

答えて

0

。これは、タイトル= TESTと、SYSTEMとして実行している各マッチングシェルのtrueを戻します

Get-CimInstance Win32_Process -Filter "name = 'cmd.exe'" | ForEach-Object { 
    if ((Get-Process -Id $_.ProcessId).MainWindowTitle -eq 'TEST') { 
    (Invoke-CimMethod -InputObject $_ -MethodName GetOwner).User -eq 'SYSTEM' 
    } 
} 

上記のコードは、コマンドプロンプトのthis articleチェックに基づいて高められたシェル

コードで実行されている必要が上昇さ:

$p = Get-Process -Name cmd | where {$_.MainWindowTitle -eq 'TEST'} | 
    Select Name, @{Name="Elevated"; Expression={ if ($this.Name -notin @('Idle','System')) {-not $this.Path -and -not $this.Handle} } } 

コードが上記非上昇PowerShellのインスタンスで実行されている必要があります。昇格していないシェルが昇格したコマンドプロンプトに対して表示されないパス&ハンドルがないかどうかをテストしています。ウィンドウに合わせてeq 'TEST'の条件を変更します。

関連する問題