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

为什么Get-Computers -OperatingSystem "Windows VistaT Business"不能返回任何东西? 它适用于所有其他操作系统types。

 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客户端和string寻找是Windows VistaT Business

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

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

尝试这个:

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

为什么微软select滥用以这种方式在string值属性中存储unicode符号的能力超出了我的想象。


以下是我的发现:

(当你将一个.NET char成一个整数时,你将得到ASCII字符的字节值,或者一个2字节的Unicode字符的代码点)

 $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