Commande Runas refuse d'arrêter le spooler

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
NicoB
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mer. 25 nov. 2020 00:21
Status : Hors ligne

Commande Runas refuse d'arrêter le spooler

#1

Message par NicoB »

Bonjour à tous,
J'ai déjà utilisé avec succès la commande RunAs mais là, je sèche complétement.
Je veux qu'un simple utilisateur puisse effacer tous les travaux d'impression "bloqués" sur une machine.
Je pensais m'en sortir très facilement avec la ligne de commande ci-dessous, mais rien n'y fait !
RunAs("Nom_admin", @ComputerName, "Mot_de_passe", 0, @ComSpec & " /c net stop spooler&del C:\Windows\System32\spool\printers\* /Q /F /S&net start spooler&pause", "", @SW_SHOW)
Dans la console j'obtiens le message suivant :
"L'erreur système 5 s'est produite. Accès refusé", comme si je n'avais pas les droits administrateur.
Je précise que je connais le nom et le mot de passe du compte Admin de la machine
Après de nombreux tests et essais, impossible de comprendre et de trouver une solution.
Que faut-il faire ?
Je vous remercie par avance.
Cordialement
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 48
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: Commande Runas refuse d'arrêter le spooler

#2

Message par Nine »

As-tu essayer #RequireAdmin ?
NicoB
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mer. 25 nov. 2020 00:21
Status : Hors ligne

Re: Commande Runas refuse d'arrêter le spooler

#3

Message par NicoB »

Bonjour,

Tout d'abord merci Nine pour votre réponse.
Si j'ajoute #RequireAdmin dans le script principal, cela ne me convient pas car le mot de passe Administrateur est demandé au lancement du script, ce que je veux justement éviter.
J'ai creusé mon problème de mon coté et trouvé la parade suivante : Un script secondaire qui contient le #RequireAdmin et la commande net stop spooler... que j'appelle via un RunAs dans un script principal.
Cette solution fonctionne bien mais je ne trouve pas cela très "propre"

Script principal :
#include <AutoItConstants.au3>
FileInstall (".\Reset_Spooler.exe", @AppDataCommonDir&"\Reset_Spooler.exe")
$variable1="Compte_Admin"
$variable2="Mot_de_passe_Admin"
RunAs($variable1, @ComputerName, $variable2, 0, @AppDataCommonDir&"\Reset_Spooler.exe", "", @SW_HIDE)
qui appelle le script secondaire complié en Reset_Spooler.exe
#RequireAdmin
Run (@ComSpec & " /c net stop spooler&del %systemroot%\System32\spool\printers\* /Q /F /S&net start spooler&pause","",@SW_SHOW)

Avez-vous une meilleure alternative ? A défaut, je considèrerai mon problème comme résolu...

D'avance Merci
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 48
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: Commande Runas refuse d'arrêter le spooler

#4

Message par Nine »

Une autre approche (celle que je préconise) est de créer le second script à la volée :

Code : Tout sélectionner

#include <File.au3>

Local $sScript = _
  '#NoTrayIcon' & @CRLF & _
  '#RequireAdmin' & @CRLF & _
  'Run("RegEdit")' & @CRLF & _
  'FileDelete (@ScriptFullPath)'
$sFileName = _TempFile(@ScriptDir, "~", ".au3")
FileWrite($sFileName, $sScript)
RunAs ("Admin", @ComputerName, "pw", 1, @AutoItExe & ' /AutoIt3ExecuteScript "' & $sFileName & '"')
ConsoleWrite ($sFileName & @CRLF)
De cette façon, il n'y a qu'un seul script à gérer...
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2489
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: Commande Runas refuse d'arrêter le spooler

#5

Message par jguinch »

Autre possibilité, en exécutant le script lui-même avec un argument + Shellexecute



If IsAdmin() Then
   _StopService()
ElseIf Not $CmdLine[0] Then
   _FonctionUser()
ElseIf $CmdLine[1] = "-RunAs" Then
   _ElevateMySelf()
EndIf

Func _ElevateMySelf()
   ShellExecute(@ScriptFullPath, "", @WorkingDir, "RunAs")
EndFunc

Func _FonctionUser()
   Local $admin = "administrateur"
   Local $password = InputBox("Authentification", "Entrer le mot de passe pour " & $admin & ":", "", "*")
   RunAs($admin, @ComputerName, $password, 1, @ScriptFullPath & " -RunAs", @WorkingDir)
EndFunc

Func _StopService()
   Local $oShell = ObjCreate("shell.application")
   If Not IsObj($oShell) Then Return
   $oShell.ServiceStop("spooler", False)
   MsgBox(0, "", "Service Stopped")
EndFunc
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
NicoB
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mer. 25 nov. 2020 00:21
Status : Hors ligne

Re: Commande Runas refuse d'arrêter le spooler

#6

Message par NicoB »

Merci Nine et Jguinch vos retours.
Je vais tester tout ça !
Passez de bonnes fêtes !
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2489
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: Commande Runas refuse d'arrêter le spooler

#7

Message par jguinch »

Pour le code proposé par Nine, ne pas oublier #pragma compile(AutoItExecuteAllowed, True) pour la compilation
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Répondre