【发布时间】:2016-05-12 09:59:25
【问题描述】:
我在使用 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 字符:14 + 获取 ADObject
【问题讨论】:
-
-Filter期望 either 字符串或 ScriptBlock - 不是字符串中的 ScriptBlock 定义。$filter = {SamAccountName -like "$($entry.username)"}就够了,不用加引号 -
啊,这是否意味着即使做出您建议的更改也是不可能的,因为 -Filter 期望看到什么?
-
啊,好吧,如果我去掉外部引号,那么我会得到 SamAccountName -like "$($entry.username)" ,它适用于脚本,但当然不会给我任何结果:)
-
不,像我的例子一样保留
{} -
抱歉,一旦我删除“”并运行脚本以输出 $Filter 它只是将命令作为结果返回给我,而不是像这样输入来自 CSV 的输出: SamAccountName -like "$ ($entry.username)" SamAccountName -like "$($entry.username)" SamAccountName -like "$($entry.username)" SamAccountName -like "$($entry.username)"
标签: powershell active-directory