我正在尝试生成特定PDL拥有的计算机列表,但我遇到了一些语法问题:
$group = Get-ADGroupMember -Identity "pdl" | Select-Object -ExpandProperty DistinguishedName
Foreach($item in $group) { Get-ADComputer -Filter "ManagedBy -eq "$item"" -Property managedby | Select Name }
第二部分基于我在其他地方找到的另一个代码片段(我认为在StackOverflow上也是如此),它运行得很好:
Get-ADComputer -Filter "ManagedBy -eq 'CN=user@company.com,OU=US,OU=Users,OU=Accounts,DC=americas,DC=company,DC=com'" -Property ManagedBy
但区别在于我可以在这个中使用'',但添加$ item会阻止我使用它。
我使用第一个代码段返回的语法错误:
Get-ADComputer : A positional parameter cannot be found that accepts argument 'CN=user@company.com,OU=US,OU=Users,OU=Accounts,DC=americas,DC=company,DC=com'.
At D:\Documents\Scripts\uatgroup.ps1:2 char:31
+ Foreach($item in $UATgroup) { Get-ADComputer -Filter "ManagedBy -eq "$item"" -Pr ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-ADComputer], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.ActiveDirectory.Management.Commands.GetADComputer
有人知道修复语法的方法吗?或者另一种运行方法吗?
答案 0 :(得分:0)
此:
"ManagedBy -eq "$item""
被解析为三个单独的字符串。只有第一个(ManagedBy -eq
)绑定到-Filter
参数,其余的将被视为单独的令牌,导致PowerShell抱怨您不能保留字符串{{1在所有事物的中间。
您可以在双引号字符串中使用单引号,以避免提前终止字符串:
CN=...
使用反引号(Get-ADComputer -Filter "ManagedBy -eq '$item'"
)转义内联双引号:
`
或者通过加倍来逃避它们:
Get-ADComputer -Filter "ManagedBy -eq `"$item`""