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