Я пытаюсь выполнить поиск в Active Directory и получить отчет о именах пользователей и истечении срока действия их сертификатов. Вот код, который я вымотал из других источников. Когда я запускаю его вручную в окне PowerShell, он показывает мне дату NotAfter
, которую я хочу.Экспорт-Csv выдает ошибку при обработке дат
Но когда я пытаюсь писать в CSV файл, он рассказывал мне значение NotAfter
является «System.Object []». Один сайт упоминается с использованием формата JSON, но это не очень удобно для глаз. Любая помощь будет оценена.
$cert = Get-ADUser -LDAPFilter $StrFilter -server $domain -searchbase $searchOU -Properties "Certificates"
Foreach ($i in $cert)
{
$tempobj = $cert.Certificates | foreach { New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $_ }
If ($Cert.Certificates.Handle -eq $null)
{
$Rep = "" | Select "Account", "NotAfter"
$Rep."Account" = $cert.name
$Rep."NotAfter" = "N/A"
$Myobj += $Rep
$Rep = $null
}
Else
{
$Rep = "" | Select "Account", "NotAfter"
$Rep."Account" = $cert.name
$Rep."notAfter" = $tempobj.NotAfter
}
$Myobj += $Rep
$Rep = $null
}
#After the loop, export the array to CSV
$Myobj | sort | export-csv -Path C:\xtemp\scripts\pshell\UserCerts.csv -notype
Ваш код не имеет никакого смысла. Почему вы используете 'foreach ($ i в $ cert)', а затем * никогда не используете '$ i' *? Вместо этого вы указываете '$ tempobj = $ cert.Certificates | [...] '. Не должно быть '$ tempobj = $ i.Certificates | [...] '? –
Извините за неаккуратный код. Я искал в интернете способы сделать это, и это было результатом некоторого смешивания. У меня было что-то вроде этого, закодированного изначально, но все же получило тот же результат, когда он подталкивал его к csv. – user3067193