2017-10-23 14 views
0

からすべてのCSVの列Iは、csvファイルを持っている:ファイルを通じてPowerShellのバリアブル印刷ファイル

"SamAccountName","UserPrincipalName","Telephonenumber" 
"TUser","[email protected]","+15551112222" 

Iループ:

$csvfile = Import-Csv $path 
foreach ($row in $csvfile) { 
    Write-Host $row.SamAccountName, "$row.SamAccountName" 
} 

最初$row.SamAccountNameは、CSVファイルからのSAMアカウント名の文字列を出力。同じ変数を引用符で囲むと、配列が出力されます。私の出力は次のようになります。

TUser @{SamAccountName=TUser; [email protected]; Telephonenumber=+15551112222}.SamAccountName 

私は$row.SamAccountName.GetType()が行う場合はそのSystem.Stringを言います。では、なぜそれを引用符で囲んで配列を出力するのでしょうか?

答えて

1

を:

"$row.SamAccountName" 

のみ$rowはの一部として認識されます変数であり、$rowはそれが出力する配列です。あなたが書きたい場合は、文字列の全部を.ToString()に探したり、次のように変数にあなたの元の文をラップしてみてください。

"$($row.SamAccountName)" 

そのように、変数のすべての部分を検討します。

1

配列を印刷していないため、オブジェクトのテキスト解釈が印刷されています。

文字列内のオブジェクトプロパティを補間する場合は、構文"$($object.property)"を使用する必要があります。そこで、以下のように変更することで動作します:

$csvfile = Import-Csv $path 
foreach ($row in $csvfile) { 
    Write-Host $row.SamAccountName, "$($row.SamAccountName)" 
} 

またはフォーマット文字列演算子を使用します。あなたはこのようにそれを書くとき

$csvfile = Import-Csv $path 
foreach ($row in $csvfile) { 
    "{0}" -f $row.SamAccountName 
} 
0

"$ row.SamAccountName"の前後に二重引用符を使用すると、行IEからその行のオブジェクトの配列を印刷するようにPowerShellに指示します。

TUser @{SamAccountName=TUser; [email protected]; Telephonenumber=+15551112222}.SamAccountName 

これはあなたの書き込みホストステートメントです。まず、$ row.SamAccountNameと2行目のRowオブジェクト、つまり配列を追加します。二重引用符で囲まれた.SamAccountNameはリテラル文字列として扱われるため、値を取得するために行にアクセスしていません。

あなただけの二重引用符で$行を置く場合は、これを取得します:

@{SamAccountName=TUser; [email protected]; Telephonenumber=+15551112222} 

あなたは、サブ表現にアクセスしようとしている。この場合、変数の使用前後に二重引用符を使用したい場合

"$($row.SamAccountName)" 

これはsubExpressionフォームです。

以下のリンクは、エスケープ文字と文字列の連結について学ぶのに役立ちます。 https://ss64.com/ps/syntax-esc.html

関連する問題