Commandes PowerShell dans Batch

brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 - 16 mars 2024 à 11:37
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 - 8 avril 2024 à 07:33

Bonjour,

Je ne comprends rien à PowerShell, je me contente d'en utiliser quelques commandes dans des Batchs quand c'est plus facile ou que l'option Batch n'existe pas.

Le retour se fait sans problème y compris quand la commande PowerShell inclut un pipe, comme par exemple ici (et où bien sûr la variable %letter% correspondant aux lettres de partitions successives a été définie précédemment).

powershell.exe -command "& { get-volume -DriveLetter %letter% | Format-Table -HideTableHeaders }">>%~dp0_tailledisque.txt

Je me fais par contre planter en cherchant à intégrer ça qui marche parfaitement dans le terminal PowerShell:

[System.IO.DriveInfo]::GetDrives() | Format_Table

J'ai un doute sur l'interpréteur de commandes se heurtant aux crochets, si je veux tester avec une commande ECHO en redirigeant ce "texte" vers un fichier txt ou ps1, je me fais planter sauf si je les échappe:

echo ^[System.IO.DriveInfo^]::GetDrives() ^| Format_Table>>%~dp0test.txt

Mais retour à la case départ si je mets ça dans les accolades de powershell.exe, c'est lui qui plante sur ces caractères d'échappement.

Ce n'est pas fondamental, j'obtiens le plus gros des champs souhaités par un autre Cmdlet sans "caractères spéciaux", mais pour résoudre ce type de problème à l'avenir, quelle est la bonne syntaxe?

Merci.
 

6 réponses

jee pee Messages postés 39655 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 avril 2024 9 238
Modifié le 16 mars 2024 à 23:51

Bonjour,

En Powershell pour rediriger la sortie, il faut indiquer quel flux est redirigé :

 get-volume -DriveLetter C|Format-Table -HideTableHeaders 1>out.txt

le flux va de 1 à 6 ou * : https://learn.microsoft.com/fr-fr/powershell/module/microsoft.powershell.core/about/about_redirection?view=powershell-7.4

Dans les 2 dernières commandes tu as Format_Table alors que c'est Format-Table. Et peut être quel le résultat n'est pas considéré comme une table puisque c'est une liste objet : valeur.


0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817
17 mars 2024 à 07:52

Bonjour,

Au temps pour moi, j'avais écrit le tiret correctement dans la console PowerShell sans quoi je n'aurais jamais eu le retour, je ne sais pas ce que j'ai fait en écrivant la commande dans un Batch au kilomètre sans jamais voir l'erreur de tiret...

Merci.

0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817 > brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024
17 mars 2024 à 16:34

Pendant que je te tiens et si je peux me permettre d'abuser, pourquoi le résultat est correct dans PowerShell et pas en Batch?

powershell.exe -command "& { Get-CimInstance win32_logicaldisk | where caption -eq "C:" | foreach-object {write " $($_.caption) total $('{0:N2}' -f ($_.Size/1gb)) Go  libre $('{0:N2}' -f ($_.FreeSpace/1gb)) Go"} }


 

0
jee pee Messages postés 39655 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 avril 2024 9 238 > brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024
Modifié le 17 mars 2024 à 18:02

je ne sais pas, souvent la gestion des crlf n'est déjà pas simple, alors là en empilant 2 environnements différents

0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
17 mars 2024 à 18:38

Pour avoir le même résultat dans batch, il faut utiliser write-host au lieu de write.


0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817
17 mars 2024 à 21:14

Nickel, je suis une vraie buse dans des tas de choses, PowerShell en fait partie.

Juste un point de détail si c'est possible, une fois que j'ai bouclé ça, ça ne tabule pas:
 

J'ai bien un plan B via:
 

powershell.exe -command "& { Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name' = 'Total (Go)'; Expression= {[math]::round($_.Size/1GB, 2)}},@{'Name' = 'Libre (Go)'; Expression= {[math]::round($_.FreeSpace/1GB, 2)}} }"

là c'est bien tabulé, mais un moyen de se débarrasser des lignes de titre?


J'ai essayé un tas d'autres formules mais qui soient ne tabulent pas, soit écrivent des GB à l'anglo-saxonne, soit me privent de décimales...

Je sais, on peut toujours faire de l'arithmétique sur des octets et j'ai une solution fonctionnelle mais que j'aimerais autant éviter, elle est longue comme un jour sans pain si on doit tester disons de 10 To aux centaines de Mo pour faire du zèle puisqu'il faut à chaque étape limiter la sortie à 9 chiffres, vérifier en fonction de la longueur de la chaîne originale si une même longueur n'est pas à cheval sur deux unités selon que les 9 chiffres restants sont ou non supérieurs à 1024^3 et remettre virgule, nombre de caractères avant et après au bon endroit.

Merci.

0
jee pee Messages postés 39655 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 avril 2024 9 238 > brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024
17 mars 2024 à 21:22

tu peux toujours rajouter le format-table

 Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name' = 'Total (Go)'; Expression= {[math]::round($_.Size/1GB, 2)}},@{'Name' = 'Libre (Go)'; Expression= {[math]::round($_.FreeSpace/1GB, 2)}}  | Format-Table -HideTableHeaders
0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817 > jee pee Messages postés 39655 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 avril 2024
17 mars 2024 à 21:41

Presque parfait: dans la formule de base, c'est moi qui avait rajouté le baratin style "Total (Go)" qui alors remplaçait celui standard dans la ligne de titres.

Là puisqu'on les a virés, je n'ai plus de titres, mais je n'ai plus non plus comme la première image en <6> à quoi chaque valeur correspond (Total ou Libre) et l'unité de mesure sur chaque ligne.

Comment dois-je faire le cas échéant pour les intégrer dans les "Expression" (tabulées, cela va de soi...)?

Merci.

0
jee pee Messages postés 39655 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 avril 2024 9 238
Modifié le 17 mars 2024 à 22:16

