初心者のためのPowerShell(パート10):フィルタリングとWhere-Object

PowerShellについてはすでに多くのことを学びました。 Wmiを使用した前回の作業:初心者のためのPowerShell(パート9):PowerShellとWMIを使用したWindowsからのすべての取得さて、私の意見では、「PowerShellを使用したフィルタリング」というトピックに焦点を当てるのが最適な時期です。 しかし、最初に、最後の部分から運動を見てみましょう。

シリーズのすべての部分はここで見つけることができます: PowerShell For Beginners(Series)

Review(Part9)

ここでは、パート9の課題と解決策を示します。

ハードディスクに関する情報を取得します。 Get-WmiObjectまたはGet-CimInstanceを使用します。 まず、WMIオブジェクトを検索し、見つかったら、名前、パーティション、モデル、ファームウェア、シリアル番号を表示します。

まず、WMIインスタンス名を調べる必要があります。 タスクはハードディスクを参照しているため、たとえば*disk*を検索できます。p>

Get-WmiObject *disk* -List

Unbenannt.PNG

Win32_Diskdriveは良い音。 PowerShellの詳細を取得するためのパート8の2つのステップの方法を覚えておいてください。

Get-CimInstance win32_diskdrive | Get-Member

そこに適切な属性があります。 ここで、Select-Objectを使用してすべてを取得します。p>

Get-CimInstance Win32_DiskDrive | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Unbenannt。PNG

レビュー

WMI(Windows Management Instruments)は、ほぼすべてのWindows設定への読み取りおよび書き込みアクセスを提供します。 Get-WmiObjectとGet-CimInstanceの二つの重要なコマンドレットがあります。

なぜフィルタリングするのですか?

フィルタリングはPowerShellの重要な技術です。 フィルタリングの方法がわかったら、PowerShellからさらに多くの情報を得ることができます。さて、この部分の私の仕事は、フィルタリングが重要である理由を説明することです。

さて、あなたは複数のハードディスクを持っているとしましょう。 上記の出力は、すべてのハードディスクを示しています。 しかし、たとえば、サムスンのハードディスクだけを表示したいとします。

Unbenannt。PNG

なぜこれをしたいのですか? たぶん、あなたの上司は、使用中のサムスンのディスクの数を尋ねます。 すべてのコンピュータ上で。 WMIとPowerShellを使用すると、リモートクエリを実行できます。 Okトピックに戻ります。 私たちは500GBのSamsung SSDのみを必要としています。 フィルタパラメータを見て!p>

Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Unbenannt。PNG

以下は、普通の、より高度なPowerShellオタクのために少しですが、なぜですか? 次のコマンドは、すべてのドメインコンピュータからすべてのSamsung Ssdを取得しますが、サーバーからは取得しません。p>

Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" -ComputerName (Get-ADComputer -Filter {operatingsystem -notlike '*server*'}).Name | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

あなたの同僚は、あなたが解決できない問題に直面していると思う場合は、単にボタンを押して、あなたが何ができるかを示しています。 😉

わかりました、初心者のための例に行きましょう。

オブジェクトのフィルタリング

Get-ChildItemコマンドを覚えていますか? 私はこのシリーズでこのコマンドを非常に頻繁に使用しました。

Get-Help Get-ChildItemを実行すると、ヘルプに多くのフィルタリング例があります。p>

Get-Help Get-ChildItem -Online

私はローカルヘルプを使用することを好みます。p>

Get-Help Get-ChildItem -Examples

Unbenannt.PNG

これまでに何を学んだのですか?

フィルタリングはPowerShellの重要な技術です。 フィルタリングの方法を理解したら、PowerShellからさらに多くの情報を得ることができます。

Active Directoryオブジェクトのフィルタリング

ITプロの場合は、おそらくActive Directory環境で作業しています。 フィルタリングは、Active Directoryオブジェクトを操作する際の重要な手法です。

次のコマンドは、Filterパラメーターを使用して、無効になっているすべてのユーザーを取得します。

Get-ADUser -Filter {enabled -eq 'false'} | Select-Object Name

Unbenannt。属性名をどのように知っているのか疑問に思うかもしれませんか? オブジェクトからより多くを取得するには、2ステップの方法を覚えておいてください:1. Get-Member2を使用します。 Select-Objectを使用します。

Unbenannt。PNG

フィルタパラメータ

