Chapters/verify-yourself/answer.ps1
function Get-XXSystemInfo { [CmdletBinding()] param( [Parameter(Mandatory=$True, ValueFromPipeline=$True)] [string[]]$Computername, [Parameter()] [ValidateSet('Dcom','Wsman')] [string]$Protocol = 'Wsman', [Parameter()] [switch]$TryOtherProtocol ) BEGIN { If ($Protocol -eq 'Dcom') { $cso = New-CimSessionOption -Protocol Dcom } else { $cso = New-CimSessionOption -Protocol Wsman } } PROCESS { ForEach ($comp in $computername) { Try { Write-Verbose "Attempting $comp on $protocol" $s = New-CimSession -ComputerName $comp -SessionOption $cso -EA Stop Write-Verbose " [+] Connected" $os = Get-CimInstance -CimSession $s -ClassName Win32_OperatingSystem $bios = Get-CimInstance -CimSession $s -ClassName Win32_BIOS $props = @{'ComputerName'=$comp 'BIOSSerial'=$bios.serialnumber 'OSVersion'=$os.version} New-Object -TypeName PSObject -Property $props } Catch { Write-Warning "Skipping $comp due to failure to connect" if ($TryOtherProtocol) { If ($Protocol -eq 'Dcom') { Get-XXSystemInfo -Protocol Wsman -Computername $comp } else { Get-XXSystemInfo -Protocol Dcom -Computername $comp } } } #Catch } #ForEach } #PROCESS END {} } |