Как правило, как можно найти дополнительную информацию об объекте PowerShell?

Как правило, как можно найти дополнительную информацию об объекте PowerShell?

Я нашел следующий код, когда искал способ узнать статус проверки Центра обновления Windows на компьютере:

$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и в возвращаемом значении было много свойств, а именно Typeто, что вызвало мой интерес, поскольку я надеюсь, что это Typeможет разграничить обновления драйверов, сторонние обновления (например, Microsoft Silverlight) и настоящие «обновления Windows», но как бы я ни искал больше информации, я ничего не могу найти.

Я искал "Microsoft.Updates.Session"в Google и MSDN, но не смог найти ни одного источника, который бы действительно рассказал мне, какие свойства ему доступны и что означают перечисления (например, Type=1 или Type=2).

Есть ли ссылка на объект PowerShell, которую мне следует искать, или как мне найти дополнительную информацию об объекте PowerShell, когда мне это понадобится?

решение1

Начнем с того, что этот тип [Microsoft.Update.Session]на самом деле не является встроенным объектом Powershell, а является частьюAPI агента обновления Windows (WUA). Таким образом, в нем нет встроенных файлов справки или примеров, которые PowerShell может вам показать, но его можно найти на сайте Microsoft.

В связанной документации MS есть несколько хороших примеров того, как использовать API для выполнения различных задач с Центром обновления Windows, и большую часть из них можно напрямую преобразовать для использования в 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.Поиск()метод. Похоже, что это может иметь тип = 'Software' или тип = 'Driver', например.

Обратите внимание, что API WUA имеет ошибку/функцию, которая обычнотребуетего следует запускать локально на машине, а не удаленно, хотя это можно обойти, создав запланированную задачу, которая будет запускать ваш скрипт.

И наконец, чтобы фактически ответить на ваш вопрос - как правило, Get-Member $MyObjectэто Get-Help $MyCommandпоможет вам открыть для себя большинство встроенных возможностей Powershell.

решение2

Самый простой — использовать Get-Memberкомандлет, например:

$Updates | Get-Member

в этом случае это, скорее всего, объект COM, но он все равно должен показывать вам методы и свойства

Связанный контент