Inventory Out-File с новой строкой - PullRequest
0 голосов
/ 03 июня 2019

У меня есть сценарий Inventory Powershell, который я пытаюсь вывести в CSV. Моя цель состоит в том, чтобы выводить каждое выполнение скрипта в отдельную строку по их столбцам.

Я пробовал Export-Csv, но поскольку я использую переменные, CSV отображает (я догадываюсь) метаданные.


    $ComputerName =  Get-WmiObject Win32_OperatingSystem  | select -ExpandProperty CSName
    $OS_Name = Get-WmiObject Win32_OperatingSystem  | Select-Object -ExpandProperty Caption 
    $OS_Architecture = Get-WmiObject Win32_OperatingSystem  | select -ExpandProperty OSArchitecture
    $System_Manufacturer = Get-WmiObject win32_computersystem  | select -ExpandProperty Manufacturer
    $Model = Get-WmiObject win32_computersystem  | select -ExpandProperty Model
    $CPU_Manufacturer = Get-WmiObject Win32_Processor  | select -ExpandProperty Name
    $Disk_Size_GB = Get-WmiObject win32_diskDrive  | Measure-Object -Property Size -Sum | % {[math]::round(($_.sum /1GB),2)}
    $Physical_Memory_GB = Get-WMIObject -class Win32_PhysicalMemory  | Measure-Object -Property capacity -Sum | % {[Math]::Round(($_.sum / 1GB),2)}
    $Version=(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId
    $InstallDate= systeminfo | find /I “Install Date”
    $Assettag=(Get-WmiObject -Class Win32_SystemEnclosure | Select-Object SMBiosAssetTag).SMBiosAssetTag 
    $SerialNumber =  (Get-WmiObject -Class Win32_BIOS | Select-Object SerialNumber).SerialNumber


  ($Assettag, $ComputerName, $System_Manufacturer, $Model, $OS_Name, $Version, $SerialNumber | Format-Table | Out-File C:\Users\1\Desktop\Newinvent.csv  )

Я ожидаю, что каждая строка будет заполнена при каждом выполнении Спасибо

Ответы [ 3 ]

1 голос
/ 03 июня 2019

И попробуйте посмотреть на результат из Get-ComputerInfo - большинство ваших потребностей там удовлетворены.

1 голос
/ 03 июня 2019

Если вы хотите использовать Export-Csv, вам нужен объект со свойствами, которые содержат имена и значения, которые вы хотите экспортировать. Один из способов сделать это - создать [PSCustomObject] со всеми вашими свойствами, определенными в хеш-таблице. Вы можете передать этот пользовательский объект в команду Export-Csv.

[PSCustomObject]@{"ComputerName" = $ComputerName
        "OS_Name" = $OS_Name
        "OS_Architecture" = $OS_Architecture
        "System_Manufacturer" = $System_Manufacturer
        "Model" = $Model
        "CPU_Manufacturer" = $CPU_Manufacturer
        "Disk_Size_GB" = $Disk_Size_GB
        "Physical_Memory_GB" = $Physical_Memory_GB
        "Version" = $Version
        "InstallDate" = $InstallDate
        "Assettag" = $Assettag
        "SerialNumber" = $SerialNumber
} | Export-Csv -Path file.csv -NoTypeInformation -Append
0 голосов
/ 03 июня 2019

Я бы избежал затрат времени Systeminfo

> (Measure-Command {$systeminfo=(systeminfo) 2>$NULL}).Totalseconds
3,0428012

А также Get-ComputerInfo

$OldProgressPreference = $ProgressPreference
$ProgressPreference = 'SilentlyContinue'
(Measure-Command {$ComputerInfo = Get-ComputerInfo}).Totalseconds
3,1837208
$ProgressPreference = $OldProgressPreference

И используйте оптимизированную версию вашего скрипта, которая получает / конвертирует InstallDate из реестра:

> (Measure-Command{Q:\Test\2019\06\03\SO_56429703.ps1}).TotalSeconds
1,635074
Get-Content file.csv

## Q:\Test\2019\06\03\SO_56429703.ps1

function RoundGB($Size){
  [math]::round(($Size/1GB),2)
}

$Win32OS = Get-WmiObject Win32_OperatingSystem
$Win32CS = Get-WmiObject Win32_ComputerSystem
$CurrVer = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
$InstDate= [timezone]::CurrentTimeZone.ToLocalTime([datetime]'1/1/1970').AddSeconds(
           (Get-ItemProperty $CurrVer).InstallDate)

$inventory = [PSCustomObject]@{
    ComputerName      = $Win32OS.CSName
    OSName            = $Win32OS.Caption
    OSArchitecture    = $Win32OS.OSArchitecture
    SystemManufacturer= $Win32CS.Manufacturer
    Model             = $Win32CS.Model
    CPUManufacturer   = (Get-WmiObject Win32_Processor).Name
    DiskSizeGB        = RoundGB (Get-WmiObject Win32_DiskDrive      | Measure-Object Size -Sum).Sum
    PhysicalMemoryGB  = RoundGB (Get-WMIObject Win32_PhysicalMemory | Measure-Object capacity -Sum).Sum
    Version           = (Get-ItemProperty -Path $CurrVer -Name ReleaseId).ReleaseId
    InstallDate       = $InstDate
    Assettag          = (Get-WmiObject Win32_SystemEnclosure).SMBiosAssetTag
    SerialNumber      = (Get-WmiObject Win32_BIOS).SerialNumber
}
$Inventory | Export-Csv -Path file.csv -NoTypeInformation -Append
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...