winforms Powershell窗体文本框值无效?

qyyhg6bp  于 2023-10-23  发布在  Shell
关注(0)|答案(1)|浏览(130)

你能告诉我这个代码有什么问题吗?

$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中独立工作,但不通过窗体

djmepvbi

djmepvbi1#

tl;dr

您的Get-ADUser-Filter参数格式不正确;用途:

  • Either"Surname -like"$entry""(前置字符串插值,需要 * 嵌入引号 *)
  • 注意:只有 * 独立 * 变量引用可以按原样嵌入到可扩展的"..."文字中;嵌入 expressionscommands 需要包含在$(...)中,子表达式运算符,例如"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"

  • 由于您使用的是 expandable(双引号)字符串("..."),即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了解背景信息。

相关问题