J'ai donc décidé de créer ce script Powershell.
Projet Github ici .
Version avec capture des arguments de processus également.
Les actions effectuées:
- Supprimer le fichier précédent.
- Vérifiez les processus en cours.
- Filtrez la liste par chemin contenant un mot spécifique ( Programme ) qui suppose que tous les programmes sont installés dans Program Files ou Program Files (x 86).
- Obtenir les chemins absolus vers les exécutables des processus trouvés
- Écrire des chemins dans un fichier temporaire dans le répertoire temporaire.
- Déplacez le fichier temporaire dans le répertoire de destination situé dans le dossier de démarrage de l'utilisateur.
Avantages:
- Écrit dans PowerShell, le code est natif et devrait fonctionner sous Windows Vista et supérieur.
- Travaux.
Les inconvénients:
Les programmes installés dans un autre chemin - pas sous les fichiers de programme - ne seront pas repris dans cette version. Cela est bien sûr nécessaire pour éviter le démarrage de processus Windows natifs tels que explorer.exe, etc. Cependant, si vous avez un chemin comme celui
D:\Apps
où vous installez également des programmes, vous pouvez modifier la ligne.
$ _. Path -match "Programme"
à
$ .Path -match "Programme" -ou $ .Path -match "D: \ Apps"
et cela fonctionnera tout de même.
Maintenant le code de script:
###############################
# AUTOMATIC STARTUP GENERATOR #
# ASGEN v.1.0 by mnmnc @ 2014 #
###############################
# VARIABLES
# CURRENT PATH
$current = $(pwd).ToString()
# DESTINATION PATH
$destination_path = "$env:userprofile\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\programs.bat"
# MOVING TO TEMP
cd $env:systemroot\Temp
# REMOVING OLD FILE
del $destination_path
# EMPTY ARRAYS
$arr_names = @()
$arr_paths = @()
# FILLING ARRAYS
Get-Process | Where-Object {$_.Path -match "Program" } | foreach { $arr_names += $_.Name; $arr_paths += $_.Path }
# CREATING FILE
for($i = 0; $i -le $arr_names.count -1; $i++)
{
$out = "`"" + $arr_paths[$i] + "`""
write-output $out | out-file "programs.bat" -append -Encoding ascii
}
# INFO
Write-host "`nFolowwing programs will be started on next boot:`n"
cat programs.bat
Write-host "`n"
# MOVING TO STARTUP FOLDER
mv programs.bat "$destination_path"
# RETURNING
cd $current
exit
Simpy copier ce code et le coller dans le fichier shutdown.ps1
sur votre bureau. Enregistrez et fermez ce fichier. Maintenant, créez un deuxième fichier shutdown.bat
et mettez le code
powershell shutdown.ps1
shutdown -s -t 1
dans ce fichier. Enregistrez et fermez le fichier bat. Vous pouvez maintenant déplacer les deux fichiers vers le répertoire préféré. Après cela, vous pouvez cliquer avec Right Mouse Buttonsur un fichier de batte et créer un raccourci vers ce fichier. Cliquez ensuite sur avec Right Mouse Buttonun raccourci et choisissez Épingler au menu Démarrer . Cela ajoutera le raccourci à votre menu Démarrer.
Maintenant, chaque fois que vous voulez fermer le PC et enregistrer les programmes en cours pour un démarrage automatique après le démarrage, vous pouvez utiliser ce raccourci.
Edition - Incluant les arguments en ligne de commande
Etant donné que vous souhaitez également enregistrer les arguments de ligne de commande de processus, vous devez modifier les sections Remplissage de tableaux et Création de fichier en:
# FILLING ARRAYS
Get-WmiObject Win32_Process | Where-Object { $_.Path -match "Program" } | foreach { $arr_names += $_.Name; $arr_paths += $_.CommandLine; }
# CREATING FILE
for($i = 0; $i -le $arr_names.count -1; $i++)
{
$out = $arr_paths[$i]
write-output $out | out-file "programs.bat" -append -Encoding ascii
}
Le changement consiste à utiliser WMI maintenant au lieu de get-process. De plus, les guillemets doivent être omis cette fois.
Remarquer
Si vous rencontrez une erreur lors de l'exécution du script, les paramètres de la stratégie d'exécution pour Powershell sont incorrects. Pour changer cela, vous devez ouvrir la console PowerShell en tant qu'administrateur, puis saisissez-le Set-ExecutionPolicy Unrestricted
et saisissez-le Y
lorsque vous êtes invité à confirmer. C'est ça. Devrait bien fonctionner.
Startup
dossier (ils seront redémarrés lors de la connexion)?