PowerShell のヒントとコツ
最終更新日: 08 年 2024 月 XNUMX 日組み込みPowerShellスクリプト コマンドレットを介して管理データを提供するWindowsシステムからデータを取得するための優れた方法です。 PowerShellを最大限に活用するための次のいくつかのヒントとコツ。
PowerShellでカスタムデバイスプロパティを使用する
次の行に沿ってPowerShellスクリプトに標準のデバイスプロパティを取り込むことに加えて ## system.hostname ##、次のようなカスタム定義のデバイスプロパティを使用することもできます ## my.custom.property ##。 PowerShellインタープリターを実行する前に、この形式で指定された各プロパティは、そのデバイスに格納されている値に置き換えられます。
指定されたプロパティがデバイスに定義されていない場合、置換はActiveDiscoveryスクリプトとDataCollectionスクリプトの間で異なる方法で処理されることに注意してください。 Active Discoveryスクリプトでは、指定されていないデバイスプロパティは置換されないため、コードは次のように記述されます。
$foo = '##my.custom.property##';
置換なしで、ここに示されているとおりに正確に実行されます。 Active Discoveryスクリプトで、デバイスプロパティが設定されていないかどうかをテストする場合は、置換がないかどうかをテストします。
# was my.custom.property set for this device?
if ($foo eq '##my.custom.property##')
{
# no. handle this case
}
データ収集スクリプトでは、これは別の方法で処理され、指定されていないデバイスプロパティが空の文字列として置き換えられます。 これは、データ収集スクリプトでこれと同じテストを行う場合は、条件を次のように記述することを意味します。
# was my.custom.property set for this device?
if ($foo eq '')
{
# no. handle this case
}
PowerShell認証
次のようなPowerShellコマンドレットのいくつか 取得-WMIObject リモートシステムに直接クエリを実行できます。 以下で説明するPowerShellRemoting機能を含む他の多くの機能では、リモート資格情報を直接提供する必要があります。
リモート資格情報を活用するには、それらを資格情報オブジェクトにバンドルしてから、このオブジェクトをパラメーターとしてリモート認証を必要とするコマンドレットに渡す必要があります。 次のように、LMに保存されているデバイスプロパティから資格情報オブジェクトを作成できます。
PowerShell Remoting –初期設定
のような標準のPowerShellコマンドレットのほんの一握りですが 取得-WMIObject リモートシステムでメトリックをクエリできるようにします。通常は、セットアップする必要があります PowerShellリモート処理 コレクターによって監視されているリモートシステムでコマンドレットを実行します。 これを行うには、次の一連の手順で概説するように、もちろん両方のシステムの管理者権限が必要です。
ご注意: ターゲットマシンのホスト名は、コレクターによって解決可能である必要があります。
- 特定のコレクターによって監視されている各ターゲットWindowsシステムで、WinRMサービスを開始し、自動起動用に構成し、WS-Management通信のファイアウォール例外を追加する必要があります。 これらすべてをXNUMXつのコマンドで実行できます。
Enable-PSRemoting
- また、ターゲットシステムでは、リモート接続を許可する「信頼できるホスト」としてコレクターを指定する必要があります。
Set-Item WSMan:\localhost\Client\TrustedHosts CollectorHostName
- 次に、コレクターシステムで、各ターゲットホストをコンマ区切りのリストとしてTrustedHostsに追加する必要があります。 または、任意のホストへの接続が許可されていることを指定します。
Set-Item WSMan:\localhost\Client\TrustedHosts *
- また、コレクターでは、 リモートシェルクォータ 十分な数のシェルを許可するには:
winrm set winrm/config/winrs '@{MaxShellsPerUser="50"}'
- 最後に、両方のホストでWinRMサービスを再起動して、これらの設定が有効になるようにします。
Restart-Service WinRM
これを構成したら、コレクターから以下を実行して動作を確認できます。
Invoke-Command -ComputerName <target hostname> -ScriptBlock { Write-Host "Running Remotely on ${env:computername}" } -Credential <domain>\<user>
これにより、指定したユーザーのパスワードの入力を求められ、認証が成功すると、それが実行されているリモートシステムの名前が報告されます。
PowerShell Remoting –Invoke-Commandを使用した例
コレクターとリモートシステム間のリモート設定が正常に完了したら、リモートコマンドを操作する方法がいくつかあります。 この最初の例では、 Invoke-Command コマンドレット。XNUMXつのリモートコマンドのみを操作する必要がある場合に使用します。 この手法を使用してVeeamバックアップジョブのリストを生成する方法は次のとおりです。
PowerShellリモーティング–Import-PSSessionを使用した例
リモートコマンドを実行する別のアプローチは、 インポート - PSSession コマンドレットをセッションにインポートします。 これは、単一のセッションにプルしたいコマンドが多数ある場合に役立つことがあります。 この場合、この手法を使用して、ExchangeServerメールボックスデータベースコピーに関する統計をレポートします。