PoshCode Archive  Artifact [0d2d3ff58d]

Artifact 0d2d3ff58d2f81c5fe460279fa474cb27274226e697b7c6e4cdde7ccfaaf6d66:

  • File Get-WMIVersions.ps1 — part of check-in [18917cd456] at 2018-06-10 12:59:25 on branch trunk — Use this script to detect installed .NET versions on a remote server using WMI. Requires credentials and a computername. (user: halr9000 size: 1743)

# encoding: ascii
# api: powershell
# title: Get-WMIVersions
# description: Use this script to detect installed .NET versions on a remote server using WMI. Requires credentials and a computername.
# version: 0.1
# author: halr9000
# license: CC0
# x-poshcode-id: 1628
# x-derived-from-id: 4077
# x-archived: 2016-10-18T09:48:17
# x-published: 2010-02-03T13:02:00
#
#
#Requires -Version 2
param ( $Credential, $ComputerName )

# The official way to detect .NET versions is to look at their known location on the hard drive as per
# this article: http://msdn.microsoft.com/en-us/kb/kb00318785.aspx

# thanks to David M (http://twitter.com/makovec) for the WQL 
$query = "select name from win32_directory where name like 'c:\\windows\\microsoft.net\\framework\\v%'"

$res = Get-WmiObject -query $query -Credential $Credential -ComputerName $ComputerName | ForEach-Object {
	Split-Path $_.name -Leaf } | # returns directories
		Where-Object { $_ -like 'v*' } | # only include those that start with v
			ForEach-Object { [system.version]( $_ -replace "^v" ) } # remove "v" from the string and convert to version object

# Create hashtable with computername and version details
$prop = @{
	ComputerName	= $ComputerName
	V1Present		= &{ if ( $res | Where-Object { $_.Major -eq 1 -and $_.Minor -eq 0 } ) { $true } }
	V1_1Present		= &{ if ( $res | Where-Object { $_.Major -eq 1 -and $_.Minor -eq 1 } ) { $true } }
	V2Present		= &{ if ( $res | Where-Object { $_.Major -eq 2 -and $_.Minor -eq 0 } ) { $true } }
	V3_5Present		= &{ if ( $res | Where-Object { $_.Major -eq 3 -and $_.Minor -eq 5 } ) { $true } }
	VersionDetails	= $res
}

# Create and output PSobject using hashtable
New-Object PSObject -Property $prop