我在使用AD模块的PowerShell中遇到了脚本问题。
我知道关于AD命令如何接收查询的一般经验法则,所以我写了这个脚本(我认为)将与这些指南一致。
$CSV=Import-Csv "c:\temp\deleteduserlist.csv"
foreach ($entry in $CSV)
{
$filter = "{SamAccountName -like ""$($entry.username)""}"
Get-ADObject -filter $filter
}
我基本上需要能够查询和恢复已删除的任何用户,但是它失败了:
错误消息:位置处的'语法错误':'1'
起初我通过过滤器发送单引号,如下所示:
{SamAccountName -like'xxx'“}
但是我现在已经解决了这个问题。
让我感到困惑的一件事是,我可以逐字地显示$ filter的结果,将它们手动复制到Get-ADObject -Filter(粘贴)并且它可以工作。因此我无法理解为什么Powershell不喜欢它..
整体错误:
Get-ADObject:解析查询时出错:'{SamAccountName -like“xxxx”}' 错误消息:位置处的'语法错误':'1'。在 C:\ temp \ GetDeleted.ps1:5 char:14 + Get-ADObject<<<< -filter $ filter + CategoryInfo:ParserError:(:) [Get-ADObject],ADFilterParsing异常 + FullyQualifiedErrorId:解析查询时出错:'{SamAccountName -like“xxx”}'错误消息:'语法错误'位置:'1'。,Microsoft.ActiveD irectory.Management.Commands.GetADObject
答案 0 :(得分:1)
这样做的一种方法是
$CSV=Import-Csv "c:\temp\deleteduserlist.csv"
foreach ($entry in $CSV) {
## Set username to entry from csv file
$directory_username = $entry.username
## Build search filter before using it, interested in username and deleted objects
$directory_filter = {(SamAccountName -like $directory_username) -and (Deleted -eq $true)}
## Search for ADObject based on filter and deleted objects explicitely included in the search
$directory_found_object = Get-ADObject -Filter $directory_filter -IncludeDeletedObjects -Properties sAMAccountName, Deleted
foreach ($directory_object in $directory_found_object) {
### Execute required action on each found $directory_object
### Perhaps pipe $directory_object | Restore-ADObject with appropriate attribute values for restore
}
}
$ directory_filter当然可以修改,以更好地满足您的需求。但是,您将面临的一个挑战仍然是确定应该恢复给定sAMAccountName的哪个找到的对象。这是因为任何给定的对象都可以多次处于删除状态。也许解决这个问题的一种方法是使用最新的WhenCreated属性值恢复对象。
此外,我不确定您事先建立过滤器的动机是什么。如果您在运行中内置不同的属性值,它可能很有用,但在您的示例中似乎不是这种情况。因此,为了简单起见,它也可以被删除并直接包含在Get-ADObject调用中,如此
$directory_found_object = Get-ADObject -Filter {(SamAccountName -like $directory_username) -and (Deleted -eq $true)} -IncludeDeletedObjects -Properties sAMAccountName, Deleted