SCRIPT : Exporter les objets possédant un sidHistory

Un quick-win pour les administrateurs : ce script permet d’exporter au choix les objets User, Computer ou Group afin de récupérer le contenu du champs sidHistory. Point fort : il split le résultat en multi lignes dans un fichier de sortie (par type) afin de n’avoir qu’un sidHistory par ligne (pour ceux qui merge de multiples domaines en un).Pour l’utilisation :

Export-ADSidHistory -User -Group -Computer -Domain mon.domaine.local

Si vous ne précisez pas le domaine, le domaine de l’utilisateur appelant le script sera utilisé.

<# .Synopsis
    Will collect and export data following input switch selected to a file. 

   .Note
    Used to grab sidHistroy Collection in a file.

   .Parameter $User
    Export Users.

   .Parameter $Computer
    Export Computers.

   .Parameter $group
    Export Groups

   .Parameter $Domain
    Specifiy domain to target.
#>
Param ( [switch]$User,
        [switch]$computer,
        [switch]$Group,
        [String]$Domain
       )

Write-Host "-======================-" -ForegroundColor Magenta
Write-host "-" -ForegroundColor Magenta -NoNewline
Write-Host " sidHistory Retriever " -ForegroundColor DarkGray -NoNewline
Write-Host "-" -ForegroundColor Magenta
Write-Host "-                      -" -ForegroundColor Magenta
Write-Host "-" -ForegroundColor Magenta -NoNewline
Write-Host " v01.00.000    by LVE " -ForegroundColor DarkGreen -NoNewline
Write-Host "-" -ForegroundColor Magenta
Write-Host "-======================-" -ForegroundColor Magenta
Write-Host
$Type = @()

if ($user)     { $Type += 'user'     }
if ($computer) { $type += 'Computer' }
if ($Group)    { $type += 'group'    }
if (!($Domain)){ $Domain = $env:USERDOMAIN }

For ($i = 0 ; $i -lt $Type.count ; $i++)
{
    Write-Host ("Now exporting " + $Type[$i] + " from $Domain...") -ForegroundColor Yellow -NoNewline
    Switch($Type[$i])
    {
        'user'     { $Collection = Get-ADUser -Filter *     -Properties sidHistory -Server $Domain }
        'computer' { $Collection = Get-ADComputer -Filter * -Properties sidHistory -Server $Domain }
        'group'    { $Collection = Get-ADGroup -Filter *    -Properties sidHistory -Server $Domain }
    }
    Write-Host "OK" -ForegroundColor Green
    $OutFile = $Domain + '_' + $Type[$i] + ".txt"
    write-Host "Exporting to file $OutFile..." -ForegroundColor Yellow -NoNewline
    $j = 0
    $Line = 'SamAccountName,GivenName,SurName,Name,SID,SidHistory'
    $Line | out-file $OutFile -Encoding UTF8 -Force
    $Collection | % { 
                        $j++
                        #Write-Progress -Activity 'Splitting SidHistory to multiple lines if needed' -Status $_.SamAccountName -PercentComplete ($j / $Collection.count * 100)
                        $Object = $_
                        $oSAN = $object.SamAccountName
                        $oSID = $object.SID
                        $oNAM = $object.Name
                        $oGNM = $object.GivenName
                        $oSNM = $object.Surname
                        $Line = $oSAN + "," + $oGNM + "," + $oSNM + "," + $oNAM + "," + $oSID

                        if ($Object.sidhistory) 
                             {
                                foreach ($sidh in $object.sidhistory) 
                                    {
                                        ($Line + "," + $Sidh) | out-file $OutFile -Encoding UTF8 -Append
                                    }
                             }
                        else { 
                                ($Line + ",") | out-file $OutFile -Encoding UTF8 -Append 
                             }
                       }
    Write-Host "OK" -ForegroundColor Green
}
Write-host
Write-Host "...Done." -ForegroundColor Green
Write-host

Lien Permanent pour cet article : https://ms-sec.fr/?p=1358

(2 commentaires)

    • Nabster on 31 janvier 2019 at 15 h 20 min
    • Répondre

    Hello,

    j’ai essayé d’utiliser ce script en labs dans un environnement de test en niveau fonctionnel Windows Server 2016.
    doit on importer un module powershell spécifique ?
    powershell ne reconnait pas “import-ADSidHistory” , ai je oublié un prérequis ?

    Bien cordialement,

    Beginner Powershell

    1. Bonjour,

      Le script n’utilise pas la fonction “import-ADSidHistory” : est-ce le nom de votre script ? Si oui, vous devriez le lancer ainsi :
      .\import-ADSidHistory.ps1 -Users -Domain mon.domain.lab

Laisser un commentaire

Votre adresse ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.