Powershell检查域用户状态列表

Powershell检查域用户状态列表,powershell,Powershell,我有一个域用户的SamAccountName列表,我现在需要检查他们的状态:存在、启用或禁用。不能让它正常工作。检查零件是否存在有效,但其他零件无效。我哪里做错了 $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 "

我有一个域用户的SamAccountName列表,我现在需要检查他们的状态:存在、启用或禁用。不能让它正常工作。检查
零件是否存在
有效,但
其他
零件无效。我哪里做错了

$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"}

}}

好,让我们谈谈您显示的命令。你有两个问题

$userstatus = get-ADUser $user | Select-Object -Property 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"
    }
}

启用用户的条件未返回任何内容的原因是默认情况下,
Get ADuser
未获取
enabled
属性。您需要在
Get ADUser
中使用
-Properties Enabled
来指定它

有几种方法可以将您的
testlist.txt
与Aduser进行比较。使用
Get ADUser
时,如果帐户不存在,则不会出错。相反,它不会返回任何东西

我将使用检查结果长度的条件,而不是使用
try{}catch{}

另外,您已经在
foreach{}循环开始时调用了
getaduser
。无需再往下调用它:
$userstatus=get ADUser$user |选择对象-启用属性

下面是一种检查用户是否存在于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
    }
}
就我个人而言,我更愿意将其全部放在
数组中
。这样,我可以在以后使用它,如果我想的话。例如:

$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

到底是什么不起作用?我不记得
已启用
是否是返回的默认属性的一部分。当您已经拥有
$userobj
时,为什么需要获取用户两次
$userstatus=get ADUser$user |选择对象-启用属性
$userstatus=get ADUser$user |选择对象-启用扩展属性
$userstatus=True
->
$userstatus-eq$True
或者如果($userstatus)
,只需
$userobj=$(尝试{Get ADUser$user}catch{$Null})
可以是
$userobj=Get ADUser$user-ErrorAction SilentlyContinue
您得到了什么错误