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返回一个对象数组,文本文件中的每行都有一个字符串对象。当您将其转换为 时[string],它会连接数组中的对象。问题是您没有指定要使用什么来连接对象(例如 linebreak (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)

或者这是第二个:

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