16

これは簡単な質問だと思いますが、頭を抱えることはできません。Windowsのコマンドシェルで診断コマンドを実行したい。このような:

   $cmd =  "ipconfig >> c:\test.txt"

   $message = Invoke-Expression($cmd)

   [String]$message = Get-Content c:\topsecret\testme.txt

次に、ファイルを読み取ってフォーマットを保持し、最後にAPIを介してpastebinに公開できるようにします。試しましたが、何をしてもフォーマットが失われるようです。これは可能ですか?

4

3 に答える 3

39

これはキャストが原因で発生します。Get-Contentテキストファイルの1行に文字列オブジェクトを含むオブジェクト配列を返します。にキャストすると[string]、配列内のオブジェクトが結合されます。問題は、オブジェクトを結合する対象を指定しないことです(例:改行(backtick)n)。

ipconfig >> test.txt

#Get array of strings. One per line in textfile
$message = Get-Content test.txt

#Get one string-object with linebreaks
$message = (Get-Content test.txt) -join "`n"
于 2013-02-23T15:04:05.983 に答える
24

改行を埋め込んだ単一の文字列としてすべてのデータを読み取るには

$file = 'c:\testfiles\testfile.txt'

(IPconfig /all) > $file

[IO.File]::ReadAllText($file)

V3を使用している場合は、同じことを実行する-Rawパラメーターが追加されています。

Get-Content $file -Raw
于 2013-02-23T15:12:31.120 に答える
1

おそらく、文字列の配列にキャストします。このように、最後の例では:

$message = @(Get-Content c:\topsecret\testme.txt)

またはこれは2番目のものです:

$message = [string[]](ipconfig)
于 2013-02-23T15:02:25.053 に答える