来自 Powershell 的操作系统构建信息

来自 Powershell 的操作系统构建信息

我在我们的网络上有 2 台计算机,我从它们中提取操作系统信息。两台计算机都是 Windows 10 计算机,操作系统内部版本为 19044。一台计算机的操作系统内部版本为 19044.1526,另一台计算机的操作系统内部版本为 19044.1566。

字段“OperatingSystemVersion”将仅显示 19044。

有人能帮我找到一种方法(如果可能的话)使用 Powershell 获取 OS Build 的 1526 或 1566 部分吗?当我使用 WINVER 应用程序时,我看到的是版本 21H2(OS Build 19044.1566)。

这让我希望 Powershell 能够从某处提取数据。

示例脚本如下:

cls

Get-ADComputer -Filter 'enabled -eq "true"' ` -Properties Name,Operatingsystem,OperatingSystemVersion,IPv4Address,description,homedrive,lastbadpasswordattempt,lastlogon, lastlogon Sort-Object -Property OperatingsystemVersion |

Select-Object -Property description,Name,Operatingsystem,OperatingSystemVersion,osbuild | export-csv y:\files\All_Computer_by_OSVersion_summary.csv 

答案1

不,这些信息实际上并未存储在目录中。您在 PowerShell 中看到的内容与您通过直接 LDAP 访问看到的相应 AD“计算机”对象中的内容几乎完全相同。1

如果您没有其他管理工具,那么您将需要远程访问计算机本身,例如通过 WMIGet-WmiObject或 WinRM Invoke-Command(如果其防火墙配置为允许这样做)。


1(例如,如果您通过 ADSIEdit 或 Apache Directory Studio 连接到 AD。)

答案2

如果您在任一 PC 上本地运行该命令,请运行以下命令:

Get-ComputerInfo -Property "WindowsUBR"

您可以远程运行以下命令

Invoke-Command -ComputerName "COMPUTERNAME" -ScriptBlock {  (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name "UBR").UBR }

更改“COMPUTERNAME”以匹配电脑名称。

答案3

您可以通过探测计算机注册表来获取该信息。(您需要远程计算机的管理权限)

$cred = Get-Credential -Message "Please enter admin credentials"

# Get-ADComputer by default already returns these properties:
# DistinguishedName, DNSHostName, Enabled, Name, ObjectClass, ObjectGUID, SamAccountName, SID,  UserPrincipalName

# ask only for extra properties you need in the output
$propsToFetch = 'Operatingsystem', 'OperatingSystemVersion', 'Description'
Get-ADComputer -Filter 'enabled -eq "true"' -Properties $propsToFetch |
Sort-Object -Property OperatingSystemVersion |
ForEach-Object {
    if (Test-Connection -ComputerName $_.Name -Count 1 -Quiet) {
        # have the remote computer return a formatted string 'BuildNumber.ReleaseId'
        $osBuild = Invoke-Command -ComputerName $_.Name -Credential $cred -ScriptBlock {
            '{0}.{1}' -f 
            (Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name CurrentBuildNumber),
            (Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name UBR)
        }
    }
    else {
        $osBuild = 'Unknown; Computer is off-line'
    }
    $_ | Select-Object Description, Name, Operatingsystem, OperatingSystemVersion,
                       @{Name = 'osbuild'; Expression = {$osBuild}}
} | Export-Csv -Path 'y:\files\All_Computer_by_OSVersion_summary.csv' -NoTypeInformation 

相关内容