Powershell 表达式没有给出结果

2024-02-15

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

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

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

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

亲切的问候, 刺中飞行员


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

脚本块存储在Expression定义一个哈希表的条目计算属性 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Calculated_Properties:

  • 运行在child范围相对于调用者的范围。

  • 更重要的是,它静静地忽略任何错误发生的情况。

然而,这样的错误are记录在自动的$Error多变的 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Automatic_Variables#error,因此要诊断您的问题,您可以执行以下操作:

$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.

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

As Santiago Squarzon 的有用答案 https://stackoverflow.com/a/69989948/45375解释说,你需要提取OU的专有名称 (DN) 来自user's并将前者传递给Get-ADOrganizationalUnit -Identity.

While $_.DistinguishedName.Split(',',2)[1],这会删除第一个,-将令牌与用户的 DN 分开通常工作,它可能会因 DN 使用而失败escaped ,字符。 (\,) 将被视为值的一部分;例如。:

# !! 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* ","

还要处理这些边缘情况,即to robustly从用户的 OU 中提取 DN, 一个复杂的regex https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Regular_Expressions需要结合-replace操作员 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Comparison_Operators#replacement-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
                  }
                }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Powershell 表达式没有给出结果 的相关文章

随机推荐

  • 如何从 UUID 类型 1 获取日期/时间

    我已经包含了以下 UUID 库 compile group com fasterxml uuid name java uuid generator version 3 1 5 在我的构建中 我有一些这样的代码 NoArgGenerator
  • 将设备添加到团队配置文件

    我需要将设备添加到我的团队配置文件中 但是我实际上没有该设备 因此我无法将其连接到我的计算机 因此 Xcode 无法将 UDID 添加到我的设备和团队配置文件中 有没有办法将其手动添加到团队配置文件中 我不知道如何编辑它 此外 当我在配置门
  • 显示用户时区中 ISO 格式的 git log 时间戳?

    With date local git log显示我 用户 时区的日期 git log date local 3 pretty tformat cd h abbrev commit Thu Dec 18 15 22 11 2014 dc20
  • 找不到模块:无法解析“firebase”

    之后 npm i firebase 我从 firebase 本身而不是从文件导入 firebase 从 firebase 导入 firebase gt 在 firebase js 文件中 终端错误 gt gt src firebase js
  • 使用 HTML5 文件阅读器并将其发送到 Leaflet Omnivore

    我正在使用 Leaflet JavaScript 并遵循本教程 https www html5rocks com en tutorials file dndfiles https www html5rocks com en tutorial
  • 来自 socket.io 的新 cookie 值不起作用?

    我尝试对多个浏览器窗口 页面使用socket io id 用于 SNS auth process 使用凡奥特 http everyauth com 该项目基于express http expressjs com 这是我的项目设计 维护 so
  • 如何比较两个DateTimeOffSet?

    我有一个 DateTimeOffSet 类型的变量 我想过滤 2010 年 1 月 1 日之后创建的所有项目 所以我写了以下查询 var date new DateTimeOffset 2010 01 01 0 0 0 new TimeSp
  • 如何在 SQL Server 中编写(MySQL)“LIMIT”?

    如何将带有 LIMIT 的 MySQL 查询转换为 SQL Server 查询 SELECT FROM tableEating WHERE person identity LIMIT 1 LIMIT 在 T SQL 中不起作用 使用 TOP
  • VS 2013 多设备混合应用程序无法部署到设备,未找到设备

    我使用新的 VS 2013 Phonegap cordova 模板来创建混合应用程序 It all works fine using emulators and the ripple media emulators but when i c
  • 如何使 javascript 与 Ajax UpdatePanel 一起工作

    我正在尝试在我的表单上添加验证 我在表单字段中使用 AJAX 控件 当我删除更新面板和 AJAX 控件时 我的验证开始工作 但是当将两者放在一起时 我的验证不起作用 我怎样才能让他们一起工作
  • 将字节数组打印到热敏打印机 Java

    我正在使用 java 应用程序对 FedEx 进行 Web 服务调用 并尝试将标签打印到本地 USB 连接的热敏打印机 我将从 FedEx 获取字节数组作为响应 并希望将其打印到连接热敏打印机的客户端计算机 DocAttributeSet
  • 将对象从 JSP 页面传递回 Servlet

    简而言之 我想知道如何通过object从 JSP 页面返回到 Servlet 具体来说 我有一个表单元素 其操作标记引用了 servlet 在提交表单时 我想嵌入一个object in HttpServletRequest要求object以
  • 加载 ASP.NET 网页时缺少 Underscore.js 的 Javascript“.map”文件 [重复]

    这个问题在这里已经有答案了 我有一个网页 它是在 Azure 上运行的 ASP NET 网站的一部分 目前已经运行良好一段时间了 出乎意料的是 我突然在浏览器尝试下载 Underscore js 的 map 时遇到问题 我做了一些阅读 显然
  • 翻译 date("d F Y (H:i) 函数 php

    我是巴西人 有一个 wordpress 插件使用 date d F Y H i date Output 2013 年 1 月 16 日 00 54 但葡萄牙语应该是 16 Janeiro 2013 00 54 我该如何更改它 PS 我认为日
  • 如何通过 Qt 样式表自定义 Qt 应用程序的标题栏?

    我可以在 Qt 样式表中自定义 Qt 应用程序的控件 但是 我找不到自定义标题栏的方法 我找到了一些解决方案 但这需要修改应用程序本身的代码 无论如何 您是否可以仅使用 Qt 样式表来自定义它 标题栏 http en wikipedia o
  • 避免快速自动链接框架

    我有一个示例项目 https github com Usipov SwiftAutoFrameworksLinkage由一个主要目标 LinkerTests 和一个依赖的动态框架 Dynamic 如果运行该项目 您将看到以下 dyld 二进
  • 通过 angularjs 中的路由进行重定向

    我有以下要求 应显示包含编辑和删除链接的所有项目的列表 当用户单击编辑时 应出现带有文本框和保存按钮的编辑表单 现在 当用户编辑数据并单击保存按钮时 应保存数据 并且列表页面应再次显示修改后的数据 一切正常 但我如何通过 AngularJS
  • SQL Server使用C#执行备份

    我研究了使用 C 通过 SMO 创建数据库备份的可能性 该任务非常简单 代码也很简单 我只有一个问题 如何检查备份是否真正创建 Sql备份 Sql备份 http msdn microsoft com en us library micros
  • 如何在不使用 QtCreator 的情况下将 dll 文件复制到 Qt 中的输出目录?

    我有一个基于 Qt 的应用程序 它使用许多在项目外部构建的 dll 这些 dll 被签入源代码 因为我们不会非常频繁地重建它们 它们需要几个小时才能构建 我不希望它们出现在主项目中 我想在构建完成后将这些 dll 复制到适当的目录 发布 调
  • Powershell 表达式没有给出结果

    我创建了一个应返回 OU 规范名称的表达式 一个小轮廓 Search ADAccount LockedOut UsersOnly Select Object Name SamAccountName Name OU Expression Ge