SCCM PowerShell 出力

SCCM PowerShell 出力

マシンが最後に起動された時刻 (Win10 で高速ブートが有効になっているため、単に起動したのではなく、実際に電源がオンになった時刻) を見つけるための PS スクリプトを作成しました。スクリプトは機能しているようで、起動日時、最後のユーザー、ホスト名を返します。ただし、私はこれを SCCM でスクリプトとして実行しており、大規模な出力を処理する最適な方法がわかりません。

現時点では、スクリプトはハッシュテーブルに出力します。これは、結果を読む人のために各値にキーを割り当てることができるようにするためです。ただし、これを 50 台のマシンに対して実行する場合は、結果をスプレッドシートなどにドロップして並べ替えやフィルター処理できるようにする必要があると思います。ただし、ハッシュテーブルの結果をコピーすると、複数のデバイスで適切にフォーマットされません。

これを最も効果的に実現する方法について、アドバイスをいただける方はいらっしゃいますか? 私は 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()

関連情報