Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1740 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Aide sur une amélioration d'un script powershell

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide sur une amélioration d'un script powershell

n°2360827
bagu
Posté le 26-08-2020 à 20:25:22  profilanswer
 

Bonjour,
 
J'ai compilé plusieurs éléments batch afin de créer un script permettant de nettoyer mes installations Windows 10 fraîches.
Mais j'ai un soucis d'optimisation.
Le script est visible ici : https://github.com/Bagu/W10CrapRemo [...] %20One.bat
 
En fait, la partie powershell me pose un problème d'optimisation.
Actuellement, j'ai une variable contenant les appels de programmes Windows 10 à virer.
Puis je boucle dessus afin d'exécuter la suppression :

Code :
  1. foreach ($Bloat in $Bloatware) {
  2.  Get-AppxPackage $Bloat| Remove-AppxPackage
  3.  Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like $Bloat | Remove-AppxProvisionedPackage -Online
  4.  Write-Output "Trying to remove $Bloat."
  5. }


 
Quelqu'un aurait-il les connaissances afin de modifier ce comportement.
L'idée serait de lister ce qui est installé effectivement sur le système par une commande de ce type :

Code :
  1. Get-AppxPackage | Select Name, PackageFullNameGet-AppxPackage | Select Name, PackageFullName


 
puis de n'exécuter que s'il y a une correspondance (en prenant en compte le *) la suppression. (partie que je ne parviens pas à faire)
 
Merci de vos suggestions et/ou aide.

mood
Publicité
Posté le 26-08-2020 à 20:25:22  profilanswer
 

n°2360828
Moumoule
Posté le 26-08-2020 à 22:21:54  profilanswer
 

L'idée est la suivante:
 
La commande (comme tu l'as décrite ci-dessus) te renvoie une liste d'applications, que tu vas stocker dans une variable (p.ex $applications). D'ailleurs, as-tu vraiment besoin du PackageFullName ? A mon avis, Name est suffissant
 
Ensuite:  
 
foreach ($application in $applications) {
     xxx
}
 
Dans xxx, tu vas devoir voir si $application se trouve dans la liste $Bloatware. Pour cela, je te recommande de voir -contains.
 
 
Voilà !
 

n°2360831
bagu
Posté le 27-08-2020 à 10:28:09  profilanswer
 

Merci.
 
Cependant j'ai un soucis pour stocker le résultat de la commande dans une variable.
Je pensais qu'écrire :

Code :
  1. $var = $(Get-AppxPackage | Select Name)


 
Suffirait pour avoir une variable de type tableau avec chaque nom représentant un nom de programme, et visiblement pas.
 
Par contre, le Contains est effectivement prometteur pour la suite.

n°2360835
Moumoule
Posté le 27-08-2020 à 12:32:47  profilanswer
 

Code :
  1. $apps = $(Get-AppxPackage | Select Name)
  2. foreach ($app in $apps) {
  3.     xxx
  4. }


 
$app contient un string.
 
xxx: Maintenant, tu regardes dans ta liste $Bloatware si elle contient $app.

n°2360839
bagu
Posté le 27-08-2020 à 14:04:33  profilanswer
 

Hé bien actuellement, cela ne fonctionne pas.

Code :
  1. $apps = $(Get-AppxPackage | Select Name)
  2. foreach ($app in $apps) {
  3.         Write-Output $app
  4. }


 
Renvoi du vide.
 
C'est bien là le soucis. Et je ne comprends pas pourquoi.
 
J'ai fait un petit test comme ceci :

Code :
  1. $Bloatware = @(
  2.  "*Camera*"
  3.  "Windows" )
  4. $apps = $(Get-AppxPackage | Select Name)
  5. foreach ($app in $apps) {
  6.         if ($Bloatware -contains $app -eq $true) { Write-Host $app }
  7. }


 
Histoire de voir à tester...Sans succès


Message édité par bagu le 27-08-2020 à 14:12:14
n°2360840
Moumoule
Posté le 27-08-2020 à 14:09:44  profilanswer
 

Bizarre.
 
https://i.postimg.cc/8zSbSvfL/cap.png
 
Même avec Write-Output, cela fonctionne dans mon cas.

n°2360841
bagu
Posté le 27-08-2020 à 14:12:57  profilanswer
 

J'ai fait un petit test comme ceci :

Code :
  1. $Bloatware = @(
  2.  "*Camera*"
  3.  "Windows" )
  4. $apps = $(Get-AppxPackage | Select Name)
  5. foreach ($app in $apps) {
  6.         if ($Bloatware -contains $app -eq $true) { Write-Host $app }
  7. }


 
Histoire de voir à tester...Sans succès
 
Alors par contre, j'ai une sortie si je modifie Write-output en Write-Host mais la condition ne match jamais :S


Message édité par bagu le 27-08-2020 à 14:13:48
n°2360876
itela
Posté le 29-08-2020 à 11:52:05  profilanswer
 

Salut,
D'après ce que j'ai compris de l'opérateur "-contains", il faut que les deux expressions comparées soient rigoureusement identiques pour qu'il renvoie "true".
Dans ton cas, il faudrait qu'un des éléments du tableau $Bloatware soit strictement égal à $app  pour que la condition soit vérifiée.
 
Si j'ai bien compris, tu souhaites avoir un retour si l'un des éléments $apps contient en partie un des mots de $Bloatware. Donc, ce n'est pas "-contains" qu'il te faut utiliser mais a priori "-match".  
 
Voir ici (en anglais) la documentation https://docs.microsoft.com/en-us/po [...] wershell-7
 
Il faut aussi écrire la commande dans "l'autre sens" $app -match <un élément de $Bloatware>


Message édité par itela le 29-08-2020 à 12:37:11
n°2360939
bagu
Posté le 30-08-2020 à 21:55:04  profilanswer
 

Salut,
 
Merci pour le lien, mais match ne semblait pas fonctionner.
Par contre, like, lui semble donner le bon résultat...
 
Voici un test :

Code :
  1. $bloatware = @(
  2.  "Microsoft.BingNews"
  3.  "Microsoft.Windows.Cortana"
  4.  "Microsoft.549981C3F5F10"
  5.  "*Camera*"
  6.  "*Windows*" )
  7. $apps = $(Get-AppxPackage | Select Name)
  8. foreach ($bloat in $bloatware)
  9. {
  10.     foreach ($app in $apps)
  11.     {
  12.         if ($app -like $bloat -eq $true) { Write-Host $app }
  13.     }
  14. }


 
Il semblerait que je tienne le bon bout.
Je vais faire plus de tests afin de voir si ça répond à mes besoins.
Je me suis monter une image virtualbox afin de faire des essais.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Aide sur une amélioration d'un script powershell

 

Sujets relatifs
[Résolu] [JS] Besoin d’aide sur réalisation d’un convertisseur dec/hexBesoins d'aide installation auto shop php
Proposition playlist Youtube SQL/Powershell/PostgresEOFError lors du boot sur un script .py
Aide exercice assembleur[PowerShell]Extraire un ID matériel
Script BatchScript python qui joue à un autre script python
PHP PSQL Aide sur un moteur de recherche 
Plus de sujets relatifs à : Aide sur une amélioration d'un script powershell


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR