【发布时间】: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