iNNOKENTIY21
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код: <# .SYNOPSIS Версия текущей операционной системы .DESCRIPTION Скрипт для получения информации о версии текущей операционной системы По умолчанию данные берутся, только из реестра С помощью параметров-переключателей подключаются другие источники информации .PARAMETER Kernel Переключатель для добавления информацию из WinAPI kernel32.dll GetVersion() .PARAMETER Environment Переключатель для добавления информацию из [System.Environment]::OSVersion .PARAMETER Cim Переключатель для добавления информацию из CimInstance Win32_OperatingSystem .PARAMETER Wmi Переключатель для добавления информацию из WmiObject Win32_OperatingSystem .OUTPUTS [PSCustomObject] с информацией об текущей операционной системе .NOTES Автор: iNNOKENTIY21 Версия: 1.0 .EXAMPLE Get-OSVersion.ps1 .EXAMPLE (Get-OSVersion.ps1).OSVersion .EXAMPLE (Get-OSVersion.ps1).OSInfoString .EXAMPLE Get-OSVersion.ps1 -Kernel -Environment -Cim -Wmi .EXAMPLE (Get-OSVersion.ps1 -Cim).OSVersionCim .EXAMPLE (Get-OSVersion.ps1 -Cim).OSVersionCim.Version .EXAMPLE (Get-OSVersion.ps1 -Wmi).OSVersionWMi.MUILanguages #> param ( # Получать информацию из WinAPI kernel32.dll GetVersion() [switch] $Kernel, # Получать информацию из [System.Environment]::OSVersion [switch] $Environment, # Получать информацию из CimInstance Win32_OperatingSystem [switch] $Cim, # Получать информацию из WmiObject Win32_OperatingSystem [switch] $Wmi ) # Путь в реестре с информацией об операционной системе $Path = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" #($Path | Get-item).Property # Свойства по указанному пути в реестре с информацией об операционной системе $Properties = @( 'BuildBranch' 'BuildLab' 'BuildLabEx' 'CompositionEditionID' 'CurrentBuild' 'CurrentBuildNumber' 'CurrentMajorVersionNumber' 'CurrentMinorVersionNumber' 'CurrentType' 'CurrentVersion' 'EditionID' 'InstallationType' 'PathName' 'ProductName' 'ReleaseId' 'SoftwareType' 'SystemRoot' 'UBR' ) # Объект для вывода $Out = [PSCustomObject]@{} # Наполнение объекта для вывода свойствами из реестра (Имя = Значение) foreach ($Property in $Properties) { Add-Member ` -InputObject $Out ` -MemberType NoteProperty ` -Name $Property ` -Value (Get-ItemProperty -Path $Path -Name $Property).$Property } <# Добавление вычесляемых свойств #> # Архетиктура операционной системы x32 или x64 Add-Member ` -InputObject $Out ` -MemberType NoteProperty ` -Name OSArchitecture ` -Value ([IntPtr]::Size * 8) # Версия операционной системы приведенная к типу System.Version Add-Member ` -InputObject $Out ` -MemberType NoteProperty ` -Name OSVersion ` -Value ([System.Version]::new( $Out.CurrentMajorVersionNumber, $Out.CurrentMinorVersionNumber, $Out.CurrentBuild, $Out.UBR)) # Информация о системе в одну строку Add-Member ` -InputObject $Out ` -MemberType NoteProperty ` -Name OSInfoString ` -Value (@( $Out.CompositionEditionID $Out.InstallationType $Out.SoftwareType "NT-$($Out.CurrentVersion)," $Out.ProductName "x-$($Out.OSArchitecture)," $Out.ReleaseId "$($Out.BuildBranch -replace '_', ' ')," "v$($Out.OSVersion)" "($($Out.SystemRoot))" ) -join ' ') # Информация о версии системы из WinAPI kernel32.dll GetVersion() if ($Kernel) { # Добавление типа Класс OSVersion с методом из kernel32.dll GetVersion() if (!('OSVersion' -as [type])) { Add-Type -TypeDefinition @' using System; using System.Runtime.InteropServices; public class OSVersion { [DllImport("kernel32.dll")] public static extern uint GetVersion(); } '@ } $OSVersion = [OSVersion]::GetVersion() $Os = [System.BitConverter]::GetBytes($OSVersion) $Build = [byte]$Os[2], [byte]$Os[3] Add-Member ` -InputObject $Out ` -MemberType NoteProperty ` -Name OSVersionKernel ` -Value ([System.Version]::new( $Os[0], $Os[1], [System.BitConverter]::ToInt16($Build, 0) )) } # Информация о системе из системной переменной [System.Environment]::OSVersion if ($Environment) { Add-Member ` -InputObject $Out ` -MemberType NoteProperty ` -Name OSVersionEnvironment ` -Value (([System.Environment]::OSVersion)) } # Информация о системе из CimInstance Win32_OperatingSystem if ($Cim) { Add-Member ` -InputObject $Out ` -MemberType NoteProperty ` -Name OSVersionCim ` -Value (Get-CimInstance Win32_OperatingSystem) } # Информация о системе из WmiObject Win32_OperatingSystem if ($Wmi) { Add-Member ` -InputObject $Out ` -MemberType NoteProperty ` -Name OSVersionWmi ` -Value (Get-WmiObject Win32_OperatingSystem) } # Вывод данных $Out |
|