在 Powershell Get-ADUser -Filter 中使用变量
Using Variables in Powershell Get-ADUser -Filter
有人可以帮助我正确引用,我需要 Get-ADUser -Filter 搜索中名字和姓氏变量旁边的通配符
我想我需要转义单引号但无法成功 return。
$LastADname = John
$FistADname = Doe
Get-ADUser -Filter "Name -like `*$LastADname`*$FirstADname`*"
Returns: Get-ADUser : Error parsing query: 'Name -like *Doe*John*' Error Message: 'syntax error' at position 12
这让我知道它确实解析了变量而不是 *。如果我用单引号将所有变量和 * 括起来,它不会解析变量。喜欢下面
$LastADname = John
$FistADname = Doe
Get-ADUser -Filter 'Name -like "*$LastADname*$FirstADname*"'
我相信这是因为上面解决了但没有产生任何值。当我将 var 替换为文本时,它会产生结果
Get-ADUser -Filter 'Name -like "*Doe*John*"'
您需要用单引号将内部过滤器字符串括起来:
Get-ADUser -Filter "Name -like '*$LastADname*$FirstADname*'"
您不需要 `
来转义 *
字符。用单引号 '
包裹外部字符串的第二次尝试没有成功,因为单引号字符串是按字面意思呈现的。双引号 "
字符串允许您扩展变量,使用带有 `
的转义序列,以及字符串中的 return 子表达式。
但是,如果目标字段值包含 '
(或者可能包含,如果由变量控制),例如名称 O'Niel
,这将中断内部查询,因为'
将被解析为搜索词的结尾,并会导致错误,因为接下来的内容几乎肯定不是有效的表达式语法。幸运的是,转义引号很容易,您无需担心使用 `
字符进行转义。
考虑以下示例,我们要查找名称字段包含 O'
字符串的所有用户,就像上面的 O'Niel
示例一样。在此示例中,搜索词提供了一个变量,就像在 OP 的用例中一样。只需为 -Filter
字符串使用双引号,并为内部引号也提供 ""
(这与 `"
呈现相同):
$term = "O'Niel"
Get-ADUser -Filter "Name -like ""*$term*"""
这不会破坏内部查询,因为现在 "
表示术语边界而不是 '
。
Note: If your search term contains "
, you will need to escape instead for that. If your search term contains both '
and "
, you can't use -Filter
to search for that specific term. However, you can utilize -LDAPFilter
for this since quotes are not used as the search term bounds.
当您搜索 return 和 DistinguishedName
的字段时,事情会得到 bit more complicated,但我不会用这些细节来混淆这个答案。阅读上面的 link 以获取更多信息,我最终会在底部更新我的 linked 答案,其中包含有关转义序列和 DN/CN 过滤的更多信息。
请参阅我写的 以获取有关通过 RSAT AD cmdlet 有效使用 -Filter
参数的更多信息。我已经用关于过滤器转义和处理“带引号的名称”案例的更完整信息更新了该答案。
有人可以帮助我正确引用,我需要 Get-ADUser -Filter 搜索中名字和姓氏变量旁边的通配符
我想我需要转义单引号但无法成功 return。
$LastADname = John
$FistADname = Doe
Get-ADUser -Filter "Name -like `*$LastADname`*$FirstADname`*"
Returns: Get-ADUser : Error parsing query: 'Name -like *Doe*John*' Error Message: 'syntax error' at position 12
这让我知道它确实解析了变量而不是 *。如果我用单引号将所有变量和 * 括起来,它不会解析变量。喜欢下面
$LastADname = John
$FistADname = Doe
Get-ADUser -Filter 'Name -like "*$LastADname*$FirstADname*"'
我相信这是因为上面解决了但没有产生任何值。当我将 var 替换为文本时,它会产生结果
Get-ADUser -Filter 'Name -like "*Doe*John*"'
您需要用单引号将内部过滤器字符串括起来:
Get-ADUser -Filter "Name -like '*$LastADname*$FirstADname*'"
您不需要 `
来转义 *
字符。用单引号 '
包裹外部字符串的第二次尝试没有成功,因为单引号字符串是按字面意思呈现的。双引号 "
字符串允许您扩展变量,使用带有 `
的转义序列,以及字符串中的 return 子表达式。
但是,如果目标字段值包含 '
(或者可能包含,如果由变量控制),例如名称 O'Niel
,这将中断内部查询,因为'
将被解析为搜索词的结尾,并会导致错误,因为接下来的内容几乎肯定不是有效的表达式语法。幸运的是,转义引号很容易,您无需担心使用 `
字符进行转义。
考虑以下示例,我们要查找名称字段包含 O'
字符串的所有用户,就像上面的 O'Niel
示例一样。在此示例中,搜索词提供了一个变量,就像在 OP 的用例中一样。只需为 -Filter
字符串使用双引号,并为内部引号也提供 ""
(这与 `"
呈现相同):
$term = "O'Niel"
Get-ADUser -Filter "Name -like ""*$term*"""
这不会破坏内部查询,因为现在 "
表示术语边界而不是 '
。
Note: If your search term contains
"
, you will need to escape instead for that. If your search term contains both'
and"
, you can't use-Filter
to search for that specific term. However, you can utilize-LDAPFilter
for this since quotes are not used as the search term bounds.
当您搜索 return 和 DistinguishedName
的字段时,事情会得到 bit more complicated,但我不会用这些细节来混淆这个答案。阅读上面的 link 以获取更多信息,我最终会在底部更新我的 linked 答案,其中包含有关转义序列和 DN/CN 过滤的更多信息。
请参阅我写的 -Filter
参数的更多信息。我已经用关于过滤器转义和处理“带引号的名称”案例的更完整信息更新了该答案。