当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell、ActiveDirectory 和难以捉摸的 Filter 参数

作者:精品下载站 日期:2024-12-14 07:14:57 浏览:13 分类:玩电脑

PowerShell、ActiveDirectory 和难以捉摸的 Filter 参数


使用 PowerShell 在 Active Directory 中搜索用户时,ActiveDirectory 模块通常是首先想到的事情之一。该模块已经存在相当长一段时间了,但是有一个问题仍然是许多用户偶然发现的,即 Filter 参数。使用 Get-ADUser 搜索用户基本上有三种方法。

tl;dr;** 本文介绍了在搜索 AD 时如何使用 -Filter 参数,如果您只想得到答案,请跳至 **解决方案.

使用 Identity 参数

当搜索关键属性已知的特定用户时,Identity 参数效果很好。它接受以下属性之一的值:

  • 专有名称
  • GUID(对象GUID)
  • SID(对象SID)
  • SAM 帐户名称 (sAMAccountName)

使用 LDAPFilter 参数

LDAPFilter 参数接受 LDAP 查询字符串。 LDAP 查询的语法非常全面且有详细记录。然而,开始使用 LDAP 过滤器可能会有点困难,并且需要理解位标志来过滤某些属性,例如启用的用户。

下面的示例显示如何使用 LDAP 过滤器查找所有启用的用户。对于不习惯 LDAP 过滤器的人来说,这不是一件容易理解的事情。

Get-ADUser -LdapFilter ‘(!userAccountControl:1.2.840.113556.1.4.803:=2)’

使用过滤器参数

使用 PowerShell 搜索 AD 时的第三个选项是使用 Filter 参数。此参数接受使用 PowerShell 表达式语言的过滤器,大多数 PowerShell 用户应该非常熟悉这种语法。但尽管如此,这是我经常看到人们苦苦挣扎的事情。

当第一次使用新命令时,大多数用户会转向“获取帮助”。我们来看一下:

[玩转系统] PowerShell、ActiveDirectory 和难以捉摸的 Filter 参数

到目前为止一切顺利,但让我们进一步看一下其中一个示例:

[玩转系统] PowerShell、ActiveDirectory 和难以捉摸的 Filter 参数

Get-ADUser -Filter {类似邮件“*”}

这就是通常会出错的地方。过滤器参数只接受一个字符串,在这个例子中我们给它一个脚本块?在这个具体的例子中,它是有效的,但我们需要真正理解它为什么有效,然后才能使用该技术。让我们从头开始。

参数类型

命令上的每个参数都有特定的类型,这意味着 PowerShell 会将参数的输入转换为该对象类型。这种转换称为强制转换。我们再看一下 Filter 参数:

[玩转系统] PowerShell、ActiveDirectory 和难以捉摸的 Filter 参数

红色标记的文本显示 Filter 参数的类型为 String,这意味着在 Get-ADUser 获取我们指定的过滤器之前,PowerShell 会将其转换为字符串(将其转换为字符串)。实际上,我们可以自己执行该转换,看看 Get-ADUser 将看到什么。方法如下:

[字符串] {类似邮件的“*”}

[玩转系统] PowerShell、ActiveDirectory 和难以捉摸的 Filter 参数

$mail='[电子邮件受保护]'

[字符串] {mail -like $mail}

[玩转系统] PowerShell、ActiveDirectory 和难以捉摸的 Filter 参数

解决方案

即使有时可以使用脚本块作为 -Filter 参数的值,也要养成始终使用字符串的习惯。无论如何它都会被转换为字符串。如果您不确定如何构建字符串,这里有一些入门提示:

  • 使用双引号字符串 在过滤器周围使用双引号 (“) 将展开字符串内键入的任何变量。
  • 在过滤器中的任何值周围使用单引号 (‘) 在双引号字符串中,可以像任何其他字符一样使用单引号。
  • 如果有疑问,请将过滤器保存在变量中并将其写入屏幕。

让我们看一下使用这些技巧的示例。

$Name='西蒙'

$Filter=” 名称 - 如‘$Name*’ ”

Write-Verbose -Message“使用过滤器:[$Filter]”-Verbose

$User=Get-ADUser -Filter $Filter

[玩转系统] PowerShell、ActiveDirectory 和难以捉摸的 Filter 参数

在第二行,我创建一个过滤字符串并将其分配给变量 $Filter。我在字符串的开头和结尾都添加了额外的空格,只是为了使其更易于阅读,这些不会产生任何影响。请注意该值周围的单引号。

第三行写入一条详细消息,以明文形式显示我的过滤器,这样我可以确保过滤器看起来符合我的预期。完成脚本后,我可以从 Write-Verbose 中删除 -Verbose,并且仅当我的脚本使用 -Verbose 运行时才会显示该消息。

第四行使用我的过滤器运行 Get-ADUser 并将结果分配给 $User。工作完成了!

使用 PowerShell 在 Active Directory 中搜索对象非常简单,但不幸的是,有一些示例可能会让您走上错误的道路。如果有疑问,请遵循树上的简单提示,这样您就有了一个良好的开端。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