周りを見てみましょう。 Filterパラメーターを使用するコマンドはどれですか? 私はドメインコントローラ上にいることに注意してください。ご覧のとおり、filterパラメータは主にActive Directoryコマンドで使用されています。 そして、私は常にactive Directoryのためだけにfilterパラメータを使用してきたことを認めなければなりません。 それはそれがある方法です。 それでは、Active Directoryに集中しましょう。 すべてのドメインコンピュータ(サーバーオペレーティングシステムとクライアントオペレーテ このためには、*でfilterパラメータを使用する必要があります。p>

Get-ADComputer -Filter * -Properties Name,Operatingsystem,OperatingSystemVersion,IPv4Address | Sort-Object OperatingSystem | Select-Object Name,OperatingSystem

Unbenannt。PNG

フィルタリングの面では、これは簡単な作業でした。

フィルタリング方法

今、私たちは、Windows10がインストールされているすべてのコンピュータを取得しようとします。 このためには、filterパラメータを湾曲した括弧に入れなければなりません。p>

Get-ADComputer -Filter {operatingsystem -like '*windows 10*'}

詳細を分解する時が来ました。

ブラケット

フィルターを湾曲したブラケットに入れます。

Unbenannt。PNG

属性

次に、プロパティ(属性)名を見つけます。 初心者のためのPowerShell(パート8):PowerShellのパワー–オブジェクトとの接触(Get-Member、Select-Object)。 二つのステップの方法を覚えています!p>

Unbenannt。

Get-ADComputer client01 -Properties * | Get-Member

Unbenannt。PNG

サイドノート:プロパティパラメータに注意してください。 Active Directoryでは、既定ですべてのプロパティが表示されるわけではありません。

演算子

次に演算子を使用します。

Unbenannt.PNG

演算子は-like、-as、-equal、-neなどになります…パラメータの詳細については、タイプ

help about_operators

これは、コンピュータに保存されているテキス

ステートメント

何かをフィルタリングしたい場合は、条件が必要です。 この条件は引用符で囲む必要があります。

Unbenannt。PNG

レビュー

フィルタを使用している場合は、最初にヘルプセクションを参照してください。 フィルタは、通常、括弧内に配置されます。 多くの場合、演算子も使用されます。

いくつかのより多くのフィルタの例…あまり話をせずに…

悪いパスワード数が0のユーザーを検索します。 Petraのアカウントの例は次のとおりです。

Unbenannt。

Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name

Unbenannt。PNG

パスワードカウントが0で有効になっているユーザーを検索します。 (Petraが有効になっていないことがわかります)。p>

Get-ADUser -Filter {(badpwdcount -eq '0') -and (enabled -eq 'true')} | Select-Object Name

Unbenannt.PNG

すべてのWindows Serverドメインコンピューターを表示しますが、Windows Server2016を実行しており、名前がDCで始まるコンピューターのみを表示します。

Get-ADComputer -Filter {(operatingsystem -like '*2016*') -and (name -like 'dc*')}

Unbenannt。しかし、時にはあなたは別の方法を見つける必要があります。 つまり、フィルタリングが利用できない場合。 次に、Where-Objectを使用します。

Where-Objectを使用したフィルタリング

Where-Objectは常にパイプの右側にあります。 左のフィルタリング。 それが何を意味するのか、ポストの最後に長所と短所。 この部分では、Where-Objectに集中します。PowerShellヘルプのいくつかの例を次に示します。しかし、私は私の貢献の一つからの例を使用したいと思います。

Get-Process | Where-Object {$_.handles -gt 200 -and $_.name -eq "svchost"}
Get-ChildItem c:\scripts | Where-Object {$_.length -gt 100000}

しかし、私は私の貢献の一つからの例を使用したいと思p>

Get-Hotfix | Where-Object HotfixID -like KB31*

Unbenannt.PNG

HotFixIDに注意してください。 属性を参照します。

推奨される手順は、下位互換性のために次のようになります。

Get-Hotfix | Where-Object {$_.HotfixID -like 'KB31*'}

Unbenannt。PNG

今何か新しいことがあります。 $_の意味は何ですか?

$_は、前の(パイプ)から渡された各オブジェクト/要素を反復処理する変数です。 簡単に言えば、パイプから来るすべてのオブジェクトからhotfixIDを取得します。

フィルタリングとWhere-Object

フィルタが使用できない場合は、Where-Objectを使用します。 あなたはパイプの左側にフィルタを使用することができる場合は、それを使用してください! どうして? まあ、パイプを介して1000個のオブジェクトを送信するのか、500個だけを送信するのかは違いです。Where-Objectすべてのオブジェクトがパイプを通過しなければならず、その後のみフィルタリングされます。 パート7のパイプを覚えておいてください:初心者のためのPowerShell(パート7):パイプ(および多くの例で遊ぶ)

Review

Where-Objectは常にパイプの右側にあります。 左のフィルタリング。 パイプの左側にあるフィルターか、右側にあるWhere-Objectのどちらかを選択できる場合は、左側を選択します。ここでは、次の部分までの運動です。

運動

ここでは、次の部分までの運動です。

Where-Object:

実行中のサービスのみを表示するには、Get-ServiceとWhere-Objectを使用します。

Filter(Active Directory必須):

Filterパラメーターを使用して、無効になっているすべてのユーザーを取得します。

トピックで次回を参照してください:初心者のためのPowerShell(パート11):PowerShellドライブを楽しんでいる

Patrick Gruenauer、MVP PowerShell

コメントを残す

メールアドレスが公開されることはありません。