
Eu escrevi um script PS para descobrir a última vez que uma máquina foi inicializada (na verdade ligada, em vez de apenas inicializada, pois temos a inicialização rápida habilitada no Win10). O script parece fazer seu trabalho, trazendo de volta a data/hora de inicialização, o último usuário e o nome do host. No entanto, estou executando isso como um script no SCCM e não tenho certeza da melhor maneira de lidar com a saída em escala.
No momento o script gera uma hashtable, só para que eu pudesse atribuir uma chave a cada valor para quem acabar lendo os resultados. Mas estou pensando que se você estiver executando isso em 50 máquinas, você poderá colocar os resultados em uma planilha ou algo para classificar/filtrar. Mas copiar resultados rápidos não formata bem para vários dispositivos.
Alguém tem algum conselho sobre a melhor forma de conseguir isso? É importante notar que estou longe de ser um especialista em PowerShell e há todas as chances de muitos dos itens abaixo serem ineficientes ou redundantes. Ignore também a divisão em "(" para o nome completo. Tem a ver com a formatação de nossas contas de usuário.
Desde já, obrigado. Forma atual do script abaixo.
$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
Responder1
Se você deseja exportar o resultado para um arquivo CSV, use isto:
$result.GetEnumerator() | Export-CSV "filepath.csv" -NoTypeInformation
Ou se quiser colocar em uma planilha 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()