1
votes

Comment puis-je enregistrer ces opérations de compte Active Directory dans un fichier CSV?

Je souhaite créer un fichier .csv pour chaque compte AD désactivé et déplacé qui a le nom $ account.Distingushed du déplacement de l'objet et le $ OU.Distingué nom duquel l'objet est déplacé.

Quelle serait la meilleure façon de gérer cela?

$OUs | Where-Object{$excludeOUS -notcontains $_.DistinguishedName  } | Foreach-Object {
        $params = @{}
        $params = @{
            SearchBase = [String]$_.DistinguishedName
            SearchScope = [String]"OneLevel"
            AccountInactive = $true
            TimeSpan = ([timespan]$days)
            Verbose = $true
        }   
        If($users) { 
            $params.Add("UsersOnly",$true)
        }
        ElseIf($computers) { 
            $params.Add("ComputersOnly",$true)
        }
        $accounts = Search-ADAccount @params
        foreach ($account in $accounts) {
            $params = @{}
            $params = @{
                Identity = [string]$account.DistinguishedName
                Verbose = $true
            }
            If ($noDisable -notcontains $account.Name -and $account.ObjectClass -eq "User" ) {
                Disable-ADAccount @params @whatIf

                $params.Add("Description",$description)

                Set-ADUser @params @WhatIf

                $params.Remove('Description')
                $params.Add("TargetPath", 'OU=Disabled Users,DC=test,DC=local')

                Move-ADObject @params @WhatIf
                # Somehow Export $account.DistinghuisedName and $OU.Distinguished name to .csv???
            }
            ElseIf ($noDisable -notcontains $account.Name -and $account.ObjectClass -eq "Computer") {

                Disable-ADAccount @params @whatIf

                $params.Add("Description",$description)

                Set-ADComputer @params @WhatIf

                $params.Remove('Description')
                $params.Add("TargetPath", 'OU=Disabled Computers,DC=test,DC=local')

                Move-ADObject @params @WhatIf
                # Somehow Export $account.DistinghuisedName and $OU.Distinguished name to .csv???

            }
        }
    }


0 commentaires

3 Réponses :


0
votes

Vous pouvez essayer quelque chose comme le code ci-dessous (non testé).

Définissez les variables pour csvPath, ouDistinguishedName et accountDistinguishedName.

Vous pouvez ajouter ces variables à un objet et exporter vers csv. J'ai utilisé $ account.Name comme nom csv, mais vous pouvez utiliser autre chose.

$csvPath = "c:\temp"
$OUs | Where-Object { $excludeOUS -notcontains $_.DistinguishedName } | Foreach-Object {
    $ouDistinguishedName = $_.DistinguishedName
    $params = @{ }
    $params = @{
        SearchBase      = [String]$_.DistinguishedName
        SearchScope     = [String]"OneLevel"
        AccountInactive = $true
        TimeSpan        = ([timespan]$days)
        Verbose         = $true
    }   
    If ($users) { 
        $params.Add("UsersOnly", $true)
    }
    ElseIf ($computers) { 
        $params.Add("ComputersOnly", $true)
    }
    $accounts = Search-ADAccount @params
    foreach ($account in $accounts) {
        $accountDistinguishedName = $account.DistinguishedName
        $accountName = $account.Name
        $params = @{ }
        $params = @{
            Identity = [string]$account.DistinguishedName
            Verbose  = $true
        }
        If ($noDisable -notcontains $account.Name -and $account.ObjectClass -eq "User" ) {
            Disable-ADAccount @params @whatIf

            $params.Add("Description", $description)

            Set-ADUser @params @WhatIf

            $params.Remove('Description')
            $params.Add("TargetPath", 'OU=Disabled Users,DC=test,DC=local')

            Move-ADObject @params @WhatIf
            # Somehow Export $account.DistinghuisedName and $OU.Distinguished name to .csv???

            $objectProperty = @{}
            $objectProperty.Add('Account',$accountDistinguishedName)
            $objectProperty.Add('OU',$ouDistinguishedName)
            $object = New-Object -TypeName psobject -Property $objectProperty
            $object | Export-Csv "$csvPath\$accountName.csv" -NoTypeInformation
        }
        ElseIf ($noDisable -notcontains $account.Name -and $account.ObjectClass -eq "Computer") {

            Disable-ADAccount @params @whatIf

            $params.Add("Description", $description)

            Set-ADComputer @params @WhatIf

            $params.Remove('Description')
            $params.Add("TargetPath", 'OU=Disabled Computers,DC=test,DC=local')

            Move-ADObject @params @WhatIf
            # Somehow Export $account.DistinghuisedName and $OU.Distinguished name to .csv???

            $objectProperty = @{}
            $objectProperty.Add('Account',$accountDistinguishedName)
            $objectProperty.Add('OU',$ouDistinguishedName)
            $object = New-Object -TypeName psobject -Property $objectProperty
            $object | Export-Csv "$csvPath\$accountName.csv" -NoTypeInformation
        }
    }
}


0 commentaires

0
votes

Vous pouvez même l'exporter directement sous forme de table de hachage:

@{"Account" = $accountDistinguishedName; "OU" = $ouDistinguishedName}.GetEnumerator() | Export-Csv "$($csvpath)\$($accountname)" -NoTypeInformation


0 commentaires

0
votes

Je l'ai compris!

$acctsCSV = @(
    [pscustomobject]@{
        Account = [string]$account.Name
        OU = [string]$OU.DistinguishedName
    }
)
$acctsCSV | Export-Csv -Path $filePath -NoTypeInformation


0 commentaires