Librairie de fonctions

Introduction

Cette bibliothèque est inclus dans tous les packages via l'importation du fichier WAP.dll.

Cette bibliothèque a été développé en C# via le .NET framework 4.8 pour un maximum de compatibilité.

Version de la bibliothèque : 1.3

Sommaire

Cette bibliothèque contient les fonctions suivantes :

Bibliothèque

Add-ActiveSetup

Cette fonction permet de créer une clé registre Active Setup. Utile pour faire du paramétrage de compte utilisateur lorsque celui-ci vient de se connecter pour la première fois sur ce PC. Prévilégier la modification des répertoires utilisateurs et du répertoires par defaut (nouvel utilisateur) avant l'utilisation de cette fonction.

Parametres :

Resultat :

Cette fonction ne renvoie aucun résultat.

Exemples :

WAP\Add-ActiveSetup -Name "Config_VLC" -Action "C:\temp\ActiveSetup\VLC\Add_user_config.bat"

Clear-DesktopShortcut

Cette fonction permet de supprimer les racourcis bureaux à partir de l'exe cible.

Parametres :

Resultat :

Cette fonction ne renvoie aucun résultat.

Exemples :

WAP\Clear-DesktopShortcut -TargetPath "C:\Program Files\Software\Software.exe"

Copy-AppItem

Cette fonction copie un fichier ou un dossier dans un autre répertoire.

Parametres :

Resultat :

Cette fonction ne renvoie aucun résultat.

Exemples :

WAP\Copy-AppItem -Source "$Path\App\Folder" -Destination "C:\Temp"
WAP\Copy-AppItem -Source "$Path\App\File.txt -Destination "C:\Temp"
WAP\Copy-AppItem -Source "$Path\App\File.txt" -Destination "C:\Temp\NewName.txt"

Variables

Listes des variables utilisables.

Exemples :

$PF = "C:\Program Files"
$PF86 = "C:\Program Files (x86)"
$PD = "C:\ProgramData"
$StartMenu = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs"
$PublicDesktop = "C:\Users\Public\Desktop"
$StartUp = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"

Remove-AppItem

Cette fonction permet de supprimer des dossiers, des fichiers et des clés registres de manière récursive (ruche Local machine et ruches utilisateurs)

Parametres :

Resultat :

Cette fonction ne renvoie aucun résultat.

Exemples :

WAP\Remove-AppItem -Path "C:\temp\folder\file.dll"
WAP\Remove-AppItem -Path "C:\temp\folder"
WAP\Remove-AppItem -Path "HKLM:\SOFTWARE\TEST"
foreach ($User in (WAP\Get-UserInfos)) {WAP\Remove-AppItem -Path "HKU:\$($User.SID)\Software\TEST"}

Set-Registry

Cette fonction permet de créer ou modifier une clé registre, ses propriétés et les valeurs de ses propriétés.

Parametres :

Resultat :

Cette fonction ne renvoie aucun résultat.

Exemples :

WAP\Set-Registry -Path "HKLM:\SOFTWARE\TEST"
WAP\Set-Registry -Path "HKLM:\SOFTWARE\TEST" -Property "phrase" -Value "abc" -Type "String"
WAP\Set-Registry -Path "HKLM:\SOFTWARE\TEST3" -Property "phrase_interpretation" -Value "%ProgramFiles%\Software" -Type "ExpandString"
WAP\Set-Registry -Path "HKLM:\SOFTWARE\TEST" -Property "binaire" -Value ([byte[]](1,2,3,255)) -Type "binary"
WAP\Set-Registry -Path "HKLM:\SOFTWARE\TEST" -Property "entier" -Value "123" -Type "Dword"
WAP\Set-Registry -Path "HKLM:\SOFTWARE\TEST" -Property "entierlong" -Value "12345" -Type "qword"
WAP\Set-Registry -Path "HKLM:\SOFTWARE\TEST" -Property "phrases multiples" -Value @("Val1", "Val2") -Type "MultiString"
foreach ($User in (WAP\Get-UserInfos)) { WAP\Set-Registry -Path "HKU:\$($User.SID)\Software\TEST" -Property "phrase" -Value "abc" -Type "String" }

Get-ActiveSessions

Cette fonction liste les utilisateurs connectés sur la machine.

Resultat :

Cette fonction renvoie une liste de sessions sous forme d'une liste de tableaux avec les propriétés suivantes :
-SessionID
-DomaineName
-UserName
-ProfilePath
-SID

Exemples :

WAP\Get-ActiveSessions

Get-UserProcess

Cette fonction permet de vérifier le status des processus dans le contexte utilisateur. Plus particulièrement pour savoir si un processus affiche une fenêtre dans la session utilisateur ou si c'est un démon.

