mirror of
https://github.com/bin456789/reinstall.git
synced 2026-05-21 05:27:41 +08:00
60 lines
1.9 KiB
PowerShell
60 lines
1.9 KiB
PowerShell
param(
|
|
[string]$Namespace = "root\cimv2",
|
|
[Parameter(Mandatory = $true)] [string]$Class,
|
|
[string]$Filter,
|
|
[string]$Properties
|
|
)
|
|
|
|
# 预处理属性列表:如果有输入则处理成数组,否则保持为空数组
|
|
[string[]]$propertyList = if ($Properties) {
|
|
$Properties.Split(",") | ForEach-Object { $_.Trim() }
|
|
}
|
|
else {
|
|
@()
|
|
}
|
|
|
|
# 检查是否支持 Get-Cimresult
|
|
$isSupportCim = [bool](Get-Command Get-Cimresult -ErrorAction SilentlyContinue)
|
|
|
|
# 构造查询参数
|
|
$queryParams = @{ Namespace = $Namespace }
|
|
if ($isSupportCim) { $queryParams.ClassName = $Class } else { $queryParams.Class = $Class }
|
|
if ($Filter) { $queryParams.Filter = $Filter }
|
|
|
|
# 限制查询属性,加快查询速度
|
|
# CIM 支持
|
|
# WIM 不支持
|
|
if ($isSupportCim -and $propertyList.Count -gt 0) {
|
|
$queryParams.Property = $propertyList
|
|
}
|
|
|
|
# 执行查询
|
|
$results = if ($isSupportCim) { Get-Cimresult @queryParams } else { Get-WmiObject @queryParams }
|
|
|
|
# 遍历结果
|
|
foreach ($result in $results) {
|
|
# 遍历属性
|
|
foreach ($property in $result.PSObject.Properties) {
|
|
$name = $property.Name
|
|
$value = $property.Value
|
|
|
|
# 过滤系统属性
|
|
if ($name.StartsWith("__") -or $name -eq "CimresultProperties" -or $name -eq "CimClass") { continue }
|
|
|
|
# 只输出 propertyList 有的属性
|
|
# propertyList 为空表示不过滤
|
|
if ($propertyList.Count -eq 0 -or $propertyList -contains $name) {
|
|
|
|
# 改成 wmic 的输出格式
|
|
# 这里要注意 string 也是 IEnumerable
|
|
if ($value -isnot [string] -and $value -is [Collections.IEnumerable]) {
|
|
$formattedValue = ($value | ForEach-Object { "`"$_`"" }) -join ","
|
|
Write-Output "$name={$formattedValue}"
|
|
}
|
|
else {
|
|
Write-Output "$name=$value"
|
|
}
|
|
}
|
|
}
|
|
}
|