2011-12-29 11 views
1

私のサーバーにはpowershellバージョン2.0.0.1082があります。テキストファイルからSQLサーバーにデータをインポートし、SQL 2008データベースへの入力に2つの新しいフィールド(文字と現在の日時)を追加します。私は一括インポートまたは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'を使ってデータをデータベースに追加することができます。 –

+0

はい。私は問題のコードを更新しました。これの問題は...何も表示されていません。私はSQL部分にジャンプする前に出力を最初に見たいと思った – Manjot

答えて

1

あなたは、パイプラインの上のオブジェクトを転送したりするForEachブロックの最後にすべて自身で$_を入れてAdd-Memberコマンドレットに-PassThruスイッチを追加する必要がありますどちらか。ここで

-PassThruを使った例です:

-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 

もう一つの例:

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 

あなたはそのInvoke-SqlCmdコマンドレットを使用することができ、データベースに入力するために、あなたのCSVデータを準備したらインサートを実行するSQL Server 2008が付属しています。どのようにMSDN hereに関する豊富な情報がありますか。

+0

ありがとう。なぜそれが各テキストを ""で区切っているのか? – Manjot

+0

@Manjot CSVテキストファイルを参照している場合、空白を含む値は二重引用符で囲まれ、単一のトークンとして扱われます。インポート-CSVでインポートした後のプロパティ値は二重引用符は表示されません –

+0

すばやい返信ありがとうございますはいImport-CSVを使用しても表示されませんが、出力をSQLに直接エクスポートすることはできませんSQLデータベースにインポートするフィールドを追加するテキストファイルが10あります。更新されたデータをファイルにエクスポートしてSQLデータベースにインポートしていますが、前述のようにinvoke-sqlcmdを確認しましたが、 – Manjot

関連する問題