Возможно ли иметь IndexOf INCASENSITIVE в Poweshell? - PullRequest
0 голосов
/ 12 ноября 2018

У меня проблема с поиском INDEX в массиве, составленном командой запросов на терминальном сервере.

Это проблемный скрипт:

--- Массив зарегистрированных пользователей в терминальных серверах ---

$a=Get-RDUsersession -CollectionName "BLABLA" -ConnectionBroker BLABLA.BLA.BL

--- Массив всех пользователей с двумя колоннами из активной директории ----

$b=Get-ADUser -filter * -properties TelephoneNumber,SamAccountName

Теперь представьте, что вы входите на сервер терминалов, используя AccountName «TEST» вместо «test».

Если я это сделаю:

$c = $b[$b.SamAccountName.indexof("test")].TelephoneNumber

Я не получил номер телефона. Это вызвано чувствительностью к регистру, верно? на самом деле, если я наберу "ТЕСТ" в команде поиска, я получу правильный номер.

Есть ли простой способ избежать этой проблемы и сделать поиск индекса нечувствительным к регистру ?? Я читал об использовании этого метода [StringComparison]"CurrentCultureIgnoreCase", но он не работает с массивом.

Спасибо.

1 Ответ

0 голосов
/ 03 февраля 2019

Поскольку $ b является типом Object [], то вы, вероятно, захотите создать объект Where-Object.

$b | Where-Object -FilterScript {$_.Samaccountname -like '*Smith*'} | Select-Object -ExpandProperty 'telephoneNumber'

При этом массив в Powershell можно индексировать без учета регистра, если он преобразуется в тип [Collections.Generic.List [Object]].

$b = [Collections.Generic.List[Object]]$b
$b.FindIndex( {$args[0].sAMAccountName -eq 'test'} )

Обратите внимание, что извлечение каждого отдельного пользовательского объекта в AD и фильтрация с использованием сопоставления where-object или index могут быть очень медленными.Вместо этого вы можете при необходимости получить Get-ADUser или вытянуть все ADusers, используя фильтр, который вытягивает только пользователей, возвращенных в $ a.

Если вы настаиваете, чтобы все ADUsers были в одном месте одним нажатием, рассмотрите возможность циклического перемещения по списку.один раз для поиска хеша, чтобы вы могли легко проиндексировать значение хеша.

#Create account lookup hash
$accountlookup = @{}
foreach ($element in $accounts) {
  $accountlookup[$element.SamAccountName] = $element 
}

Надеюсь, это поможет!

...