在Powershell中使用通配符查找数组中键和值的索引

在Powershell中使用通配符查找数组中键和值的索引,powershell,Powershell,我一直在努力解决一个问题,我能够以一种相对体面和可接受的方式完成我需要完成的事情,但我很好奇为什么我会遇到一些问题 我对PosikSub或C++语言不太了解,但我有java、C++和其他一些经验。所以,如果我忽略了一些非常简单的事情,你必须原谅我。我不是在寻找对我的解决方案的批评,只是对我遇到的一些障碍的一些见解 我需要做的是使用Powershell查询LDAP设置。我需要知道MaxConnIdleTime,我需要将它分配给变量或通过子例程[sic](例如$ldapPolicies.MaxCon

我一直在努力解决一个问题,我能够以一种相对体面和可接受的方式完成我需要完成的事情,但我很好奇为什么我会遇到一些问题

我对PosikSub或C++语言不太了解,但我有java、C++和其他一些经验。所以,如果我忽略了一些非常简单的事情,你必须原谅我。我不是在寻找对我的解决方案的批评,只是对我遇到的一些障碍的一些见解

我需要做的是使用Powershell查询LDAP设置。我需要知道MaxConnIdleTime,我需要将它分配给变量或通过子例程[sic](例如$ldapPolicies.MaxConnIdleTime)访问,以便通过条件语句运行它

我是如何做到这一点的:

$ldap=Get-ADObject-SearchBase“CN=querypolicies,CN=Directory
服务,CN=Windows
NT,CN=Services,CN=Configuration,DC=$ENV:COMPUTERNAME,DC=$DC”-Filter
'ObjectClass-like“queryPolicy”—属性ldapadminlimits

$ldap = @($ldap.ldapadminlimits)

$ldap | %{
    if($_.startswith("MaxConnIdleTime")) {
        $match = $_
        }
    }
我尝试了NTDSUtil.exe,但是,我无法将“Show Values”重定向到文本文件以便以后读取,也无法将其写入PowerShell中的变量

我尝试了启动脚本,然后运行NTDSUtil,但它只记录了PowerShell中发生的事情,而没有记录NTDSUtil中发生的事情

此外,我还尝试一次性将所有命令提供给NTDSUtil(NTDSUtil“ldap策略”“连接”“连接到服务器$ENV:COMPUTERNAME“q”显示值),但PowerShell在控制台中没有显示任何内容,我已按退出顺序返回PS>

我知道我可以使用LDP,但我对ADSI不太熟悉。研究似乎表明,尝试获取自民党垃圾场有点过时,我几乎放弃了这种尝试

我遇到的一个问题让我有点沮丧(也是我问这个问题的原因),那就是为什么我不能搜索数组并使用通配符查找项的索引?我试着这样做:

$ldap.IndexOf("MaxConnIdleTime*")

但它总是返回-1

如果我尝试以下操作,它将正常工作:

$ldap.IndexOf("MaxConnIdleTime=100")
考虑到这个值确实是100。但我正在验证该值是否正确

我知道我可以这样做:

if($ldap -contains "MaxConnIdleTime=100") {
    DO SOMETHING...
    } else {
        DO SOMETHING ELSE...
        }
为什么我不能使用通配符运算符搜索数组?没有含糊不清的地方,所以,它应该是有效的,对吗

我不是在寻求对我是如何做到这一点的批评,我只是想了解它为什么会这样做


谢谢

我认为PowerShell中没有简单的“通过通配符搜索数组并返回索引”cmdlet、方法、语句等

.IndexOf
不是设计用于通配符的

在数组上使用
-like
运算符时,可能只找到一个匹配对象,但是
-like
在数组上使用时返回一个匹配数组

将数组传递到
.IndexOf()
中,然后查找本身就是数组的数组元素,即使该数组只有一个对象

这将有助于:

$ldap.IndexOf(($ldap -like "MaxConnIdleTime*")[0])

只要您始终想找到第一个。我认为PowerShell中没有简单的“通过通配符搜索数组并返回索引”cmdlet、方法、语句等

.IndexOf
不是设计用于通配符的

在数组上使用
-like
运算符时,可能只找到一个匹配对象,但是
-like
在数组上使用时返回一个匹配数组

将数组传递到
.IndexOf()
中,然后查找本身就是数组的数组元素,即使该数组只有一个对象

这将有助于:

$ldap.IndexOf(($ldap -like "MaxConnIdleTime*")[0])

只要你一直想找到第一个。

我不知道类比较运算符返回数组。谢谢您的帮助。@Rincewind它可以,但只有当左侧是数组时,
-match
也是如此。否则它将返回一个
[bool]
。我不知道类比较运算符返回数组。谢谢您的帮助。@Rincewind它可以,但只有当左侧是数组时,
-match
也是如此。否则它将返回一个
[bool]
。看见