Завершено и не в группе
Я пытаюсь создать отчет для всех отключенных учетных записей, у которых нет группы "Прекращенные сотрудники", но создается впечатление, что отчет не создается. Ниже приведен код, который у меня есть на данный момент.
TLDR: текстовый файл содержит список всех отключенных учетных записей, и я пытаюсь сопоставить этот список со списком людей в "Уволенных сотрудниках", а затем вернуть в файл CSV учетные записи, которые находятся в этом списке, а не в группе ". Уволенные сотрудники ".
Также обратите внимание, что нам нужно обойти ограничение Get-ADGroupMember
так как в этой группе более 5000 членов.
$ADGroupName = "Terminated Employees"
$users = Get-Content C:\Shortcuts\users.txt
$InputPath= "C:\Scripts\T_Accounts.csv"
$a = @(Get-ADGroup $ADGroupName | Select-Object -ExpandProperty Member)
foreach ($user in $users) {
if ($a -contains $user) {
"Member found"
} else {
$SplitStep1 = ($Member -split ",",2)[0]
$SplitStep2 = ($SplitStep1 -split "=",2)[1]
$SplitStep2 = $SplitStep2 | Out-File -Append $InputPath
}
}
foreach ($value in (Get-Content $InputPath)) {
$b = Get-ADUser -Identity $value -Properties DisplayName, sAMAccountName, LastLogonDate, Enabled
}
2 ответа
Я предлагаю использовать Import-Csv
а также Export-Csv
Командлеты для обработки входных и выходных файлов. И если мы ищем отключенные учетные записи пользователей, которые являются членами определенной группы, входной файл вообще не нужен. Как насчет этого oneliner:
Get-ADGroup "Terminated Employees" -Properties Members |
Select-Object -ExpandProperty Members |
Get-ADUser -Properties Enabled, Displayname, LastLogonDate |
Where-Object {$_.Enabled -eq $false} |
Select-Object DisplayName, SamAccountName, LastLogonDate, Enabled |
Export-Csv outfile.txt
Изменить: должен был усвоить оригинальный вопрос, прежде чем спешить, чтобы ответить. Я думаю, что самый простой способ - создать два набора пользователей и сравнить их, экспортируя результаты в файл CSV.
$disabledusers = Get-Aduser -filter "Enabled -eq '$false'" -properties
DisplayName, SamAccountName, LastLogonDate, Enabled | select DisplayName,
SamAccountName, LastLogonDate, Enabled
$groupmembers = Get-ADGroup "Terminated Employees" -Properties Members|
Select-Object -ExpandProperty Members | Get-ADUser -Properties DisplayName,
sAMAccountName, LastLogonDate, Enabled | select DisplayName, SamAccountName,
LastLogonDate, Enabled
Compare-Object $groupmembers $disabledusers -Property enabled -PassThru |
?{$_.sideindicator -eq "=>"} | select DisplayName, SamAccountName,
LastLogonDate, Enabled | export-csv outfile.txt
Вы не запрашиваете Members
свойство из ActiveDirectory в вашем Get-ADGroup
команда (также необходимо добавить s
в Members
в вашем Select-Object
;)).
$ADGroupName = "Terminated Employees"
$users = Get-Content C:\Shortcuts\users.txt
$InputPath= "C:\Scripts\T_Accounts.csv"
# Here we need to add the -Properties parameter to ask ActiveDirectory for the group Members
$a = @(Get-ADGroup -Identity $ADGroupName -Properties Members | Select-Object -ExpandProperty Members)
ForEach ($user in $users)
{
if ($a -contains $user)
{
"Member found"
}
else
{
$SplitStep1 = ($Member -split ",",2)[0]
$SplitStep2 = ($SplitStep1 -split "=",2)[1]
$SplitStep2 = $SplitStep2 | out-file -Append $InputPath
}
}
ForEach ($value in (Get-Content $InputPath))
{
$b = Get-ADUser -identity $value -Properties DisplayName, sAMAccountName, LastLogonDate, Enabled
}