2011-12-29 53 views
1

我的服務器上有PowerShell版本2.0.0.1082。我想將文本文件中的數據導入SQL服務器,並向SQL 2008數據庫的輸入添加兩個新字段(字符和當前日期時間)。我一直在使用批量導入或SSIS來做到這一點,但我想使用PowerShell來簡化維護過程。該文件頂部有列名,每個字段由「|」分隔。 目前代碼:導入數據到SQL並添加字段輸入

clear 

import-csv "Disk.txt" -Delimiter "|" | 
foreach { add-member -in $_ -membertype noteproperty DateRecorded $((Get-Date).ToString("yyyy-MM-dd")) 
add-member -in $_ -membertype noteproperty SystemName 'System Name' 
add-member -in $_ -membertype noteproperty Drive 'Drive Letter' 
add-member -in $_ -membertype noteproperty TotalSizeGB 'Total Size' 
add-member -in $_ -membertype noteproperty UsedGB Used 
add-member -in $_ -membertype noteproperty FreeGB Free 
add-member -in $_ -membertype noteproperty PercentFree '% Free'}| 
select DateRecorded,SystemName,Drive,TotalSizeGB,UsedGB,FreeGB,PercentFree |Format-Table 

有什麼想法嗎?

謝謝!

Manjot

+0

你有任何代碼開始?你卡在任何特定的部分?對於初學者來說,你需要使用'import-csv'並循環每個對象並添加額外的字段。之後,您可以使用'invoke-sqlcmd'將數據添加到數據庫。 – 2011-12-29 21:43:54

+0

是的。我更新了有問題的代碼。這個問題是......它沒有顯示任何東西。我想在跳轉到SQL部分之前先看到輸出結果 – Manjot 2011-12-29 21:52:41

回答

1

你要麼需要在-PassThru開關在管道添加到Add-Member cmdlet來轉發的對象上或者在給ForEach塊年底建成$_所有的本身。

下面是一個例子使用-PassThru

Import-Csv "Disk.txt" -Delimiter "|" | ForEach { 
    Add-Member -InputObject $_ -MemberType NoteProperty -name "DateRecorded" -value $((Get-Date).ToString("yyyy-MM-dd")) 
    Add-Member -InputObject $_ -MemberType NoteProperty -name "SystemName" -value 'System Name' -PassThru 
} | Select DateRecorded,SystemName,Drive,TotalSizeGB,UsedGB,FreeGB,PercentFree | Format-Table 

又如無-PassThru

Import-Csv "Disk.txt" -Delimiter "|" | ForEach { 
    Add-Member -InputObject $_ -MemberType NoteProperty -name "DateRecorded" -value $((Get-Date).ToString("yyyy-MM-dd")) 
    Add-Member -InputObject $_ -MemberType NoteProperty -name "SystemName" -value 'System Name' 
    $_ 
} | Select DateRecorded,SystemName,Drive,TotalSizeGB,UsedGB,FreeGB,PercentFree | Format-Table 

一旦你準備好CSV數據輸入到數據庫中,你可以使用Invoke-SqlCmd的cmdlet,隨SQL Server 2008一起執行插入。有關MSDN here的豐富信息可向您展示如何。

+0

謝謝。任何想法爲什麼它用「」分隔每個文本?我不希望在我的數據庫中看到「C:」等 – Manjot 2011-12-30 02:08:06

+0

@ Manjot如果你指的是CSV文本文件,其中包含空格的值將被雙引號,因此它們被視爲單個令牌。使用'Import-Csv'導入它後的屬性值不會看到雙引號。 – 2011-12-30 02:21:25

+0

感謝您的快速回復。是的,在使用Import-CSV時看不到它,但我無法直接將輸出導出到SQL數據庫,有10個文本文件,我添加了字段,導入到SQL數據庫,我將更新後的數據導出到文件,然後導入到SQL數據庫,我檢查過你提到的invoke-sqlcmd,但它不接受直接輸入。厭倦使用批量導入,但它保留雙引號。 – Manjot 2011-12-30 02:29:37

相關問題