Фиксированное DN из канонического имени и метки времени всегда устанавливается на: 01.01.1601 11:00:00 AM? - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь исправить приведенный ниже сценарий PowerShell, чтобы перечислить члена группы безопасности AD с именем Администраторы домена и экспортировать его в файл .CSV.

$ADGroupType = 'security'
$ADGroupNamePattern = 'Domain Admins'
$ResultFile = "C:\Result.csv"

function ConvertFrom-DN {
    [cmdletbinding()]
    param(
    [Parameter(Mandatory,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)] 
    [ValidateNotNullOrEmpty()]
    [string[]]$DistinguishedName
    )
    process {
        foreach ($DN in $DistinguishedName) {
        Write-Verbose $DN
            foreach ( $item in ($DN.replace('\,','~').split(","))) {
                switch ($item.TrimStart().Substring(0,2)) {
                    'CN' {$CN = '/' + $item.Replace("CN=","")}
                    'OU' {$OU += ,$item.Replace("OU=","");$OU += '/'}
                    'DC' {$DC += $item.Replace("DC=","");$DC += '.'}
                }
            } 
            $CanonicalName = $DC.Substring(0,$DC.length - 1)
            for ($i = $OU.count;$i -ge 0;$i -- ){$CanonicalName += $OU[$i]}
            if ( $DN.Substring(0,2) -eq 'CN' ) {
                $CanonicalName += $CN.Replace('~','\,')
            }
            $qwer = [PSCustomObject]@{
                'CanonicalName' = $CanonicalName;
            }
            Write-Output $qwer

        }
    }
}

Function Get-ADGroupMemberRecursive {
[CmdletBinding()]
Param(
    [Parameter(ValueFromPipeline=$true)]
    $Identity,
    [string[]]$Property
)
    Begin {
        $splat = @{}
        If ($Property) {$splat['Property'] = $Property}
    }
    Process {
        Get-ADGroupMember -Identity $Identity | ForEach-Object {
            If ($_.objectClass -eq 'User') {
                Get-ADUser -Identity $_ @splat | Select-Object -Property @{n='Group'; e={$Identity.Name}}, whenCreated, lastLogon, lastLogonTimeStamp
            } ElseIf ($_.objectClass -eq 'Group') {
                Get-ADGroupMemberRecursive -Identity $_ @splat
            }
        }
    }
}

Get-ADGroup -Filter "(groupCategory -eq '$ADGroupType') -AND (name -like '$($ADGroupNamePattern)')" |
    Get-ADGroupMemberRecursive -Property Mail |
    Select-Object Group, 
        Name, 
        SamAccountName, 
        Mail, 
        whenCreated, 
        @{n='Last Logon'; e={[datetime]::FromFileTime($_.lastLogon)}},
        @{n='Last Logon TimeStamp'; e={[datetime]::FromFileTime($_.lastLogonTimeStamp)}}, 
        @{n='OU Location'; e={ConvertFrom-DN ($_.DistinguishedName)}}  |
    Export-Csv -Path $ResultFile -NoTypeInformation

ii $ResultFile

Проблема с приведенным выше сценарием:

  1. Отметка даты / времени LastLogon всегда отображается как 01.01.1601 в 11:00:00.
  2. Правильно заполненный столбец - это просто имя группы AD и метка времени, как указано выше?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...