Acabei postando a pergunta no fórum do segundo curso, sendo que a dúvida é do primeiro... Os caracteres especiais que uso no título do html não são salvos corretamente no arquivo de saída, por mais que eu defina o encoding no comando out-file. O que devo fazer?
param ($tipoExportacao)
# Parando a execução do script em qualquer erro
$ErrorActionPreference = "Stop"
# Preparando as colunas com os nomes e tamanhos
$nameExpr = @{
Label = "Nome";
Expression = { $_.Name }
}
$lengthExpr = @{
Label = "Tamanho";
Expression = {'{0:N2}KB' -f ($_.Length/1kb)}
}
# Eu quis usar a definição explícita de lista
$params = @( $nameExpr, $lengthExpr )
# Salvando na variável. Pode ter um espaço depois do = que o PS ainda entende que não é o fim do comando.
$resultado =
gci -Path 'C:\pessoal\' -Recurse -File |
Where-Object Name -Like '*.md' |
select $params
if ($tipoExportacao -eq "html") {
$estilo = Get-Content -Path 'C:\temp\styles.css'
$estilo = '<style>' + $estilo + '</style>'
$titulo = 'Grande Título do Relatório'
# Aqui é uma forma mais amigável de fazer uma série de concatenações. A forma padrão seria:
# $titulo_body = "<h1>" + $titulo + "</h1>"
# Mas essa forma inteligente só funciona com as aspas duplas. Com a simples é um texto mesmo.
$titulo_body = "<h1> + $titulo + </h1>"
# Gerando um html
$resultado | ConvertTo-Html -Head $estilo -Title $titulo -Body $titulo_body | Out-file -encoding 'utf8' -filepath 'c:\temp\relatorio.html'
} elseif ($tipoExportacao -eq "csv") {
$resultado |
ConvertTo-Csv -Delimiter ';' -NoTypeInformation |
Out-file -encoding 'utf8' -filepath 'c:\temp\relatorio.csv'
} elseif ($tipoExportacao -eq "json") {
$resultado |
ConvertTo-Json |
Out-file -encoding 'utf8' -filepath 'c:\temp\relatorio.json'
}