Назад | Перейти на главную страницу

«Get-AdComputer -filter» ничего не возвращает при поиске клиентов Vista.

Почему 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

Который T в "VistaT" вообще нет буквы Т - это символ товарного знака: ™ (U + 2122 или # 8482 в Unicode)

Попробуй это:

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

Мне непонятно, почему Microsoft решила злоупотребить возможностью хранить символы Unicode в атрибутах строковых значений таким образом.


Вот как я узнал:

(Когда вы используете .NET char в целое число, вы получите байтовое значение для символов ASCII или 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