Power Shell Get-вывод ADUser в HTML

#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 .