これは簡単な質問だと思いますが、頭を抱えることはできません。 Windowsのコマンドシェルで診断コマンドを実行したい。このような:
$cmd = "ipconfig >> c:\test.txt"
$message = Invoke-Expression($cmd)
[String]$message = Get-Content c:\topsecret\testme.txt
次に、ファイルを読み取ってフォーマットを保持し、最後にAPIを介してPastebinに公開できるようにします。試しましたが、何をしてもフォーマットが失われるようです。これは可能ですか?
これはキャスティングが原因で発生します。 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"
改行を埋め込んだ単一の文字列としてすべてのデータを読み取るには
$file = 'c:\testfiles\testfile.txt'
(IPconfig /all) > $file
[IO.File]::ReadAllText($file)
V3を使用している場合は、同じことを実行する-Rawパラメーターが追加されています。
Get-Content $file -Raw
おそらく、文字列の配列にキャストします。このように、最後の例では:
$message = @(Get-Content c:\topsecret\testme.txt)
またはこれは2番目のものです:
$message = [string[]](ipconfig)