tu peux essayer le caractère de tabulation `t

Get-CimInstance win32_logicaldisk | where caption -eq "C:" | foreach-object {write "`t $($_.caption) total`t $('{0:N2}' -f ($_.Size/1gb)) Go  libre`t $('{0:N2}' -f ($_.FreeSpace/1gb)) Go"}
         C: total        75,00 Go  libre         25,32 Go

0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817
18 mars 2024 à 09:21

Merci pour l'existence du caractère de tabulation, je vais peut-être finir par m'instruire en PowerShell.

S'agissant de boucler sur tous les lecteurs, pour avoir les informations relatives à un lecteur sur la même ligne, il faut comme barnabe0057 l'a indiqué remplacer write par write-host ce qui nous donne, une fois supprimée la tabulation avant la lettre de lecteur et déplacé celle de "Libre" après le mot "Go" de "Total":
 

Nettement mieux sinon que la différence de taille des lecteurs continue à générer un décalage entre le nombre et "Go" dont je ne n'arrive pas à me défaire.

J'obtiens comme indiqué sur la deuxième formule et image en <6> une tabulation correcte sans les unités mais comme la formule est d'un seul tenant pour tous les lecteurs une ligne vierge après et une ligne vierge avant suivie de deux lignes de titres.

On arrive à "la bonne solution" en redirigeant la sortie vers un fichier dont on filtre les lignes excédentaires et tabule la sortie mais c'est dommage, c'est moins "élégant" que ne le serait une seule formule PowerShell brute de coffrage:
 

@echo off
CHCP 65001>NUL

powershell.exe -command "& { Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name' = 'Total'; Expression= {[math]::round($_.Size/1GB, 2)}},@{'Name' = 'Libre'; Expression= {[math]::round($_.FreeSpace/1GB, 2)}} }">>%~dp0_lect.txt

FOR /F "tokens=1-3 skip=3 delims= " %%A IN ('type "%~dp0_lect.txt"') DO (
 SET lecteur=%%A
 SET total=%%B
 SET libre=%%C
 CALL :DISPLAY
 )
GOTO END

:DISPLAY
echo %lecteur%	%total%	Go	%libre%	Go
exit /b

:END
pause
del ~dp0_lect.txt
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024
Modifié le 18 mars 2024 à 13:05

Pour aligner les différentes tailles ce n'est pas bien sorcier :

@echo off
setlocal enableextensions enabledelayedexpansion
CHCP 65001>NUL

set "pow=Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name' = 'Total'; Expression= {[math]::round($_.Size/1GB, 2)}},@{'Name' = 'Libre'; Expression= {[math]::round($_.FreeSpace/1GB, 2)}}"

call :routine pow

pause
exit /b

:routine

FOR /F "tokens=1-3 skip=3 delims= " %%A IN ('powershell.exe -command "& { !%~1! }"') DO (

 SET "lecteur=%%A"
 SET "total=         %%B"
 SET "libre=         %%C"

echo. !lecteur! !total:~-10! Go   !libre:~-10! Go

)

exit /b

Ce qui est plus compliqué c'est de convertir les Go en To le cas échéant.

0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817 > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
18 mars 2024 à 13:31

C'est exactement ce que j'ai fini par faire dans le script en <11> après avoir tâtonné un bon moment avec PowerShell avec lequel je suis fâché en passant par une routine CALL parce que je suis aussi fâché avec les variables d'expansion retardée.

0
jee pee Messages postés 39655 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 avril 2024 9 238 > brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024
18 mars 2024 à 14:04

dans ce que propose @barnabe0057 ce qui semble d'abord intéressant c'est la proposition de troncature gauche d'une variable qui permet d'aligner des nombres de longueur différente, tu tournes justement sur cet alignement depuis longtemps non ?

SET "total=        10000,00"
SET "libre=        555,22"

echo. %total:~-10% Go & echo. %libre:~-10% Go
   10000,00 Go
     555,22 Go
0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817 > jee pee Messages postés 39655 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 avril 2024
18 mars 2024 à 17:07

Oui, tout à fait, j'ai regardé trop vite et je me suis obnubilé sur l'alignement des colonnes de chiffres et de l'unité Go sans décalage de toute la ligne selon la grandeur.

En <11> mes chiffres sont alignés sur celui de gauche, ce n'est pas un drame, là où sa proposition est plus orthodoxe en les alignant sur celui de droite (avec juste une anomalie pour la carte SD en N: qui lit 59,3 au lieu de 59,30 et qui devrait d'ailleurs lire 59,60 (64 Go/1,024^3)-59,60, s'agissant d'une carte vierge où j'ai copié un fichier de 1 Ko sans quoi certaines commandes échouent là où l'explorateur retourne 59,4-59,22, les mystères de Windows d'ailleurs sans importance...).
 

0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817
30 mars 2024 à 17:25

