将Oracle SYSTEM.DATA.DATATABLE结果作为参数传递给另一个powershell脚本时出错
我正在编写一个脚本,该脚本将执行以下操作:将Oracle SYSTEM.DATA.DATATABLE结果作为参数传递给另一个powershell脚本时出错,oracle,powershell,system.data.datatable,Oracle,Powershell,System.data.datatable,我正在编写一个脚本,该脚本将执行以下操作: 连接到Oracle DB并运行主查询以提取原始数据。-已经作为单元测试工作 将原始数据导入Microsoft access数据库模板(.mdb)-以单元测试方式工作,但与脚本1集成时遇到错误 连接到MS Access数据,运行筛选(子)查询,并将结果导出到单独的excel选项卡中。-已经作为单元测试工作 *无法直接在Oracle数据库上运行(子)查询,因为在Oracle数据库上执行的查询(原始数据)大约需要5个小时,因此原始数据将首先导入Microso
[参数:无;返回:原始数据]
2-02.mdbimport.ps1[参数:原始数据(来自1),MDB文件返回:无]
3-03.mdb export.ps1[参数:EXCEL文件,mdb文件;返回:无]
master script.ps1
但是,在集成脚本1和脚本2时,我遇到了错误System.Management.Automation.ParameterBindingException:找不到接受参数“System.Data.DataRow”的位置参数。
请注意,脚本1从Oracle DB上的查询结果返回System.Data.Datatable值,我试图找出脚本2似乎不接受此值的原因。我还尝试在参数声明中声明类型System.data.datarow
,但仍然无效,因为我得到了错误
Cannot process argument transformation on parameter 'RawData'. Cannot convert the "System.Data.DataRow System.Data.DataRow System.Data.DataRow System.Data.DataRow System.Data.DataRow System.Data.DataRow" value of type "System.String" to type "System.Data.DataRow".
下面是每个脚本的代码片段
主脚本.ps1
## Setup reusable variables (e.g. MDB, excel templates)
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$Date=(get-date).tostring('MMddyyy')
$MdbFile = $scriptPath+"\Pts on Spans Analysis "+$date+".mdb"
$ExcelFile = $scriptPath+'\Pts on Spans Action '+$date+'.xls'
## 01. Connect to Oracle DB and run main query for PS raw data
write("**Starting Oracle database query and storing results... -- "+(get-date))
$01dbquery = $scriptPath+"\01dbquery.ps1"
$01ret = Invoke-Expression "& `"$01dbquery`""
write("**Finished querying Oracle DB. -- "+(get-date)); write-host
## 02. Import raw data to MDB template (Microsoft access) -- ImportedPtsonSpans
write("**Starting import of PS raw data to MDB... -- "+(get-date))
$02mdbimport = $scriptPath+"\02mdbimport.ps1"
Invoke-Expression "& `"$02mdbimport`" -RawData $01ret -MdbFile `"$MdbFile`""
write("**Finished import of PS raw data. -- "+(get-date)); write-host
## 03. Process MS Access data and export into excel
write("**Starting export of processed PS data into Excel... -- "+(get-date))
$03mdbexport = $scriptPath+"\03mdbexport.ps1"
Invoke-Expression "& `"$03mdbexport`" -ExtractName `"$ExcelFile`" -MdbFile `"$MdbFile`""
write("**Finished data export. Pts and Span Extract Completed -- "+(get-date)); write-host
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
function Get-DataTable
{
Param(
[Parameter(Mandatory=$true)]
[System.Data.OracleClient.OracleConnection]$conn,
[Parameter(Mandatory=$true)]
[string]$sql
)
$cmd = New-Object System.Data.OracleClient.OracleCommand($sql,$conn)
$da = New-Object System.Data.OracleClient.OracleDataAdapter($cmd)
$dt = New-Object System.Data.DataTable
[void]$da.Fill($dt)
return ,$dt
}
## Initiate database credential variables
<more codes here>
## Setup database connection
<more codes here>
## Perform database queries and store results
$QueryPath = $scriptPath+"\queries\main\Pts Span Qry.txt"
$Query = get-content $QueryPath | out-string
# *** Entry Point to Script ***
$RawData = Get-DataTable $conn $Query ; $RawData
param
(
[Parameter(Mandatory=$true)]$RawData,
[Parameter(Mandatory=$true)]$MdbFile
)
$ErrorActionPreference = 'Stop'
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
Function Connect-Database($MdbFile, $Tables)
{
<codes>
} #End Update-Records
Function Update-ImportedPtsonSpans
{
<codes>
} #End Update-ImportedPtsonSpans
# *** Entry Point to Script ***
## Perform import of raw data into Microsoft Access Database (MDB)
$Tables = "ImportedPtsonSpans"
# Test if raw data is passed
write-host Start Test raw data and MdbFile
$RawData
$MdbFile
write-host End Test raw data and MdbFile
#
Connect-DataBase -MdbFile $MdbFile -tables $Tables
param
(
[Parameter(Mandatory=$true)]$ExtractName,
[Parameter(Mandatory=$true)]$MdbFile
)
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
Function Export-Data($Queries,$MdbFile,$ExtractName)
{
<codes> }
} #End Export-Data
Function Export-To-Excel($ExtractName,$QueryName,$CurResult)
{
<codes> } # End Export-To-Excel
# *** Entry Point to Script ***
$QueryPath = $scriptPath+"\queries\*.txt"
$Queries = Get-ChildItem $QueryPath
Export-Data -Queries $Queries -MdbFile $MdbFile -ExtractName $ExtractName
01dbquery.ps1
## Setup reusable variables (e.g. MDB, excel templates)
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$Date=(get-date).tostring('MMddyyy')
$MdbFile = $scriptPath+"\Pts on Spans Analysis "+$date+".mdb"
$ExcelFile = $scriptPath+'\Pts on Spans Action '+$date+'.xls'
## 01. Connect to Oracle DB and run main query for PS raw data
write("**Starting Oracle database query and storing results... -- "+(get-date))
$01dbquery = $scriptPath+"\01dbquery.ps1"
$01ret = Invoke-Expression "& `"$01dbquery`""
write("**Finished querying Oracle DB. -- "+(get-date)); write-host
## 02. Import raw data to MDB template (Microsoft access) -- ImportedPtsonSpans
write("**Starting import of PS raw data to MDB... -- "+(get-date))
$02mdbimport = $scriptPath+"\02mdbimport.ps1"
Invoke-Expression "& `"$02mdbimport`" -RawData $01ret -MdbFile `"$MdbFile`""
write("**Finished import of PS raw data. -- "+(get-date)); write-host
## 03. Process MS Access data and export into excel
write("**Starting export of processed PS data into Excel... -- "+(get-date))
$03mdbexport = $scriptPath+"\03mdbexport.ps1"
Invoke-Expression "& `"$03mdbexport`" -ExtractName `"$ExcelFile`" -MdbFile `"$MdbFile`""
write("**Finished data export. Pts and Span Extract Completed -- "+(get-date)); write-host
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
function Get-DataTable
{
Param(
[Parameter(Mandatory=$true)]
[System.Data.OracleClient.OracleConnection]$conn,
[Parameter(Mandatory=$true)]
[string]$sql
)
$cmd = New-Object System.Data.OracleClient.OracleCommand($sql,$conn)
$da = New-Object System.Data.OracleClient.OracleDataAdapter($cmd)
$dt = New-Object System.Data.DataTable
[void]$da.Fill($dt)
return ,$dt
}
## Initiate database credential variables
<more codes here>
## Setup database connection
<more codes here>
## Perform database queries and store results
$QueryPath = $scriptPath+"\queries\main\Pts Span Qry.txt"
$Query = get-content $QueryPath | out-string
# *** Entry Point to Script ***
$RawData = Get-DataTable $conn $Query ; $RawData
param
(
[Parameter(Mandatory=$true)]$RawData,
[Parameter(Mandatory=$true)]$MdbFile
)
$ErrorActionPreference = 'Stop'
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
Function Connect-Database($MdbFile, $Tables)
{
<codes>
} #End Update-Records
Function Update-ImportedPtsonSpans
{
<codes>
} #End Update-ImportedPtsonSpans
# *** Entry Point to Script ***
## Perform import of raw data into Microsoft Access Database (MDB)
$Tables = "ImportedPtsonSpans"
# Test if raw data is passed
write-host Start Test raw data and MdbFile
$RawData
$MdbFile
write-host End Test raw data and MdbFile
#
Connect-DataBase -MdbFile $MdbFile -tables $Tables
param
(
[Parameter(Mandatory=$true)]$ExtractName,
[Parameter(Mandatory=$true)]$MdbFile
)
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
Function Export-Data($Queries,$MdbFile,$ExtractName)
{
<codes> }
} #End Export-Data
Function Export-To-Excel($ExtractName,$QueryName,$CurResult)
{
<codes> } # End Export-To-Excel
# *** Entry Point to Script ***
$QueryPath = $scriptPath+"\queries\*.txt"
$Queries = Get-ChildItem $QueryPath
Export-Data -Queries $Queries -MdbFile $MdbFile -ExtractName $ExtractName
$scriptPath=split path-parent$MyInvocation.MyCommand.Definition
函数获取数据表
{
Param(
[参数(必需=$true)]
[System.Data.OracleClient.OracleConnection]$conn,
[参数(必需=$true)]
[string]$sql
)
$cmd=新对象System.Data.OracleClient.OracleCommand($sql,$conn)
$da=新对象System.Data.OracleClient.OracleDataAdapter($cmd)
$dt=新对象System.Data.DataTable
[void]$da.填充($dt)
回报,$dt
}
##启动数据库凭据变量
##设置数据库连接
##执行数据库查询并存储结果
$QueryPath=$scriptPath+“\querys\main\Pts Span Qry.txt”
$Query=获取内容$QueryPath |输出字符串
#***脚本的入口点***
$RawData=获取数据表$conn$Query$矩阵空间
02mdbimport.ps1
## Setup reusable variables (e.g. MDB, excel templates)
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$Date=(get-date).tostring('MMddyyy')
$MdbFile = $scriptPath+"\Pts on Spans Analysis "+$date+".mdb"
$ExcelFile = $scriptPath+'\Pts on Spans Action '+$date+'.xls'
## 01. Connect to Oracle DB and run main query for PS raw data
write("**Starting Oracle database query and storing results... -- "+(get-date))
$01dbquery = $scriptPath+"\01dbquery.ps1"
$01ret = Invoke-Expression "& `"$01dbquery`""
write("**Finished querying Oracle DB. -- "+(get-date)); write-host
## 02. Import raw data to MDB template (Microsoft access) -- ImportedPtsonSpans
write("**Starting import of PS raw data to MDB... -- "+(get-date))
$02mdbimport = $scriptPath+"\02mdbimport.ps1"
Invoke-Expression "& `"$02mdbimport`" -RawData $01ret -MdbFile `"$MdbFile`""
write("**Finished import of PS raw data. -- "+(get-date)); write-host
## 03. Process MS Access data and export into excel
write("**Starting export of processed PS data into Excel... -- "+(get-date))
$03mdbexport = $scriptPath+"\03mdbexport.ps1"
Invoke-Expression "& `"$03mdbexport`" -ExtractName `"$ExcelFile`" -MdbFile `"$MdbFile`""
write("**Finished data export. Pts and Span Extract Completed -- "+(get-date)); write-host
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
function Get-DataTable
{
Param(
[Parameter(Mandatory=$true)]
[System.Data.OracleClient.OracleConnection]$conn,
[Parameter(Mandatory=$true)]
[string]$sql
)
$cmd = New-Object System.Data.OracleClient.OracleCommand($sql,$conn)
$da = New-Object System.Data.OracleClient.OracleDataAdapter($cmd)
$dt = New-Object System.Data.DataTable
[void]$da.Fill($dt)
return ,$dt
}
## Initiate database credential variables
<more codes here>
## Setup database connection
<more codes here>
## Perform database queries and store results
$QueryPath = $scriptPath+"\queries\main\Pts Span Qry.txt"
$Query = get-content $QueryPath | out-string
# *** Entry Point to Script ***
$RawData = Get-DataTable $conn $Query ; $RawData
param
(
[Parameter(Mandatory=$true)]$RawData,
[Parameter(Mandatory=$true)]$MdbFile
)
$ErrorActionPreference = 'Stop'
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
Function Connect-Database($MdbFile, $Tables)
{
<codes>
} #End Update-Records
Function Update-ImportedPtsonSpans
{
<codes>
} #End Update-ImportedPtsonSpans
# *** Entry Point to Script ***
## Perform import of raw data into Microsoft Access Database (MDB)
$Tables = "ImportedPtsonSpans"
# Test if raw data is passed
write-host Start Test raw data and MdbFile
$RawData
$MdbFile
write-host End Test raw data and MdbFile
#
Connect-DataBase -MdbFile $MdbFile -tables $Tables
param
(
[Parameter(Mandatory=$true)]$ExtractName,
[Parameter(Mandatory=$true)]$MdbFile
)
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
Function Export-Data($Queries,$MdbFile,$ExtractName)
{
<codes> }
} #End Export-Data
Function Export-To-Excel($ExtractName,$QueryName,$CurResult)
{
<codes> } # End Export-To-Excel
# *** Entry Point to Script ***
$QueryPath = $scriptPath+"\queries\*.txt"
$Queries = Get-ChildItem $QueryPath
Export-Data -Queries $Queries -MdbFile $MdbFile -ExtractName $ExtractName
param
(
[参数(必需=$true)]$RawData,
[参数(必需=$true)]$MdbFile
)
$ErrorActionPreference='Stop'
$scriptPath=拆分路径-父级$MyInvocation.MyCommand.Definition
函数连接数据库($MdbFile,$Tables)
{
}#结束更新记录
函数更新ImportedPtsonSpans
{
}#结束更新导入的PTSONSSPANS
#***脚本的入口点***
##将原始数据导入Microsoft Access数据库(MDB)
$Tables=“importedptsonspan”
#测试原始数据是否通过
写入主机启动测试原始数据和MDB文件
$RawData
$MDB文件
写入主机端测试原始数据和MDB文件
#
连接数据库-MdbFile$MdbFile-tables$tables
03mdbeexport.ps1
## Setup reusable variables (e.g. MDB, excel templates)
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$Date=(get-date).tostring('MMddyyy')
$MdbFile = $scriptPath+"\Pts on Spans Analysis "+$date+".mdb"
$ExcelFile = $scriptPath+'\Pts on Spans Action '+$date+'.xls'
## 01. Connect to Oracle DB and run main query for PS raw data
write("**Starting Oracle database query and storing results... -- "+(get-date))
$01dbquery = $scriptPath+"\01dbquery.ps1"
$01ret = Invoke-Expression "& `"$01dbquery`""
write("**Finished querying Oracle DB. -- "+(get-date)); write-host
## 02. Import raw data to MDB template (Microsoft access) -- ImportedPtsonSpans
write("**Starting import of PS raw data to MDB... -- "+(get-date))
$02mdbimport = $scriptPath+"\02mdbimport.ps1"
Invoke-Expression "& `"$02mdbimport`" -RawData $01ret -MdbFile `"$MdbFile`""
write("**Finished import of PS raw data. -- "+(get-date)); write-host
## 03. Process MS Access data and export into excel
write("**Starting export of processed PS data into Excel... -- "+(get-date))
$03mdbexport = $scriptPath+"\03mdbexport.ps1"
Invoke-Expression "& `"$03mdbexport`" -ExtractName `"$ExcelFile`" -MdbFile `"$MdbFile`""
write("**Finished data export. Pts and Span Extract Completed -- "+(get-date)); write-host
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
function Get-DataTable
{
Param(
[Parameter(Mandatory=$true)]
[System.Data.OracleClient.OracleConnection]$conn,
[Parameter(Mandatory=$true)]
[string]$sql
)
$cmd = New-Object System.Data.OracleClient.OracleCommand($sql,$conn)
$da = New-Object System.Data.OracleClient.OracleDataAdapter($cmd)
$dt = New-Object System.Data.DataTable
[void]$da.Fill($dt)
return ,$dt
}
## Initiate database credential variables
<more codes here>
## Setup database connection
<more codes here>
## Perform database queries and store results
$QueryPath = $scriptPath+"\queries\main\Pts Span Qry.txt"
$Query = get-content $QueryPath | out-string
# *** Entry Point to Script ***
$RawData = Get-DataTable $conn $Query ; $RawData
param
(
[Parameter(Mandatory=$true)]$RawData,
[Parameter(Mandatory=$true)]$MdbFile
)
$ErrorActionPreference = 'Stop'
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
Function Connect-Database($MdbFile, $Tables)
{
<codes>
} #End Update-Records
Function Update-ImportedPtsonSpans
{
<codes>
} #End Update-ImportedPtsonSpans
# *** Entry Point to Script ***
## Perform import of raw data into Microsoft Access Database (MDB)
$Tables = "ImportedPtsonSpans"
# Test if raw data is passed
write-host Start Test raw data and MdbFile
$RawData
$MdbFile
write-host End Test raw data and MdbFile
#
Connect-DataBase -MdbFile $MdbFile -tables $Tables
param
(
[Parameter(Mandatory=$true)]$ExtractName,
[Parameter(Mandatory=$true)]$MdbFile
)
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
Function Export-Data($Queries,$MdbFile,$ExtractName)
{
<codes> }
} #End Export-Data
Function Export-To-Excel($ExtractName,$QueryName,$CurResult)
{
<codes> } # End Export-To-Excel
# *** Entry Point to Script ***
$QueryPath = $scriptPath+"\queries\*.txt"
$Queries = Get-ChildItem $QueryPath
Export-Data -Queries $Queries -MdbFile $MdbFile -ExtractName $ExtractName
param
(
[参数(必需=$true)]$ExtractName,
[参数(必需=$true)]$MdbFile
)
$scriptPath=拆分路径-父级$MyInvocation.MyCommand.Definition
函数导出数据($Queries、$MdbFile、$ExtractName)
{
}
}#结束导出数据
函数导出到Excel($ExtractName、$QueryName、$CurResult)
{
}#结束导出到Excel
#***脚本的入口点***
$QueryPath=$scriptPath+“\queries\*.txt”
$Queries=Get ChildItem$QueryPath
导出数据-查询$QUERES-MdbFile$MdbFile-提取名称$提取名称
提前谢谢