View Single Post
Old 03-17-2008   #8 (permalink)
Charlie Russel - MVP


 
 

Re: Reliable way to get Windows Version?

Yes, that will do nearly all I need, on a Vista / Server 2008 system (though
doesn't tell me VL v. Retail, but I can live without that). However, it
doesn't cut it on Server 2003 / Windows XP x64 (where Edition isn't
available) and doesn't tell me if I'm on SBS or Server, much less which
version of Server. There I've used -matches "76588-" on the Product ID to
tell me it's Windows XP x64, since there is only a single version of it. But
that's fairly ugly, and doesn't lend itself to doing math on it or building
a simple (<g>) switch statement.

I fear we may be back to parsing ProductID to get everything...

--
Charlie.
http://msmvps.com/xperts64
http://mvp.support.microsoft.com/profile/charlie.russel


"Jon" <Email_Address@xxxxxx> wrote in message
news:%239YXVaAiIHA.4744@xxxxxx
Quote:

> "Charlie Russel - MVP" <charlie@xxxxxx> wrote in message
> news:6116302E-00CF-46C6-A17B-4F35EA5575C9@xxxxxx
Quote:

>>I need a way to determine what Windows version and edition a script is
>>running on. I can get the build number, that's trivial:
>>
>> $Build=(get-item 'HKLM:/Software/Microsoft/Windows
>> NT/CurrentVersion').getvalue('CurrentBuildNumber')
>>
>> But it doesn't much help when Windows Vista SP1 is 6001 and so is Windows
>> Server 2008. And also doesn't tell me which edition. The ProductID:
>>
>> $ProductID=(get-item 'HKLM:/Software/Microsoft/Windows
>> NT/CurrentVersion').getvalue('ProductID')
>>
>> could probably do it, but I'm not at all sure what I'm looking at there,
>> and how to parse it for what's important. First, does anyone know a
>> reference that gives the relevant numbers for the various editions of
>> Windows. And second, could someone suggest a regex to parse it into
>> consituent parts? Or, alternately, does someone have a better location to
>> get the version and edition of Windows?
>>
>
>
>
> There are a number of ways you could get relevant information. Parsing the
> product id sounds a bit of an extreme approach imho ;-) [although
> possible and worth a thread in itself]
>
> From the registry as you mentioned under
>
> HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
>
> (Get-Item "HKLM:SOFTWARE\Microsoft\Windows
> NT\CurrentVersion").GetValue("ProductName")
> (Get-Item "HKLM:SOFTWARE\Microsoft\Windows
> NT\CurrentVersion").GetValue("EditionID")
>
> would distinguish between Windows Server 2008 and Vista
>
> Other options ..
> (Get-Item "HKLM:SOFTWARE\Microsoft\Windows
> NT\CurrentVersion").GetValueNames()
>
>
>
> or you could use Win32_OperatingSystem
>
> Get-WmiObject Win32_OperatingSystem | fl -property *
>
> eg
>
> (Get-WmiObject Win32_OperatingSystem).Caption
> (Get-WmiObject Win32_OperatingSystem).BuildNumber
>
> OR
>
> [environment]:sversion
>
> eg
>
> [environment]:sversion.Version.ToString()
>
> and split further....
>
>
> [environment]:sversion.Version.Major
> [environment]:sversion.Version.Minor
> [environment]:sversion.Version.Build
> [environment]:sversion.Version.Revision
>
>
> A combination of the above should provide you with sufficient information.
>
>
>
> --
> Jon
>
>
>
My System SpecsSystem Spec