# read versions and versiontext from csv $versions = @{} $csvversions = (Import-Csv -Path .\get-ExchangeServerVersion.csv) $csvversions | foreach { $versions[($_.version)] = $_.Text } # create list object for output $output = @() $version ="UNKNOWN!" # get exchange servers in the organization filtered by version 14.* $exServers = Get-ExchangeServer | ? { $_.AdminDisplayVersion -like "Version 14.*"} | sort fqdn | select name,fqdn foreach ($exServer in $exServers){ Write-Debug $exserver # create PowerShell object for output line $outputEx = New-Object -TypeName PSObject # get Exchange installation path $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $exServer.fqdn) $RegKey= $Reg.OpenSubKey("SOFTWARE\\Microsoft\\ExchangeServer\\V14\\Setup") $InstallPath = $RegKey.GetValue("MsiInstallPath") $ExSetupPath=("\\"+$exServer.fqdn+"\"+($InstallPath).replace(":\","$\").Replace("""",""))+"bin\ExSetup.exe" # get Version from Exchange binary $version = ([Version](Get-Item ($ExSetupPath)).VersionInfo.ProductVersion).tostring() # add server name to ps object Add-Member -InputObject $outputEx -MemberType NoteProperty -Name Name -Value $exServer.fqdn # add version to ps object, if the version is not in the version list, use the version instead of text If($versions["$($version)"]){ Add-Member -InputObject $outputEx -MemberType NoteProperty -Name Version -Value $versions["$($version)"] } else { Add-Member -InputObject $outputEx -MemberType NoteProperty -Name Version -Value $version } # reset Version to unknown for next loop $version ="UNKNOWN!" $ExSetupPath = "" # add ps object to output $output+=$outputEx } $output