2016-03-08 4 views
0

Я пытаюсь выполнить поиск в Active Directory и получить отчет о именах пользователей и истечении срока действия их сертификатов. Вот код, который я вымотал из других источников. Когда я запускаю его вручную в окне PowerShell, он показывает мне дату NotAfter, которую я хочу.Экспорт-Csv выдает ошибку при обработке дат

enter image description here

Но когда я пытаюсь писать в 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 
+2

Ваш код не имеет никакого смысла. Почему вы используете 'foreach ($ i в $ cert)', а затем * никогда не используете '$ i' *? Вместо этого вы указываете '$ tempobj = $ cert.Certificates | [...] '. Не должно быть '$ tempobj = $ i.Certificates | [...] '? –

+0

Извините за неаккуратный код. Я искал в интернете способы сделать это, и это было результатом некоторого смешивания. У меня было что-то вроде этого, закодированного изначально, но все же получило тот же результат, когда он подталкивал его к csv. – user3067193

ответ

1

Вам нужны некоторые основные обновления в коде ... Это должно быть отправной точкой:

$cert = Get-ADUser -LDAPFilter $StrFilter -server $domain -searchbase $searchOU -Properties "Certificates" 
$cert = $cert | ? {$_.Certificates} 
$Myobj = @() 

Foreach ($i in $cert) 
    { 
    $tempobj = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $i.Certificates 

    $Rep = "" | Select Account, NotAfter 

    If ($i.Certificates.Handle -eq $null) 
     { 
     $Rep.Account = $i.name 
     $Rep.NotAfter = "N/A" 
     } 
    Else 
     { 
     $Rep.Account = $i.name 
     $Rep.NotAfter = $tempobj.NotAfter.ToString() 
     } 

    $Myobj += $Rep 
    } 
+0

Это сработало. Я думал, что пытался «ToString()» раньше ... Я думаю, что мой неряшливый код мешал. – user3067193

Смежные вопросы