Причина, по которой ваше условие для активных пользователей ничего не возвращает, заключается в том, что Get-ADuser
не получает свойство Enabled
по умолчанию.Вам необходимо указать его, используя -Properties Enabled
в вашем Get-ADUser
. Есть несколько способов сравнить ваш testlist.txt
с ADUsers.Если вы используете Get-ADUser
, если учетная запись не существует, это не приведет к ошибке.Вместо этого он просто ничего не вернет.
Вместо использования try{}catch{}
я бы использовал условие, которое проверяет длину результатов.
Кроме того, вы уже вызываете Get-ADUser
в начале вашего foreach{} loop
.Больше нет необходимости вызывать его еще ниже: $userstatus = get-ADUser $user | Select-Object -Property enabled
.
Вот простой и грязный способ проверки, существует ли пользователь в AD, затем проверка статуса:
$importedList = Get-Content -Path C:\temp\log1.txt
foreach($object in $importedList)
{
$user = Get-ADUser -Filter {SamAccountName -eq $object} -Properties SamAccountName, enabled | Select Samaccountname, enabled
if($user.Length -eq 0)
{
Write-Host $object " does not exist" -ForegroundColor Red
}
else
{
Write-Host $user
}
}
Я лично предпочел бы собрать все это в array
.Таким образом, я могу использовать его позже, если захочу.Пример:
$importedList = Get-Content -Path C:\temp\log1.txt
$userResults = @() #define the empty array
foreach($object in $importedList)
{
$user = Get-ADUser -Filter {SamAccountName -eq $object} -Properties SamAccountName, enabled | Select Samaccountname, enabled
if($user.Length -eq 0)
{
$exists = $false
$enabled = "NA"
}
else
{
$exists = $true
$enabled = $user.Enabled
}
$userResult = New-Object PSObject -Property @{
Account = $object
Exists = $exists
Enabled = $enabled
}
$userResults += $userResult
}
$userResults
Это позволит вам сделать что-то вроде:
$userResults | Where-Object {$_.Enabled -eq $true} #Get all enabled users
$userResults | Export-csv UserResults.Csv -NoTypeInformation #export to csv