Vamos usar o PowerShell para salvar criar um arquivo Excel, como o foco é apenas demonstrar essa funcionalidade faremos uma consulta simples de exemplo.

O princípio é o mesmo parar criar outros arquivos do Office (Word, Powerpoint), adaptando-se pouco o script. Porém, para qualquer um desses é necessário ter o office instalado no computador que irá executar o PowerShell.

Abaixo, um exemplo para listar todos os usuários do AD e salvar em uma planilha Excel ou pdf (dependendo da extensão que colocar na variável arquivo)

#ALTERE ESSAS DUAS VARIAVEIS CONFORME SUA NECESSIDADE
$path = “C:\Temp”
$arquivo = “Report.pdf”
Clear-host
$data = (Get-Date -Format “yyyMMdd”)
$linha = 1
$File = “$path\$arquivo”
$excel = New-Object -ComObject excel.application
#Pre visualizar o arquivo?
$excel.visible = $False
#Permitir alertas (ex: o arquivo não foi salvo)?
$excel.DisplayAlerts = $false
#Criando o documento
$workbook = $excel.Workbooks.Add()
$uregwksht = $workbook.Worksheets.Item(1)
$uregwksht.Name = “Users”
#Mudar layout da Pagina
$uregwksht.PageSetup.Orientation = 2
#Fazendo o cabeçalho
$uregwksht.Cells.Item($linha,1) = “Primeiro Nome”
$uregwksht.Cells.Item($linha,2) = “Sobrenome”
$uregwksht.Cells.Item($linha,3) = “Login”
$uregwksht.Cells.Item($linha,4) = “Status”
$uregwksht.Cells.Item($linha,5) = “SID”
#Padrao do cabeçalho
$uregwksht.Cells.EntireRow($linha).Font.Size = 18
$uregwksht.Cells.EntireRow($linha).Font.Bold = $True
$uregwksht.Cells.EntireRow($linha).Font.Name = “Cambria”
$uregwksht.Cells.EntireRow($linha).Font.ThemeFont = 1
$uregwksht.Cells.EntireRow($linha).Font.ThemeColor = 4
$uregwksht.Cells.EntireRow($linha).Font.ColorIndex = 55
$uregwksht.Cells.EntireRow($linha).Font.Color = 8210719
#Criando nossa consulta
get-aduser -Filter * | ForEach-Object {
#Para cada resposta, vamos alimentar a planilha
$linha++
$uregwksht.Cells.Item($linha,1) = $_.GivenName.toString()
$uregwksht.Cells.Item($linha,2) = $_.Surname.toString()
$uregwksht.Cells.Item($linha,3) = $_.SamAccountName.toString()
$uregwksht.Cells.Item($linha,4) = $_.Enabled.toString()
$uregwksht.Cells.Item($linha,5) = $_.SID.toString()
}
#Auto ajustar tudo para uma melhor visualização
$usedRange = $uregwksht.UsedRange
$usedRange.EntireColumn.AutoFit() | Out-Null

#Configurações de Página
$uregwksht.PageSetup.Zoom = $false
$uregwksht.PageSetup.FitToPagesTall = 9999
$uregwksht.PageSetup.FitToPagesWide = 1
$uregwksht.PageSetup.LeftMargin = $excel.InchesToPoints(0.25)
$uregwksht.PageSetup.RightMargin = $excel.InchesToPoints(0.25)
$uregwksht.PageSetup.TopMargin = $excel.InchesToPoints(0.5)
$uregwksht.PageSetup.BottomMargin = $excel.InchesToPoints(0.5)
$uregwksht.PageSetup.HeaderMargin = $excel.InchesToPoints(0.25)
$uregwksht.PageSetup.FooterMargin = $excel.InchesToPoints(0.25)

#Salvando (em pdf ou xlsx)
if ($file -like “.pdf”)
{
$workbook.ExportAsFixedFormat([Microsoft.Office.Interop.Excel.XlFixedFormatType]::xlTypePDF, “$File”)
$workbook.Close() } if ($file -like “.xlsx”)
{
$workbook.SaveAs(“$File”)
}
$excel.Quit()
Write-Host “Relatório salvo em $File”

Fontes/Referências

https://blog.softartisans.com/2011/06/04/kb-fittopagestall-and-fittopageswide-settings-do-not-take-effect/
https://docs.microsoft.com/en-us/office/vba/api/excel.pagesetup.fittopageswide
https://docs.microsoft.com/en-us/office/vba/api/overview/excel
https://forums.overclockers.co.uk/threads/powershell-code-to-export-excel-to-pdf-in-lanscape-or-fit2page-mode.18790819/
https://learn-powershell.net/2012/12/20/powershell-and-excel-adding-some-formatting-to-your-report/
https://stackoverflow.com/questions/38512800/using-powershell-to-create-a-pdf
https://theolddogscriptingblog.wordpress.com/2010/06/02/how-do-i-print-all-the-excel-files-from-a-directory/

Mais Informações

Esperamos ter ajudado da melhor forma possível e estaremos sempre a disposição para mais informações.

Entre em contato conosco pelo e-mail equipe@nvlan.com.br.

NVLAN - Consultoria