Export-csv格式化。电源外壳

时间:2013-12-02 14:52:07

标签: powershell csv wmi psobject

让我们首先说我对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过滤服务,应用程序体验......}

所以它开始看起来更好,但它并没有全部得到它们(仍然因为服务太多了?)。我想对这个导出/输出文件做的是让信息垂直显示而不是水平显示。

(通缉结果)

Adob​​e Acrobat服务

Adob​​e Flash Player更新服务

依旧......

代替: (实际结果)

Adob​​e Acrobat更新服务,Adobe Flash Player更新服务等等......

有没有办法让这成为可能,尝试了一段时间,无法将我的大脑包裹起来。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

CSV通常不是导出包含多值或复杂属性的对象的理想选择。对象属性将转换为单个字符串值。存储值数组的唯一方法是将其转换为分隔的字符串。

$prop= [ordered]@{
                  Service =($service.caption) -join ';'
                 }

将创建一个以分号分隔的字符串,您将不得不处理将其拆分为以后使用csv的任何应用程序。

如果要使用属性作为数组保存并重新导入原始对象,可以切换到Export-CLIXML而不是Export-CSV。