Windows 用于在Oracle数据库上调度SQL脚本的PowerShell脚本面临问题

Windows 用于在Oracle数据库上调度SQL脚本的PowerShell脚本面临问题,windows,oracle,powershell,Windows,Oracle,Powershell,我是PowerShell的新手,是一名初级程序员。我一直在尝试调整PowerShell脚本来调度Oracle数据库上的SQL查询。但是,当我在PowerShell ISE上运行以下命令时,出现了一个错误: Add-Type -Path C:\Oracle\Oracle_Home\product\11.2.0\client_1\odp.net\bin\2.x\Oracle.DataAccess.dll $username = "username" $password = "password" $d

我是PowerShell的新手,是一名初级程序员。我一直在尝试调整PowerShell脚本来调度Oracle数据库上的SQL查询。但是,当我在PowerShell ISE上运行以下命令时,出现了一个错误:

Add-Type -Path C:\Oracle\Oracle_Home\product\11.2.0\client_1\odp.net\bin\2.x\Oracle.DataAccess.dll
$username = "username"
$password = "password"
$datasource = "HOST:PORT/Instance"
$connectionString = "User Id=$username;Password=$password;Data Source=$datasource"
$query = "SELECT FULL_NAME FROM PER_PEOPLE_X WHERE EMPLOYEE_NUMBER = 'AB123'"
$connection = New-Object Oracle.DataAccess.Client.OracleConnection("$connectionString")
$connection.open()
$command = New-Object Oracle.DataAccess.Client.OracleCommand
$command.Connection = $connection
$command.CommandText = $query
$ds = New-Object system.Data.DataSet
$da = New-Object Oracle.DataAccess.Client.OracleDataAdapter($command)
[void]$da.fill($ds)
return $ds.Tables[0] | SELECT FULL_NAME  Export-CSV "C:\test.csv" -NoTypeInformation
$connection.Close()
下面是一条错误消息,说明加载Oracle.DataAccess.dll时出现问题(尽管我确实看到该目录中的文件):


如果您愿意,这里有一个更简单的选择。这要求在计算机上安装SQL*Plus。在本例中,我从Oracle数据库检索服务器名称列表,并将该列表放入powershell变量$dbServers中。如果符合您的开发需求,这可能很有用:

$username = "username"
$password = "password"
$instance = "dbname.world"

$sqlcmd="set serveroutput off
   set linesize 160
   set pagesize 0
   set heading off
   set feedback off
   select server_name from tnsnames.tns_servers
      where dbtype in ('ORA', 'SS') and version is not null
       order by server_name;
   exit
   "

   $dbServers = $sqlcmd | sqlplus -s $username/$password@$instance

错误消息声称DLL的格式不正确。有时,当32(x86)位和64(x64)位二进制文件混合在一起时,这种情况会发生,并且看起来似乎是错误的。再次检查您是否使用了正确版本的Oracle驱动程序。
$username = "username"
$password = "password"
$instance = "dbname.world"

$sqlcmd="set serveroutput off
   set linesize 160
   set pagesize 0
   set heading off
   set feedback off
   select server_name from tnsnames.tns_servers
      where dbtype in ('ORA', 'SS') and version is not null
       order by server_name;
   exit
   "

   $dbServers = $sqlcmd | sqlplus -s $username/$password@$instance