0

让我们首先说我是 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

“服务”

“系统。对象 []”

所以它不会获取 service.caption (因为太多了?)。但是如果我用输出文件 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 更新服务等...

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

任何帮助表示赞赏!

4

1 回答 1

0

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

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

将创建一个分号分隔的字符串,您必须在以后使用 csv 的任何应用程序中将其拆分回来。

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

于 2013-12-02T15:12:17.280 回答