如何从我的 Powershell 脚本中的 Get-ADUser 过滤器获取结果,以便验证该用户是不是存在?

Posted

技术标签:

【中文标题】如何从我的 Powershell 脚本中的 Get-ADUser 过滤器获取结果,以便验证该用户是不是存在?【英文标题】:How can I get results from Get-ADUser Filter in my Powershell script so I can validate if that user exists or not correctly?如何从我的 Powershell 脚本中的 Get-ADUser 过滤器获取结果,以便验证该用户是否存在? 【发布时间】:2022-01-20 11:04:14 【问题描述】:

已修复:如果 ($null -eq $FoundUser) 并且如果本质上 NULL -eq NULL,我确实必须更改该用户不存在。 . 对不起

我真的很想得到一些帮助,因为我一直在努力使用 Get-ADUser 来创建用户。

我正在使用 Powershell 7.0 - 7.2.1(目前是后者)并且在 VSCode 中遇到此问题并在“控制台”中运行它。我们有一个 2008 R2 森林,但有 2016 和 2019 DC。 本质上,“Get-ADUser -Filter”不返回任何值。我正在尝试对 if $null -ne $SamAccountName 使用 if 语句。

有什么想法吗? 我以为我找到了答案 here,但我没有运气。

$Users = Import-Csv -delimiter "`t" -Path "C:\Users\michel_m\Documents\Scripts\PowerShell\Staff\StaffData.txt"
    #$sam = ""
    #Generate data to use in creating user below
    foreach ($User in $Users) 

    $SAMAccount = $User.Username
    $Filter = "sAmAccountname -eq '$SamAccount'
    $FoundUser = Get-ADUser -Filter $Filter
    Write-Host "HERE IS" $FoundUser
    $results = $FoundUser.SamAccountName

    #if ($null -ne $FoundUser)
    if ($null -ne $results)
    
        Write-Host $results "Are the results"
        Write-Host $User "is the user"
        Write-Host $SAMAccount "Is the SAM user"
        Write-Host $FoundUser "Is the found user"
     #NewUser_Function
     ($Dates + " - " + $user.username + " has been created") | out-file -filepath $OutputFile1  -append
     
     #Write-Host "Pause 15 seconds"
     Start-Sleep 15
     Write-Host $user.username + " Has been created"
     $Body = $user.username + " Has been created"

     #schtasks.exe /run /s "OHDC01" /tn "GADS Sync - Users"
    
    else
    
        Write-Host $Filter
        Write-Host $results "Are the results"
        Write-Host $User "is the user"
        Write-Host $SAMAccount "Is the SAM user"
        Write-Host $FoundUser "Is the found user"
        Write-Host $null is null
     write-host $user.username + " already exists"
     ($Dates + " - " + $user.username + " already exists") | out-file -filepath $OutputFile2  -append
     $Body =  $user.username + " already exists",
                "\\OHDC01\C$\Scripts\StaffCreation\NewStaff\",
                "\\OHDC01\C$\Scripts\StaffCreation\NewStaff\"
    

输出

HERE IS 
sAmAccountname -like 'mangold_m' | Select-object SamAccountName
 Are the results
@FirstName=Michelle; LastName=Mangold; BuildingName=OAK; Position=Aide; Username=mangold_m; Email=mangold_m@Wonderfullife.org is the user
mangold_m Is the SAM user
 Is the found user
 is null
mangold_m +  already exists
HERE IS 
sAmAccountname -like 'metzner_m' | Select-object SamAccountName
 Are the results
@FirstName=Melissa; LastName=Metzner; BuildingName=OHHS; Position=Aide; Username=metzner_m; Email=metzner_m@Wonderfullife.org is the user
metzner_m Is the SAM user
 Is the found user
 is null
metzner_m +  already exists

【问题讨论】:

| Select-object SamAccountName" 绝对不应该在 $filter 变量上。你会想要使用-eq 而不是-like 对不起,它不应该有 -like 在那里。那时我正抓着稻草。 如果Get-ADUser 没有返回值,它就没有字段sAMAccountName。测试$founduser -eq $null 另外,请检查您的代码。如果您进行了简单的剪切粘贴,那么您在定义 $Filter 的行上会缺少结束 " 好的,我修好了! ...这些用户不存在,因此它们为空。抱歉 - 这是一种开/关类型的故障排除,在我发布的这项工作之前,之前的逻辑肯定不起作用。 【参考方案1】:

感谢您更新您的解决方案。

这里我也试过了,你也可以使用这个小的 PowerShell 脚本来验证用户的存在。

$Users = Import-Csv -Path "C:\Users\RahulShaw\test.csv"
 Foreach ($User in $Users)

$Username = $User.Username
$FoundUser = Get-ADUser -Filter "sAmAccountName -eq '$Username'"
$results = $FoundUser.SamAccountName
Write-Host $results
if($null -eq $FoundUser)
    write-host "Username '$Username' does not yet exist in active directory" 

else
 write-host "Username '$Username'  exist in active directory" 



【讨论】:

以上是关于如何从我的 Powershell 脚本中的 Get-ADUser 过滤器获取结果,以便验证该用户是不是存在?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Argument将路径文件作为输入数据获取到PowerShell中的其他脚本?

使用PowerShell脚本卸载谷歌浏览器

Powershell脚本没有使用mkdir函数创建文件夹

在没有Azure帐户的情况下安装Powershell for Azure

如何过滤 EventLog 以每天获取一个日志 - PowerShell

如何将变量从一个PowerShell脚本加载到另一个?