Добавить фильтр с помощью Powershell - PullRequest
0 голосов
/ 22 октября 2018

У меня есть два файла .csv, и мне нужно сравнить их.Первый - это извлечение Active Directory, другой - извлечение списка профилей реестра.

Когда я сравниваю их, я хочу отображать только пользователей, присутствующих в списке профилей, отключенных вActive Directory и добавьте фильтр для отображения только тех, кто находится в домене («ДОМЕН \ Имя пользователя»).

compare-object -referenceobject $(get-content C:\Temp\UsersAD.csv) -differenceobject $(get-content C:\Temp\ProfileList.csv) | ?{$_.SideIndicator -eq '=>'}

Вот что я получил с помощью этого сценария:

PS C:\Users\Administrator.DOMAIN> C:\Users\Administrator.DOMAIN\Downloads\compare_users.ps1

InputObject                                                    SideIndicator                                                
-----------                                                    -------------                                                
#TYPE Selected.System.Management.Automation.PSCustomObject     =>                                                           
"PSChildName"                                                  =>                                                           
"NT AUTHORITY\SYSTEM"                                          =>                                                           
"NT AUTHORITY\LOCAL SERVICE"                                   =>                                                           
"NT AUTHORITY\NETWORK SERVICE"                                 =>                                                           
"LocalName\Administrator"                                      =>                                                           
"NT SERVICE\MSSQL$MICROSOFT##WID"                              =>                                                           
"IIS APPPOOL\.NET v4.5"                                        =>                                                           
"IIS APPPOOL\.NET v4.5 Classic"                                =>                                                           

В идеале это должновыглядит так:

PSChildName
"DOMAIN\Username1"
"DOMAIN\Username2"

Я пытался добавить фильтр в конце, но безрезультатно, так как это недопустимая команда:

compare-object -referenceobject $(get-content C:\Temp\UsersAD.csv) -differenceobject $(get-content C:\Temp\ProfileList.csv) -Filter "DOMAIN\" | ?{$_.SideIndicator -eq '=>'}

Вот как выглядит список профилей реестрапервоначально:

#TYPE Selected.System.Management.Automation.PSCustomObject
PSChildName
NT AUTHORITY\SYSTEM
NT AUTHORITY\LOCAL SERVICE
NT AUTHORITY\NETWORK SERVICE
LoacalName\Administrator
DOMAIN\Username
DOMAIN\Administrator
NT SERVICE\MSSQL$MICROSOFT##WID
IIS APPPOOL\.NET v4.5
IIS APPPOOL\.NET v4.5 Classic

Так что на самом деле мне нужно противоположное тому, что я получаю с помощью команды Compare-Object (т. е. «DOMAIN \ Username» и «DOMAIN \ Administrator»).

Коддля активных пользователей Active Directory:

Get-ADUser -Filter 'enabled -eq $true' | 
Select-Object SamAccountName,@{Name='FullUserName';Expression={"DOMAIN\$($_.SamAccountName)"}} |
Export-CSV C:\Temp\UsersEnabled.csv -Encoding UTF8

Результат:

#TYPE Selected.Microsoft.ActiveDirectory.Management.ADUser
FullUserName
DOMAIN\Administrator
DOMAIN\User1
DOMAIN\User2

1 Ответ

0 голосов
/ 22 октября 2018

Командлет Compare-Object имеет параметр -Property, в котором можно указать конкретное свойство для сравнения двух коллекций объектов.

Вы также должны использовать Import-CSV для чтения CSV, а не Get-Content.Это превратит CSV-файлы обратно в объекты PowerShell.

В настоящий момент ваши две коллекции, вероятно, имеют совершенно разные наборы свойств, и вы пытаетесь сравнить их полностью.Вы должны убедиться, что способ получения данных гарантирует, что оба CSV-файла имеют одно свойство с одинаковым именем, где данные в этом поле имеют одинаковый формат.

Например (необязательно корректно, в зависимости отваши данные, это предполагает, что оба CSV будут иметь свойство "имя", где имена пользователей были в том же формате):

Compare-Object -ReferenceObject (Import-CSV C:\Temp\UsersAD.csv) `
               -DifferenceObject (Import-CSV C:\Temp\ProfileList.csv) `
               -Property name | Where-Object {$_.SideIndicator -eq '=>'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...