我正在尝试找到一些在 PowerShell 中灵活更改/替换管道元素的方法:
Function Where-DirectlyReportsTo {
Param (
[Parameter(
ValueFromPipeline = $true,
HelpMessage = "The ADUser object to be tested"
)]
[Microsoft.ActiveDirectory.Management.ADUser] $ADUser,
[Parameter(
Mandatory = $true,
ValueFromPipeline = $false,
Position = 0
)]
[String] $mgrDN
)
Process {
If ($ADUser) {
If ($ADUser.Manager -eq $mgrDN) { Return $ADUser }
}
}
}
$Properties = @("Manager")
$users = Get-ADUser -Filter * -SearchBase $OU -Properties $Properties
[ScriptBlock] $sb = {Where-DirectlyReportsTo "CN=Colonel Foobar,$OU"}
$DNs = $users | $sb | %{$_.DistinguishedName}
我想返回向 Foobar 上校报告的所有用户的 DN,但它给了我错误Expressions are only allowed as the first element of a pipeline.
这是一个简单的例子,但我最终希望能够将管道步骤放入循环中并传递不同的 ScriptBlocks 以获取不同的用户集,或者使用更复杂的 ScriptBlocks(例如:){Where-IsEmployee | Where-IsInDepartment "Finance" | Where-LikesIceCream}
。
我意识到我可能做错了,我非常感谢被指出正确的方向。
编辑:为了澄清,这里是我想要完成的大致轮廓:
[ScriptBlock[]] $arrBlocks = @( # lots of different cases
)
ForEach ($sb In $arrBlocks) {
$DNs = $users | $sb | %{$_.DistinguishedName}
# Then do something with the DNs
}
实际上,这可能涉及哈希表而不是数组,因此我知道如何处理每组结果。