Вывод PowerShell SCCM

Вывод PowerShell SCCM

Я написал скрипт PS, чтобы найти время последней загрузки машины (фактически включение, а не просто запуск, поскольку в Win10 включена быстрая загрузка). Скрипт, похоже, выполняет свою работу, он возвращает дату/время загрузки, последнего пользователя и имя хоста. Однако я запускаю это как скрипт в SCCM и не уверен, как лучше всего справиться с выводом в масштабе.

На данный момент скрипт выводит данные в хэш-таблицу, просто чтобы я мог назначить ключ каждому значению для того, кто в конечном итоге будет читать результаты. Но я думаю, что если вы запускаете это на 50 машинах, вам захочется иметь возможность сбрасывать результаты в электронную таблицу или что-то еще для сортировки/фильтрации. Но копирование результатов hastable не очень хорошо форматируется для нескольких устройств.

Есть ли у кого-нибудь советы, как лучше всего этого добиться? Стоит отметить, что я далеко не эксперт по PowerShell, и есть все шансы, что многое из нижеприведенного неэффективно или избыточно. Также игнорируйте разделение на "(" для полного имени. Это связано с форматированием наших учетных записей пользователей.

Спасибо заранее. Текущая форма скрипта ниже.

$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

решение1

Если вы хотите экспортировать результат в CSV-файл, используйте это:

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

Или, если вы хотите поместить это в электронную таблицу Excel:

$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()

Связанный контент