尝试从使用Get-AdUser制作的对象的属性中查找用户的电子邮件
Get-ADUser -Filter {EmailAddress -eq $userobject.GivenName + '.' + $userobject.SurName + '@overflow.com'}
Get-ADUser:解析查询错误:'EmailAddress -eq $ userobject.GivenName +'。' + $ userobject.SurName + “ @ nfiindustries.com”错误消息:“不支持操作员:”位于 位置:“ 40”。在第1行:char:1 + Get-ADUser -Filter {EmailAddress -eq $ userobject.GivenName +'。 + $ u ...
答案 0 :(得分:1)
-Filter
的行为更像是一个字符串,即使使用所有花括号和Powershell样式的运算符很难使它看起来像一个脚本块,它也不是一个脚本块。因此,大多数适用于常规PowerShell脚本代码的语法对于过滤器都是无效的。
最好将其视为字符串。预先计算要过滤的任何值,这使所有操作都变得更加容易。
$email = $userobject.GivenName + '.' + $userobject.SurName + '@overflow.com'
Get-ADuser -Filter "EmailAddress -eq $email"
答案 1 :(得分:1)
要在尝试创建内联过滤器时,需要使用子表达式运算符$()
。这样一来,PowerShell便可以处理内部的所有内容,然后再将其传递给-Filter
参数。
Get-ADUser -Filter "EmailAddress -eq '$($userobject.GivenName + '.' + $userobject.SurName + '@overflow.com')'"
最终,一旦PowerShell执行其变量扩展和字符串插值,则过滤器应为Property -operator 'Value'
或Property -operator "Value"
。达到该条件的方式可能会有所不同。
如Tomalak's answer所述,-Filter
参数接受字符串值而不是脚本块。为什么命令创建者将({}
)列为文档中的首选语法是一个谜。由于它接受一个字符串,并且您很少希望字符串中的内容是文字,因此最好将过滤器用双引号引起来。然后在其中使用单引号。有时,复杂的过滤器会混合使用单引号和双引号,但是您只需要注意一个开头的报价会发现一个无意的结尾的报价。甚至需要多套引号的原因是因为-Filter
包含比较运算符,这些运算符期望这些运算符的右侧被加引号。如果您不混合使用引号类型,那么您将不得不想出更多创造性的方法来绕过插值。有关此行为的一些示例,请参见下文。请注意,在转义时使用外部双引号... 和在外部使用双引号和在内部使用单引号方案是使-Filter
收到所需内容的方案。字符串外的单引号不允许变量扩展($str
实际上是$ str)。
双引号:
PS> "string with double quotes"
string with double quotes
单引号:
PS> 'single quotes'
single quotes
外部双引号和内部单引号:
PS> "outside doubles 'inside singles'"
outside doubles 'inside singles'
内部和外部双引号:
PS> "double "double quotes""
At line:1 char:10
+ "double "double quotes""
+ ~~~~~~
Unexpected token 'double' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
With all that said, it is just more readable to do your string building outside of the filter first.
外部单引号和内部双引号:
PS> 'outside singles "inside doubles"'
outside singles "inside doubles"
外部双引号,内部带有单引号变量:
PS> $str = "variable string"
PS> "outside doubles single variable '$str'"
outside doubles single variable 'variable string'
外部单引号和内部双引号变量:
PS> 'outside singles double variable "$str"'
outside singles double variable "$str"
在外部使用双引号,而在内部使用双引号:
PS> "fancy escaping with variable ""$str"""
fancy escaping with variable "variable string"
PS> "fancy escaping with variable `"$str`""
fancy escaping with variable "variable string"