Powershell проверит список пользователей домена - PullRequest
0 голосов
/ 05 октября 2018

У меня есть список SamAccountName для пользователей домена, теперь мне нужно проверить их статус: существует, включен или отключен.не мог заставить это работать хорошо.часть для проверки exist or not работает, но else часть не будет.Где я сделал не так?

$users = Get-Content -Path C:\temp\log1.txt
foreach ($user in $users) {
$userobj = $(try {Get-ADUser $user} catch {$Null})


If ($userobj -eq $Null) {

    Write-Host "$user not exists" -foregroundcolor "red"

} else {
    $userstatus = get-ADUser $user | Select-Object -Property enabled

    if ( $userstatus = True) {Write-host "$user Enabled" -foregroundcolor "green"}

    else {write-host " $user Disabled" -foregroundcolor "yellow"}

}}

Ответы [ 2 ]

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

Причина, по которой ваше условие для активных пользователей ничего не возвращает, заключается в том, что 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
0 голосов
/ 05 октября 2018

ОК, давайте поговорим о команде, которую вы отобразили.У вас есть 2 вопроса

$userstatus = get-ADUser $user | Select-Object -Property enabled

. Это вернет свойство и значение Enabled, вам нужно использовать -ExpandProperty , чтобы просто получить значение свойства

, а затем

if ( $userstatus = True)

= в powershell это -eq

$users = Get-Content -Path C:\temp\log1.txt
foreach ($user in $users) {
    $userobj = $(
        try {
            Get-ADUser $user
        }catch{
            $Null
        }
    )
    If($userobj -eq $Null) {
        Write-Host "$user not exists" -foregroundcolor "red"
    }else{
        $userstatus = get-ADUser $user | Select-Object -ExpandProperty enabled
        if ($userstatus -eq True){
            Write-host "$user Enabled" -foregroundcolor "green"
        }else{
            write-host " $user Disabled" -foregroundcolor "yellow"
        }
    }
}

Вот что я придумал, пытаясь сделать то же самое

Get-Content -Path C:\test\log1.txt | %{
    try{
        $user = $_
        $Status = Get-ADUser $_ -ErrorAction Ignore | Select-Object -ExpandProperty enabled
        If (!($Status)){
            Write-Host "$user Disabled" -foregroundcolor "yellow"
        }else{
            Write-Host "$user Enabled" -foregroundcolor "green"
        }
    }catch{
         Write-Host "$user not exists" -foregroundcolor "red"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...