J'ai trouvé une solution pas vraiment élégante mais qui rend la forme souhaitée: les ps1 sont créés en echo depuis le batch puis redirigés vers un premier fichier texte qu'éventuellement je redirige vers un deuxième en supprimant les titres et les lignes vides (la plus pénible, c'est celle générée automatiquement en fin de fichier et correspondant au "retour chariot").
 

0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
1 avril 2024 à 10:57

La présentation rend bien.

Je suis intéressé par ton script, est-ce que tu le partagerais ?

J'ai moi-même un ancien script de ce style que j'aimerais mettre à jour avec le tien.

0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817 > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
1 avril 2024 à 11:42

Tiens, mais comme je te l'ai dit, c'est efficace mais pas très orthodoxe.

https://www.cjoint.com/c/NDbjPBonshF

0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024
Modifié le 1 avril 2024 à 20:36

Merci pour le partage.

Je l'ai un peu remis à ma sauce : https://pastebin.com/3JUD7WW0

.

Il me reste encore à le fusionner avec mon propre outil pour que ça devienne mon futur couteau suisse.

0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817 > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
1 avril 2024 à 20:40

Tu me montreras ça, mais je ne peux pas voir la sauce intermédiaire, je me fais jeter 403 accès non autorisé.

0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024
Modifié le 1 avril 2024 à 20:46

Voilà le code :

@echo off
Mode con cols=105 lines=40

::AVERTISSEMENT
::LES PARTITIONS OU DISQUES DOIVENT AVOIR UN NOM, IL NE DOIT PAS Y AVOIR D'ESPACE

setlocal enableextensions enabledelayedexpansion
CHCP 65001 >nul

IF NOT "%os%"=="Windows_NT" (
	echo Erreur...OS Invalide...
	pause
	exit
)

call :module
rem powershell.exe -ExecutionPolicy Bypass -File "%~dp0fonctions.psm1"

:: -------------------------------------------------------------------------------------------
:: on affiche les infos système
:: -------------------------------------------------------------------------------------------

echo. & echo ^[103;91mRecherche en cours Ordinateur "%COMPUTERNAME%" Veuillez patienter....                                   [0m
echo.

::Nom_ordinateur
FOR /F "tokens=2 delims==" %%A in ('wmic os get CSName /value') DO SET "nomPC=%%A"

::Modèle
FOR /F "tokens=2 delims==" %%A in ('wmic computersystem get Manufacturer /value') DO SET "manufacturer=%%A"
FOR /F "tokens=2 delims==" %%A in ('wmic computersystem get Model /value') DO SET "model=%%A"
FOR /F "tokens=2 delims==" %%A in ('wmic bios get SerialNumber /value') DO SET "serialnumber=%%A"

::OS
FOR /F "tokens=2 delims==|" %%A in ('wmic os get Name /value') DO SET "osname=%%A"
FOR /F %%A in ('wmic os get OSArchitecture ^| find /i "bit"') DO SET "osarchi=%%A"
FOR /F "tokens=4" %%A in ('systeminfo ^| find /i "Version" ^| find /v "BIOS"') DO SET "osversion=%%A"
FOR /F "tokens=2 delims==" %%A in ('wmic os get ServicePackMajorVersion /value') DO SET "sp=%%A"
FOR /F "tokens=3" %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "DisplayVersion"') DO SET "Version=%%A"

::Nom Processeur
FOR /F "tokens=2 delims==" %%A in ('wmic cpu get name /value') DO SET "nomproc=%%A"
FOR /F "tokens=2 delims==" %%I in ('wmic cpu get numberofcores /value') DO SET "cores=%%I"

echo  Nom ordinateur:            %nomPC%
echo  Modèle:                    %manufacturer% %model%
echo  Type Processeur:           %processor_architecture% %nomproc% %cores% coeur(s)
echo  Numéro Série:              %serialnumber%
echo  OS:                        %osname% %osarchi% bits Service Pack %sp%
echo  Version:                   %Version% - NT= %osversion%
echo  Boot:                      ^< %FIRMWARE_TYPE% Mode ^>

:: -------------------------------------------------------------------------------------------
:: on utilise des commandes Powershell
:: -------------------------------------------------------------------------------------------

set "pow1=Get-WMIObject win32_ComputerSystem | foreach-object {write-host " Mémoire totale: $('{0:N2}' -f ($_.TotalPhysicalMemory/1gb)) Go"}"
set "pow2=Get-WMIObject Win32_OperatingSystem | Measure-Object -Property FreePhysicalMemory -Sum | %% {[Math]::Round($_.sum/1024/1024, 2)}"
set "pow3=Get-PhysicalDisk | Select DeviceID, Size, BusType, MediaType, Model | Format-Table -HideTableHeaders"
set "pow4=Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name' = 'Total'; Expression= {[math]::round($_.Size/1GB, 2)}},@{'Name' = 'Libre'; Expression= {[math]::round($_.FreeSpace/1GB, 2)}}"

call :disques pow3
call :partitions pow4
call :memoire pow1 pow2

del /f /q "%~dp0fonctions.psm1"

echo. & pause
exit

:: -------------------------------------------------------------------------------------------
:: routine de récupération des disques
:: -------------------------------------------------------------------------------------------

:disques

echo.
ECHO ^[104;93mDisque N°, Bus, Type, Taille, Nom :                                                                      [0m

FOR /F "tokens=1-4,* delims= " %%A IN ('powershell.exe -command "& { !%~1! }"') DO (
	FOR /F "tokens=1,2 delims= " %%H in ('powershell.exe -command "& { Import-Module %~dp0fonctions.psm1; ConversionUnites %%B }"') DO (
		call :alignement "%%H" taille
		set "taille=!taille:~-6! %%I"
	)
	echo  %%A         %%C %%D !taille! "%%E"
)

echo.
ECHO ^[104;93mDisques et partitions :                                                                                  [0m
FOR /F "delims=" %%A IN ('powershell.exe -command "& { Import-Module %~dp0fonctions.psm1; InfosPartitions }"') do echo  %%A | findstr ": ,"

goto :eof

:: -------------------------------------------------------------------------------------------
:: routine de récupération des partitions
:: -------------------------------------------------------------------------------------------

:partitions

echo.
 ECHO ^[104;93mOccupation des partitions :                                                                              [0m

FOR /F "tokens=1-3 skip=3 delims= " %%G IN ('powershell.exe -command "& { !%~1! }"') DO (
 SET "lecteur=%%G"
 call :alignement "%%H" total
 call :alignement "%%I" libre
 echo. !lecteur! ^>^>^> Total / Libre : !total:~-8! / !libre:~-8! Go
)

goto :eof

:: -------------------------------------------------------------------------------------------
:: routine de récupération de la taille mémoire
:: -------------------------------------------------------------------------------------------

:memoire

FOR /F "tokens=3 delims=: " %%A IN ('powershell.exe -command "& { !%~1! }"') DO CALL :alignement "%%~A" RamTotal
FOR /F "tokens=1" %%A IN ('powershell.exe -command "& { !%~2! }"') DO CALL :alignement "%%~A" RamLibre

echo.
ECHO ^[104;93mMémoire RAM :                                                                                            [0m
echo. Mémoire totale : %RamTotal:~-7% Go
echo. Mémoire libre  : %RamLibre:~-7% Go

goto :eof

:: -------------------------------------------------------------------------------------------
:: routine d'alignement des tailles (troncature gauche)
:: -------------------------------------------------------------------------------------------

:alignement

echo %~1 | findstr "," >nul && SET "fill=00" || SET "fill=,00"
SET "%2=       %~1!fill!"

FOR /F "tokens=1,2 delims=," %%E IN ('echo !%2!') DO (
	SET "Decimale=%%F"
	SET "%2=%%E,!Decimale:~0,2!"
)

goto :eof

:: -------------------------------------------------------------------------------------------
:: routine de génération du module "fonctions.psm1"
:: -------------------------------------------------------------------------------------------

:module

If Exist "%tmp%\cbf0.0.8.f9ece1fa63465a986c041a6f24848309" goto:cbf.f9ece1fa63465a986c041a6f24848309
(Set/p =ZnVuY3Rpb24gQ29udmVyc2lvblVuaXRlcyB7DQoNCiAgICBwYXJhbShbbG9uZ10gJHNpemUpDQoNCiAgICAkdW5pdGUgPSBAKCdLbycsJ01vJywnR28nLCdUbycsJ1BvJykNCiAgICAkaT0tMQ0KDQogICAgRG8gew0KCSAgICAkc2l6ZS89MTAyNA0KCSAgICAkaSsrDQogICAgfSBVbnRpbCAoICRzaXplIC1sdCAxMDAwICkNCg0KICAgICR0YWlsbGU9JHNpemUuVG9TdHJpbmcoIi4wMCIpICsgIiAiDQoNCiAgICByZXR1cm4gJHRhaWxsZSArICR1bml0ZVskaV0NCg0KfQ0KDQoNCmZ1bmN0aW9uIEluZm9zUGFydGl0aW9ucygpIHsNCg0KICAgIEdldC1XbWlPYmplY3QgV2luMzJfRGlza0RyaXZlIHwgRm9yRWFjaC1PYmplY3QgeyANCiAgICAgICAgJGRpc2sgPSAkXyANCiAgICAgICAgJHBhcnRpdGlvbnMgPSAiQVNTT0NJQVRPUlMgT0YgIiArICJ7V2luMzJfRGlza0RyaXZlLkRldmljZUlEPSckKCRkaXNrLkRldmljZUlEKSd9ICIgKyAiV0hFUkUgQXNzb2NDbGFzcyA9IFdpbjMyX0Rpc2tEcml2ZVRvRGlza1BhcnRpdGlvbiIgDQogICAgDQogICAgICAgIEdldC1XbWlPYmplY3QgLVF1ZXJ5ICRwYXJ0aXRpb25zIHwgRm9yRWFjaC1PYmplY3QgeyANCiAgICAgICAgICAgICRwYXJ0aXRpb24gPSAkXyANCiAgICAgICAgICAgICRkcml2ZXMgPSAiQVNTT0NJQVRPUlMgT0YgIiArICJ7V2luMzJfRGlza1BhcnRpdGlvbi5EZXZpY2VJRD0nJCgkcGFydGl0aW9uLkRldmljZUlEKSd9ICIgKyAiV0hFUkUgQXNzb2NDbGFzcyA9IFdpbjMyX0xvZ2ljYWxEaXNrVG9QYXJ0aXRpb24iIA0KICAgDQogICAgICAgICAgICBHZXQtV21pT2JqZWN0IC1RdWVyeSAkZHJpdmVzIHwgRm9yRWFjaC1PYmplY3QgeyANCiAgICAgICAgICAgICAgICBOZXctT2JqZWN0IC1UeXBlIFBTQ3VzdG9tT2JqZWN0IC1Qcm9wZXJ0eSBAeyANCiAgICAgICAgICAgICAgICBEaXNrTW9kZWwgICA9ICRkaXNrLk1vZGVsIA0KICAgICAgICAgICAgICAgIFBhcnRpdGlvbiAgID0gJHBhcnRpdGlvbi5OYW1lIA0KICAgICAgICAgICAgICAgIERyaXZlTGV0dGVyID0gJF8uRGV2aWNlSUQgDQogICAgICAgICAgICAgICAgVm9sdW1lTmFtZSAgPSAkXy5Wb2x1bWVOYW1lIA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KDQpmdW5jdGlvbiBDaGVja1NpdGUoKSB7DQoNCiAgICBwYXJhbShbc3RyaW5nXSAkdXJsKQ0KDQogICAgdHJ5DQogICAgew0KICAgICAgICAkUmVzcG9uc2UgPSBJbnZva2UtV2ViUmVxdWVzdCAtVXJpICIkdXJsIiAtVXNlQmFzaWNQYXJzaW5nIC1Ta2lwQ2VydGlmaWNhdGVDaGVjaw0KICAgICAgICAkU3RhdHVzQ29kZSA9ICRSZXNwb25zZS5TdGF0dXNDb2RlDQogICAgfSBjYXRjaCB7DQogICAgICAgICRTdGF0dXNDb2RlID0gJF8uRXhjZXB0aW9uLlJlc3BvbnNlLlN0YXR1c0NvZGUudmFsdWVfDQogICAgfQ0KICAgIA0KICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JFbXB0eSgkU3RhdHVzQ29kZSkpIHsNCiAgICAgICAgJFN0YXR1c0NvZGUgPSAiNDA0Ig0KICAgIH0NCiAgICByZXR1cm4gJFN0YXR1c0NvZGUNCn0=
)<Nul>"%tmp%\cbf0.0.8.f9ece1fa63465a986c041a6f24848309"

:cbf.f9ece1fa63465a986c041a6f24848309
>Nul Certutil -f -decode "%tmp%\cbf0.0.8.f9ece1fa63465a986c041a6f24848309" "%~dp0fonctions.psm1"

goto :eof
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
2 avril 2024 à 19:37

Pour la licence Windows il y a ça :

##########################################################
#
# Get-ProductKey.ps1
#     Description : récupère la clé produit de Windows
#
#    http://www.powershell-scripting.com/
#    La communauté PowerShell francophone
#
# Usage : PS > ./Get-ProductKey.ps1
##########################################################

# Création de la table de conversion base 24
$map="BCDFGHJKMPQRTVWXY2346789"

# Lecture de la clé de registre
$value = (get-itemproperty "HKLM:\\SOFTWARE\Microsoft\Windows NT\CurrentVersion").digitalproductid[0x34..0x42]

# Conversion des valeurs en Hexa pour afficher le Raw Key $hexa = ""
$value | foreach {
  $hexa = $_.ToString("X2") + $hexa
}
Write-Output "Raw Key Big Endian: $hexa"

# Calcul du Product Key
$ProductKey = ""
for ($i = 24; $i -ge 0; $i--) {
  $r = 0
  for ($j = 14; $j -ge 0; $j--) {
    $r = ($r * 256) -bxor $value[$j]
    $value[$j] = [math]::Floor([double]($r/24))
    $r = $r % 24
  }
  $ProductKey = $map[$r] + $ProductKey
  if (($i % 5) -eq 0 -and $i -ne 0) {
    $ProductKey = "-" + $ProductKey
  }
}
Write-Output "Product Key: $ProductKey"

pause

Ou bien ça :

(Get-WmiObject SoftwareLicensingService).OA3xOriginalProductKey

0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817
3 avril 2024 à 08:17

Je suis curieux comme une chatte.

Les deux scripts licence ne rendent pas le même résultat, ils sont peut-être ambigus selon que la licence est OEM ou pas.

Comme je le supposais, celui programmes ne retourne que les programmes, pas les applications Windows: on n'a donc aucun moyen de savoir s'il y a eu sur le PC cible mission de service public par exemple en désinstallant Cortana.

Curieusement par ailleurs, il m'affiche en tête de gondole plusieurs lignes vierges et une avec un numéro de version sans nom, et on sélectionne les objets Publisher et InstallDate sans les afficher?

Ce qui nous poserait à nouveau un problème de mise en forme, par exemple:
Package de pilotes Windows - Dynastream Innovations, Inc. ANT LibUSB Drivers (04/11/2012 1.2.40.201)
va tout déplacer à droite du fait de sa longueur.

0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817 > brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024
3 avril 2024 à 08:52

Et qui plus est ne rend que les programmes installés sur la partition système

0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817 > brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024
3 avril 2024 à 10:12

Toujours en coupant les cheveux en quatre, ton script en <36> n'aligne pas correctement en tout cas chez moi les informations à Disque N°, Bus,... et les couleurs de titres faute du caractère d'échappement adéquat, mais ça, c'est peut-être délibéré, et on ne peut pas le copier-coller.

On l'obtient soit en le copiant d'un script où il existe déjà, soit en le générant une fois pour toutes:

FOR /F "delims=#" %%E IN ('"prompt #$E# & FOR %%E IN (1) DO REM"') DO SET "ESC=%%E"
ECHO %ESC% > esc.txt

soit en allant se servir sur un site approprié, par exemple (Credits to Michele Locati):

https://gist.githubusercontent.com/mlocati/fdabcaeb8071d5c75a2d51712db24011/raw/b710612d6320df7e146508094e84b92b34c77d48/win10colors.cmd
 

0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024
3 avril 2024 à 16:23

Concernant l'alignement des titres, j'ai laissé tomber, enfin pour le moment.

0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024
3 avril 2024 à 16:26

Concernant les apps Windows comme Cortana on peut les lister comme ceci :

Get-AppxProvisionedPackage -Online | Format-Table DisplayName, Version
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 6 avril 2024 à 21:26

J'ai besoin d'un testeur pour ce mini-script permettant d'exporter les profils wifi, brucine es-tu là ?

if not exist "%~dp0Profils wifi sur %COMPUTERNAME%" (mkdir "%~dp0Profils wifi sur %COMPUTERNAME%")
for /f "skip=1 tokens=2 delims=:" %%A in ('netsh wlan show profiles ^| findstr ":"') do netsh wlan export profile name="%%A" key=clear folder=".\Profils wifi sur %COMPUTERNAME%"

0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817
Modifié le 7 avril 2024 à 07:52

échoue dans un premier temps parce que mon adaptateur Wifi est désactivé (exprès): il faut donc prévoir un message d'erreur dans ce cas de figure.

Je n'ai qu'un adaptateur Wifi (physique), quand bien même y en aurait-il plusieurs (physiques ou virtuels) qu'on ne peut pas en activer plusieurs à la fois et que le script ne rendra que celui qui est activé?

Une fois activé, échoue une deuxième fois parce que la syntaxe findstr retourne un espace avant le nom de l'adaptateur (" SFR_A918_5GHZ"), il faut donc que la variable supprime le premier caractère sur le mode, à supposer que cette variable s'appelle wifi
set "wifi=%wifi:~1%".

Noter que n'est rendu que 5GHZ, je suppose que c'est le fait de la Box qui est paramétrée sur cette fréquence.

à ces conditions ça fonctionne, c'est une copie du fichier xml, que tu veux, ou sa seule existence?

0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024
Modifié le 7 avril 2024 à 08:27

Etant sur Linux, je fais mes tests sur une VM Windows 10 qui n'a pas d'adaptateur wifi, donc je suis aveugle sur ce coup là, c'est pour ça que j'ai besoin de quelqu'un pour m'aider.

.

Le but c'est de sauvegarder les différents profils de la machine, et pouvoir les restaurer le cas échéant, donc il me faut les profils au format XML.

.

Si ce n'est pas trop demander, est-ce que tu pourrais corriger mon code afin que je puisse l'intégrer dans le script global ?

.

A propos du script, j'ai corrigé dans la liste des programmes les premières lignes qui ne donnaient pas le nom du programme ainsi que la version.

J'ai ajouté la liste des "Windows Apps"

Concernant le fichier Powershell, j'ai transformé la fonction de conversion en méthode statique, comme cela j'ai pu créé une surcharge de la méthode. Du coup mon fichier n'est plus un fichier psm1 mais ps1.

.

Voilà où j'en suis :

@echo off
::Mode con cols=105 lines=40
 
::AVERTISSEMENT
::LES PARTITIONS OU DISQUES DOIVENT AVOIR UN NOM, IL NE DOIT PAS AVOIR D'ESPACE
 
setlocal enableextensions enabledelayedexpansion
CHCP 65001 >nul
 
IF NOT "%os%"=="Windows_NT" (
    echo Erreur...OS Invalide...
    pause
    exit
)
 
set "tools=%~dp0mytools.ps1"
call :PsScript
powershell.exe -ExecutionPolicy Bypass -File "%tools%"
 
set "pow0=(Get-WmiObject SoftwareLicensingService).OA3xOriginalProductKey"
set "pow1=Get-WMIObject win32_ComputerSystem | foreach-object {write-host " Mémoire totale: $('{0:N2}' -f ($_.TotalPhysicalMemory/1gb)) Go"}"
set "pow2=Get-WMIObject Win32_OperatingSystem | Measure-Object -Property FreePhysicalMemory -Sum | %% {[Math]::Round($_.sum/1024/1024, 2)}"
set "pow3=Get-PhysicalDisk | Select DeviceID, Size, BusType, MediaType, Model | Format-Table -HideTableHeaders"
set "pow4=Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name' = 'Total'; Expression= {[math]::round($_.Size/1GB, 2)}},@{'Name' = 'Libre'; Expression= {[math]::round($_.FreeSpace/1GB, 2)}}"
set "pow5=Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | where {$_.DisplayName -notlike ''} | Select-Object DisplayName, DisplayVersion, Publisher | Sort-Object DisplayName | Format-Table -HideTableHeaders"
set "pow6=Get-AppxProvisionedPackage -Online | Format-Table DisplayName, Version -HideTableHeaders"
set "pow7=Gwmi Win32_LogicalDisk | where {$_.DriveType -ne '5'} | Select-Object -Property DeviceID,@{'Name' = 'Total'; Expression= {[math]::round($_.Size/1GB, 2)}},@{'Name' = 'Libre'; Expression= {[math]::round($_.FreeSpace/1GB, 2)}}"
 
:: -------------------------------------------------------------------------------------------
:: on affiche les infos système
:: -------------------------------------------------------------------------------------------
 
echo. & echo ^[103;91mRecherche en cours Ordinateur "%COMPUTERNAME%" Veuillez patienter....                                   [0m
echo.
 
::Nom_ordinateur
FOR /F "tokens=2 delims==" %%A in ('wmic os get CSName /value') DO SET "nomPC=%%A"
 
::Modèle
FOR /F "tokens=2 delims==" %%A in ('wmic computersystem get Manufacturer /value') DO SET "manufacturer=%%A"
FOR /F "tokens=2 delims==" %%A in ('wmic computersystem get Model /value') DO SET "model=%%A"
FOR /F "tokens=2 delims==" %%A in ('wmic bios get SerialNumber /value') DO SET "serialnumber=%%A"
 
::OS
FOR /F "tokens=2 delims==|" %%A in ('wmic os get Name /value') DO SET "osname=%%A"
FOR /F %%A in ('wmic os get OSArchitecture ^| find /i "bit"') DO SET "osarchi=%%A"
FOR /F "tokens=4" %%A in ('systeminfo ^| find /i "Version" ^| find /v "BIOS"') DO SET "osversion=%%A"
FOR /F "tokens=2 delims==" %%A in ('wmic os get ServicePackMajorVersion /value') DO SET "sp=%%A"
FOR /F "tokens=3" %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "DisplayVersion"') DO SET "Version=%%A"
 
::Nom Processeur
FOR /F "tokens=2 delims==" %%A in ('wmic cpu get name /value') DO SET "nomproc=%%A"
FOR /F "tokens=2 delims==" %%I in ('wmic cpu get numberofcores /value') DO SET "cores=%%I"
 
call :licence pow0
 
echo  Nom ordinateur:            %nomPC%
echo  Modèle:                    %manufacturer% %model%
echo  Type Processeur:           %processor_architecture% %nomproc% %cores% coeur(s)
echo  Numéro Série:              %serialnumber%
echo  OS:                        %osname% %osarchi% bits Service Pack %sp%
echo  Version:                   %Version% (%osversion%)
echo  Boot:                      ^< %FIRMWARE_TYPE% Mode ^>
echo  Clé produit:               %productkey%
 
:: -------------------------------------------------------------------------------------------
:: on utilise des commandes Powershell
:: -------------------------------------------------------------------------------------------
 
call :disques pow3
call :partitions pow7
call :memoire pow1 pow2
call :programmes pow5 pow6
 
set "profils=Profils wifi sur %COMPUTERNAME%"
if not exist "%~dp0%profils%" (mkdir "%~dp0%profils%")
for /f "skip=1 tokens=2 delims=:" %%A in ('netsh wlan show profiles ^| findstr ":"') do netsh wlan export profile name="%%A" key=clear folder=".\%profils%"
 
rem del /f /q "%tools%"
 
echo. & pause
exit
 
:: -------------------------------------------------------------------------------------------
:: routine de récupération de la licence Windows
:: -------------------------------------------------------------------------------------------
 
:licence
 
FOR /F "tokens=* delims=" %%A IN ('powershell.exe -command "& { !%~1! }"') DO set "productkey=%%A"
if not defined productkey (set "productkey=00000-00000-00000-00000-00000")
 
goto :eof
 
:: -------------------------------------------------------------------------------------------
:: routine de récupération des disques
:: -------------------------------------------------------------------------------------------
 
:disques
 
echo.
ECHO ^[104;93mDisque N°, Bus, Type, Taille, Nom :                                                                      [0m
 
FOR /F "tokens=1-4,* delims= " %%A IN ('powershell.exe -command "& { !%~1! }"') DO (
    FOR /F "tokens=1,2 delims= " %%H in ('powershell.exe -command "& { Import-Module %tools%; [MyTools]::ConversionUnites(%%B) }"') DO (
        set "taille=%%H"
        set "taille=       !taille:~-6! %%I"
    )
    echo. %%A         %%C %%D !taille! "%%E"
)
 
echo.
ECHO ^[104;93mDisques et partitions :                                                                                  [0m
FOR /F "delims=" %%A IN ('powershell.exe -command "& { Import-Module %tools%; InfosPartitions }"') do echo  %%A | findstr ": ,"
 
goto :eof
 
:: -------------------------------------------------------------------------------------------
:: routine de récupération des partitions
:: -------------------------------------------------------------------------------------------
 
:partitions
 
echo.
 ECHO ^[104;93mOccupation des partitions :                                                                              [0m
 
FOR /F "tokens=1-3 skip=3 delims= " %%G IN ('powershell.exe -command "& { !%~1! }"') DO (
 SET "lecteur=%%G"
 SET "total=       %%H"
 SET "libre=       %%I"
 echo. !lecteur! ^>^>^> Total / Libre : !total:~-8! / !libre:~-8! Go
)
 
goto :eof
 
:: -------------------------------------------------------------------------------------------
:: routine de récupération de la taille mémoire
:: -------------------------------------------------------------------------------------------
 
:memoire
 
FOR /F "tokens=3 delims=: " %%A IN ('powershell.exe -command "& { !%~1! }"') DO set "RamTotal=       %%~A"
FOR /F "tokens=1" %%A IN ('powershell.exe -command "& { !%~2! }"') DO set "RamLibre=       %%~A"
 
echo.
ECHO ^[104;93mMémoire RAM :                                                                                            [0m
echo. Mémoire totale : %RamTotal:~-7% Go
echo. Mémoire libre  : %RamLibre:~-7% Go
 
goto :eof
 
:programmes
 
echo.
ECHO ^[104;93mListe des programmes :                                                                                   [0m
FOR /F "tokens=*" %%A IN ('powershell.exe -command "& { !%~1! }"') DO echo.%%A
echo.
ECHO ^[104;93mListe des "Windows Apps" :                                                                               [0m
FOR /F "tokens=*" %%A IN ('powershell.exe -command "& { !%~2! }"') DO echo.%%A
 
goto :eof
 
:: -------------------------------------------------------------------------------------------
:: routine de génération du script "mytools.ps1"
:: -------------------------------------------------------------------------------------------
 
:PsScript
 
If Exist "%tmp%\cbf0.0.8.26478eb6ed3f0d0e349fbac8e8e701fc" goto:cbf.26478eb6ed3f0d0e349fbac8e8e701fc
(Set/p =Q2xhc3MgTXlUb29scyB7DQoNCiAgICBzdGF0aWMgW3N0cmluZ10gQ29udmVyc2lvblVuaXRlcyhbbG9uZ10gJHNpemUpIHsNCg0KICAgICAgICBpZiAoJHNpemUgLWx0IDEwMDApIHsNCiAgICAgICAgICAgIHJldHVybiAkc2l6ZS5Ub1N0cmluZygpICsgIiAiICsgIm9jdGV0cyINCiAgICAgICAgfQ0KDQogICAgICAgIFtkb3VibGVdICR0YWlsbGUgPSAkc2l6ZQ0KICAgICAgICBbYXJyYXldICR1bml0ZSA9IEAoJ0tvJywnTW8nLCdHbycsJ1RvJywnUG8nKQ0KICAgICAgICBbaW50XSAkaSA9IC0xDQoNCiAgICAgICAgRG8gew0KCSAgICAgICAgJHRhaWxsZS89MTAyNA0KCSAgICAgICAgJGkrKw0KICAgICAgICB9IFVudGlsICggJHRhaWxsZSAtbHQgMTAwMCApDQoNCiAgICAgICAgJHRhaWxsZSA9IFttYXRoXTo6Um91bmQoJHRhaWxsZSwyLFtTeXN0ZW0uTWlkcG9pbnRSb3VuZGluZ106OkF3YXlGcm9tWmVybykNCg0KICAgICAgICBbYXJyYXldICR2YWxldXI9JHRhaWxsZS5Ub1N0cmluZygpLlNwbGl0KCIsIikNCg0KICAgICAgICAkZGVjaW1hbGU9KCR2YWxldXJbMV0gKyAiMDAiKS5TdWJzdHJpbmcoMCwyKQ0KICAgIA0KICAgICAgICAkcmVzdWx0YXQ9JHZhbGV1clswXSArICIsIiArICRkZWNpbWFsZSArICIgIiArICR1bml0ZVskaV0NCg0KICAgICAgICByZXR1cm4gJHJlc3VsdGF0DQoNCiAgICB9DQoNCiAgICBzdGF0aWMgW3N0cmluZ10gQ29udmVyc2lvblVuaXRlcyhbbG9uZ10gJHNpemUsW2ludF0gJHByZWNpc2lvbikgew0KDQogICAgICAgIGlmICgkc2l6ZSAtbHQgMTAwMCkgew0KICAgICAgICAgICAgcmV0dXJuICRzaXplLlRvU3RyaW5nKCkgKyAiICIgKyAib2N0ZXRzIg0KICAgICAgICB9DQoNCiAgICAgICAgW2RvdWJsZV0gJHRhaWxsZSA9ICRzaXplDQogICAgICAgIFthcnJheV0gJHVuaXRlID0gQCgnS28nLCdNbycsJ0dvJywnVG8nLCdQbycpDQogICAgICAgIFtpbnRdICRpID0gLTENCg0KICAgICAgICBEbyB7DQoJICAgICAgICAkdGFpbGxlLz0xMDI0DQoJICAgICAgICAkaSsrDQogICAgICAgIH0gVW50aWwgKCAkdGFpbGxlIC1sdCAxMDAwICkNCg0KICAgICAgICBpZiAoJHByZWNpc2lvbiAtZ3QgMTUpIHsgJHByZWNpc2lvbiA9IDE1IH0NCg0KICAgICAgICAkdGFpbGxlID0gW21hdGhdOjpSb3VuZCgkdGFpbGxlLCRwcmVjaXNpb24sW1N5c3RlbS5NaWRwb2ludFJvdW5kaW5nXTo6QXdheUZyb21aZXJvKQ0KDQogICAgICAgIFthcnJheV0gJHZhbGV1cj0kdGFpbGxlLlRvU3RyaW5nKCkuU3BsaXQoIiwiKQ0KDQogICAgICAgICRkZWNpbWFsZT0oJHZhbGV1clsxXSArICIwMDAwMDAwMDAwMDAwMDAwMDAwMCIpLlN1YnN0cmluZygwLCRwcmVjaXNpb24pDQogICAgDQogICAgICAgICRyZXN1bHRhdD0kdmFsZXVyWzBdICsgIiwiICsgJGRlY2ltYWxlICsgIiAiICsgJHVuaXRlWyRpXQ0KDQogICAgICAgIHJldHVybiAkcmVzdWx0YXQNCg0KICAgIH0NCg0KfQ0KDQpmdW5jdGlvbiBJbmZvc1BhcnRpdGlvbnMoKSB7DQoNCiAgICBHZXQtV21pT2JqZWN0IFdpbjMyX0Rpc2tEcml2ZSB8IEZvckVhY2gtT2JqZWN0IHsgDQogICAgICAgICRkaXNrID0gJF8gDQogICAgICAgICRwYXJ0aXRpb25zID0gIkFTU09DSUFUT1JTIE9GICIgKyAie1dpbjMyX0Rpc2tEcml2ZS5EZXZpY2VJRD0nJCgkZGlzay5EZXZpY2VJRCknfSAiICsgIldIRVJFIEFzc29jQ2xhc3MgPSBXaW4zMl9EaXNrRHJpdmVUb0Rpc2tQYXJ0aXRpb24iIA0KICAgIA0KICAgICAgICBHZXQtV21pT2JqZWN0IC1RdWVyeSAkcGFydGl0aW9ucyB8IEZvckVhY2gtT2JqZWN0IHsgDQogICAgICAgICAgICAkcGFydGl0aW9uID0gJF8gDQogICAgICAgICAgICAkZHJpdmVzID0gIkFTU09DSUFUT1JTIE9GICIgKyAie1dpbjMyX0Rpc2tQYXJ0aXRpb24uRGV2aWNlSUQ9JyQoJHBhcnRpdGlvbi5EZXZpY2VJRCknfSAiICsgIldIRVJFIEFzc29jQ2xhc3MgPSBXaW4zMl9Mb2dpY2FsRGlza1RvUGFydGl0aW9uIiANCiAgIA0KICAgICAgICAgICAgR2V0LVdtaU9iamVjdCAtUXVlcnkgJGRyaXZlcyB8IEZvckVhY2gtT2JqZWN0IHsgDQogICAgICAgICAgICAgICAgTmV3LU9iamVjdCAtVHlwZSBQU0N1c3RvbU9iamVjdCAtUHJvcGVydHkgQHsgDQogICAgICAgICAgICAgICAgRGlza01vZGVsICAgPSAkZGlzay5Nb2RlbCANCiAgICAgICAgICAgICAgICBQYXJ0aXRpb24gICA9ICRwYXJ0aXRpb24uTmFtZSANCiAgICAgICAgICAgICAgICBEcml2ZUxldHRlciA9ICRfLkRldmljZUlEIA0KICAgICAgICAgICAgICAgIFZvbHVtZU5hbWUgID0gJF8uVm9sdW1lTmFtZSANCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQp9
)<Nul>"%tmp%\cbf0.0.8.26478eb6ed3f0d0e349fbac8e8e701fc"
:cbf.26478eb6ed3f0d0e349fbac8e8e701fc
>Nul Certutil -f -decode "%tmp%\cbf0.0.8.26478eb6ed3f0d0e349fbac8e8e701fc" "%tools%"
 
goto :eof
0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817 > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
7 avril 2024 à 09:07

C'est ch..., il faut à chaque fois rajouter les codes d'échappement couleurs que la mise en ligne ne retient pas.

Toujours dans le pinaillage de la présentation, tu as une ligne vierge après "Recherche en cours" que tu n'as pas après les autres rubriques.

Comme évoqué précédemment, la routine retourne les applications Windows et les programmes installés sur la partition système, pas ceux qui sont comme dans mon cas principalement installés sur une partition dédiée (F:, peu importe); je ne sais plus si le registre regroupe ces informations ou si le chemin y est propre à chaque logiciel, je vais tâcher de vérifier.

Sur le Wifi et comme illustré ci-dessus, pour se débarrasser de l'espace après les 2 points dans findstr (en l'état la réponse est
"Le profil «  SFR_A918_5GHZ » est introuvable sur toutes les interfaces.")
et à défaut de savoir le faire directement au niveau de la variable %%A dans la boucle FOR, j'obtiens le résultat par:

if not exist "%~dp0Profils wifi sur %COMPUTERNAME%" (mkdir "%~dp0Profils wifi sur %COMPUTERNAME%")
for /f "skip=1 tokens=2 delims=:" %%A in ('netsh wlan show profiles ^| findstr ":"') do set wifi=%%A
set "wifi=%wifi:~1%"
netsh wlan export profile name="%wifi%" key=clear folder=".\Profils wifi sur %COMPUTERNAME%"



 

0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817 > brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024
Modifié le 7 avril 2024 à 09:15

rectification, ce n'est qu'une partie des programmes installés en F: qui ne ressortent pas, sans pour autant qu'il s'agisse forcément de programmes auto-exécutables, par exemple Microsoft Money et Avidemux passent à la trappe.

J'oubliais aussi, mon transit moche par fichiers texte temporaires permet à Disque N°... d'aligner les informations, pas ta syntaxe.

0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024
Modifié le 7 avril 2024 à 09:22

Merci pour le retour.

Concernant la liste des programmes, je pensais que tout était regroupé dans :

 
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall

Je vais chercher si je trouve qq chose à ce propos.

0