将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

我正在编写一个脚本,该脚本将执行以下操作:

  • 连接到Oracle DB并运行主查询以提取原始数据。-已经作为单元测试工作
  • 将原始数据导入Microsoft access数据库模板(.mdb)-以单元测试方式工作,但与脚本1集成时遇到错误
  • 连接到MS Access数据,运行筛选(子)查询,并将结果导出到单独的excel选项卡中。-已经作为单元测试工作
  • *无法直接在Oracle数据库上运行(子)查询,因为在Oracle数据库上执行的查询(原始数据)大约需要5个小时,因此原始数据将首先导入Microsoft access进行处理,然后运行(子)查询

    我已经为每个项创建了Powershell脚本,并创建了一个主脚本,用于调用和提供每个项的参数。它们已经过单元测试

    1-01.dbquery.ps1
    [参数:无;返回:原始数据]

    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-提取名称$提取名称
    
    提前谢谢