【问题标题】:Exporting powershell script output to local SQLtable将 powershell 脚本输出导出到本地 SQLtable
【发布时间】:2015-12-03 11:30:59
【问题描述】:

我正在尝试将以下脚本的输出直接导出到本地 sql 表,而不是使用 CSV 作为中介。有没有办法将下面脚本的输出直接导出到本地sql表中。

Get-Content "C:\test\computers.txt" | Where-Object { $_.Trim() -ne "" } |
    ForEach-Object {
        Invoke-Command -Computer $_ -ScriptBlock {

            Param($computer)

            $Database = "secaudit"
            $AttachmentPath = "C:\test\SQLData.csv"
            $SqlQuery = "xp_fixeddrives"

            $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
            $SqlConnection.ConnectionString = "Data Source=$computer;Initial Catalog=$Database;Integrated Security = True"

            $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
            $SqlCmd.CommandText = $SqlQuery
            $SqlCmd.Connection = $SqlConnection

            $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
            $SqlAdapter.SelectCommand = $SqlCmd

            $DataSet = New-Object System.Data.DataSet
            $nRecs = $SqlAdapter.Fill($DataSet)

            $nRecs | Out-Null
            $objTable = $DataSet.Tables[0]
            $DataSet.Tables[0]
        } -ArgumentList $_ -Credential $cred

    } | Select-Object PSComputerName, Drive, "MB Free" |
        Export-Csv -Path "C:\test\output_space.csv" -NoTypeInformation

$query = @"
BULK INSERT [Test1].[dbo].[table_1] FROM "C:\test\output_space.csv" WITH (FIRSTROW = 2, FIELDTERMINATOR = ",", ROWTERMINATOR = "\n")
"@

sqlcmd -S "CSCINDAE680687" -E -Q $query

【问题讨论】:

  • 只是一个提示:粘贴所有代码,然后选择所有代码并按 Ctrl+K 格式化:)
  • 考虑使用 SqlBulkCopy 类:msdn.microsoft.com/en-us/library/…
  • @DanGuzman 你碰巧有任何参考代码吗?这是我自己尝试整理的东西,但是如果您有代码,我很乐意重新利用其他人的工作;)

标签: sql-server csv powershell


【解决方案1】:

这是一个示例函数,它采用连接字符串、目标表名称和要加载的行的数据表。默认情况下,列按序号映射,但如果需要,您可以使用 SQlBulkCopyColumnMappings 指定不同的映射。

Function Insert-TargetTable
{

    param(
          [Parameter(Mandatory=$True)]
            [string]$TargetDatabaseConnectionString
        , [Parameter(Mandatory=$True)]
            [string]$TargetTableName
        , [Parameter(Mandatory=$True)]
            [System.Data.DataTable]$DataTable
    ) 

    $bcp = New-Object System.Data.SqlClient.SqlBulkCopy($TargetDatabaseConnectionString);
    $bcp.DestinationTableName = $TargetTableName;
    $bcp.WriteToServer($DataTable);
    $bcp.Close();

}

【讨论】:

    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多