[RESOLU] exécuter un script powershell ?

Questions about WAPT Packaging / Requêtes et aides autour des paquets Wapt.
Règles du forum
Règles du forum
* English support on www.reddit.com/r/wapt
* Le support en français se fait sur ce forum
* Merci de préfixer le titre du thread par [RESOLU] s'il est résolu.
* Préciser version de WAPT installée (1.3.9 / 1.3.13 / 1.5 )
* Préciser OS du serveur (Linux / Windows) et version (Debian Jessie/Stretch - CentOS 7 - Windows Server 2012/2016)
* Préciser OS de la machine d'administration/création des paquets (Windows 7 / 10)
olaplanche
Messages : 65
Inscription : 26 janv. 2017 - 11:11

11 déc. 2017 - 14:57

Bonjour,

J'ai besoin d'exécuter un script powershell depuis un paquet (pour supprimer les apps inutiles de Windows 10 post-upgrade).
J'ai trouvé plusieurs posts sur le forum à ce propos, mais tous traités différemment !

Existe t-il une solution plus "propre" que les autres ?

Pour info :
- Version de WAPT installée : 1.3.13
- OS du serveur : Debian Jessie
- OS de la machine d'administration/création des paquets : Windows 10

Merci
Dernière modification par olaplanche le 19 déc. 2018 - 10:12, modifié 2 fois.
- Version de WAPT installée : 1.7.4
- OS du serveur : Linux / Debian Stretch
- OS de la machine d'administration/création des paquets : Windows 10
Avatar de l’utilisateur
sfonteneau
Expert WAPT
Messages : 839
Inscription : 10 juil. 2014 - 23:52
Contact :

13 déc. 2017 - 12:31

utiliser la fonction run_powershell

par exemple :

Code : Tout sélectionner

run_powershell('Get-AppxPackage -Name Microsoft.Windows.Cortana -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}')
C'est le plus propre
olaplanche
Messages : 65
Inscription : 26 janv. 2017 - 11:11

13 déc. 2017 - 16:06

Bonjour et merci pour la réponse.

Je suis en train de tester avec le paquet suivant :

Code : Tout sélectionner

# -*- coding: utf-8 -*-
from setuphelpers import *

uninstallkey = []

def install():
    run_powershell('Get-AppXPackage -User Administrateur | where-object {$_.name –notlike “*store*”} | Remove-AppxPackage')
    run_powershell('Get-appxprovisionedpackage –online | where-object {$_.packagename –notlike “*store*”} | Remove-AppxProvisionedPackage -online')
    run_powershell('Get-AppxPackage -AllUsers | where-object {$_.name –notlike “*store*”} | Remove-AppxPackage')
Seule la commande du milieu semble fonctionner (pas de soucis avec un nouveau compte utilisateur). Je ne trouve rien sur la fonction run_powershell, est-il possible d'avoir un retour d'info comme dans la console powershell ? La console wapt ne remonte aucune erreur, mais pourtant les apps ne sont pas supprimé du compte administrateur !

Merci
- Version de WAPT installée : 1.7.4
- OS du serveur : Linux / Debian Stretch
- OS de la machine d'administration/création des paquets : Windows 10
olaplanche
Messages : 65
Inscription : 26 janv. 2017 - 11:11

14 déc. 2017 - 13:51

Complément d'info :

J'utilise la version x64 de powershell et cela pourrait être dû à des limitations de celui-ci pour le compte système.
- Version de WAPT installée : 1.7.4
- OS du serveur : Linux / Debian Stretch
- OS de la machine d'administration/création des paquets : Windows 10
olaplanche
Messages : 65
Inscription : 26 janv. 2017 - 11:11

18 oct. 2018 - 13:07

Bonjour,

Je remonte ce problème que je n'ai toujours pas résolu.
Pas mal de chose ont changé entre temps, à savoir :

- Version de WAPT installée : 1.6.2.7
- OS du serveur : Debian Stetch
- OS de la machine d'administration/création des paquets : Windows 10

Ensuite j'utilise un nouveau script lors de mon déploiement MDT, le voici :

