インターネットでは、システムに関するこの情報またはその情報を受け取る多数のPowerShellスクリプトを見つけることができます。 原則として、これらはwmiを使用した小さなスクリプトまたは関数です。 1つのワークステーションでは、タスクを完全に実行しますが、コンピューターが多数ある場合は問題が発生します。
主な欠点は、情報が同期的に収集され、スクリプトが現在のコンピューターで実行されるまで次のコンピューターに進まないことです。 その結果、PCフリート全体から情報を学習するために、せいぜい多くの時間を待つことができます。最悪の場合、ハングして終了しないことがあります。
ある種の普遍的なツールを作りたかった。 上記の欠点はありません。 使いやすさのために、現在Get-Systeminfo関数を1つ含むpowershellモジュールが作成されました。
現在、この機能を使用すると、システムに関するさまざまな情報を取得できます。 実際、スクリプトの大規模なコレクションが含まれており、新しいスクリプトを追加することで簡単に拡張できます。
ダウンロードおよびインストール情報
PowerShellバージョン5以降を使用している場合は、コマンドを実行してモジュールをインストールできます
他のバージョンについては、 Githubへのリンク
Install-Module -Name Systeminfo -Scope CurrentUser
他のバージョンについては、 Githubへのリンク
主な機能
- マルチスレッド
- DCOMおよびWSMANプロトコルを使用して、リモートコンピューターに接続できます。
- パイプラインを操作します(たとえば、ドメインで-filter *パラメーターを指定したGet-Adcomputerコマンドレットを使用してコンピューターのリストを要求し、パイプラインを介してGet-Systeminfo実行の結果を渡すと、ドメイン内のすべてのコンピューターから情報を取得できます)
- 簡単なスケーラビリティ
モジュールがどのように機能するかの技術的な側面は考慮しません。 代わりに、その使用方法と機能の拡張方法を明確に説明しようとします。
Get-SystemInfo関数の使用方法
Get-Adcomputerコマンドレットを使用して、Propertiesパラメーターに気付きました。 コマンドの標準出力を、その後にリストされたプロパティで展開できました。 この概念は基礎として採用されました。 たとえば、プロセッサモデルとRAMに関する情報を要求するには、Propertiesパラメータの後に実行の結果として表示するプロパティをリストする必要があります。
作業例
プロパティをグループ化するには、スイッチパラメーターが使用されます。 複数のスイッチパラメーターとPropertiesパラメーターを一緒に使用できます
作業例
プロセスでは、2つのグローバル変数$ Resultと$ ErrorResultが作成されます。 最初のものには、情報が取得されたコンピューターが含まれます。 2番目には、エラーが発生したコンピューターが含まれます。
これらの変数は、関数が機能した後に使用すると便利です。 たとえば、標準のWhere-Objectコマンドレットを使用すると、特定の条件を満たすすべての結果から選択できます。
モジュールのインストール後にGet-Help Get-Systeminfo -Examplesコマンドを実行すると、より詳細な情報と例を取得できます。
構成ファイル
Get-Systeminfo関数には、configフォルダーに構成ファイルがあります。 これは、基本設定を含むPowerShellスクリプトです。 このファイルがあると、メインモジュールコードを編集せずに関数を変更できます。 不要な機能を拡張または削除するには、このファイルを変更するだけです。
ファイル内の主な変数。
$ Defaultinfoconfigは、関数がパラメーターなしで起動されたときに受信される情報を決定します。 アレイのプロパティを追加または削除することにより、受信する情報を構成できます。
$ Functionconfigにはハッシュテーブルが含まれています。 ここで、キーはPropertiesパラメーターで指定されるプロパティであり、値はpowershellスタイルのパラメーターの文字列です。 文字列には次のパラメーターを使用できます:Class、Query、Property、Script、FormatList
$ ManualNamespaceには、キーがクラスで、値がクラスが存在する名前空間であるハッシュテーブルが含まれています。 作業に必要なクラスがroot \ cimv2名前空間に属していない場合、テーブルを変更する必要があります。
$ Switchconfigにはハッシュテーブルが含まれています。キーはスイッチパラメーターの名前で、値はプロパティの配列です。
機能を拡張する方法
スズメバチの名前を取得する機能を追加するとします。 これには4つのステップが必要です。
- 得たいものを一意に特徴付ける名前を考えてください。 この場合、OsCaptionを呼び出します。
- Systeminfo.psm1ファイルを編集して、関数パラメーターブロックを変更します。 Propertiesパラメーターの[ValidateSet()]を変更し、最初の手順で作成した名前を追加する必要があります。
- 構成ファイルを変更します。 OSの名前はWin32_OperatingSystemクラスのwmiオブジェクトを通じて取得できるため(キャプションプロパティ)
ネタバレ
フォームの行をハッシュテーブルに追加する必要があります$ Functionconfig
OsCaption='-Class Win32_OperatingSystem -Property Caption'
- powershellが起動され、モジュールがロードされている場合:コンソールを再起動するか、Remove-Module Systeminfoを実行する必要があります
4つの簡単な手順を実行した後、新しい機能が追加されました。
ネタバレ
wmiオブジェクトから必要な情報を直接取得できるとは限りません。 情報を取得するには、いくつかのクラスのオブジェクトを処理する必要がある場合があります。 これらの場合、スクリプトを作成する必要があります。
すべてのモジュールスクリプトは、Scriptsフォルダーに保存されます。 ハッシュテーブル$ functionconfigのScriptパラメーターを使用してそれらを参照できます。 つまり、前の例でスクリプトが必要であり、いくつかのクラスのオブジェクトが機能する必要がある場合、テーブルのハッシュの行は次の形式になります。
OsCaption='-Class Win32_OperatingSystem,Win32_ComputerSystem -Script Scriptfolder\oscaptionscript.ps1'
Classパラメーターの後に、動作するために必要なクラスのオブジェクトをリストする必要があります。 スクリプトでは、同じ名前の変数(この例では$ win32_operatingsystemと$ win32_computersystem)を介して使用できます。 さらに、すべてのシナリオで、3つのユーティリティ変数があります:$コンピューター名、$プロトコル、$資格情報。
モジュールのスクリプトは、通常のスクリプトと同じです。ただし、Get-Wmiobjectを使用する必要はありません。wmiオブジェクトは、対応する変数を介して既にアクセス可能であるためです。 Dcomプロトコルの場合、wmiを介してすべての情報を受信する必要があることを考慮する必要があります。 get-process get-servicesコマンドレットなどは使用できません。 これは、スクリプトの実行場所が原因です。 Dcomプロトコルの場合、Get-Systeminfio関数が実行されている場所ですべてのスクリプトが実行されます。
接続にWsmanプロトコルを使用する場合、スクリプトは情報の送信元のコンピューターで実行されるため、制限はありません。任意のコマンドレットを使用できます。 構成ファイルを使用することの残りの微妙な違いは、詳細に調べることで理解できます。 現在、多くの例があります。
モジュールは、powershellの2番目と5番目のバージョンでテストされましたが、ほとんどの場合、他のすべてのユーザーで動作します。 バージョン5を使用することをお勧めします。これは、作業を大幅に促進する自動追加機能が登場したためです。