gpt4 book ai didi

Powershell 表达式没有给出结果

转载 作者:行者123 更新时间:2023-12-03 08:14:05 25 4
gpt4 key购买 nike

我创建了一个应返回 OU 规范名称的表达式。一个小轮廓:

@(Search-ADAccount -LockedOut -UsersOnly) | Select-Object Name,SamAccountName,@{Name="OU";Expression={((Get-ADOrganizationalUnit -Identity $($_."DistinguishedName")).CanonicalName)}}

但是,此表达式返回一个空 OU 列,其他 2 列已填充。

我的问题是这个表达式有什么问题?如有任何反馈,我们将不胜感激。

谨致问候,毒刺飞行员

最佳答案

计算属性的故障排除技术:

存储在定义calculated property的哈希表的Expression条目中的脚本 block :

  • 在相对于调用者作用域的作用域中运行。

  • 更重要的是,它悄悄地忽略发生的任何错误

但是,此类错误记录在automatic $Error variable中,因此要诊断您的问题,您可以执行以下操作:

$Error.Clear()

Search-ADAccount -LockedOut -UsersOnly |
Select-Object Name, SamAccountName, @{Name="OU";Expression={(Get-ADOrganizationalUnit -Identity $_.DistinguishedName).CanonicalName}}

$Error # Output the errors that occurred inside the calculated property's script block.

您的具体问题的解决方案:

Santiago Squarzon's helpful answer解释说,您需要从用户中提取OU的专有名称(DN),并将前者传递给Get-ADOrganizationalUnit -Identity

虽然 $_.DistinguishedName.Split(',',2)[1] 从用户的 DN 中删除第一个 , 分隔的标记,但 通常可以工作,但对于使用转义 , 字符的 DN,它可能会失败。 (\,) 将被视为值的一部分;例如:

# !! Simple splitting by the first "," is NOT enough here:
PS> 'CN=Martin Luther King\, Jr.,OU=Ministry,DC=example,DC=org'.Split(',',2)[1]

Jr.,OU=Ministry,DC=example,DC=org # !! WRONG - split at the *escaped* ","

为了同时处理这些边缘情况,即从用户的 DN 中稳健地提取 OU 的 DN,需要使用复杂的 regex是必需的,与 -replace operator 结合使用:

# OK: The regex correctly recognizes the escaped \, as such.
PS> 'CN=Martin Luther King\, Jr.,OU=Ministry,DC=example,DC=org' -replace '^.+?((?<=[^\\])(?:\\\\)*),'

OU=Ministry,DC=example,DC=org # OK

把它们放在一起:

Search-ADAccount -LockedOut -UsersOnly | 
Select-Object Name,
SamAccountName,
@{
Name = 'OU'
Expression = {
(Get-ADOrganizationalUnit -Identity ($_.DistinguishedName -replace '^.+?((?<=[^\\])(?:\\\\)*),')).CanonicalName
}
}

关于Powershell 表达式没有给出结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69981152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com