У меня есть два наборов данных один представляет собой таблицу данных отстранился от даты SQL базы, а другой набор данных отстранился от активной директориизаписи Matching в массивах Powershell
$HRusers = Invoke-SQL ## this calls a function to get data from SQL
$adusers = get-aduser -filter * -Properties surname,EmployeeID,DisplayName
Я хочу, чтобы затем соответствовать два вместе, чтобы мой код на данный момент
$HRusers | ForEach-Object {
foreach ($user in $aduser){
if ((($_.Surname -eq $user.surname) -And ($_.'First Name' -eq $user.Givenname)) -or (($_.Surname -eq $user.surname) -And ($_.'Known As' -eq $user.Givenname)))
{ do some stuff}
}
}
Это делает работу, но в списке для каждого составляет несколько 1000 долго много циклов.
Есть ли способ, которым я могу выполнить поиск, а не цикл. поэтому логика больше похожа на
$ HRusers | ForEach-Object {
найти совпадение в списке AD, где совпадение имен, а затем сделать некоторые вещи.
}
EDIT
Так что я попробовал этот
if (($adusers.surname -eq $_.surname) -And ($adusers.Givenname -eq $_.'First Name'))
{
write-host "Found" $adusers.surname
}
Что делает дать истинный/ложный ответ, но мне нужно, чтобы извлечь запись $ ADUser, что она дает матч.
Глядя на веб-сайте TechNet
https://technet.microsoft.com/en-us/library/ee692798.aspx "отмечают, что, с -как, вы получите обратно фактические значения, а не Boolean Истина или Ложь"
Так я ожидал
$users = ($adusers.Givenname -like ($_.'First Name') -and $adusers.surname -like ($_.'surname'))
write-host $users
в вернуть значение, но оно все равно возвращает true/false?