1

我正在尝试使用 PowerShell 在 AD 中搜索组名称。

为什么这些都不起作用,参数Read-Host?两者都在传递字符串,但结果为空。$ADGroup但是,如果我用实际的组名(字符串)替换命令中的变量并运行命令Get-ADGroup...结果,则会按预期提供。我尝试用单引号替换双引号,得到了相同的结果,该命令单独工作,但参数Read-Host参数均不提供信息。我无法弄清楚为什么当它是一个变量($ADGroup)时字符串没有被传递。谢谢。

param(
    [Parameter(Mandatory=$true)]
    [string]$ADGroup
)

# One or the other param or Read-Host

$ADGroup = Read-Host "Enter Group Name"

PS \> Get-ADGroup -Filter {name -like "*$ADGroup*"} -Properties * | Select-Object -Property Name

Get-ADGroup -Filter {name -like '*GroupName*'} -Properties * | Select-Object -Property Name

Name                                     
----                                     
Results
Results
Results
Results
Results
4

2 回答 2

2

这是建议在ActiveDirectory 模块的 cmdlet 上使用基于脚本块的过滤器 ( )的原因之一。-Filter {...}

ActiveDirectory 模块的cmdlet-Filter参数部分Get-*说明如下:

-Filter

指定检索 Active Directory 对象的查询字符串。此字符串使用PowerShell 表达式语言语法。PowerShell 表达式语言语法为 Filter 参数接收的值类型提供了丰富的类型转换支持。该语法使用有序表示,这意味着运算符位于操作数和值之间。

  • 查询字符串
Get-ADGroup -Filter "name -like '*$ADGroup*'"
  • LDAP 查询字符串
Get-ADGroup -LDAPFilter "(name=*$ADGroup*)"

高效过滤的推荐文档:


注意:值得一提的是,在查询 Active Directory 时,您将只想从 AD 对象中检索所需的属性,特别是在查询大域/森林时使用-Properties *是一种不好的做法,而且效率也很低,这会减慢您的查询速度,因为它正在检索被查询对象的所有可用属性。

于 2021-11-26T14:56:33.633 回答
0

也许它无法将其识别为字符串或过滤器不正确。

 param(
            [Parameter(Mandatory=$true)]
            [string]$ADGroup
            )
#one or the other param or read-host
$ADGroup = Read-Host "enter group name"
$ADGroup = $ADGroup.ToString()
Get-ADGroup -Filter {name -like "*$ADGroup*"} -Properties * | select -Property Name

或者这应该这样做..

$ADGroup = $ADGroup.ToString()
Get-ADGroup -Filter {name -like "*$ADGroup*"} -Properties * | Select-Object -expandProperty Name

于 2021-11-26T15:01:28.463 回答