我将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问题可能是因为ADS_CHASE_REFERRALS_EXTERNAL只为VB工作。在Powershell中有什么解决方案或适当的方法来做到这一点吗?
发布于 2014-07-05 01:20:19
Properties成员不是函数,而是powershell属性:
# ~> $objCommand | get-member Properties
TypeName: System.__ComObject#{986761e8-7269-4890-aa65-ad7c03697a6d}
Name MemberType Definition
---- ---------- ----------
Properties Property Properties Properties () {get} 从签名中可以看到,它返回一个Properties对象,它是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_EXTERNALhttps://stackoverflow.com/questions/24580985
复制相似问题