SCCM PowerShell-Ausgabe

SCCM PowerShell-Ausgabe

Ich habe ein PS-Skript geschrieben, um herauszufinden, wann eine Maschine das letzte Mal gebootet wurde (tatsächlich eingeschaltet und nicht nur hochgefahren, da wir in Win10 den Schnellstart aktiviert haben). Das Skript scheint seinen Job zu machen, es gibt Startdatum/-zeit, letzten Benutzer und Hostnamen zurück. Ich führe dies jedoch als Skript in SCCM aus und bin mir nicht sicher, wie ich am besten mit der Ausgabe im großen Maßstab umgehen soll.

Im Moment gibt das Skript in eine Hashtabelle aus, damit ich jedem Wert einen Schlüssel zuweisen kann, der die Ergebnisse liest. Aber ich denke, wenn Sie dies auf 50 Maschinen ausführen, möchten Sie die Ergebnisse in eine Tabelle oder etwas anderes einfügen können, um sie zu sortieren/filtern. Aber das Kopieren von Hashtabellenergebnissen ist für mehrere Geräte nicht gut formatiert.

Hat jemand einen Rat, wie man das am besten erreicht? Es ist erwähnenswert, dass ich bei weitem kein PowerShell-Experte bin und es durchaus möglich ist, dass vieles von dem Folgenden ineffizient oder redundant ist. Ignorieren Sie auch die Trennung bei „(“ für den vollständigen Namen. Es hat mit der Formatierung unserer Benutzerkonten zu tun.

Vielen Dank im Voraus. Aktuelle Form des Skripts unten.

$LastBoot = Get-CimInstance -Class win32_operatingsystem | select lastbootuptime
$LastBoot = $LastBoot | Select -ExpandProperty "lastbootuptime"
$LastBoot = $LastBoot.ToString()

$LastBootDate = $LastBoot.split(" ")[0]

$LastBootTime = $LastBoot.split(" ")[1]

$LocalMachine = Get-CimInstance -ClassName win32_operatingsystem | select csname
$LocalMachine = $LocalMachine | Select -ExpandProperty "csname"

$Username = Get-CimInstance -Class win32_networkloginprofile | Sort-Object -Property LastLogon -Descending | Select -ExpandProperty "name" -First 1
$Username = $Username.split("\")[1]

$Domain = $env:userdomain

$Friendly = Get-CimInstance -Class win32_networkloginprofile | Sort-Object -Property LastLogon -Descending | Select -ExpandProperty "FullName" -First 1
$Friendly = $Friendly.split("(")[0]

$Results = @{
    Hostname = $LocalMachine;
    BootDate = $LastBootDate;
    BootTime = $LastBootTime;
    Username = $Username;
    User = $Friendly 
}

Write-Output $Results | Format-Table

Antwort1

Wenn Sie das Ergebnis in eine CSV-Datei exportieren möchten, verwenden Sie Folgendes:

$result.GetEnumerator() | Export-CSV "filepath.csv" -NoTypeInformation

Oder wenn Sie es in eine Excel-Tabelle einfügen möchten:

$excel = new-Object -comobject Excel.Application
$excel.visible = $true # set it to $false if you don't need monitoring the actions...
$workBook = $excel.Workbooks.Add()
$sheet =  $workBook.Sheets.Item(1)
$sheet.Name = "Result"
$sheet.Range("A1","A2").ColumnWidth = 40
$sheet.range('A:A').VerticalAlignment = -4160 #align is center (TOP -4108 Bottom -4107 Normal)

$sheet.Cells.Item(1,1) = " "
$sheet.cells.Item(1,2) = " "

$index = 2

$result.keys | ForEach {  

    $sheet.Cells.Item($index,1) = $_
    $sheet.Cells.Item($index,2) = $result.item($_)
    $index++
}

$workBook.SaveAs("C:\mylist.xls")
$excel.Quit()

verwandte Informationen