将Powershell参数传递给Provider = Microsoft.Jet.OLEDB.4.0连接

时间:2016-10-19 18:28:08

标签: powershell ms-access arguments ms-access-2007

我正在尝试创建一个Powershell脚本,该脚本将用于添加包含两个字段的单个表,并将值添加到Access DB中的其中一个字段。我希望能够将DB路径和值作为参数传递给脚本。

但是,我一直在使用DB路径出错。起初我得到了这个错误:

Exception calling "Open" with "1" argument(s): "Could not find file 'H:\$DB'." At C:\users\user1\Desktop\Read_PCRes_DB.ps1:8 char:1 + $conn.Open('Provider=Microsoft.Jet.OLEDB.4.0; Data Source=$DB;') + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : COMException

无论我如何参与辩论,都会发生这种情况;带引号,没有或带有没有空格的路径。

然后我断开了映射的H:\驱动器。现在我收到了这个错误:

Exception calling "Open" with "1" argument(s): "Cannot start your application. The workgroup information file is missing or opened exclusively by another user." At C:\users\user1\Desktop\Read_PCRes_DB.ps1:8 char:1 + $conn.Open('Provider=Microsoft.Jet.OLEDB.4.0; Data Source=$Database;' ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : COMException

我觉得这是对数据库周围所需的事物或转义字符的简单重新排序,或者某处需要延迟。

如果我对路径和值进行硬编码,它的工作正常。以下是PowerShell脚本:

param ([string]$Database = "C:\pcres.mdb", [string]$BranchName = 'BLANK')

$adOpenStatic = 3
$adLockOptimistic = 3

$conn=New-Object -com "ADODB.Connection"
$rs = New-Object -com "ADODB.Recordset"
$conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='$Database';")

$conn.execute('Create Table Location (ID AUTOINCREMENT PRIMARY KEY, Branch TEXT)')

$rs.Open("SELECT * FROM Location",$conn,$adOpenStatic,$adLockOptimistic)

$rs.AddNew()
$rs.Fields.Item("Branch").value = $BranchName
$rs.Update()

$conn.Close
$rs.Close

这是稍微修改过的版本:Create Blank Access Database Using Powershell

我主要是这样运行它:

.\Read_PCRes_DB.ps1 -Database C:\Users\user1\desktop\pcres.mdb -BranchName "Main"

我正在使用Powershell 5.0进行测试,但它将与Powershell 2.0一起用于生产。这让我发疯,不应该这样。

1 个答案:

答案 0 :(得分:0)

没关系......我重新启动了它的确有效。多么荒谬......从IT Crowd播放自动录音