使用筛选数组调用PutEx时出错

时间:2014-04-14 12:06:53

标签: powershell active-directory adsi

如果我在PowerShell中的PutEx对象上调用adsi,一切都按预期工作:

$values = @("xyz", "abc" )
$user = [adsi]"LDAP://CN=someone,CN=Users,DC=acme,DC=com"
$user.PutEx($ADS_PROPERTY_DELETE, "altsecurityidentities", $values)
$user.SetInfo()

但是,如果我做同样的事情,但用Where-Object过滤值,我会收到错误:

$values = @("xyz", "abc" )
$filtered = @($values | ? { $_.startsWith("x") })
$user = [adsi]"LDAP://CN=someone,CN=Users,DC=acme,DC=com"
$user.PutEx($ADS_PROPERTY_DELETE, "altsecurityidentities", $filtered)
$user.SetInfo()

错误是:Exception calling "PutEx" with "3" argument(s): "Unspecified error

这两种情况有什么不同?

2 个答案:

答案 0 :(得分:1)

如果您尝试按如下方式遍历$filtered个对象,该怎么办?

$values = @("xyz", "abc" )
$filtered = @($values | ? { $_.startsWith("x") })
foreach($item in $filtered){
    $user = [adsi]"LDAP://CN=someone,CN=Users,DC=acme,DC=com"
    $user.PutEx($ADS_PROPERTY_DELETE, "altsecurityidentities", $item)
    $user.SetInfo()
}

答案 1 :(得分:0)

似乎没有理由让您的代码失败,check here

$values = @("xyz", "abc", "xref", "xtup")
$values.GetType().fullname
System.Object[]

$filtered = @($values | ?{$_.StartsWith("x")})
$filtered.GetType().fullname
System.Object[]

$values = @("xyz", "abc")
$filtered = @($values | ?{$_.StartsWith("x")})
$filtered.GetType().fullname
System.Object[]

$filtered = [System.Array]($values | ?{$_.StartsWith("x")})
$filtered.GetType().fullname
System.Object[]

我唯一怀疑的是,如果它期待一个字符串数组,因为我检查的所有例子似乎都表明了这一点。如果你尝试会发生什么:

$filtered = [String[]]($values | ?{$_.StartsWith("x")})
$filtered.GetType().fullname
System.String[]

看看它是如何运作的?

PS:无法发表评论,所以不得不添加回复。