2016-10-19 24 views
0

我正在尝试创建一个Powershell脚本,该脚本将用于添加具有两个字段的单个表,并向Access DB中的这些字段之一添加一个值。我希望能够将DB路径和值作为参数传递给脚本。将Powershell参数传递给Provider = Microsoft.Jet.OLEDB.4.0连接

但是,我不断收到数据库路径的错误。起初,我得到这个错误:

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在生产中一起使用。这让我疯狂,而且不应该。

回答

0

没关系...我重新启动,它工作。多么可笑...从IT人群中播放自动录音