如何从我的 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中的其他脚本?
在没有Azure帐户的情况下安装Powershell for Azure