gpt4 book ai didi

powershell - 使用DirectorySearcher的Powershell LDAP过滤器

转载 作者:行者123 更新时间:2023-12-02 23:53:25 25 4
gpt4 key购买 nike

我正在使用DirectorySearcher类来查找单个用户。条件应该是objectCategory是用户,并且其密码未被设置为永不过期

经过一番搜索,我想出了这个:

$searcher = New-Object System.DirectoryServices.DirectorySearcher

$searcher.Filter = "(&(objectCategory=User)(samAccountName=$env:username)(!(userAccountControl:1.2.840.113556.1.4.803:=65536)))"
userAccountControl:1.2.840.113556.1.4.803:=65536应该用于密码永不过期的用户。

最后我做:
$user = $searcher.FindOne().GetDirectoryEntry()

但是它说我不能在一个空值表达式上调用方法。我想我正确地使用了括号。那么可能是我不能使用!运算符吗?

还要注意,我可以使用 get-aduser命令,如下所示:
get-aduser -filter * -properties samAccountName, PasswordNeverExpires | where { $_.passwordNeverExpires -eq "true" } | where {$_.enabled -eq "true"} | where {$_.samAccountName -eq $env:username}

但是在这种情况下,最好使用 DirectorySearcher代替上面的显示。

最佳答案

实际上,您的代码正在运行,但是当$searcher.FindOne()什么都不返回时,也就是说,当过滤器什么也不返回时,GetDirectoryEntry()方法给出:

> You cannot call a method on a null-valued expression. At line:1 char:1
> + $searcher.FindOne().GetDirectoryEntry()
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> + CategoryInfo : InvalidOperation: (:) [], RuntimeException
> + FullyQualifiedErrorId : InvokeMethodOnNull


尝试:
$user = $searcher.FindOne()
if($user -ne $null) {$user.GetDirectoryEntry()} else {write-host "Niet"}

关于powershell - 使用DirectorySearcher的Powershell LDAP过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52110152/

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