none
Recherche d'une chaîne de caractères RRS feed

  • Question

  • Bonjour tout le monde,

    Je cherche une chaîne de caractères dans la sortie d'une commande.

    Jusque là, dans un batch j'utilisais la commande FIND de Windows.

    Si je tape

    FIND "hello"

    il attend du texte de l'entrée standard, et à chaque fois que je lui tape une ligne qui contient "hello" il la répète, donc il a bien trouvé.

    Mais dans Powershell, ça ne se passe pas exactement comme ça.

    Si sous Powershell je tape

    FIND /?

    j'ai la même aide que sous Windows, donc je m'attends au même résultat.
    Que nenni, si je fais le même traitement que décrit ci-dessus, il m'est répondu :

    FIND : format incorrect de paramètre

    Ai-je le droit d'être perplexe ?

    Histoire d'être plus dans la couleur locale j'ai tapé

    Get-Help FIND

    ah mais voilà que ça me répond ça :

    Name                              Category  Module                    Synopsis
    ----                              --------  ------                    --------
    Find-PackageProvider              Cmdlet    PackageManagement         Find-PackageProvider...
    Find-Package                      Cmdlet    PackageManagement         Find-Package...
    Find-Command                      Function  PowerShellGet             ...
    Find-DscResource                  Function  PowerShellGet             ...
    Find-Script                       Function  PowerShellGet             ...
    Find-Module                       Function  PowerShellGet             ...
    Find-RoleCapability               Function  PowerShellGet             ...
    Find-NetIPsecRule                 Function  NetSecurity               ...
    Find-NetRoute                     Function  NetTCPIP                  ...

    en clair, la traduction, c'est "y a pas ça chez nous".

    Bon. Y a quoi, alors ?

    jeudi 2 décembre 2021 09:05

