查找 Vista 客户端时,“Get-AdComputer -filter”未返回任何内容

查找 Vista 客户端时,“Get-AdComputer -filter”未返回任何内容

为什么Get-Computers -OperatingSystem "Windows VistaT Business"不返回任何内容?它适用于所有其他操作系统类型。

Function Get-Computers
{
    Param($OperatingSystem)

    Get-AdComputer -Filter 'OperatingSystem -eq ${OperatingSystem}' -SearchBase "OU=Departement,DC=contoso,DC=com"
}

#Get-Computers -OperatingSystem "Windows Server 2012 R2 Standard"
#Get-Computers -OperatingSystem "Windows Server 2008 R2 Standard"
#Get-Computers -OperatingSystem "Windows 7 Professional"
Get-Computers -OperatingSystem "Windows VistaT Business"

我确实有 Vista 客户端并且要查找的字符串是Windows VistaT Business

PS C:\> (get-adcomputer ClientA -Properties *).OperatingSystem
Windows 7 Professional
PS C:\> (get-adcomputer ClientB -Properties *).OperatingSystem
Windows VistaT Business

答案1

“VistaT” 中的那个T根本不是 T - 它代表一个商标符号:™(Unicode 中的 U+2122 或 #8482)

尝试这个:

Get-Computers -OperatingSystem $("Windows Vista" + [char]8482 + " Business")

我无法理解为什么微软选择以这种方式滥用在字符串值属性中存储unicode符号的能力。


以下是我的发现:

(将 .NET 转换char为整数时,您将获得 ASCII 字符的字节值,或 Unicode 字符的 2 字节代码点)

$osString = (Get-ADComputer [VistaComputerName] -Properties operatingSystem).operatingSystem

foreach($c in $osString.ToCharArray())
{
    Write-Host $("$c: " + "$([int]$c)")
}

此时,我的输出由所有 ASCII 字符(所有整数为一个字节)组成,但以下情况除外T

W: 87
i: 105
n: 110
d: 100
o: 111
w: 119
s: 115
 : 32
V: 86
i: 105
s: 115
t: 116
a: 97
T: 8482
 : 32
B: 66
u: 117
s: 115
i: 105
n: 110
e: 101
s: 115
s: 115

相关内容