你能告诉我这个代码有什么问题吗?
$SearchUser.Add_Click(
{
$Output.text =
Get-AdUser -Filter "Surname -like $entry" |
select name, samaccountname
}
)
我不断得到这个错误:
Get-aduser : Error parsing query: 'Surname -like rondon' Error Message: 'syntax error' at position: '15'.
At line:50 char:11
+ $search = Get-aduser -Filter "Surname -like $entry" | select name, sa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ParserError: (:) [Get-ADUser], ADFilterParsingException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADFilterParsingExcepti
on,Microsoft.ActiveDirectory.Management.Commands.GetADUser
Filter在powershell中独立工作,但不通过窗体
1条答案
按热度按时间djmepvbi1#
tl;dr
您的
Get-ADUser
-Filter
参数格式不正确;用途:"Surname -like
"$entry""
(前置字符串插值,需要 * 嵌入引号 *)"..."
文字中;嵌入 expressions 或 commands 需要包含在$(...)
中,子表达式运算符,例如"Surname -like
"$($entry.Text)""
或"Surname -like
"$(Get-Entry)""
'Surname -like $entry'
(让AD提供程序评估变量,不要使用嵌入式引号)'Surname -like $entry.Text'
或子表达式(例如'Surname -like $(Get-EntryName)'
){ Surname -like $entry }
在实践中经常出现,但为了防止概念上的混淆,最好避免使用它-参见this answer。至于你尝试了:
-Filter "Surname -like $entry"
"..."
),即up-front string interpolation,$entry
的值按原样放置在结果字符串值中。$entry
包含逐字rondon
时,-Filter
参数接收的是逐字Surname -like rondon
,这会导致 syntax 错误,因为-like
运算符的RHS必须是 * 带引号的字符串 * 或 * 对PowerShell变量的引用 *。-Filter
参数需要PowerShell-like 的表达式,但它们不是 * PowerShell表达式,而是由Active Directory提供程序解释。-Filter
参数中支持的表达式语言比PowerShell支持的表达式语言要有限得多,并且在行为上表现出微妙而重要的差异。请再次参阅this answer了解背景信息。