在 Get-ADGroup 中用变量替换字符串

Replacing a string with a variable in Get-ADGroup

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

为什么 paramRead-Host 这些都不起作用?两者都在传递字符串,但结果为空。但是,如果我将命令中的变量 $ADGroup 替换为实际的组名( 字符串 )和 运行,则会提供命令 Get-ADGroup... 结果正如预期的那样。我尝试用单引号替换双引号,结果相同,该命令单独运行,但 Read-Hostparam 均未提供信息。我不明白为什么字符串是变量时没有被传递 ($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

这就是为什么在 ActiveDirectory Module 的 cmdlet 上使用基于 脚本块 的过滤器 (-Filter {...}) 的原因之一是 推荐。

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

-Filter

Specifies a query string that retrieves Active Directory objects. This string uses the PowerShell Expression Language syntax. The PowerShell Expression Language syntax provides rich type-conversion support for value types received by the Filter parameter. The syntax uses an in-order representation, which means that the operator is placed between the operand and the value.

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

高效过滤的推荐文档:


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

可能没有识别为字符串,或者过滤器不正确。

 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