Powershell输出到文本文件

时间:2017-09-28 18:36:46

标签: powershell

我正在创建一个脚本,从我们的服务器中提取所有日期和时间信息。该脚本从文本文件中获取服务器。我正在获取要写入文本文件的脚本的输出。

我尝试使用带有Out-File的管道,如下所示:

$servers = gc "C:\Users\Public\Shell_NTP\TestList.txt"

foreach ($server in $servers){
$dt = gwmi win32_operatingsystem -computer $server
$dt_str = $dt.converttodatetime($dt.localdatetime)
write-host "$($server) current local time is $($dt_str)" | Out-File 
"C:\Users\Public\Shell_NTP\TestListOutput.txt"

然后我尝试了简单的胡萝卜输出:

$servers = gc "C:\Users\Public\Shell_NTP\TestList.txt"

foreach ($server in $servers){
$dt = gwmi win32_operatingsystem -computer $server
$dt_str = $dt.converttodatetime($dt.localdatetime)
write-host "$($server) current local time is $($dt_str)" > 
C:\Users\Public\Shell_NTP\TestListOutput.txt

这也不起作用。所以任何帮助或建议都会很棒。

TL; DR尝试将powershell输出转换为文本文件或其他一些更有用的文件格式。

2 个答案:

答案 0 :(得分:1)

请勿使用write-host - 使用write-output

write-host只会将您的字符串输出到控制台,数据不会沿着pipleline传递。

答案 1 :(得分:0)

您不需要使用write-output

"text" | Out-File ...
  

到文本文件或其他一些更有用的文件格式

CSV是一种更实用的格式。您正在编写的格式是您必须再次处理以从文本中取回数据的格式。 CSV,您只需Import-Csv即可将其恢复。或者在Excel等中打开

gc "C:\Users\Public\Shell_NTP\TestList.txt" | ForEach {

    $dt = gwmi win32_operatingsystem -Computer $_

    [PSCustomObject]@{
        'ServerName' = $_
        'DateTime' = $dt.converttodatetime($dt.localdatetime)
    }

} | Export-Csv C:\Users\Public\Shell_NTP\TestListOutput.csv -NoTypeInformation