为什么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