9

いくつかのコマンドを実行し、それらの出力をテキストファイルにパイプしてから、キーワードに対して検索を行う非常に簡単なPowerShellスクリプトを作成しようとしています。

ただし、この行で何を変更すればよいかわかりません。

wmic service get name, startname | out-File "$pwd\admin\wmic.txt"

WMIC.exe : Invalid GET Expression.
At \\test.ps1:7 char:5
+ wmic <<<<  service get name startname | out-File "$pwd\admin\wmic.txt"
+ CategoryInfo          : NotSpecified: (Invalid GET Expression.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

PowerShellはコンマを使用して配列を作成するため、エラーは「、」から生成されると思います。何か考えや提案はありますか?

ありがとう

4

3 に答える 3

14
wmic service get name"," startname| out-File "$pwd\admin\wmic.txt"

これはカンマを解決するのは簡単で、変更はまったくありません。

于 2014-09-24T01:23:23.133 に答える
7

PowerShell 3.0以降、新しいエスケープ演算子が利用可能になりました(リリースノートのマジックパラメーター--%参照)。

wmic --% service get name, startname | out-File "$pwd\admin\wmic.txt"

この演算子は停止解析演算子と呼ばれ、PowerShellに、その時点からPowerShellコマンドまたは式としての入力の解釈を停止するように指示します(ここのドキュメントを参照)。

于 2015-07-06T22:45:49.517 に答える
1

この質問に対する答えは、Start-Processコマンドレットの使用にあります。これにより、コマンドライン引数の解釈がはるかに簡単になります。これは、コマンドライン引数を事前に作成し、それらを変数に格納してから、変数名を使用して参照できるためです。

$WmicArgs = 'service get name, startname';
Start-Process -FilePath wmic.exe -ArgumentList $WmicArgs;

しかし、なぜWMIC.exeを使用しているのでしょうか。

PowerShellタイプアクセラレータ[wmi]、[wmiclass]、[wmisearcher]、およびGet-WmiObjectコマンドレットを使用するなど、WMIを操作する簡単な方法があります。

于 2012-06-22T17:49:47.713 に答える