Кто-нибудь знает, как получить версию ОС, как это:
С помощью Get-WmiObject? Не могу найти этот информатин вообще ..
Кто-нибудь знает, как получить версию ОС, как это:
С помощью Get-WmiObject? Не могу найти этот информатин вообще ..
Версия ОС хранится в разделе реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ReleaseId. Обычно вы можете прочитать эти ключи с помощью WMI.
LotPings предоставил правильный запрос в комментариях: (Get-Item "HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion").GetValue('ReleaseID')
Нашел этот классный скрипт на TechNet Gallary: Get-WindowsVersion
Вот как это выглядит:
[19JUN] :>Get-WindowsVersion -ComputerName ktpc
ComputerName Productname WindowsVersion WindowsBuild ProductID InstallTime
------------ ----------- -------------- ------------ --------- -----------
KTPC Windows 10 Enterprise 1803 10.0.17134.112 00329-10280-00000-AA451 5/22/2018 8:10:15 AM
Он использует тот же "RealseID", что и другие, предложенные для получения этого значения. Тем не менее, это хорошее усилие и готово к использованию.
Это не через WMI, но ответ Джеффа Меркадо может в любом случае помочь;
Поскольку у вас есть доступ к библиотеке .NET, вы можете получить доступ к свойству OSVersion
System.Environment
чтобы получить эту информацию. Для номера версии есть свойство Version
.
Например,
PS C:\> [System.Environment]::OSVersion.Version
Major Minor Build Revision
----- ----- ----- --------
6 1 7601 65536
Подробности версий Windows можно найти здесь.
Вот небольшой скрипт, который я написал, чтобы найти информацию о компьютере:
$Computer = "localhost"
$Manufacturer = Get-WmiObject -ComputerName $Computer -class win32_computersystem | select -ExpandProperty Manufacturer
$Model = Get-WmiObject -class win32_computersystem -ComputerName $Computer | select -ExpandProperty model
$Serial = Get-WmiObject -class win32_bios -ComputerName $Computer | select -ExpandProperty SerialNumber
$wmi_os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $Computer | select CSName,Caption,Version,OSArchitecture,LastBootUptime
switch($wmi_os.Version){
'10.0.10240'{$wmi_build="1507"}
'10.0.10586'{$wmi_build="1511"}
'10.0.14393'{$wmi_build="1607"}
'10.0.15063'{$wmi_build="1703"}
'10.0.16299'{$wmi_build="1709"}
'10.0.17134'{$wmi_build="1803"}
'10.0.17686'{$wmi_build="1809"}
}
$wmi_cpu = Get-WmiObject -class Win32_Processor -ComputerName $Computer | select -ExpandProperty DataWidth
$wmi_memory = Get-WmiObject -class cim_physicalmemory -ComputerName $Computer | select Capacity | %{($_.Capacity / 1024kb)}
$DNName = Get-ADComputer -Filter "Name -like '$Computer'" | select -ExpandProperty DistinguishedName
$Boot=[System.DateTime]::ParseExact($($wmi_os.LastBootUpTime).Split(".")[0],'yyyyMMddHHmmss',$null)
[TimeSpan]$uptime = New-TimeSpan $Boot $(get-date)
Write-Host "------Computer Info for $Computer------------------`r"
Write-Host "Hostname from WMI`: $($wmi_os.CSName)"
Write-Host "$DNName"
Write-Host "$Manufacturer $Model SN`:$Serial"
Write-Host "$($wmi_os.Caption) $wmi_build $($wmi_os.OSArchitecture) $($wmi_os.Version)"
Write-Host "CPU Architecture: $wmi_cpu"
Write-Host "Memory: $wmi_memory"
Write-Host "Uptime`: $($uptime.days) Days $($uptime.hours) Hours $($uptime.minutes) Minutes $($uptime.seconds) Seconds"
Write-Host "--------------------------------------------------------"