Parametres :

Resultat :

Cette fonction renvoie la liste de processus spécifiés en entrée avec leur status sous forme d'une liste de tableau avec les propriétés suivantes:
-ProcessName
-ProcessStatus

Exemples :

WAP\Get-UserProcess -Name @("PowerPoint", "Excel", "Word")

Show-MessageUI

Cette fonction permet d'afficher un message à l'utilisateur connecté (à condition qu'un utilisateur soit connecté).

Parametres :

Resultat :

Cette fonction renvoie un code de retour en fonction de la réponse de l'utilisateur :
-Code 0 : User Close Window
-Code 1 : User push Button 1
-Code 2 : User push Button 2
-Code 3 : User push Button 3
-Code 4 : No Answer (Timeout)
-Code 34 : User not logged
-Every other Code : Erreur

Exemples :

$xml = @"
<root>
<TimeOut>20</TimeOut>
<Languages>
<Language id=`"fr`">
<WindowsTitle>Mise à jour logiciel : $SoftwareName</WindowsTitle>
<Title>$SoftwareName</Title>
<SubTitle>Une nouvelle mise à jour est prête à être installée</SubTitle>
<Message>Pour procéder à l'installation, nous vous demandons de fermer les logiciels suivants :$Applist</Message>
<Button1></Button1>
<Button2>Lancer l'installation</Button2>
<Button3>Reporter</Button3>
</Language>
<Language id=`"es`">
<WindowsTitle>Actualización de Software: $SoftwareName</WindowsTitle>
<Title>$SoftwareName</Title>
<SubTitle>Una nueva actualización está lista para ser instalada</SubTitle>
<Message>Para proceder con la instalación, se requiere cerrar las siguientes aplicaciones de software :$Applist</Message>
<Button1></Button1>
<Button2>Iniciar instalación</Button2>
<Button3>Posponer</Button3>
</Language>
<Language id=`"pt`">
<WindowsTitle>Atualização de Software: $SoftwareName</WindowsTitle>
<Title>$SoftwareName</Title>
<SubTitle>Uma nova atualização está pronta para ser instalada</SubTitle>
<Message>Para continuar com a instalação, é necessário fechar os seguintes aplicativos de software:$Applist</Message>
<Button1></Button1>
<Button2>Iniciar Instalação</Button2>
<Button3>Adiantar</Button3>
</Language>
<Language id=`"de`">
<WindowsTitle>Software-Update: $SoftwareName</WindowsTitle>
<Title>$SoftwareName</Title>
<SubTitle>Ein neues Update ist zur Installation bereit</SubTitle>
<Message>Um mit der Installation fortzufahren, müssen Sie die folgenden Softwareanwendungen schließen:$Applist</Message>
<Button1></Button1>
<Button2>Installation starten</Button2>
<Button3>Verschieben</Button3>
</Language>
<Language id=`"default`">
<WindowsTitle>Software Update : $SoftwareName</WindowsTitle>
<Title>$SoftwareName</Title>
<SubTitle>A new update is ready to be installed</SubTitle>
<Message>To proceed with the installation, you are required to close the following software applications :$Applist</Message>
<Button1></Button1>
<Button2>Start Installation</Button2>
<Button3>Postpone</Button3>
</Language>
</Languages>
</root>
"@
WAP\Show-MessageUI -Config $xml -LogoPath "$Path\Logo.png"

Stop-WAPSession

Cette fonction doit être éxécutée à la fin de chaque installation ou désinstallation d'un logiciel. Celle-ci permet de calculer le temps d'installation, calculer l'espace disque utilisé par l'installation, nettoyer le dossier temporaire et faire un reset de certaines variables.

Resultat :

Cette fonction ne renvoie aucun résultat.

Exemples :

WAP\Stop-WAPSession

Test-AppPath

Permet de vérifier la présence ou l'absence d'un fichier, d'une clé registre, éventuellement la présence ou non d'une propriété et éventuellemnt de vérifier la valeur de cette propriété.

Parametres :

Resultat :

Retourne 'true' si la contidion est validée sinon 'false'

Exemples :

WAP\Test-AppPath -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -PropertyName 'ProductName' -PropertyValue 'Windows 10 Pro' -Expected $true
WAP\Test-AppPath -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -PropertyName 'ProductName' -Expected $true
WAP\Test-AppPath -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Expected $true
WAP\Test-AppPath -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -PropertyName 'ProductName' -PropertyValue 'Windows 10 Pro Does not exist' -Expected $false
WAP\Test-AppPath -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -PropertyName 'ProductNameDoesNotExist' -Expected $false
WAP\Test-AppPath -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersionDoesNotExist' -Expected $false
WAP\Test-AppPath -Path 'C:\Windows\notepad.exe' -PropertyName 'FileVersion' -PropertyValue '10.0.9' -Expected $true
WAP\Test-AppPath -Path 'C:\Windows\notepad.exe' -Expected $true
WAP\Test-AppPath -Path 'C:\Windows\notepad.exe' -PropertyName 'FileVersion' -PropertyValue '10.0.999999' -Expected $false
WAP\Test-AppPath -Path 'C:\Windows\notepaddoesnotexist.exe' -Expected $false

Show-CloseAppMessage

Permet de demander à l'utilisateur de fermer des applications. Ne jamais spécifier des processus executé par le compte System NT.

Parametres :

Resultat :

Cette fonction ne renvoie aucun résultat.

Exemples :

WAP\Show-CloseAppMessage -ProcessList @("PowerPoint", "Excel", "Word") -ShowIf $CLOSEAPPMESSAGE.IsPresent

Set-DesktopShortcut

Cette fonction permet d'ajouter les racourcis bureaux à partir de l'exe cible.

Parametres :

Resultat :

Cette fonction ne renvoie aucun résultat.

Exemples :

WAP\Set-DesktopShortcut -TargetPath "C:\Program Files\Software\Software.exe"

New-Error

Cette fonction permet de logguer une erreur d'installation et de stopper l'installation si besoin avec un code erreur en sortie.
> Si Severity = 1 + WAP\Start-WAPSession 'INSTALL' >> Exit
> Si Severity = 1 + WAP\Start-WAPSession 'UNINSTALL' >> Exit
> Si Severity = 2 + WAP\Start-WAPSession 'INSTALL' >> Exit
> Si Severity = 2 + WAP\Start-WAPSession 'UNINSTALL' >> Continue
> Si Severity = 3 + WAP\Start-WAPSession 'INSTALL' >> Continu
> Si Severity = 3 + WAP\Start-WAPSession 'UNINSTALL' >> Continue

Parametres :

Resultat :

Cette fonction ne renvoie aucun résultat.

Exemples :

WAP\New-Error -Message "Description de l'erreur" -Code 1500 -Solution "Solutions possibles pour résoudre cette erreur" -Severity 2 -Wait 30
WAP\New-Error -Message "Description d'une autre erreur" -Code 1600

Start-Execution

Cette fonction permet d'exécuter un .exe ou .msi et de spécifier des arguments d'installation.

Parametres :

Resultat :

Cette fonction renvoie -1 si une erreur apparait pendant l'execution de cette fonction, sinon elle renvoie le code retour de l'exe.

Exemples :

$ExitCode = WAP\Start-Execution -Exe "C:\temp\file-version1.1.exe" -Arg "/S"
$ExitCode = WAP\Start-Execution -Exe "C:\temp\file*.exe" -Arg "/S"
$ExitCode = WAP\Start-Execution -Msi "C:\temp\file*.msi" -Arg "/AllUSERS=1"
$ExitCode = WAP\Start-Execution -Msi "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" # Contexte de désinstallation uniquement
$ExitCode = WAP\Start-Execution -Exe "C:\temp\file-version1.1.exe" -Arg "/S" -NoWait
$ExitCode = WAP\Start-Execution -Exe "C:\temp\file-version1.1.exe" -Arg "/S" -Timeout 45
$ExitCode = WAP\Start-Execution -Exe "C:\temp\file-version1.1.exe" -Arg "/S" -Detect "C:\Program Files\Software\soft.exe" -Wait 60
$ExitCode = WAP\Start-Execution -Exe "C:\Program Files\Software\soft.exe" -NoWait -Context "LOGGEDUSER"

Write-Log

Cette fonction permet de générer du log disponibles dans le répertoire : "C:\ProgramData\WinAppack\Logs". Chaque package génére sont propre fichier de log. Il est possible d'utiliser cette fonctione à la sortie d'un pipeline.

Parametres :

Resultat :

Cette fonction ne renvoie aucun résultat.

Exemples :

WAP\Write-Log -Message "Texte" -Color "Red" -Date $false
Get-Process -Name "NonExistentProcess" | WAP\Write-Log

Exit-Process

Cette fonction permet de fermer un processus.

Parametres :

Resultat :

Cette fonction ne renvoie aucun résultat.

Exemples :

WAP\Exit-Process -Name "filezilla"
WAP\Exit-Process -Name "filezilla.exe"
WAP\Exit-Process -Name "vlc" -Delay 60

Get-UninstallEXE

Cette fonction liste les logiciels installés à partir des informations registre :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

Parametres :

Resultat :

Cette fonction renvoie la liste des logiciels Exe installés répondants aux critères d'entrées sous forme d'une liste de tableaux avec les propriétés suivantes :
-Location (Key Path)
-DisplayName
-Publisher
-DisplayVersion
-UninstallExe (Commande de désinstallation)
-UninstallArg (Arguments de désinstallation en mode interactif)
-InstallLocation

Exemples :

$example = WAP\Get-UninstallEXE -PatternDisplayName ".*VLC Media Player.*"
$example.Location
$example.DisplayName
$example.DisplayVersion
$example.UninstallExe
$example.UninstallArg
$exemple.InstallLocation
foreach($Exe in (WAP\Get-UninstallEXE -PatternDisplayName '.*7-zip.*')) { $ExitCode = WAP\Start-Execution -Exe $Exe.UninstallExe -Arg '/S' }

Get-UninstallMSI

Cette fonction liste les GUID CODE MSI à partir des informations registre :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

Parametres :

Resultat :

Cette fonction renvoie la liste des logiciels MSI installés répondants aux critères d'entrées sous forme d'une liste de tableaux avec les propriétés suivantes :
-Location (Key Path)
-DisplayName
-Publisher
-DisplayVersion
-GUID (Product Code de 38 caractères)
-InstallLocation

Exemples :

$example = WAP\Get-UninstallMSI -PatternDisplayName "VLC Media Player"
$example.Location
$example.DisplayName
$example.DisplayVersion
$example.UninstallExe
$example.UninstallArg
$example.InstallLocation
foreach($Msi in (WAP\Get-UninstallMSI '7-zip')) { $ExitCode = WAP\Start-Execution -Msi $Msi.GUID }

Get-UserInfos

Cette fonction liste tous les comptes utilisateurs du PC (SID, ProfilePath et Login).

Resultat :

Cette fonction renvoie une liste de comptes utilisateurs de la machine sous forme d'une liste de tableaux avec les propriétés suivantes :
-SID
-ProfilePath
-Login

Exemples :

$example = WAP\Get-UserInfos
$example.SID
$example.ProfilePath
$example.Login

Start-WAPSession

Cette fonction doit être éxécutée à chaque début d'installation ou de désinstallation d'un logiciel. Cela a un impact majeur sur la manière dont s'executent certaines fonctions et en particulier lorsqu'une erreur survient et que la sévérité de l'erreur est égale à 2.

Parametres :

Resultat :

Cette fonction ne renvoie aucun résultat.

Exemples :

WAP\Start-WAPSession -Action "INSTALL"
WAP\Start-WAPSession -Action "UNINSTALL"

Expand-Zip

Cette fonction dézipe un fichier .zip dans un autre répertoire.

Parametres :

Resultat :

Cette fonction ne renvoie aucun résultat.

Exemples :

WAP\Expand-Zip -Source "C:\temp\file.zip" -Destination "C:\temp\extract"

Release-Notes

1.3.2026.0213 :

- Modification des variables SD() et Win()

1.3.2025.1127 :

- Modification de la fonction GetUserProcess (le temppath)

1.3.2025.1118 :

- Modification du TempPath dans C:\ProgramData (correction bug pour les utilisateurs itinérants) - Passage de .NET Framework 4.7.2 à 4.8 (WAPMessageUI et WAPUserProcess)

1.3.2025.1114 :

- Ajout de la variable software.DisplayName - Ajout de la variable software.DisplayVersion - Correction initialisation variable DiskSpace_Mo_Needed et RAM_Mo_Needed - Correction fonction IsValidRegistryValue - Passage de .NET Framework 4.7.2 à 4.8

1.3.2025.0526 :

- Ajout de la variable d'environnement $LoggedUser

1.3.2025.0520 :

- Correction de la fonction StartExecution pour gérer le fichier .msp

1.3.2025.0507 :

- Correction de GetUninstallMSI dans le cas ou le GuidCode n'est pas disponible dans UninstallString

1.3.2025.0507 :

- Correction lors de l'execution automatique de CloseAppMessage au lancement de StartWAPSession

1.3.2025.0506 :

- Ajout de la variable d'environnement $StartUp

1.3.2025.0505 :

- Amélioration de GetUserProcess pour analyser plus de 7 processus

1.3.2025.0429 :

- Ajout de la variable $StartMenu et modification variable $PublicDesktop - Modification de GetUninstallMSI : Déplacement de la vérification de la condition string.IsNullOrEmpty(UninstallString)

1.3.2025.0414 :

- Ajout des variables d'environnements $PF, $PF86, $PD, $PublicDesktop

1.3.2025.0414 :

- Amélioration des logs

1.3.2025.0411 :

- Début des releases notes