Завершено и не в группе

Я пытаюсь создать отчет для всех отключенных учетных записей, у которых нет группы "Прекращенные сотрудники", но создается впечатление, что отчет не создается. Ниже приведен код, который у меня есть на данный момент.

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
}
Другие вопросы по тегам