Not so long ago I described how to retrieve the installed .NET version in a single line of PowerShell code through a registry query. This time I want to show you how the same can be achieved on a remote system by modifying a bit our approach. The big difference is that for a remote instance you have to access the HKEY_LOCAL_MACHINE base key through the RegistryKey.OpenRemoteBaseKey method.
The key path is the same as the one we saw on the locally run oneliner:
HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP
The regular expression is moved at the beginning of the oneliner, so that I can cycle through every item and open one subkey at the time.
"v1.1.4322","v2.0.50727","v3.0","v3.5","v4\Full"|%{([Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Computer)).OpenSubKey("SOFTWARE\Microsoft\NET Framework Setup\NDP\$_").GetValue('version')}
As you can see with a bit of PowerShell gymnastics, you can get pretty concise lines of code that do powerful things.
Stay tuned for more PowerShell.
You cannot call a method on a null-valued expression.
ReplyDeleteAt line:1 char:52
+ ... "v4\Full"|%{([Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalM ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
2.0.50727.4927
3.0.30729.4926
3.5.30729.4926
4.7.02556
I get the same (Win10). It's cause the 1.1 key doesn't exist.
DeleteI get the same (Win10). It's cause v1.1.4322 doesn't exist. I assume it will for legacy OS's.
Delete"v1.1.4322","v2.0.50727","v3.0","v3.5","v4\Full"|%{([Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Computer)).OpenSubKey("SOFTWARE\Microsoft\NET Framework Setup\NDP\$_").GetValue('version')}
ReplyDeleteThis doesn't qualify as a oneliner in my book. Too lengthy and complex, and you're better off *not* trying to code-golf anything to do with the registry. Nor do you account for errors that will inevitably crop up when one or more of your versions isn't present.
"v1.1.4322","v2.0.50727","v3.0","v3.5","v4\Full" |
ForEach-Object {
$RegKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Computer)
$RegKey.OpenSubKey("SOFTWARE\Microsoft\NET Framework Setup\NDP\$_").GetValue('version')
}