Forum Discussion

Mike9375's avatar
Mike9375
Copper Contributor
Oct 16, 2020

Récupération données Active Director

Bonjour à tous,

 

Je viens vous afin de m'aider concernant un sujet que je ne comprend pas d'où vient le souci. 

Voilà, je développe un petit logiciel (basique) en PowerShell afin de faire des extract de l'AD vers un fichier .csv. Le logiciel permet de sélectionner les options souhaitées à extraire. 
Parmi ces options, une ne fonctionne pas. La clé de récupération Bitlocker. 

 

Voici une partie de mon code:

 

#Initialisation du tableau à exporter
$tabcomputers=@()

#stockage du nom du domaine pour le nom du fichier .csv
$CsvName = $listBoxComputers.SelectedValue 

#création de la bdd des postes dans l'AD
$ADComputersSource = Get-ADComputer -Server $listBox.SelectedValue -Filter * -Properties * 

#vérifie si l'accès au server $listbox.selectedvalue est OK
if($ADComputersSource) 
{
     $objStatusBarComputers.Text = "Checking Active Directory..."

     #boucle sur chaque poste dans la source ADComputerSource
     foreach($computers in $ADComputersSource) 
     {
          #récupère la clé bitlocker pour chaque poste dans la source ADComputersSource
          $Bitlocker=(Get-ADObject -SearchBase (Get-ADComputer -Filter {name -like 
          $computers.Name}) -Filter {objectClass -eq "msFVE-RecoveryInformation"}  
          -Properties msFVE-RecoveryPassword).'msFVE-RecoveryPassword' 
           
          #création d'une entrée pour le tableau
          $ComputerObject = New-Object psobject 

          #ajout du nom de chaque poste dans l'objet $ComputerObject
          $ComputerObject | Add-Member -Name "Name" -MemberType NoteProperty -Value 
          $computers.name -Force

          #ajout du FQDN dans l'objet $ComputerObject
          $ComputerObject | Add-Member -Name "DNS Host Name" -MemberType NoteProperty - 
          Value $computers.dNSHostName -Force

          #ajout du statut actif de chaque poste dans l'objet $ComputerObject
          $ComputerObject | Add-Member -Name "Enabled" -MemberType NoteProperty -Value 
          $($computers.enabled) -Force

          #vérification si l'option OU est coché
          if($checkbox_computers_OU.Checked) 
          {
               #ajout de la localisation AD de l'objet dans l'objet $ComputerObject
               $ComputerObject | Add-Member -Name "Distinguishedname" -MemberType 
               NoteProperty -Value $computers.distinguishedname -Force 
          }
          
          #Vérification si l'option lastlogondate est coché
          if($checkbox_computers_lastlogondate.Checked) 
          {
               #ajout de la dernière connexion du poste dans l'objet $ComputerObject
               $ComputerObject | Add-Member -Name "LastLogondate" -MemberType 
               NoteProperty -Value $computers.lastlogondate -Force 
          }

          #vérification si l'option bitlocker est coché
          if($checkbox_computers_bitlocker.Checked) 
          {
               #ajout de la clé de récupération stockée dans la variable $bitlocker dans 
               #l'objet $ComputerObject
               $ComputerObject | Add-Member -Name "BitLocker Recovery Key" -MemberType 
               NoteProperty -Value $Bitlocker -Force 
          }

          #ajout de l'objet $ComputerObject dans le tableau $tabcomputers
          $tabcomputers += $ComputerObject
          $objStatusBarComputers.Text = "Done"

          #Export du tableau $tabcomputers vers un fichier csv
          $tabcomputers | Export-Csv -Path "Export_AD_Computers_$CsvName.csv" -Delimiter 
          ";" -NoTypeInformation 
     }#end foreach
}#end if

 

 

Bien sur j'ai testé le contenu de ma variable bitlocker en ajoutant un write-host $bitlocker dans mon if($checkbox_computers_bitlocker.checked). Cela me retourne bien les clés de récupération. Cependant, mon csv contient bien la colonne bitlocker mais aucune valeur n'est inscrite dans le tableau. 

Avez-vous une idée ? 

Merci à vous pour votre aide. 

Cordialement,
Mika

  • AndySvints's avatar
    AndySvints
    Steel Contributor

    Hello Mike9375,

    When you are getting Bitlocker key you are passing whole ADComputer object instead of DistinguishedName to -SearchBase parameter..

    Try this:

    $Bitlocker=(Get-ADObject -SearchBase (Get-ADComputer -Filter {name -like $computers.Name} | Select-Object -ExpandProperty DistinguishedName) -Filter {objectClass -eq "msFVE-RecoveryInformation"} -Properties msFVE-RecoveryPassword).'msFVE-RecoveryPassword'

    Hope that helps.

  • Mike9375's avatar
    Mike9375
    Copper Contributor

    Bonjour à tous, 

    petit up. 

    Quelqu'un pour une idée svp ? 

    Merci. 

      • Mike9375's avatar
        Mike9375
        Copper Contributor

        AndySvints 

        Hi,

         

        My bad, i forget to answer. 

         

        I try it yes. But it's not working. 

        My first code work in Powershell ISE but not when i export this information in csv. I don't know why. 

    • AndySvints's avatar
      AndySvints
      Steel Contributor
      Would you be so kind to provide more details?

      You are running same code from ISE and Console and receive different results?
      Are you running script directly from Domain Controller or from domain joined computer/server?
      What the business goal /use case?
      Get Bitlocker password for computers from Ad?
      Get data for report/for backup or for processing?
      • Mike9375's avatar
        Mike9375
        Copper Contributor

        AndySvints 

        Hi,

         

        I try my code on ISE and also with the console and i have the same results. 

         

        The problem is when i want export the data with Export-csv. The bitlocker data is not present in my csv file. But the others AD data is present (lastlogon, enabled, Distinguishedname...).

         

        When i try my code outside of my principal script. It's working. 

         

        I try this code: 

         

        cls
        $ADComputersSource = Get-ADComputer -Server carmignac -Filter * -Properties *
        $tabbitlocker=@()
        
        foreach($computer in $ADComputersSource){
            $tab = New-Object psobject
            $tab | Add-Member -Name "Bitlocker Recovery" -MemberType NoteProperty -Value 
            $computer.'ms-Mcs-AdmPwd' -Force
            $tabbitlocker+=$tab
        }
        
        $tabbitlocker | Export-Csv -Path ".\test.csv" -NoTypeInformation -Delimiter ";"

         

        This code is working but... when i had this code in principal script... it's not working and in my csv file, i don't have any informations for bitlocker. 

         

        the goal is to create a report on PCs with a Bitlocker key on the AD for Projet Manager. 

         

        Regards.

Resources