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