일반적으로 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반환에는 많은 속성이 있었습니다. 즉, 드라이버 업데이트, 타사 업데이트(예: Microsoft Silverlight) 및 실제 "Windows 업데이트"를 구분할 수 있기 Type를 바랐기 때문에 관심을 불러일으켰습니다. Type더 많은 정보를 찾아보는데 아무 것도 찾을 수 없습니다.

Google과 MSDN에서 검색했지만 "Microsoft.Updates.Session"어떤 속성을 사용할 수 있는지, 열거형의 의미(예: Type=1 대 Type=2)를 알려주는 소스를 찾을 수 없습니다.

검색해야 할 PowerShell 개체 참조가 있습니까? 또는 필요할 때 PowerShell 개체에 대한 추가 정보를 찾으려면 어떻게 해야 합니까?

답변1

우선, 유형은 [Microsoft.Update.Session]실제로 내장된 Powershell 개체가 아니라WUA(Windows 업데이트 에이전트) API. 따라서 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.찾다()방법. 예를 들어 type='Software' 또는 type='Driver'일 수 있는 것 같습니다.

WUA API에는 일반적으로 다음과 같은 버그/기능이 있습니다.필요하다원격으로 시작하는 대신 컴퓨터에서 로컬로 실행되지만 스크립트를 실행하는 예약된 작업을 생성하여 이 문제를 해결할 수 있습니다.

마지막으로 귀하의 질문에 실제로 답변해 드리겠습니다. 일반적으로 내장된 Powershell 기능 중 대부분을 발견하는 데 도움이 될 것입니다 Get-Member $MyObject.Get-Help $MyCommand

답변2

가장 쉬운 방법은 Get-Member다음과 같은 cmdlet을 사용하는 것입니다.

$Updates | Get-Member

이 경우 COM 개체일 가능성이 높지만 여전히 메서드와 속성이 표시되어야 합니다.

관련 정보