需要 powershell 脚本来检查用户是否仍在 Active Directory 中

问题描述 投票:0回答:1

我从公司的 Duo 管理门户下载了一个包含超过 4000 个“非活跃用户”的 CSV 文件。

我正在尝试编写一个可以导出结果的 PowerShell 脚本,如下所示:

  • 对于仍在 Active Directory 中找到的用户 = 用户 - 电子邮件 - 已启用
  • 对于在 Active Directory 中找不到的用户 = 用户“未找到。”

我想出的最接近的代码是:

$InputFile = C:\Users\name\desktop\TestingSample1.csv
$CheckADUser = Import-CSV $InputFile | ForEachObject {GetADUser -f "samAccountName -eq $($_.)"}
$OutputFile = C:\Users\name\desktop\DuoInactiveUser.csv

$Result = 
if ($CheckADUser -ne $null) {
-Properties samAccountName,mail,enabled | select @{name= '$DuoInactiveUsers.Username';expression= {$_.samAccountName}},@{name= '$DuoInactiveUsers.Email';expression={$_.mail}},@{name= 'DuoInactiveUsers.Enabled';expression={$_.Enabled}}}
else {
@{name= 'DuoInactiveUsers.Username';expression="{$_.samAccountName} not found!"

$Result | Export-CSV $OutputFile -Append

我遇到的问题是:

  1. 导出的 CSV 中并非所有列出的用户名都采用 samAccountName 格式。有些是登录名格式。
  2. 我不断收到错误“ObjectNotFound: ((name):ADUser) [Get-ADUser], ADIdentityNotFoundException”,而不是生成 else 语句。

我尝试查找错误以找到解决问题的方法,并找到了一些选项,但它们似乎都不起作用。

我尝试捕获错误,但我的工作配置文件没有权限添加我在其他地方找到的应该可以工作的 PowerShell 模块。

powershell active-directory duosecurity
1个回答
0
投票

您当前的代码有许多语法错误,撇开这一点不谈,如果您的 CSV 值可以有

samAccountName
UserPrincipalName
,您可以更改过滤器以针对这两种可能性。我添加了一些内联注释来帮助您理解代码的逻辑。需要注意的重要一点是,似乎您正在尝试根据是否找到用户来拥有动态属性,这对于
Export-Csv
来说是不可能的,您必须创建统一的对象(具有相同结构的对象,相同的属性名称)否则您将丢失数据。

$InputFile = 'C:\Users\name\desktop\TestingSample1.csv'
Import-Csv $InputFile | ForEach-Object {
    $value = $_.Username
    # if the CSV has an empty value here,
    if ([string]::IsNullOrWhiteSpace($value)) {
        # this is the only way to make the LDAPFilter throw an error
        # we must skip, go next..
        return
    }

    $getADUserSplat = @{
        LDAPFilter = "(|(samAccountName=$value)(userPrincipalName=$value))"
        Properties = 'mail'
    }

    $user = Get-ADUser @getADUserSplat
    $status = 'Found'

    # if the user was not found in AD
    if (-not $user) {
        # use the value we have from the CSV here
        $samAccountName = $_.Username
        $status = 'Not Found'
    }

    # `$user.Enabled` and `$user.Mail` will be null if the user was not found
    # we don't need to worry about those

    [pscustomobject]@{
        SamAccountName = $samAccountName
        Status         = $status
        Enabled        = $user.Enabled
        Mail           = $user.Mail
    }
} | Export-Csv 'C:\Users\name\desktop\DuoInactiveUser.csv' -NoTypeInformation
© www.soinside.com 2019 - 2024. All rights reserved.