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