J'ai essayé de réaliser une tâche supposée simple qui consiste à lancer l'Explorateur de processus avec les droits d'administrateur (pour afficher tous les processus) en me connectant en tant qu'utilisateur normal sur mon système Win10 Pro 21H1. Cela s'est avéré plus difficile que je ne l'avais prévu.
Voici ma situation :
- J'ai plusieurs comptes d'utilisateurs normaux, disons que l'un d'entre eux s'appelle johny_user
- J'ai un compte administrateur, disons appelé johny_admin
Ce que je veux, c'est que lorsque je me connecte en tant que johny_user Je souhaite exécuter Process Explorer avec des privilèges d'administrateur. Idéalement, j'aimerais le faire sans intervention manuelle et éviter l'invite de l'UAC.
Méthode du planificateur de tâches
Au départ, je voulais créer une tâche dans le planificateur de tâches pour effectuer cette opération, de la même manière que ce qui est décrit ici : Exécuter le gestionnaire des tâches (explorateur de processus) en tant qu'administrateur
Cependant, lorsque je lance le planificateur de tâches en tant que johny_user Je ne peux pas créer une tâche à exécuter avec les privilèges les plus élevés, en fournissant les informations suivantes johny_admin les références. Si j'essaie de le faire, je reçois cette erreur ( capture d'écran ):
Task Scheduler cannot create the task.
The user account is unknown, the password is incorrect,
or the user account does not have permission to create this task.
Si je lance le planificateur de tâches avec johny_admin Je peux créer la tâche sans problème. J'utilise les options suivantes :
- condition "Exécuter à la connexion de johny_user"
- Lors de l'exécution de la tâche, utilisez le compte d'utilisateur suivant : johny_admin
- Option de sécurité "Exécuter lorsque l'utilisateur est connecté"
- Exécuter avec les privilèges les plus élevés - coché
Lorsque je me connecte en tant que johny_user L'explorateur de processus est en effet exécuté dans johny_admin mais sans interface graphique, ce qui annule l'intérêt de l'exécuter.
Méthode PowerShell
J'ai donc décidé d'essayer d'exécuter Process Explorer avec Powershell script qui serait lancé par le planificateur de tâches à l'ouverture de la session. Je ne voulais pas donner mon mot de passe en texte clair, j'ai donc opté pour cette solution :
script1.ps1
$PassKey = get-content C:\scripts\passkey.txt
$Password = get-content C:\scripts\password.txt | Convertto-SecureString -Key $PassKey
$pp=New-Object -typename System.Management.Automation.PSCredential -argumentlist "MY-PC\johny_admin",$Password
$script = "c:\scripts\script2.ps1"
Start-Process powershell -Credential $pp -ArgumentList '-noprofile -command &{Start-Process $script -verb runas}'
Et script2.ps1 contient juste :
Start-Process "C:\Program Files\Process Explorer\procexp.exe" -ArgumentList "/t /p:h"
Script1.ps1 devrait exécuter script2.ps1 avec des autorisations élevées. Cependant, bien qu'une nouvelle console powershell apparaisse pendant un moment, le script n'est pas exécuté.
Travailler, mais...
Jusqu'à présent, le seul moyen d'atteindre mon objectif était d'utiliser AdvancedRun de Nirsoft. Cependant, le fichier cfg de ce logiciel doit contenir les éléments suivants de johny_admin mot de passe en texte clair, ce que je n'aime pas.
C'est pourquoi
Quelqu'un peut-il me conseiller sur la manière de réaliser cette tâche simple ? Je ne me soucie guère de savoir si j'y parviendrai avec le planificateur de tâches, Powershell ou toute autre méthode. Je veux juste éviter de stocker les identifiants de l'administrateur en texte clair quelque part.
Quelques liens qui m'ont été utiles lors de l'écriture des scripts Powershell scripts :
https://ss64.com/ps/syntax-elevate.html
https://social.technet.microsoft.com/Forums/office/en-US/132e170f-e3e8-4178-9454-e37bfccd39ea/startprocess-verb-runas-amp-credential?forum=winserverpowershell
https://stackoverflow.com/questions/55723583/how-to-launch-an-other-ps1-within-a-ps1-with-an-other-accompt-and-admin-rights