让我们首先说我对Powershell很新,而不是那个使用它的代码和脚本但是试图学习的最伟大的人。现在来问题了!
我正在开发一个从网络中的计算机获取信息的脚本。我有一些代码可以很好地用于我的目的。但是当涉及到一些信息时,我遇到了一些问题,主要是包含多个对象的信息,比如服务。
#This application will pull information from a list of devices. The devices list is
sent with C:\Users\test.txt and output is pushed to a file C:\Users\devices.csv
function kopiera
{
param
(
[Parameter(ValueFromPipeline=$true)]
[string[]]$Computer=$env:computername
)
Process
{
$computer | ForEach-Object{
$service=Get-WmiObject -Class Win32_Service -Computername $_
$prop= [ordered]@{
Service =$service.caption
}
New-Object PSCustomObject -Property $prop
}
}
}
Get-Content C:\Users\test.txt | kopiera | Export-csv c:\Users\devices.csv
当我导出csv文件时,它看起来像这样:
TYPE System.Management.Automation.PSCustomObject
“服务”
“System.Object的[]”
所以它没有获取service.caption(因为有太多?)。 但如果我用out-file C:\ Users \ devices.txt替换export-csv C:\ Users \ device.csv,它看起来就像这样:
{Adobe Acrobat更新服务,Adobe Flash Player更新服务,Andrea ADI过滤服务,应用程序体验......}
所以它开始看起来更好,但它并没有全部得到它们(仍然因为服务太多了?)。我想对这个导出/输出文件做的是让信息垂直显示而不是水平显示。
(通缉结果)
Adobe Acrobat服务
Adobe Flash Player更新服务
依旧......
代替: (实际结果)
Adobe Acrobat更新服务,Adobe Flash Player更新服务等等......
有没有办法让这成为可能,尝试了一段时间,无法将我的大脑包裹起来。
感谢任何帮助!
答案 0 :(得分:0)
CSV通常不是导出包含多值或复杂属性的对象的理想选择。对象属性将转换为单个字符串值。存储值数组的唯一方法是将其转换为分隔的字符串。
$prop= [ordered]@{
Service =($service.caption) -join ';'
}
将创建一个以分号分隔的字符串,您将不得不处理将其拆分为以后使用csv的任何应用程序。
如果要使用属性作为数组保存并重新导入原始对象,可以切换到Export-CLIXML而不是Export-CSV。