如何检查 AD 用户名是否已被使用

如何检查 AD 用户名是否已被使用

提前感谢您的帮助。我在以下链接中找到了相关内容,但无法通过此处找到我正在寻找的解决方案。使用 Powershell 脚本检查域帐户的存在

我想要做的是从我正在运行的另一个脚本中已经生成到 CSV 文件中的列表获取用户名。

一旦我有了这些用户名 (sAMAccountname),我想检查该用户名是否已被使用。如果是,我希望显示它,也许通过 Echo,然后继续检查其他名称。如果不是,那么它应该继续检查其他名称。

这是我到目前为止所拥有的。(请记住,我是一个完全的 Powershell 新手,我只是在绝对需要的情况下才这样做)

Import-Module ActiveDirectory -ErrorAction Continue
$UserCSV = import-csv "\\fs1\DisasterRecovery\Source Controlled Items\WindowsPowerShell\Test scripts\Import Production Users\Users.csv"
$UserList = $UserCSV.sAMAccountname
foreach($User in $UserList)
{
if (Get-ADUser -Filter {sAMAccountname -eq $User} ) {
  # Exists
  #echo Already Exists
} else {
  SilentlyContinue
}
}

答案1

如果您使用的是 Powershell 3 或更高版本,则无需Import-Module ActiveDirectory。只要您使用该模块中的 cmdlet,PS 就会自动为您加载模块。使用$PSVersionTable可以确定,但我认为您使用的是 PS 3 或更高版本,因为您似乎在代码中使用了自动 foreach,而自动 foreach 直到 PS 3 才可用。

此外,如果模块加载失败,继续下去也没有意义,因为它对脚本的其余部分至关重要,所以-ErrorAction Continue也没有意义。我会删除整个第一行。

第二行 Import-CSV 没问题。$UserList变量似乎是多余的。从那里我可能会做这样的事情:

$UserCSV = Import-Csv C:\Users\Administrator\test.csv
Foreach ($User in $UserCSV)
{
    Try
    {
        # Use "EA Stop" to ensure the exception is caught.
        $U = Get-ADUser $User.sAMAccountName -ErrorAction Stop 
        Write-Host "$($User.SamAccountName) is already in use."
    }
    Catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]
    {
        # The user was not found!
        Write-Warning "$($User.SamAccountName) was not found in this domain!"
    }
    Catch
    {
        # Some other terrible error occured!
        Write-Error "OHSHI"
    }
}

答案2

我还没有测试过,但其结构更像是:

Import-Module ActiveDirectory -ErrorAction Continue
$UserCSV = import-csv "\\fs1\DisasterRecovery\Source Controlled Items\WindowsPowerShell\Test scripts\Import Production Users\Users.csv"

foreach($row in $UserCSV)
{
    $userAccount = Get-ADUser -Filter {sAMAccountname -eq $row.sAMAccountname}

    if ($userAccount) {
        Write-Host "User $($row.sAMAccountname) exists"
    }
}

答案3

我认为最好不仅测试用户的 sAMAccountname 是否存在,组也可以具有相同的 sAMAccountname。这可以通过使用来完成,Get-ADObject 这样不会抛出异常,但您可以自己抛出一个。

$sAMAccountname = "TestToTest"

if(@(Get-ADObject -Filter { sAMAccountname -eq $sAMAccountname }).Count -ge 1){
    Write-Host "$sAMAccountname exsists"
}else{
    Write-Host "$sAMAccountname doesn't exsist"
}

相关内容