PowerShellでコレクションを操作するオタク学校
PowerShellは.NET Frameworkをベースにしており、WMIやCIMなどの他のさまざまなテクノロジを組み込んでいるため、同じことを実現する方法は常に複数あります。この短い記事に参加して、仕事を達成するための最良の方法を選択する方法を学びましょう。.
シリーズの前の記事を必ず読んでください。
- PowerShellを使用してWindowsを自動化する方法を学ぶ
- PowerShellでコマンドレットを使用する方法
- PowerShellでオブジェクトを使用する方法を学ぶ
- PowerShellでの書式設定、フィルタリング、および比較の学習
- PowerShellでリモート処理を使用する方法を学ぶ
- PowerShellを使用してコンピューター情報を取得する
そして、シリーズの残りの部分を一週間中お楽しみに.
バッチコマンドレットの使用
シリーズの最初の部分で、パイプラインを紹介したときに、次のような方法を使用して、あるコマンドレットが出力するオブジェクトを別のコマンドレットに渡す方法を説明しました。
Get-Process -Nameメモ帳|停止プロセス
これにより、「メモ帳」という名前のプロセスはすべて終了します。しかし、おそらくPowerShellが単一のコマンドでどのようにメモ帳のすべてのインスタンスを殺すことができるのか疑問に思います。答えはStop-Processコマンドレットの助けになります。.
Stop-Process -Fullを助けます
構文セクションの最後のコード行を見ると、InputObjectパラメーターがProcess []型のオブジェクトを受け入れること、および型の後に2つの角括弧が続くオブジェクトを受け取ることがわかります。 一つ以上 上記のタイプの。この場合、1つ以上のプロセスオブジェクトを受け入れます。技術的には、InputObjectコマンドレットはプロセスを受け入れます。 アレイ. この方法でバッチ操作をサポートするコマンドレットがある場合は常にそれを使用してください。これは選択ナンバーワンです.
WMIを使用する
WMIは、Microsoft HQから出荷するのに最適なテクノロジではありませんが、オブジェクトのコレクションを操作する方法の一覧にはすぐに登場します。 Win32_Processクラスから実行中のプロセスのリストを簡単に取得できます。
Get-WmiObject - クラスWin32_Process
WMIクエリは独自の種類のオブジェクトを返すので、プロセスを停止できるメソッドを探す必要があります。そのため、それをパイプでGet-Memberに渡します。.
Get-WmiObject - クラスWin32_Process |会員になる
最も近い停止方法はterminateメソッドのように見えますので、それを使用する必要があります。 WMIオブジェクトのメソッドを呼び出すには、それをInvoke-WmiMethodにパイプしてメソッドの名前を指定するだけです。.
Get-WmiObject -Class Win32_Process -Filter“ name = 'notepad.exe'” | -WmiMethod -Nameを呼び出す
素晴らしい、それがトリックでした。 WMIでReturnValueが0になるたびに、コマンドが正常に実行されたことを忘れないでください。.
列挙
他の2つの方法に失敗した場合、たくさんのオブジェクトに対して何かをする必要がある場合は、オブジェクト全体を列挙して個々のオブジェクトごとに処理することができます。最初に、あなたは単一のプロセスを止めるために使う方法を見つけなければなりません。.
取得プロセスGet-Member -MemberTypeメソッド
完璧です、Killメソッドを使用してからForEach-Objectにパイプ処理してそれらすべてを強制終了できるようです。.
Get-Process -Nameメモ帳| ForEach-Object -Process $ _。Kill()
ここでは、Get-Processから返されたすべてのプロセスオブジェクトを取得し、それらをForEach-Objectコマンドレットに渡しました。 Where-Objectコマンドレットと同じように、パイプライン内の各オブジェクトを$ _で表しました。これをKill()メソッドに呼び出せました。以上のことをすべて終えたので、コレクションの列挙は上記のメソッドよりはるかに遅くなり、最後の結果としてのみ使用されるべきです。.
概要
選択1
Get-Process -Nameメモ帳|停止プロセス
選択肢2
Get-WmiObject -Class Win32_Process -Filter“ name = 'notepad.exe'” | -WmiMethod -Nameを呼び出す
選択肢3
Get-Process -Nameメモ帳| ForEach-Object -Process $ _。Kill()
来週はPowerShellをもっと楽しんでください。.