Powershell的ADS\u CHASE\u转介\u外部

Powershell的ADS\u CHASE\u转介\u外部,powershell,vbscript,adsi,Powershell,Vbscript,Adsi,我将VBScript转换为Powershell。这是我遇到的许多问题之一: 方法调用失败,因为[ADODB.CommandClass]不包含 名为“Properties”的方法 代码如下: $objConnection = new-Object -com "ADODB.Connection" $objCommand = new-Object -com "ADODB.Command" $objConnection.Provider = "ADsDSOObject"

我将VBScript转换为Powershell。这是我遇到的许多问题之一:

方法调用失败,因为[ADODB.CommandClass]不包含 名为“Properties”的方法

代码如下:

    $objConnection = new-Object  -com "ADODB.Connection"
    $objCommand = new-Object -com "ADODB.Command"

    $objConnection.Provider = "ADsDSOObject"
    $objConnection.Open( "Active Directory Provider")
    $objCommand.ActiveConnection = $objConnection

    $objCommand.CommandText = "Select Name From '" + $ADSPath + "' where " + $SearchField + " = '" + $SearchValue + "'"
    $objCommand.Properties("Chase referrals") = ADS_CHASE_REFERRALS_EXTERNAL
这个问题可能是因为广告(CHASE)(转介)(EXTERNAL)只适用于VB。在Powershell中有什么解决方案或正确的方法来实现这一点

属性成员不是函数,而是powershell属性:

# ~> $objCommand | get-member Properties


   TypeName: System.__ComObject#{986761e8-7269-4890-aa65-ad7c03697a6d}

Name       MemberType Definition                     
----       ---------- ----------                     
Properties Property   Properties Properties () {get} 
从签名中可以看到,它返回一个Properties对象,该对象是Com对象的集合,每个Com对象都是具有以下成员的Com对象:

# ~> $objCommand.Properties | get-member


   TypeName: System.__ComObject#{00000503-0000-0010-8000-00aa006d2ea4}

Name       MemberType Definition                    
----       ---------- ----------                    
Attributes Property   int Attributes () {get} {set} 
Name       Property   string Name () {get}          
Type       Property   DataTypeEnum Type () {get}    
Value      Property   Variant Value () {get} {set}  
获取您感兴趣的属性的最简单方法是循环返回的对象,找到具有您感兴趣的名称的属性,然后根据需要设置值:

($objCommand.Properties | where{$_.Name -eq "Chase referrals"}).Value = ADS_CHASE_REFERRALS_EXTERNAL
如果您必须经常这样做,这会有点尴尬,因此您可以将其转换为函数:

function Set-ADOCommandPreoprty($objCOmmand, [string]$propertyName, $newValue)
{
    ($objCommand.Properties | ?{$_.Name -eq $propertyName}).Value = $newValue
}
那么就这样称呼它:

Set-ADOCommandPreoprty $objCommand "Chase referrals" ADS_CHASE_REFERRALS_EXTERNAL