Code : Tout sélectionner

    # Functions
    function Write-LogEntry {
        param(
            [parameter(Mandatory=$true, HelpMessage="Value added to the RemovedApps.log file.")]
            [ValidateNotNullOrEmpty()]
            [string]$Value,
            [parameter(Mandatory=$false, HelpMessage="Name of the log file that the entry will written to.")]
            [ValidateNotNullOrEmpty()]
            [string]$FileName = "RemovedApps.log"
        )
        # Determine log file location
        $LogFilePath = Join-Path -Path $env:windir -ChildPath "Temp\$($FileName)"
        # Add value to log file
        try {
            Add-Content -Value $Value -LiteralPath $LogFilePath -ErrorAction Stop
        }
        catch [System.Exception] {
            Write-Warning -Message "Unable to append log entry to RemovedApps.log file"
        }
    }
    # Get a list of all apps
    Write-LogEntry -Value "Starting built-in AppxPackage and AppxProvisioningPackage removal process"
    $AppArrayList = Get-AppxPackage -PackageTypeFilter Bundle -AllUsers | Select-Object -Property Name, PackageFullName | Sort-Object -Property Name
    # White list of appx packages to keep installed
    $WhiteListedApps = @(
        "Microsoft.DesktopAppInstaller", 
        "Microsoft.WindowsCalculator", 
        "Microsoft.WindowsStore"
    )
    # Loop through the list of appx packages
    foreach ($App in $AppArrayList) {
        # If application name not in appx package white list, remove AppxPackage and AppxProvisioningPackage
        if (($App.Name -in $WhiteListedApps)) {
            Write-LogEntry -Value "Skipping excluded application package: $($App.Name)"
        }
        else {
            # Gather package names
            $AppPackageFullName = Get-AppxPackage -Name $App.Name | Select-Object -ExpandProperty PackageFullName
            $AppProvisioningPackageName = Get-AppxProvisionedPackage -Online | Where-Object { $_.DisplayName -like $App.Name } | Select-Object -ExpandProperty PackageName
            # Attempt to remove AppxPackage
            if ($AppPackageFullName -ne $null) {
                try {
                    Write-LogEntry -Value "Removing application package: $($App.Name)"
                    Remove-AppxPackage -Package $AppPackageFullName -ErrorAction Stop | Out-Null
                }
                catch [System.Exception] {
                    Write-LogEntry -Value "Removing AppxPackage failed: $($_.Exception.Message)"
                }
            }
            else {
                Write-LogEntry -Value "Unable to locate AppxPackage for app: $($App.Name)"
            }
            # Attempt to remove AppxProvisioningPackage
            if ($AppProvisioningPackageName -ne $null) {
                try {
                    Write-LogEntry -Value "Removing application provisioning package: $($AppProvisioningPackageName)"
                    Remove-AppxProvisionedPackage -PackageName $AppProvisioningPackageName -Online -ErrorAction Stop | Out-Null
                }
                catch [System.Exception] {
                    Write-LogEntry -Value "Removing AppxProvisioningPackage failed: $($_.Exception.Message)"
                }
            }
            else {
                Write-LogEntry -Value "Unable to locate AppxProvisioningPackage for app: $($App.Name)"
            }
        }
    }
    # White list of Features On Demand V2 packages
    Write-LogEntry -Value "Starting Features on Demand V2 removal process"
    $WhiteListOnDemand = "NetFX3|Language|Browser.InternetExplorer"
    # Get Features On Demand that should be removed
    $OnDemandFeatures = Get-WindowsCapability -Online | Where-Object { $_.Name -notmatch $WhiteListOnDemand -and $_.State -like "Installed"} | Select-Object -ExpandProperty Name
    foreach ($Feature in $OnDemandFeatures) {
        try {
            Write-LogEntry -Value "Removing Feature on Demand V2 package: $($Feature)"
            Get-WindowsCapability -Online -ErrorAction Stop | Where-Object { $_.Name -like $Feature } | Remove-WindowsCapability -Online -ErrorAction Stop | Out-Null
        }
        catch [System.Exception] {
            Write-LogEntry -Value "Removing Feature on Demand V2 package failed: $($_.Exception.Message)"
        }
    }
    # Complete
    Write-LogEntry -Value "Completed built-in AppxPackage and AppxProvisioningPackage removal process"
Je souhaiterais m'en servir dans un paquet wapt, mais je ne vois pas comment...
Si quelqu'un peut m'aiguiller sur le bon chemin ?

Merci
- Version de WAPT installée : 1.7.4
- OS du serveur : Linux / Debian Stretch
- OS de la machine d'administration/création des paquets : Windows 10
olaplanche
Messages : 65
Inscription : 26 janv. 2017 - 11:11

19 déc. 2018 - 10:12

J'ai résolu mon problème avec le code suivant :

Code : Tout sélectionner

# -*- coding: utf-8 -*-
from setuphelpers import *
#import subprocess

uninstallkey = []

def install():
    run('powershell.exe -NoProfile -NonInteractive -File RemoveBuiltinApps.ps1')
Il faut penser à activer l’exécution des scripts powershell sur les postes concernés ou ajouter le paramètre "-executionpolicy bypass"
- Version de WAPT installée : 1.7.4
- OS du serveur : Linux / Debian Stretch
- OS de la machine d'administration/création des paquets : Windows 10
Répondre