#powershell
#powershell
Вопрос:
Я новичок в Power Shell. Пытаюсь получить вывод о том, сколько пользователей было создано за последние 30 дней в среде AD, и вывести его как HTML. Следующий вывод дает мне точный результат, который мне нужен-
$DateCutOff = (Get-Date).AddDays(-30)
$UserCreated30Days = Get-ADUser -Filter * -Property whenCreated | where { $_.whenCreated -gt $DateCutOff } | FT Name, whenCreated -Autosize
Но когда я добавляю ConvertTo-HTML
, вывод не передается в вывод HTML. Это мой код-
$header = @"
<style>
h1 {
font-family: Arial, Helvetica, sans-serif;
color: #e68a00;
font-size: 28px;
}
h2 {
font-family: Arial, Helvetica, sans-serif;
color: #000099;
font-size: 16px;
}
table {
font-size: 12px;
border: 0px;
font-family: Arial, Helvetica, sans-serif;
}
td {
padding: 4px;
margin: 0px;
border: 0;
}
th {
background: #395870;
background: linear-gradient(#49708f, #293f50);
color: #fff;
font-size: 11px;
text-transform: uppercase;
padding: 10px 15px;
vertical-align: middle;
}
tbody tr:nth-child(even) {
background: #f0f0f2;
}
#CreationDate {
font-family: Arial, Helvetica, sans-serif;
color: #ff3300;
font-size: 12px;
}
</style>
"@
$DateCutOff = (Get-Date).AddDays(-30)
$UserCreated30Days = Get-ADUser -Filter * -Property whenCreated | where { $_.whenCreated -gt $DateCutOff } | FT Name, whenCreated -Autosize | ConvertTo-Html -As Table -Property Name,WhenCreated -Fragment -PreContent "<h2>User created in 30 days</h2>"
$Report = ConvertTo-Html -Body "$UserCreated30Days" -Head $header -Title "Active Directory Report" -PostContent "<p id='CreationDate'>Creation Date: $(Get-Date)</p>"
$Report | Out-File .AD_Report-v5.html
Был бы признателен за любую помощь.
Спасибо!
MMA
Ответ №1:
Я исправляю ваш код. Возможно, этот код можно было бы оптимизировать, очевидно, но может быть что-то вроде этого:
$HTMLHeader = $null
$HTML_Body = $null
$HTMLEnd = $null
$HTMLHeader = @"
<html><head><title>Reporte de recursos en Azure</title>
<style type="text/css">
<!--
h1 {
font-family: Arial, Helvetica, sans-serif;
color: #e68a00;
font-size: 28px;
}
h2 {
font-family: Arial, Helvetica, sans-serif;
color: #000099;
font-size: 16px;
}
table {
font-size: 12px;
border: 0px;
font-family: Arial, Helvetica, sans-serif;
}
td {
padding: 4px;
margin: 0px;
border: 0;
}
th {
background: #395870;
background: linear-gradient(#49708f, #293f50);
color: #fff;
font-size: 11px;
text-transform: uppercase;
padding: 10px 15px;
vertical-align: middle;
}
tbody tr:nth-child(even) {
background: #f0f0f2;
}
#CreationDate {
font-family: Arial, Helvetica, sans-serif;
color: #ff3300;
font-size: 12px;
}
-->
</style>
</head>
<body>"@
$DateCutOff = (Get-Date).AddDays(-30)
$USR_DB = Get-ADUser -Filter * -Property whenCreated | where { $_.whenCreated -gt $DateCutOff }
$HTML_Body ="<table border=""0"" width=""100%"" cellpadding=""4"" style=""font-size:8pt;font-family:Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;""><tr bgcolor=""#000099"">"
$HTML_Body = "<th colspan= ""14"" ><font color=""#FFFFFF"">Users creation report</font></th></tr>"
$HTML_Body ="<tr bgcolor=""#0000FF"">"
$HTML_Body ="<th align=""center""><font color=""#FFFFFF"">Username</font></th>"
$HTML_Body ="<th align=""center""><font color=""#FFFFFF"">WhenCreated</font></th>"
$HTML_Body ="</tr>"
$HTML_Body ="<tr align=""center"" bgcolor=""#dddddd"">"
foreach ($USR in $USR_DB){
$INT_ALT_RW = 0
$HTML_Body ="<tr"
#region linea intercaladas
if ($INT_ALT_RW)
{
$HTML_Body =" style=""background-color:#dddddd"""
$INT_ALT_RW=0
} else
{
$INT_ALT_RW=1
}
#endregion linea intercaladas
$HTML_Body =">"
$HTML_Body ="<td align=""center""><font color=""#000000"">$($USR.UserPrincipalName)</font></td>"
$HTML_Body ="<td align=""center""><font color=""#000000"">$($USR.whenCreated)</font></td>"}
$HTML_Body ="</table>"
$HTML_Body ="</div>"
$HTMLEnd = "</body></html>"
$HTMLFile = $HTMLHeader $HTML_Body $HTMLEnd
Add-Type -AssemblyName System.Web
[System.Web.HttpUtility]::HtmlDecode($HTMLFile) | Out-File .temporal.html
Я тестирую в своей среде тестирования AD и работает!
Ответ №2:
Вы были очень близки. Проблема в этой строке:
$UserCreated30Days = Get-ADUser -Filter * -Property whenCreated | where { $_.whenCreated -gt $DateCutOff } | FT Name, whenCreated -Autosize | ConvertTo-Html -As Table -Property Name,WhenCreated -Fragment -PreContent "<h2>User created in 30 days</h2>"
и, более конкретно | FT Name, whenCreated -Autosize
, часть. Format-Table
предназначен только для вывода и никогда не должен использоваться в конвейере, поскольку он уничтожает все объекты.
Измените это на Select-Object
вместо, чтобы строка выглядела так, и она работала нормально:
$UserCreated30Days = Get-ADUser -Filter * -Property whenCreated | where { $_.whenCreated -gt $DateCutOff } | Select-Object Name, whenCreated | ConvertTo-Html -As Table -Fragment -PreContent "<h2>User created in 30 days</h2>"
Я также удаляю -Property
часть ConvertTo-Html, поскольку в этом нет необходимости, поскольку мы уже сузили круг свойств, которые нам нужны Select-Object
.