Я нашел следующий код, когда искал способ узнать статус проверки Центра обновления 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, но он все равно должен показывать вам методы и свойства