PowerShell MDB查询-脚本在Access中工作,而不是在PowerShell中

PowerShell MDB查询-脚本在Access中工作,而不是在PowerShell中,powershell,ms-access,Powershell,Ms Access,正如subject所说,我在Access中直接在MDB上有一个工作查询,我有一个PowerShell脚本,可用于不同的查询,但此查询不返回任何数据。想法 这很有效 $path = "C:\temp\Config.mdb" $adOpenStatic = 3 $adLockOptimistic = 3 $cn = new-object -comobject ADODB.Connection $rs = new-object -comobject ADODB.Recordset $cn.Open(

正如subject所说,我在Access中直接在MDB上有一个工作查询,我有一个PowerShell脚本,可用于不同的查询,但此查询不返回任何数据。想法

这很有效

$path = "C:\temp\Config.mdb"
$adOpenStatic = 3
$adLockOptimistic = 3
$cn = new-object -comobject ADODB.Connection
$rs = new-object -comobject ADODB.Recordset

$cn.Open("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = $path")
$Ports = $rs.open("Select * from Options where OptionName='Eng.SerialPortMgr.PrinterPort1'",$cn,$adOpenStatic,$adLockOptimistic)
$rs.MoveFirst()

do {
$rs.Fields.Item("OptionName").value + " = " + $rs.Fields.Item("OptionData").value; 
$rs.MoveNext()} 
until($rs.EOF -eq $True)

$rs.Close()
$cn.Close()

$Ports
这并没有,我也不明白为什么。唯一的区别是查询和下面脚本中的查询在Access中工作

$path = "C:\temp\Config.mdb"
$adOpenStatic = 3
$adLockOptimistic = 3
$cn = new-object -comobject ADODB.Connection
$rs = new-object -comobject ADODB.Recordset

$cn.Open("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = $path")
$Ports = $rs.open("SELECT Options.OptionName, Options.OptionData FROM Options WHERE OptionName LIKE 'Eng.SerialPortMgr.PrinterPort*'",$cn,$adOpenStatic,$adLockOptimistic)
$rs.MoveFirst()

do {
$rs.Fields.Item("OptionName").value + " = " + $rs.Fields.Item("OptionData").value; 
$rs.MoveNext()} 
until($rs.EOF -eq $True)

$rs.Close()
$cn.Close()

$Ports
这起作用了

$path = "C:\temp\Config.mdb"
$adOpenStatic = 3
$adLockOptimistic = 3
$cn = new-object -comobject ADODB.Connection
$rs = new-object -comobject ADODB.Recordset

$cn.Open("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = $path")
$SawConfigPorts = $rs.open("SELECT Options.OptionName, Options.OptionData FROM Options WHERE OptionName LIKE 'Eng.SerialPortMgr.PrinterPort%'",$cn,$adOpenStatic,$adLockOptimistic)
$rs.MoveFirst()

do {
    $rs.Fields.Item("OptionName").value + " = " + $rs.Fields.Item("OptionData").value; 
        $rs.MoveNext() } 
        until($rs.EOF -eq $True)

$rs.Close()
$cn.Close()

$SawConfigPorts

%
是SQL中的通配符。Not
*
。尝试了这两种方法都没有产生结果因为您只从一个表中进行选择,我还将尝试从SELECT子句中删除表标识符。$rs.Count给了您什么?因此我对它进行了修补并使其正常工作,%是它在脚本中所喜欢的。不知道为什么它不工作之前,我一定已经纠正了一个打字错误或一些我没有看到的东西。这都是一个大型WPF shell脚本的一部分,我可能会绊倒自己,哈哈。如果您包含了您所更改的内容,那么这个答案会更好,这样将来的读者就不必手动比较您的代码块来查看有什么不同。