param( [parameter(Mandatory=$true)] [alias("V")] $VirMach, [parameter(Mandatory=$true)] [alias("U")] $Username, [parameter(Mandatory=$true)] [alias("P")] $Password ) $pass = ConvertTo-SecureString -AsPlainText $Password -Force $Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass $VMHost = (get-item "HKLM:\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters").GetValue("PhysicalHostName") $HostISVersion = Invoke-Command -Computername $VMHost -Credential $Cred -Command {Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\GuestInstaller\Version" | select -ExpandProperty Microsoft-Hyper-V-Guest-Installer} ForEach ($VM in Invoke-Command -Computername $VMHost -Credential $Cred -ScriptBlock{Get-VM} | Where {$_.Name -eq "$VirMach"}) { $VMName = $VM.Name $VMIS = $VM.IntegrationServicesVersion $VMIS2 = ("$VMIS").Replace(".","") $measureObject = $VMIS2 | Measure-Object -Character $count = $measureObject.Characters if ($count -eq 8){$VMIS2 = $VMIS2 + '0000'} if ($count -eq 9){$VMIS2 = $VMIS2 + '000'} if ($count -eq 10){$VMIS2 = $VMIS2 + '00'} $VMIS2 = [Convert]::ToInt64($VMIS2) $HostISVersion2 = ("$HostISVersion").Replace(".","") $HostISVersion2 = [Convert]::ToInt64($HostISVersion2) If($VMIS2 -lt $HostISVersion2){ Write-Host "Host: $VMHost $HostISVersion Warning $VMName $VMIS Integration Services Update required" EXIT 1 } IF($VMIS2 -ge $HostISVersion2){ Write-Host "Host: $VMHost Integration Services up to date $VMIS" EXIT 0} } Write-Host "Unknown: $VirMach not known on $VMHost" EXIT 3