使用PowerShell格式化表格以导出为CSV

3

我睡眠不足且压力很大,所以这可能非常简单,但我仍然无法弄清楚。

我想要导出各种东西,如服务、进程、防火墙规则、本地用户等,作为 CSV 文件,但每当我将其导出为 CSV 时,在 Excel 中打开它时只有 1 列。

我只想让输出按列分隔,这样我就可以在 Excel 中获得简单的概述。

Get-Service | Sort-Object Status | Format-Table -AutoSize | Out-String -Width 10000 | Out-File -Append "C:\temp\Test.csv"

但这是我得到的输出结果: 服务 如果我使用Export-CSV CMD,就会出现以下情况: 服务

3
Format-Table 命令创建的是固定宽度表格,而不是逗号分隔值(CSV)。在文本导入向导中,您需要尊重这一点。 - JosefZ
2个回答

3

PowerShell的默认CSV分隔符是逗号。为了使Excel正确读取CSV文件,可以使用-Delimiter参数将其更改为分号:

Get-Service | sort Status | Export-Csv "C:\temp\Test.csv" -NoTypeInfo -Delim ";"

或者使用-UseCulture开关(感谢@JosefZ),它使用与Excel相同基于区域的ListSeperator设置:

Get-Service | sort Status | Export-Csv "C:\temp\Test.csv" -NoTypeInfo -UseCulture

1
是的,你的第二张图片是一个Excel问题,不是一个导出问题。 - Scepticalist
1
太好了!! 非常感谢Marsze,如果你有机会来阿姆斯特丹,我请你喝咖啡:D - Levi Hen
1
请使用-UseCulture开关代替-Delimiter ";" - JosefZ

2
为什么不直接导出为csv呢?"最初的回答"
Get-Service | Select Name,DisplayName,Status | Sort-Object Status | Export-Csv "C:\temp\Test.csv" -NoTypeInformation

同样的事情发生了,我也添加了一张截图。 - Levi Hen
@LeviHen 省略 | Select Name,DisplayName,Status 部分以获取所有属性。 - JosefZ
@JosefZ 我已经这样做了,因为我想要所有的信息!! :D 但说真的,我只想从PowerShell中得到一个格式化的表格,我可以在Excel中打开并将其拖放到Confluence或类似的文档客户环境中。我可以为自己使用TXT(那里的格式看起来很棒),但有些人需要在Excel中阅读它,所以我现在被卡住了 :D - Levi Hen
不确定@LeviHen在Excel中做了什么导致出现这些问题,但是这个答案对我来说完美地解决了问题。 - henrycarteruk
1
我在两个系统上尝试了这个,它们都配备了原始的Windows和Office(2010和2016)。这可能与时间/位置有关,因为当我开始玩弄这些设置时,我可以让它工作,问题是我不能(不应该)在生产服务器上更改这些设置 ;)无论如何,Marsze上面的解决方案使用-delim“;”对我来说很有效,也很实用。 - Levi Hen
1
区域设置的差异很有趣。我想知道欧洲分隔符默认是否为分号,因为欧元定价中有逗号 €3,99.. 在英国这里是点 £3.99,所以逗号不会分割价格列。 - henrycarteruk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接