Powershell的ADS\u CHASE\u转介\u外部
我将VBScript转换为Powershell。这是我遇到的许多问题之一: 方法调用失败,因为[ADODB.CommandClass]不包含 名为“Properties”的方法 代码如下: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"
$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