Toutes les réponses

  • bonjour Gloops,

    Windows Powershell, sait utiliser nativement les commandes DOS, il connait leur path. La syntaxe des commandes DOS, même passée en Powershell reste la syntaxe DOS.

    Là, ou il peut y avoir une confusion, c'est que certaines cmdlets (ça s'appelle comme ça sous PS), ressemblent à des commandes DOS, mais n'en sont pas, ce sont des Alias.

    Pour illustrer pour lister une arborescence en PS c'est Get-ChildItem, mais tu peux faire un DIR (comme en DOS) et même ls (équivalent bash linux) même résultat. Maintenant si tu fait Get-Alias dir, cela va te sortir "c'est un Alias de Get-ChildItem".

    FIND n'est pas un alias d'une cmdlet PS. C'est l'équivalent également d'un GREP en bash. Si tu veux utiliser la cmdlet équivalente c'est Select-String.

    Get-ChildItem -Path 'C:\Temp' -Recurse | # donne-moi tous les fichiers qui sont dans ce path et les sous-rép
        Select-String -Pattern "remove" | # je veux tous ceux qui ont le mot "remove" dedans
        Select-Object -Property Filename, LineNumber, Line, Path | # je veux la propriété Nom du fichier, la Ligne dans le fichier, et le path du fichier
        Format-Table # et présentes moi cela sous forme de table

    quelques exemples ici : https://theitbros.com/powershell-grep-equivalent/

    Cordialement

    Olivier

    Edit : donc tu peux faire Get-Help Sellect-String -Full ou -ShowWindows (ou Help, ou man ... qui sont des alias de get-Help :-) ), pour avoir l'aide complète sur cette cmdlet.
    jeudi 2 décembre 2021 14:10
  • Re Gloops

    Ceci vient de sortir (c'est tout frais de ce jour), ça peut aussi te servir : https://adamtheautomator.com/powershell-get-content/

    jeudi 2 décembre 2021 14:50
  • Merci de votre aide.

    En gros, Olivier me confirme que ... c'est un peu compliqué tout ça :)

    Plus sérieusement on dirait que Select-Item pourrait faire le job, et qu'il faut quand même s'enquérir des modalités.

    J'ai aussi eu à me bagarrer avec d'autres aspects, car j'essaie de faire tourner le script qu'a proposé malekal.com pour comparer deux arborescences, qui est une très bonne base, mais me semble-t-il aurait gagné à être testé. En fait j'en suis surtout au début, la création des fichiers d'état. J'appréhende un peu, pour la suite, comment la commande FC va s'acquitter de sa tâche.

    La dernière difficulté en date concerne le remplacement, il m'a semblé que comme c'est proposé Powershell tente de remplacer des fichiers, alors qu'on lui passe le contenu d'un seul fichier.

    Je crois que j'arrive au but poursuivi comme ça :

    #ReportTree.ps1
    #*****************************************

    Param( [Parameter(Mandatory)] [String] $PathToTree, [Parameter(Mandatory)] [String] $NameOfReport )

    #Displaying parameters, to help debugging $PathToTree; $NameOfReport; #Get the path of the desktop $MonBureau = Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name desktop | select-object -ExpandProperty desktop; $MonBureau

    #Get the report for one path $PathToCsv = "$MonBureau\comp$NameOfReport.txt" "PathToCsv : " + $PathToCsv Get-ChildItem "$PathToTree" -Recurse | Get-FileHash | Select Path, Hash | export-csv $PathToCsv -Delimiter "`t" -NoTypeInformation #Transform the paths in the report from absolute to relative $content = (gc -path $PathToCsv -raw) $content.replace("$PathToTree", "") | Out-File $PathToCsv

    Pour la dernière étape, au départ on avait replace dans le tunnel, et ça ne faisait rien. En passant par une variable chaîne de caractères, on dirait que ça vient.

    Donc alors ce script doit être appelé pour chacune des deux arborescences, en lui passant en premier paramètre le chemin de l'arborescence, en deuxième un nom pour le fichier de compte-rendu.

    C'est vrai que là, je déborde du sujet proposé dans le titre.

    Je viens de m'apercevoir d'un couac : si je passe un chemin qui n'existe pas, normalement ça devrait assez vite afficher une exception, or ça ne rend pas le contrôle.



    • Modifié Gloops jeudi 2 décembre 2021 23:02
    jeudi 2 décembre 2021 22:06
  • Bonjour Gloops

    C'est quoi ce script au-dessus ? Objectif ?

    De plus, il y a de nombreuses erreurs dedans.

    • les ";" en fin de ligne : totalement inutile. Du temps de PS 2.0 oui, mais depuis inutile. PS sait très bien quand une commande se termine.
    • $PathToCsv = "$MonBureau\comp$NameOfReport.txt"  Un fichier .csv qui se nomme xxx.txt ? J'en rigole encore. Un .csv, "in fine", c'est un fichier texte dont le contenu est formaté d'une manière particulière (Comma separated values)
    • Export-Csv $PathToCsv -Delimiter "`t" -NoTypeInformation : Dans un .csv , les valeurs sont séparés par une ",", et par défaut en langue française c'est ";", ce qui est bien pratique d'ailleurs notamment quand on a des paths LDAP dans le fichier (il y a des virgules dans ce type de path).
    • $content.replace("$PathToTree", "") |  Out-File $PathToCsv : Quel est l'intéret ? Transformer des paths absolus en paths relatifs ? Mais les résultats obtenus ne sont pas des paths relatifs. un path relatif commence toujours par un ".", et est relatif par rapport à quelque chose (le path courant par exemple).

    Si ton objectif est de comparer 2 arborescences, il y a plusieurs moyens de procéder :

    • Récupération des Paths et on compare ... les noms, mais pas le contenu. On peut avoir 2 fichiers avec des noms identiques mais avec un contenu différent.
    • Comparaison du contenu, quel qu'il soit (texte, image, ...), par comparaison des hashs. On peut avoir 2 fichiers avec des noms différents mais dont le contenu est totalement identique.

    Si tu pouvais décrire ce que tu cherches à faire, cela serait plus aisé pour t'orienter.

    Je viens de m'apercevoir d'un couac : si je passe un chemin qui n'existe pas, normalement ça devrait assez vite afficher une exception, or ça ne rend pas le contrôle.

    Les paths peuvent se tester ex. :

    if (Test-Path "c:\NonExistingPath\") { "Le path n'existe pas" }

    # ou encore Try{ Get-Item -Path "c:\NonExistingPath\" -ErrorAction Stop # ne pas oublier le -ErrorAction Stop sinon en cas de pb, ça ne passera jamùais au catch } catch{ "Le path n'existe pas" }

    Olivier

    vendredi 3 décembre 2021 06:38
    • $content.replace("$PathToTree", "") |  Out-File $PathToCsv : Quel est l'intéret ? Transformer des paths absolus en paths relatifs ? Mais les résultats obtenus ne sont pas des paths relatifs. un path relatif commence toujours par un ".", et est relatif par rapport à quelque chose (le path courant par exemple).

    Quel est l'intérêt de comparer des chemins absolus ?

    Aucune ligne ne sera identique, donc c'est mauvais avant d'avoir commencé.

    Alors en ce genre de cas, il y a une tradition à ne pas perdre de vue, c'est d'utiliser SUBST pour assigner une lettre de lecteur au chemin cible, pour éviter d'allonger inutilement les chemins, faute de quoi arrivé aux trois quarts de la sauvegarde un fichier est marqué en erreur non pas parce qu'il n'a pas été bien copié, mais parce que son chemin est trop long.

    Pour le reste, bon, si il n'y a que ça comme erreurs ...

    vendredi 3 décembre 2021 06:50
  • Je n'ai toujours pas compris quel était l'objectif.

    Dans ton dernier post, tu parles de sauvegarde et de paths longs.

    La limitation des paths à 260 car, n'est pas une limitation du NTFS mais une limitation de Explorer.exe. Les outils de sauvegarde savent très bien sauvegarder des paths longs sans pb (pour la restauration "in place" cela pouvait poser des pb, mais toujours à cause de cette limitation de explorer.exe).

    Tu sembles vouloir sauvegarder sans outil, uniquement en script. Pas de pb, mais le plus facile est d'utiliser robocopy pour ce faire (dans un script Powershell). Il copiera ce que tu veux uniquement, selon les critères précisés.

    J'attire ton attention sur le fait qu'avoir une copie de sauvegarde sur un autre média c'est déjà ça, mais ce n'est pas réellement une sauvegarde en tant que telle. Une sauvegarde gère le versionning (je veux ce fichier particulier à la date du). Là, tu n'auras qu'un seul jeu (à moins de sauvegarder vers des paths de destination différents à chaque fois, ce qui est totalement possible).

    J'ai déjà scripté des sauvegardes vers un NAS. Un petit topo.

    $RootPath = \\NAS\Backup <== Un partage avec les permissions qui vont bien

    Je récupère la date du jour, et plus précisément soit le jour (1,2,...31), soit le nom du jour (Lundi, mardi...)

    Ainsi, je calcule le path de destination $RootPath + $Date

    Et enfin, je fais mon robocopy source destination paramètres (copie de type miroir)

    Dans ce cas, je n'ai que des Full bien entendu, puisque les paths de destination sont différents à chaque fois. Mais j'ai x copies. Si je prends le nom du jour, je ne pourrais avoir que 7 copies max, après j'écrase.

    Si je n'ai pas assez de place à la destination pour avoir tant de copie, je joue avec la planification (ex. Schedule Lundi, mercredi, Vendredi).

    Olivier

    vendredi 3 décembre 2021 08:09
  • Si, tu as bien compris, il s'agit de contrôler une sauvegarde.
    Autant avec Macrium Reflect ça se passe sans souci (mais justement la machine ne démarre pas depuis la clef USB (j'ai même trouvé un vendeur en informatique pour ne pas comprendre pourquoi je voulais démarrer depuis une clef USB), autant quand Windows tourne, un glissé de souris du disque dur coince par endroits.

    Ah au fait, le script que je lance, là, si il tombe sur un répertoire verrouillé, OK il affiche une exception dessus.

    Après, il passe au suivant, bien sûr ? Sinon il rendrait le contrôle ...

    Bon, pour l'utilisatrice qui reçoit ses mails et se connecte à la banque, on va tâcher de lui garder un exemplaire de chaque fichier, même si il date de 3 ans. Là pour le moment la copie des fichiers c'est pour pouvoir réinstaller dans le minimum de temps quand la machine va revenir de la réparation sous garantie.

    Après, quand ils m'auront réparé le démarrage depuis une clef USB, je ferai une sauvegarde Macrium Reflect.

    vendredi 3 décembre 2021 08:26
  • Tiens cadeau, fais à la va vite avec mes petites mains, il y a quelques minutes.

    <#
    .SYNOPSIS
       Copie des fichiers utilisateurs depuis le poste sur une clé USB
    .DESCRIPTION
       Copie des fichiers utilisateurs depuis le poste sur une clé USB
       Seuls les fichiers non déjà copiés sur la clé sont copiées. La copie est basée sur les hash des fichiers.
       Le répertoire d'accueil sur la clé USB est déterminé automatiquement : il porte le nom du poste sauvegardé.
       
       Le script est conçu pour êtr utilisé de manière interactive depuis le compte utilisateur.
    
    .PARAMETER PathToTree
        Path par défaut qui est sauvegardé (Desktop de l'utilisateur)
    
    .PARAMETER NameOfReport
        Nom du rapport sur ce qui est sauvegardé au format .csv
        Valeur par défaut : "Backup_$($env:COMPUTERNAME)_Au_$(Get-Date -Format "dd-MM-yyyy").csv"
    
    .PARAMETER USBKey
        Lettre de lecteur de la clé USB de sauvegarde
        Valeur par défaut : E:
    
    .PARAMETER ReportPath
        Full Path de rapport de sauvegarde
        Le path par défaut est : $USBKey\$NameOfReport
    
    .EXAMPLE
       .\BackupPoste.ps1
       Backup des documents utilisateurs vers l'emplacement par défaut
    
    .EXAMPLE
       .\BackupPoste.ps1 -UsbKey D:
       Backup des documents utilisateurs vers l'emplacement passé en paramètre. 
    
    .EXAMPLE
       Get-Help .\BackupPoste.ps1 -ShowWindows
       Aide complète sur le script
    #>
    
    
    Param(
      [Parameter()]
      [String]
      $PathToTree = $(Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name desktop | select-object -ExpandProperty desktop),
      # On pourrait raccourcir en mettant $Env:HomePath\Desktop
      
      [Parameter()]
      [String]
      $NameOfReport = "Backup_$($env:COMPUTERNAME)_Au_$(Get-Date -Format "dd-MM-yyyy").csv",
    
      [Parameter()]
      [String]
      $USBKey = "E:",
    
      [Parameter()]
      [String]
      $ReportPath = "$USBKey\$NameOfReport"
    )
    
    # Displaying parameters to help debugging
    Write-Host "Le path à sauvegarder est : " -ForegroundColor Green -NoNewline
    Write-Host "$PathToTree" -ForegroundColor Yellow
    Write-Host "Le nom du rapport est : " -ForegroundColor Green -NoNewline
    Write-Host "$NameOfReport" -ForegroundColor Yellow
    Write-Host "Le chemin du rapport est : " -ForegroundColor Green -NoNewline
    Write-Host "$ReportPath" -ForegroundColor Yellow
    
    # Gathering Files in PathToTree
    $Tree = Get-ChildItem -Path $PathToTree -Recurse
    # Gathering Hash for each file in $Tree
    $Hash = $Tree | Get-FileHash
    
    # Gathering files in the USB Key
    $TargetPath  = "$USBKey\$env:COMPUTERNAME" 
    $targetFiles = Get-ChildItem -Path $TargetPath -Recurse
    # Gathering Hash for each file in $targetFiles
    $TargetHash = $TargetFiles | Get-FileHash
    
    # Compare $hash and $targetHash
    $NewFiles = Compare-Object -ReferenceObject $Hash -DifferenceObject $TargetHash -Property Path | Where-Object -FilterScript {$_.SideIndicator -eq "<="}
    
    # Copy New files ("in fine" New Hashes)
    foreach ($file in $NewFiles)
        {
        Copy-Item -Path $file.Path -Destination $TargetPath
        Write-Host "Le fichier " -ForegroundColor Green -NoNewline
        Write-Host "$($file.Path) " -ForegroundColor Yellow -NoNewline
        Write-Host "a été copié vers : " -ForegroundColor Green -NoNewline
        Write-Host "$TargetPath" -ForegroundColor Yellow
        # Adding File Path backuped to the Export File
        $file | Export-Csv -Path $ReportPath -Delimiter ";" -NoTypeInformation -Append
        }
    
    # Ending Script
    Write-Host "Tous les fichiers nouveaux ont été copié vers : " -ForegroundColor Green -NoNewline
    Write-Host "$TargetPath" -ForegroundColor Yellow
    
    # Displaying content of the Report file
    Write-Host "Liste globale des fichiers sauvegardés depuis le fichier de rapport" -ForegroundColor Green
    Get-content C:\temp2\test.csv | ConvertFrom-Csv -Delimiter ";"
    Write-Host "Fin du script" -ForegroundColor Cyan
    

    Tu adaptes selon ton besoin.

    TU noteras que les paramètres ne sont pas "mandatory", parce que je leur ai défini des valeurs par défaut. Ce qui permet d'exécuter le script avec les paramètres par défaut ou en passant un/des paramètre et leur valeur au besoin (comme une fonction).

    Olivier

    vendredi 3 décembre 2021 11:07
  • Bonjour,

    Ah oui, donc si je suis bien, pour toi le but est de sauvegarder le répertoire du bureau ?

    Bon alors j'ai eu mes fichiers de rapport, ça a pris dix heures pour la source et cinq minutes pour la cible.

    J'appréhendais comment FC allait s'en sortir, eh bien on dirait que j'avais raison.

    Quelqu'un, un jour, a eu l'idée de pondre un programme qui sort ça :

    Comparaison des fichiers compgsour.txt et COMPHCIB.TXT
    ***** compgsour.txt
    "
    C
    1
    E
    B
    F
    B
    4
    1
    C
    1
    1
    2
    9
    B
    7
    2
    E
    F
    ***** COMPHCIB.TXT
    "
    4
    5
    7
    3
    5
    3
    E
    A
    0
    C
    5
    7
    B
    3
    F
    3
    8
    A
    E
    4
    3
    C
    F
    2
    0
    1
    B
    1
    F
    *

    Alors, je crois qu'il va bien falloir que je me débrouille pour comparer ça "à la main".

    Enfin ... Avant je vais essayer WinMerge, quand même :)

    • Modifié Gloops lundi 6 décembre 2021 16:22
    lundi 6 décembre 2021 16:20
  • bonsoir Gloops,

    Le bureau, c'est toi qui avait mis le path, je n'ai fait que reprendre.

    Le pb avec le calcul des Hashes, c'est que ce dernier est très chronophage. La comparaison après est rapide, mais le calcul des hashes non.

    Sinon, tu peux toujours faire un script PS utilisant Robocopy. C'est robuste et c'est de l'éprouvé. Après la durée de la copie, si type Miroir, dépend du rapport volumétrie/taille du tuyau, et si type Différentielle du nombre de fichiers à examiner.

    Tu n'as toujours pas répondu à la question : quel est l'objectif ? Si l'objectif est de récupérer tout ou partie du profil local d'un utilisateur (et pas seulement le bureau), pourquoi ? Une GPO redirection de dossiers vers le HomeDir,  et si l'utilisateur met des documents sur le bureau ou dans MesDocuments, cela atterrit en fait dans son HomeDir. Après si le mec case des docs importants n'importe ou sur son disque, n'avez-vous pas des règles en interne ?

    ...Si je tombe sur un répertoire verrouillé, ...

    D'après ce que je comprends, tu fais la sauvegarde avec les credentials de l'utilisateur, donc avec ses droits. Tu essaies donc de sauvegarder un truc auquel il n'a pas accès. Cela peut se contourner en s'appropriant (Owner) le dit truc et en ajoutant (au cas ou) le compte utilisateur en permission NTFS. Il y a les cmdlets qui vont bien dans le module NTFSSecuritu (ça ressemble au fonctionnement avancée des permissions NTFS en GUI)

    Précise le besoin et le contexte.

    Olivier

    lundi 6 décembre 2021 19:18
  • Sur le bureau il y a juste les fichiers de compte-rendu, qui servent à la comparaison, une fois que mon script les a créés. C'est une idée de malekal.com de mettre ça sur le bureau pour qu'on les trouve facilement, alors je l'ai gardée, mais en m'adaptant au fait que certains logiciels changent l'emplacement du bureau.

    Il y a deux façons qu'un fichier soit verrouillé :

    • si l'utilisateur n'a pas les droits
    • ou si un autre processus l'a ouvert

    En faisant une copie d'image du disque on n'a pas ce problème, car on démarre sur un autre système, avec les droits définis sur l'autre système. Sauf quand la machine ne reconnaît pas le support.

    ***

    WinMerge me dit qu'il y a cinq différences. Il s'agit de s'entendre sur ce qu'est UNE différence.

    En fait, regardant à gauche de l'écran je vois, comme je pouvais m'y attendre,  qu'il y a une petite partie commune en haut, et le reste, un peu plus des neuf dixièmes, qui n'est présent que sur la source.

    Là-dedans, bien sûr, on trouve Windows, le pack .Net que j'ai installé, quelques programmes qui étaient ouverts peut-être. De façon plus surprenante il y a aussi le répertoire du bureau.

    Maintenant, il me reste à parcourir les 32719 - 26400 = 6319 lignes oranges, pour vérifier si il n'y a pas autre chose que ce que je viens d'énumérer, mais aussi à parcourir les premières 26400 lignes pour découvrir les quatre autres différences qu'a détectées WinMerge. Là-dedans il y a par exemple deux fichiers du système de mise à jour qui constituent une différence ; une mise à jour d'Edge en constitue une autre, sur la plupart des fichiers il n'y a que le numéro de version de changé.

    Et aussi à comprendre pourquoi le rapport du nombre de lignes est l'inverse de ce que laissent penser les règles sur la gauche de l'écran.

    En conclusion il est probable que j'aie bien copié tout ce que je dois copier, mais pour en être sûr ça va me prendre des heures.

    À moins que ma maîtrise de WinMerge ne présente une faille, si ça se trouve ils permettent de regrouper le résultat par répertoire, ce qui donne alors un résultat lisible beaucoup plus rapidement, si on sait que tel répertoire est intégralement dans la zone non copiée, alors je peux passer au suivant -surtout si c'est un qui relève du système.


    • Modifié Gloops lundi 6 décembre 2021 22:02
    lundi 6 décembre 2021 21:19
  • Je n'ai toujours pas compris quel était l'objectif.

    La machine va partir en SAV sous garantie, avant ça j'aimerais bien garder le travail que j'ai fait dessus.

    Si la clef USB avait bien été reconnue comme unité de démarrage ça aurait été fait en trois quarts d'heure et ça serait déjà chez eux.

    Mais ça n'est pas le cas, alors j'ai fait une sauvegarde de fichiers, qui s'est arrêtée en route là où les fichiers étaient verrouillés.

    Alors, je fais l'inventaire de cette sauvegarde ...

    Je n'ai pas dit ça trop vite, parce que contrôle de sauvegarde, c'est quand même un thème récurrent, et le script pourra servir régulièrement une fois la machine en service (sur celle-là ou une autre d'ailleurs).

    lundi 6 décembre 2021 22:56
  • Au premier coup d’œil, quelques remarques sur le code proposé

    La copie est basée sur les hash des fichiers
    $NewFiles = Compare-Object -ReferenceObject $Hash -DifferenceObject $TargetHash -Property Path | Where-Object -FilterScript {$_.SideIndicator -eq "<="}
    Vraiment ?!
    voir : https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/compare-object?view=powershell-7.2#parameters

    $PathToTree = $(Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name desktop | select-object -ExpandProperty desktop),
    # On pourrait raccourcir en mettant $Env:HomePath\Desktop
    Faux, ceci est son équivalent : [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::Desktop)

    Aucune gestion d'erreur alors que l'on parle de fichiers verrouillés...

    Pour l'affichage de débug tu as quelques de prévus pour ça dans PowerShell
    voir : https://docs.microsoft.com/fr-FR/powershell/module/microsoft.powershell.utility/write-debug?view=powershell-5.1

    Get-content C:\temp2\test.csv | ConvertFrom-Csv -Delimiter ";"
    Ça sort d’où C:\temp2\test.csv ?

    Attention à l'indentation ! (boucle foreach )

    samedi 11 décembre 2021 08:28
  • Bonjour,

    Au premier coup d’œil, quelques remarques sur le code proposé

    $PathToTree = $(Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name desktop | select-object -ExpandProperty desktop),
    # On pourrait raccourcir en mettant $Env:HomePath\Desktop
    Faux, ceci est son équivalent : [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::Desktop)

    Au demeurant, pour ce qui me concerne, ceci me donne un doute :

    C:\Users\admin
     9:31:06>SET | FIND /I "desktop"
    
    C:\Users\admin
     9:31:16>

    Alors j'ai fait une recherche sur Internet, et j'ai trouvé un truc certes un peu plus lourd, mais qui marche. J'aurais peut-être dû mettre l'adresse.


    Aucune gestion d'erreur alors que l'on parle de fichiers verrouillés...

    J'ai fait la même erreur, j'ai ajouté ça depuis, quand les temps de réponse m'ont préoccupé.

    Il reste encore des affichages en rouge, peut-être que ça mériterait d'être approfondi. Tiens, ça me rappelle que j'ai les résultats du traitement, mais que ... je suis à la bourre pour les exploiter :)



    • Modifié Gloops samedi 11 décembre 2021 08:49
    samedi 11 décembre 2021 08:44