我在我们的网络上有 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