gpt4 book ai didi

search - Active Directory Powershell - 使用 .csv 用户列表的林范围搜索脚本

转载 作者:行者123 更新时间:2023-12-02 23:45:37 25 4
gpt4 key购买 nike

我正在寻求一些帮助,希望没有人会因为我无知而抨击我。
不久前,我成为了一名 AD 管理员,组织很大,所以任务各不相同。在大多数情况下,我可以通过 Powershell 或管理单元轻松完成我需要的工作。
但是,我手上的任务超出了我的“创造力”。我在 .csv 中有超过 10 000 个用户的列表,如果存在,我需要在本地 AD 中查找。我的两个问题是:
-我对脚本非常陌生,并且越来越沮丧,因为我无法理解它并使我的脚本按照我的需要工作
-这项任务和其他职责的截止日期让我没有时间阅读更多关于脚本基础知识和学习的信息。因此,在大多数情况下,我不得不在网络上寻找脚本片段并对其进行一些修改以满足我的需要。到目前为止,这一直有效,因为我手头上的脚本对我来说有点太复杂了。

到目前为止,我面临的最大问题是创建森林范围的搜索。我的组织有一个根域和 4 个子域。当运行一个简单的 foreach 循环时,如下所示:

ForEach ($User in (Import-Csv c:\users\public\users.csv))
{ If (Get-ADUser $User.mail -server GLOBALCATALOGADDRESS:xxxx)
{ Write-Host "User found: $($User.mail)"
}
Else
{ Write-Host "User not found: $($User.mail)"
}
}

它仅搜索我的计算机连接到的域。
所以我设法找到并修改了一个森林范围的搜索脚本,并想出了以下内容:
     #Get Domain List
$objForest = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()
$DomainList = @($objForest.Domains | Select-Object Name)
$Domains = $DomainList | foreach {$_.Name}
$User = Import-CSV c:\users\public\users.csv
#Act on each domain
foreach($Domain in ($Domains))
{
Write-Host "Checking $Domain" -fore red
$ADsPath = [ADSI]"LDAP://$Domain"
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher($ADsPath)
#The filter
Foreach($mail in($User))
{
$objSearcher.Filter = "(&(objectCategory=user)(mail=$User.mail))"
$objSearcher.SearchScope = "Subtree"

$colResults = $objSearcher.FindAll()

foreach ($objResult in $colResults)
{
$objArray = $objResult.GetDirectoryEntry()
write-host $objArray.mail
}
}
}

该脚本的原始形式似乎很好(在此处找到: http://powershell.nicoh.me/powershell-1/active-directory/forest-wide-object-searches),并且使用通配符和单个参数作为过滤器进行了很好的搜索。
但是,我不知道我缺少什么让它搜索我在 .csv 中拥有的每个电子邮件地址,并让它返回信息,无论是否找到了使用此类邮件的用户。
脚本本身运行,但考虑到它所花费的时间和空白输出,感觉就像它只搜索一个用户。我 100% 确定列表中至少有一个用户存在于本地 AD 中。
任何建议都非常受欢迎。
感谢您的关注。

[编辑]
最终脚本:
#Get Domain List and load user e-mails from file
$objForest = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()
$DomainList = @($objForest.Domains | Select-Object Name)
$Domains = $DomainList | foreach {$_.Name}
$Users = Import-CSV c:\users\public\users.csv
#Act on each domain
foreach($Domain in ($Domains))
{
Write-Host "Checking $Domain" -fore red
Foreach($mail in ($Users.mail))
{
Get-ADUser -filter {mail -eq $mail} -Server $domain -properties mail | select mail
}
}

最佳答案

帮自己一个忙,下载 AD Powershell 模块:http://blogs.msdn.com/b/rkramesh/archive/2012/01/17/how-to-add-active-directory-module-in-powershell-in-windows-7.aspx

然后,您将能够简化代码并运行类似这样的操作,从而使您的任务更加清晰:



...
foreach($Domain in ($Domains))
{
Write-Host "Checking $Domain" -fore red
Foreach($mail in ($User.mail))
{
Get-ADUser -filter {mail -eq $mail} -Server $domain -Properties mail |
select-object -ExpandProperty mail
}
}
...

有关 AD PS cmdlet 的更多信息: http://technet.microsoft.com/en-us/library/ee617195.aspx

关于search - Active Directory Powershell - 使用 .csv 用户列表的林范围搜索脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23754987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com