none
création d'un boucle pour un script RRS feed

  • Question

  • Bonjour à tous,

    je suis tout nouveau dans le monde Powershell. 

    Dans le cadre de mon travail, je dois créer un script qui devra lire des lignes excel et à partir de ces lignes discerner si il faut qu'il y est une désactivation du PC dans l'ad ou non.

    j'ai alors écrit (je pense un peu maladroitement le script suivant : 

    Import-Module activeDirectory


    #appeler Excel en créant un nouvel
    $excel = new-object -comobject Excel.Application
    $excel.visible = $false
    $excel.DisplayAlerts = $False

    #Pour accéder à un classeur il suffit d'utiliser cette commande (pour un fichier existant) 
    $fichierExcel = $excel.WorkBooks.Open("C:UsersmplpDesktoplisteOrdinateurs.xlsx") 

    #S'il s'agit d'un nouveau fichier : 
    #$finalWorkBook = $objExcel.Workbooks.Add()

    #Ensuite il est possible d'accéder à chaque onglet en précisant l'index dans la commande ci-dessous
    $finalWorkSheet = $fichierExcel.Worksheets.Item(1) 

    #accéder aux cellules de l'onglet 
    $myValue = $finalWorkSheet.Cells.Item(2513,2).Text

    if(($myValue -like $null) -or ($myValue -like "Unsuccessful")){
    Write-Host "pas de valeur dans la cellule"
    #recherche de la cellule avec le nom du PC
    $NumPC = $finalWorkSheet.Cells.Item(2513,1).Text
    $NumeroPC = "*$NumPC*"
    $PcAD = Get-ADComputer -Filter {Name -like $NumeroPC} | Select-Object name
    $PcAD | Out-File C:UsersmpenloupDesktoplistePCEnAttente.txt 

    }else{

    $NumeroPC = "*$NumPC*"
    $PcAD = Get-ADComputer -Filter {Name -like $NumeroPC} | Select-Object name
    foreach($ordiAD in $PcAD){
    Set-ADComputer -identity $ordiAD.name -Enabled $false
    }
    $PcAD |Out-File C:UsersmpenloupDesktoplistePCdisable.txt




    Mon problème est le suivant. mon fichier excel contient 2545 lignes...
    j'aimerai que mon script lise ligne par ligne le fichier et qu'ils prennent en considération les conditions pour chacune d'elle.

    enfin, j'aimerai sortir un log convenable avec les noms des PC. j'ai l'impression qu'avec out-file, le log est écrasé à chaque fois... je me suis demandé si export-CSV ne serait pas ma solution mais le résultat est pire... 

    PLEASE HELP! 

    Merci d'avance pour vos retours.
    mercredi 5 septembre 2018 13:45

Toutes les réponses

  • Bonjour ,

    JE Voudrais plus de détailles pour pouvoir vous aider :

    D'Après ce que j'ai compris vous avez un fichier contenant les noms des pcs ,tout ses PC doivent être lus et désactivé sur AD ?

    Si c'est le cas la manière la plus rapide et simple de le faire est de travailler sur un fichier CSV au lieu d'un fichier Excel ,car la recuperation et la lecture de toutes les lignes est simple 

    Suffit d'enregistrer Sous votre fichier excel et choisir comme Type : CSV (Delimiter ;) .

    Pour récupérer les données sur fichier CSV :

    $MesPc = import-csv -path "c:\Monfichier.csv" -delimiter ";" 

    Après faire un boucle pour les désactiver .

    Essayer et si vous avez besoin d'aide je répondrais .

    Salutations .

    • Proposé comme réponse Rafik85-IT dimanche 9 septembre 2018 12:57
    jeudi 6 septembre 2018 15:41
  • Bonjour, 

    Pour lire tes fichiers lignes par lignes tu peux t'inspirer du code suivant:

    $lastRowUsed = $worksheet.UsedRange.Rows.Count for ($intRow = 2; $intRow -le $lastRowUsed; $intRow++) { $worksheet.Cells.item($intRow,<numéro de ta colonne>)

    # Tes différents tests }


    Il va parcourir l'ensemble de ton fichier ligne par ligne sur une worksheet spécific.

    Bon codage :).

    Bien à toi.

    jeudi 13 septembre 2018 11:40