一般的なルールとして、PowerShell オブジェクトに関する詳細情報を見つけるにはどうすればよいですか?

一般的なルールとして、PowerShell オブジェクトに関する詳細情報を見つけるにはどうすればよいですか?

コンピュータの Windows Update チェックのステータスを確認する方法を調べているときに、次のコードを見つけました。

$UpdateSession = New-Object -ComObject Microsoft.Update.Session
$UpdateSearcher = $UpdateSession.CreateupdateSearcher()
$Updates = @($UpdateSearcher.Search("IsHidden=0 and IsInstalled=0").Updates)
$Updates | Select-Object Title

このコードは、そのままでは私のニーズを満たしていませんが、十分に強力である可能性があると感じています。制限を取り除きSelect-Object Title、戻り値には多くのプロパティがあり、ドライバーの更新、サード パーティの更新 (Microsoft Silverlight など)、および真の「Windows 更新」を区別できるTypeのではないかと期待していたため、興味をそそられましTypeたが、さらに情報をいくら探しても何も見つかりません。

Google や MSDN で検索しましたが"Microsoft.Updates.Session"、使用できるプロパティや列挙の意味 (Type=1 と Type=2 など) を実際に説明しているソースは見つかりませんでした。

検索すべき PowerShell オブジェクト参照はありますか? または、必要なときに PowerShell オブジェクトに関する詳細情報を検索するにはどうすればよいでしょうか?

答え1

まず、この型は[Microsoft.Update.Session]PowerShellに組み込まれたオブジェクトではなく、Windows 更新エージェント (WUA) APIそのため、PowerShell が表示できる組み込みのヘルプ ファイルや例はありませんが、Microsoft サイトで検索できます。

リンクされた MS ドキュメントには、API を使用して Windows Update でさまざまなことを実行する方法の優れた例がいくつか記載されており、ほとんどの場合、Powershell で使用するために直接変換できます。

たまたま以前これを使用したことがあるので、PowerShell の基本をいくつか紹介します。

# Create a new update session, and search for updates
$updateObject = New-Object -ComObject Microsoft.Update.Session
$updateObject.ClientApplicationID = "Example Client ID"
$updateSearcher = $updateObject.CreateUpdateSearcher()

# Search for updates using a simple search filter, and save the results to a variable:
$searchResults = $updateSearcher.Search("IsInstalled=0")

# If there are updates available, download them:
if ($searchResults.Updates -and $searchResults.Updates.count -gt 0){
    $count=$searchResults.Updates.count
    Write-Output ( "Found " + $searchResults.Updates.Count + " Updates" )
    $updateDownloader = $updateObject.CreateUpdateDownloader()
    $updateDownloader.Updates = $searchResults.Updates
    Write-Output "Downloading..."
    $updateDownloader.Download()

    # Then install the updates:
    $updateInstaller = $updateObject.CreateUpdateInstaller()
    $updateInstaller.Updates = $searchResults.Updates
    Write-Output "Installing..."
    $result = $updateInstaller.Install()

    # Then output the result
    Write-Output ("Installation Result: " + $Result.ResultCode)
    Write-Output ("Reboot Required: " + $Result.RebootRequired)
}
else { Write-Output "No updates found. Exiting..." }

特定のアップデートを検索する場合は、フィルターを追加する必要があります。$UpdateSearcher.検索()メソッド。たとえば、type='Software' または type='Driver' を持つことができるようです。

WUA APIには、一般的に必要スクリプトをリモートで開始するのではなく、マシン上でローカルに実行する必要がありますが、スクリプトを実行するスケジュールされたタスクを作成することでこれを回避できます。

そして最後に、実際にあなたの質問に答えると、一般的なルールとして、Get-Member $MyObjectほとんどGet-Help $MyCommandの組み込み Powershell 機能を発見するのに役立ちます。

答え2

最も簡単なのはGet-Member、次のようなコマンドレットを使用することです。

$Updates | Get-Member

この場合はCOMオブジェクトである可能性が高いですが、それでもメソッドとプロパティが表示されるはずです。

関連情報