2016-04-12 10 views
0

後でデータベースで処理するために、いくつかのCSVドキュメントを解析して変更を保存するプロセスがあります。いずれかのCSVの1つの行(人物)が人物データベースに見つからない場合、プロセスはCSVからそのレコードを保存します。私は現在、ハッシュテーブルの文字列出力として保存しています。保存されたPSCustomObject(文字列として)をハッシュテーブルに戻す

:それはまたのキー/値のセットをあることが展開さ

@{First=Joe; Last=Smith; Office=Detroit;} 

:だからCSV文書は

First,Last,Office 
Joe,Smith,Detroit 

VS 2015でデバッガを使用してimport-csv "path to my doc.csv"からの出力は、文字列は次のように可視化されます

First | Joe 
Last | Smith 
Office | Detroit 

powershellでは、テーブル内の名前オブジェクトを$obj.Firstとして使用して、物事を進めることができます。しかし、私はその文字列をデータベースに保存することができず、使用可能なpowershellオブジェクトとして戻すことができません。私はいつも文字列リテラルで終わる。

この文字列をハッシュテーブル、または他のキー/値のペアに変換する方法はありますか?

私はこれを試して与えてくれた:

$data = ConvertFrom-String $raw -PropertyNames First,Last,Office 

私は生の文字列の両方で、その中にプロパティ名で、ちょうど戻って文字列を与える、あることを試してみました。私は、また、アレイに元のハッシュに変換しました:

[string[]]$l_array = $raw | out-string 

をその後IがConvertFrom-Stringコマンドを使用してバック変換すると、それは実際値として、データ要素をシフトし、キーを追加します。

ありがとうございました。必要に応じて詳細やサンプルコードを提供することができます。

編集 もう一方は、現在のPSCustomObjectのデータを、より良い形式で保存して、同じPSCustomObjectに再構築する方法はありますか?おそらくExport-Csvが機能するかもしれないと思ったが、文字列にエクスポートすることはできない。少なくとも私が知る限り。

+0

'Import-Csv'は、ハッシュテーブルではなくPSCustomObjectsの配列を生成します。 「見る時」とは何を意味するのか説明できますか?どのように結果を見ていますか? –

+0

私は間違っているかもしれませんが、 'PSCustomObjects'の作成はハッシュテーブルと同じように利用されていませんか?私は明確にするために投稿を更新します。 –

+0

@DaveSextonまた、タイトルを更新して、ハッシュテーブルではなく、PSCustomObjectのメモを反映させます。 –

答えて

0

あなたが探しているのは、シリアル化と呼ばれています。直接組み込みのオブジェクトシリアル化コマンドレット(Export-CliXmlおよびImport-CliXml)を使用する方法があります。

前者はオブジェクトをXMLファイルとして保存します。これはディスクとデータベースに保存できます。オブジェクトを後で必要とするときは、XMLドキュメントを取得してデシリアライズしてオブジェクトを再作成します。同様に、

# Create simple object 
$o = New-Object -TypeName PSObject 
$o | Add-Member -Name "Attr1" -Value "Val1" -MemberType NoteProperty 
$o | Add-Member -Name "Attr2" -Value "Val2" -MemberType NoteProperty 
$o 

Attr1 Attr2 
----- ----- 
Val1 Val2 

# Serialize it 
Export-Clixml -Path ./myObj.xml -InputObject $o 

# Deserialize as another object, print it 
$p = Import-Clixml -Path .\myObj.xml 
$p 

Attr1 Attr2 
----- ----- 
Val1 Val2 

# Look at file contents for magic!  
Get-Content .\myObj.xml 
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04"> 
    <Obj RefId="0"> 
    <TN RefId="0"> 
     <T>System.Management.Automation.PSCustomObject</T> 
     <T>System.Object</T> 
    </TN> 
    <MS> 
     <S N="Attr1">Val1</S> 
     <S N="Attr2">Val2</S> 
    </MS> 
    </Obj> 
</Objs> 
+0

これをよりダイナミックにできますか?私はこのような強く型付けされたものを避けようとしています。 –

+0

@TimMeersおそらく。オブジェクトの何が問題なのかを詳しく説明できますか?回避策を発明するのは簡単でしょうか?オブジェクトはPowershellがとにかく輝く場所で、私はそれらを避ける理由はほとんど見当たりません。 – vonPryz

+0

それは私が避けていることではありません。それは 'import-csv'のように動作するようにしようとしています。名前を知らずに名前付きオブジェクトをCSVからインポートします。ここにはすでにPSCustomObject文字列がありますが、どのように変換できないのでしょうか? –

関連する問題