powershell - 将变量的原始内容粘贴到另一个命令的过滤器中
问题描述
我有多个重复的代码行,其中只有“办公室”名称应该不同,但$paste变量中的标准应该相同。
$paste = "extensionAttribute -eq 123"
$users1 = get-aduser -Properties canonicalName -filter {(office -like "ROFL") -and ( $paste )}
$users2 = get-aduser -Properties canonicalName -filter {(office -like "BOFL") -and ( $paste )}
当我尝试这样做(插入$paste变量的内容)时,我收到了这种错误:
get-aduser : Error parsing query: '(office -like "ROFL") -and ( $paste )' Error Message: 'syntax error'
at position: '47'.
At line:1 char:10
+ $users = get-aduser -Properties canonicalName...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ParserError: (:) [Get-ADUser], ADFilterParsingException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADFilterParsingException,Microsoft.ActiveDirectory.Management.Commands.GetADUser
当我只需要更改部分标准时,如何避免每次插入此手册?
解决方案
使用可扩展字符串( "..."
),而不是脚本块 ( { ... }
)
-Filter "(office -like 'ROFL') -and ( $paste )"
顺便说一句:由于'ROFL'
不是通配符表达式,因此使用-like
over没有任何好处-eq
。
这样,AD 提供者最终会看到以下过滤器,它应该可以按预期工作:(office -like 'ROFL') -and ( extensionAttribute -eq 123 )
至于你尝试了什么:
{ ... }
使用带有 AD cmdlet参数的脚本块 ( )-Filter
很普遍,但在概念上存在问题:请参阅此答案。
简而言之:-Filter
参数是string类型的,当你传递一个script block时,它的逐字内容- 不包括{
an }
- 被传递。
也就是说,在您的尝试中,AD 提供程序将以下字符串逐字-Filter
视为参数: - 这个字符串显然在语法上不正确,因为您想要预先扩展(插值)的变量没有扩展。(office -like "ROFL") -and ( $paste )
$paste
使用时-Filter
,请务必记住:
你总是会传递一个字符串作为参数;如果你传递一个脚本块,
.ToString()
首先调用它,产生它的逐字内容。使用脚本块可能会给人一种错误的印象,即您可以将任意 PowerShell 表达式作为过滤器传递,这是不正确的:
虽然参数支持的表达式语言类似于
-Filter
PowerShell ,但它仅支持有限的运算符子集,并且受支持的运算符的部分行为与其 PowerShell 对应物不同- 再次,请参阅此答案。最显着的限制是您只能使用简单的变量引用(在使用隐式远程处理时甚至不能使用),而不是基于变量的表达式,例如属性访问;例如,您可以
$var
在过滤器中使用,但不能使用$var.Foo
- 在这种情况下使用辅助变量。
推荐阅读
- docker - 无法在 AWS Lambda 容器中启动 Chromium,但可以在本地运行
- html - 如何在前两页使用(document.referrer)?
- google-sheets - 通过单个公式对每一行求和
- python - 我该如何解决这个问题?Python cantools关于id的关键错误
- git - 如何使分叉项目保持最新?
- python - “从 keras.utils 导入 to_categorical”中的错误
- reactjs - 移动 Draggable 时,列表顶部会出现很大的间隙,并且会奇怪地移动所有内容(React Beautiful DND)
- android - 使用光标时出现空指针异常
- html - 下拉菜单不是 100% 可见
- python - 如何更改函数内部变量的值以及调用函数时要返回的值?