如果我在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
。
这两种情况有什么不同?
答案 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:无法发表评论,所以不得不添加回复。