2012-11-13 11 views
9
にヒアドキュメントを連結するか、使用しているとき

は私が内容はPowerShellの

line 1 
line 2 

で文書c:\temp\temp.txtを持っていると私はその後PS> wrapit((Get-Content c:\temp\temp.txt))

意志の出力を実行し、以下の機能

PS>function wrapit($text) { 
@" 
---Start--- 
$text 
---End--- 
"@ 
} 

を作成すると改行を保存します

---Start--- 
line 1 line 2 
---End--- 

改行を保存するにはどうすればよいですか?補間と補間は役に立ちません。

I found this related questionですが、ここでは文字列配列を使用しています。私はそれに改行文字を持つ単一の文字列を使用しています(文字列ではなく、配列で作業していることを確認してください)。私は世界のすべての文字列を解析してそれをハンマーで動かすことができますが、丸い穴に四角いペグを打っているようです。私が紛失している概念は何ですか?

答えて

10

簡単な方法を介して[system.io.file]::ReadAllText('c:\temp\temp.txt')を使用してファイルを読み込むことだったです:

wrapit((Get-Content c:\temp\temp.txt | out-string)) 

ここでの説明:Here-strings @ ""は文字列のように振る舞います ""結果は変数展開のPowerShellの動作によるものです。ただ、試してみてください。

$a = Get-Content c:\temp\temp.txt 
"$a" 

あなたのコメントについて:

$a | Get-Member 
TypeName: System.String 
... 

しかし

Get-Member -InputObject $a 
TypeName: System.Object[] 
... 

最初の答えは(それが文字列を受け取る)OKです。それはたびにSystem.stringを繰り返しません。 2番目のパラメータでは、配列としてパラメータを受け取ります。

+0

もし私が正しいのであれば、それは主に型強制の問題のようです。それはうまくいけば、私はちょうど地上でなぜGet-Memberがタイプが「システム」であると私に言ったのか混乱しています。String' –

+0

あなたのコメントに答えるために私の答えを編集します。 – JPBlanc

+0

Oooooh、そうです、私はいつもパイプがそうする方法を忘れています。 Dang。その時間のほとんどは、この時間は私を何時間も混乱させました。 –

6

調査時...

の息子、Get-Contentは、文字列の配列を返すようです。もちろんデフォルトの文字である' 'に参加することによって、デフォルトで文字列に強制されます。

本当に困惑しているのは、結果が文字列にget-memberで強制される理由です。 それはなぜ起こるのか誰にも分かりますか?私は明示的にどのような場合にはGet-Type

を確認するまで問題が明らかではなかった、解決策は、あなたがやりたいGet-Content

+0

これは自動的に配列をアンラップし、配列の_type_のタイプを示します(意味がある場合)。 – Nacht

+0

'$ var.gettype()'を使って変数の実際の型を教えてください – Nacht

+1

'Get-Content -raw'も同様です。 PS> = 3が必要です。 – davidhigh