Hello! Pretty new to PowerShell and trying to figure out how to work with remote registry entries. My goal is to get the Edition and Version values from:
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\InstanceValue\Setup
I know I can get the Instance Value from:
HKLM\Software\Microsoft SQL Server\Instance Names\SQL
The name of the instance I’m searching for is called WEBACCESS.
I’ve been able to generate the following to give me the SQL Instance Values:
computers = gc "C:\Merge\Powershell\Servers.txt" clear-host foreach ($Computer in $Computers) { $computerSystem = get-wmiobject Win32_ComputerSystem -Computer $Computer $ComputerSQLReg = $machinename = $computer $key = "Software\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL" $valuename = "WEBACCESS" $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $machinename) $regkey = $reg.opensubkey($key) $p = $regkey.getvalue($valuename) write-host "System Information for: " $computerSystem.Name -BackgroundColor DarkCyan "-------------------------------------------------------" "SQL Server Instance: " + $p "" "-------------------------------------------------------" }
Now I’m having trouble taking the $p value and using that in the HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\InstanceValue\Setup registry key to get the edition and version.
I found this code to do this on a local server:
$inst = (get-itemproperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server').InstalledInstances foreach ($i in $inst) { $p = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL').$i (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$p\Setup").Edition (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$p\Setup").Version }
I tried to use the knowledge I gained in getting the first part of this and combine what I’m seeing in this second script to see if I can get the edition and version. I’ve built the following script based on what I’m seeing, but now all 3 values are coming up blank. Any chance anyone else can find what I’m doing wrong here?
computers = gc "C:\Merge\Powershell\Servers.txt" clear-host foreach ($Computer in $Computers) { $computerSystem = get-wmiobject Win32_ComputerSystem -Computer $Computer $ComputerSQLReg = $machinename = $computer $key = "Software\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL" $valuename = "WEBACCESS" $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $machinename) $regkey = $reg.opensubkey($key) foreach ($valuename in $p) { $p = $regkey.getvalue($valuename) $KeyEd = "SOFTWARE\\Microsoft\\Microsoft SQL Server\\$p\\Setup" $valueEd = "Edition" $valueVer = "Version" $regkeysetup = $reg.opensubkey($keyed) $e = $regkeysetup.getvalue($ValueEd) $v = $regkeysetup.getvalue($valueVer) } write-host "System Information for: " $computerSystem.Name -BackgroundColor DarkCyan "-------------------------------------------------------" "SQL Server Instance: " + $p "SQL Express or Standard: " + $e "SQL Version Number: " + $v "" "-------------------------------------------------------" }
My goal here is to add this to a script I’ve already got working that shows things like hostname, IP, CPU, OS, cores, RAM, etc, but cracking the remote registry code is kicking my butt…