【问题标题】:Powershell Separate csv data into separate rowsPowershell 将 csv 数据分隔成单独的行
【发布时间】:2022-08-14 17:50:37
【问题描述】:

我有以下脚本,它为我提供了我需要的信息。

$Monitors = Get-WmiObject WmiMonitorID -Namespace root\\wmi
$LogFile = \"d:\\monitors.csv\"

\"Manufacturer,Name,Serial\" | Out-File $LogFile

ForEach ($Monitor in $Monitors)
{
    $Manufacturer = ($Monitor.ManufacturerName|where {$_ -ne 0}|ForEach{[char]$_}) -join \"\"
    $Name = ($Monitor.UserFriendlyName  |where {$_ -ne 0}| ForEach{[char]$_}) -join \"\"
    $Serial = ($Monitor.SerialNumberID  |where {$_ -ne 0}| ForEach{[char]$_}) -join \"\"

    \"$Manufacturer,$Name,$Serial\" | Out-File $LogFile -append
}

我的问题是数据像这样导出到excel电子表格..

制造商、名称、序列号。

ACI,VE248,K8LMQS048382

HWP,HP P232,6CM8122DXL

HWP,HP P232,6CM7241DRB

我需要它是:

Manufacturer   Name   Serial 

在电子表格中,当我做下一台电脑时,它会添加到下一行,依此类推。

我在网上查过,例子不匹配。

有人有建议吗?

  • 为什么不直接使用Export-Csv?:Get-WmiObject WmiMonitorID -Namespace root\\wmi |Select-Object Manufacturer, Name, Serial |Export-Csv -append $LogFile
  • +1 对 iRon 所说的话。 Get-WmiObject WmiMonitorID -Namespace root\\wmi | Select-Object @{n = \'Manufacturer\'; e = { ($_.ManufacturerName | Where-Object { $_ -ne 0 } | ForEach-Object { [char]$_ }) -join \'\' } }, @{n = \'Name\'; e = { ($Monitor.UserFriendlyName | Where-Object { $_ -ne 0 } | ForEach-Object { [char]$_ }) -join \'\' } }, @{n = \'Serial\'; e = { ($Monitor.SerialNumberID | Where-Object { $_ -ne 0 } | ForEach-Object { [char]$_ }) -join \'\' } } | Export-Csv -Path $LogFile
  • 当我运行它时,我在第一行 #TYPE Selected.System.Management.ManagementObject 得到这个,当我再次运行它时,它会删除信息而不是将其添加到下一行......
  • -NoTypeInformation -Append 添加到Export-Csv 命令然后...
  • 很抱歉打扰了,但是当我运行时,所有 3 个型号都相同。这需要tweeked吗?

标签: excel powershell format


【解决方案1】:

正如其他人已经评论的那样,使用Export-Csv 以 csv 格式写出所需的数据,而不是手动构建它。
这意味着您的 ForEach-Object 循环应该发出对象而不是串联的字符串行。

另外,现在,我会使用较新的 Get-CimInstance 而不是 Get-WmiObject (What's the difference)

尝试

$LogFile = "d:\monitors.csv"
Get-CimInstance -ClassName WmiMonitorID -Namespace root\wmi | ForEach-Object {
    [PsCustomObject]@{
        Manufacturer = [string]::new($_.ManufacturerName, 0, $_.ManufacturerName.Length).Trim("`0")
        Name         = [string]::new($_.UserFriendlyName, 0, $_.UserFriendlyName.Length).Trim("`0")
        Serial       = [string]::new($_.SerialNumberID, 0, $_.SerialNumberID.Length).Trim("`0")
    }
} | Export-Csv -Path $LogFile -NoTypeInformation -UseCulture

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    相关资源
    最近更新 更多