Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Equivalent de "Runas" en script

272 views
Skip to first unread message

Oriane

unread,
Nov 8, 2006, 9:59:20 AM11/8/06
to
Bonjour,

est-il possible d'exécuter un bout de script dans un contexte utilisateur différent du contexte courant ? En fait ce que je veuxc'est l'équivalent du "RunAs" en vbs...

Merci

Georges

unread,
Nov 8, 2006, 2:51:44 PM11/8/06
to

Oriane a écrit :

> Bonjour,

Bonsoir

> est-il possible d'exécuter un bout de script dans un contexte utilisateur différent du contexte courant ? En fait ce que je veuxc'est l'équivalent du "RunAs" en vbs...

allez voir içi : http://www.bellamyjc.org/fr/vbsdownload.html#xrunas
c'est un excellent site et un super personnage !

> Merci

ya pas de quoi.

Georges

Oriane

unread,
Nov 9, 2006, 12:22:22 PM11/9/06
to

"Georges" <y.d...@gmail.com> a écrit dans le message de news: 1163015504....@b28g2000cwb.googlegroups.com...

Oriane a écrit :

> Bonjour,

Bonsoir

Oui je suis allé voir, et il y a des choses. On utilise Wscript.Shell pour lancer RunAs et lui passer un mot de passe. Mais j'aurais préféré avoir une commande wscript "pur" et non pas lancer un shell...

Je me demande si la solution n'est pas d'utiliser la technique consistant à se connecter à un computer distant sous un autre compte, et à l'appliquer à l'ordinateur local (je n'arrive pas à retrouver cela dans le script center).

A+

Jacques Barathon [MS]

unread,
Nov 9, 2006, 1:34:52 PM11/9/06
to
"Oriane" <ori...@guermantes.com> wrote in message
news:uZ5YcOCB...@TK2MSFTNGP02.phx.gbl...
<...>

<< Oui je suis allé voir, et il y a des choses. On utilise Wscript.Shell
pour lancer RunAs et lui passer un mot de passe. Mais j'aurais préféré avoir
une commande wscript "pur" et non pas lancer un shell...>>

Tu ne lances pas "un shell" au sens où tu sembles l'entendre, c'est-à-dire
un environnement séparé de ton script. Tu crèes un objet de type
WScript.Shell (rien à voir avec un shell comme cmd.exe), ce qui veut dire
que tu as accès aux méthodes de cet objet, notamment la méthode
ShellExecute(). C'est une pratique très courante en scripting, donc on peut
dire du wscript "pur" comme tu le souhaites.

<< Je me demande si la solution n'est pas d'utiliser la technique consistant
à se connecter à un computer distant sous un autre compte, et à l'appliquer
à l'ordinateur local (je n'arrive pas à retrouver cela dans le script
center).>>

Ouh là, je ne suis pas sûr de comprendre, mais ça m'a l'air bien compliqué.
Si tu veux simplement faire l'équivalent du runas en VBScript, la méthode
ci-dessus est vraiment ce qu'il te faut.

Jacques

Gilles LAURENT

unread,
Nov 9, 2006, 3:02:21 PM11/9/06
to
"Jacques Barathon [MS]" <jbar...@online.microsoft.com> a écrit dans le
message de news:OpDqE3CB...@TK2MSFTNGP03.phx.gbl

Bonsoir,

| Tu ne lances pas "un shell" au sens où tu sembles l'entendre,

Non, les propos de "Oriane" sont justes. Ce script démarre une instance
du shell (cmd.exe) via la méthode "Run" et injecte le mot de passe via
une simulation de séquence clavier via la méthode "SendKeys". Ce script
n'a pas pour vocation d'être "secure". Il permet simplement à un
utilisateur lambda d'exécuter la commande "Runas" sans aucune
intéraction.

| Ouh là, je ne suis pas sûr de comprendre, mais ça m'a l'air bien
| compliqué. Si tu veux simplement faire l'équivalent du runas en
| VBScript, la méthode ci-dessus est vraiment ce qu'il te faut.

En effet, impossible à réaliser en VBScript "pur".
Une solution alternative a été recemment donnée dans ce newsgroup.

--
Gilles LAURENT
http://glsft.free.fr


Jacques Barathon [MS]

unread,
Nov 9, 2006, 3:31:04 PM11/9/06
to
"Gilles LAURENT" <gl...@free.fr> wrote in message
news:ut76fpDB...@TK2MSFTNGP03.phx.gbl...
<...>

> Non, les propos de "Oriane" sont justes. Ce script démarre une instance
> du shell (cmd.exe) via la méthode "Run" et injecte le mot de passe via
> une simulation de séquence clavier via la méthode "SendKeys". Ce script
> n'a pas pour vocation d'être "secure". Il permet simplement à un
> utilisateur lambda d'exécuter la commande "Runas" sans aucune
> intéraction.

Fichtre... Ca m'apprendra à ne pas aller voir à la source. Je pensais qu'il
s'agissait de la création d'un objet COM Shell.Application pour utiliser la
méthode ShellExecute avec le verbe "runas". Mais bon, cela ne réglait pas le
problème du mot de passe, j'aurais dû me méfier :-)

> En effet, impossible à réaliser en VBScript "pur".
> Une solution alternative a été recemment donnée dans ce newsgroup.

Pas de souci. Désolé pour la confusion.

Jacques

Oriane

unread,
Nov 10, 2006, 3:12:18 AM11/10/06
to

"Gilles LAURENT" <gl...@free.fr> a écrit dans le message de news: ut76fpDB...@TK2MSFTNGP03.phx.gbl...
Ah mais alors ca m'intéresse !

Autre problème: lorsque je prend le script xrunas de Bellamy, je dois lancer (pour mon problème) un autre "sous-script" en tant que commande. Je prend donc la commande : "cscript blabla.vbs", et là une fenêtre de commande apparait qui me demande un mot de passe... Comme je prends un compte qui a peu de droit dans le RunAs, c'est peut être que celui-ci doit donner un autre mot de passe pour exécuter le blabla.vbs, mais pourtant il a le droit d'exécution sur ce script...

Je ne vois donc pas pourquoi et quel noubeau mot de passe donner.

Oriane

unread,
Nov 10, 2006, 3:23:17 AM11/10/06
to

"Gilles LAURENT" <gl...@free.fr> a écrit dans le message de news: ut76fpDB...@TK2MSFTNGP03.phx.gbl...

> "Jacques Barathon [MS]" <jbar...@online.microsoft.com> a écrit dans le
> message de news:OpDqE3CB...@TK2MSFTNGP03.phx.gbl
>
> Bonsoir,
>
> | Tu ne lances pas "un shell" au sens où tu sembles l'entendre,
>
> Non, les propos de "Oriane" sont justes. Ce script démarre une instance
> du shell (cmd.exe) via la méthode "Run" et injecte le mot de passe via
> une simulation de séquence clavier via la méthode "SendKeys". Ce script
> n'a pas pour vocation d'être "secure". Il permet simplement à un
> utilisateur lambda d'exécuter la commande "Runas" sans aucune
> intéraction.
>
> | Ouh là, je ne suis pas sûr de comprendre, mais ça m'a l'air bien
> | compliqué. Si tu veux simplement faire l'équivalent du runas en
> | VBScript, la méthode ci-dessus est vraiment ce qu'il te faut.
Parce que tu penses que elle, elle n'est pas compliquée ?
Tu as vu que le script de Bellamy faisait 40 lignes au bas mot ?

Jacques Barathon [MS]

unread,
Nov 10, 2006, 4:51:55 AM11/10/06
to
"Oriane" <ori...@guermantes.com> wrote in message
news:%23BZU7FK...@TK2MSFTNGP04.phx.gbl...
<...>

> | Ouh là, je ne suis pas sûr de comprendre, mais ça m'a l'air bien
> | compliqué. Si tu veux simplement faire l'équivalent du runas en
> | VBScript, la méthode ci-dessus est vraiment ce qu'il te faut.
<< Parce que tu penses que elle, elle n'est pas compliquée ?
Tu as vu que le script de Bellamy faisait 40 lignes au bas mot ? >>

En effet, j'avoue que je n'avais pas regardé le script (je ne l'ai toujours
pas fait d'ailleurs, il faudra quand même que j'y jette un oeil à l'occasion
:-)).

Jacques

Oriane

unread,
Nov 10, 2006, 8:08:37 AM11/10/06
to

"Jacques Barathon [MS]" <jbar...@online.microsoft.com> a écrit dans le message de news: OpDqE3CB...@TK2MSFTNGP03.phx.gbl...
C'est expliqué dans http://www.microsoft.com/technet/scriptcenter/resources/qanda/dec04/hey1213.mspx.

Manque de chance il est dit aussi:
One important note: this approach, in which you run a script under alternate credentials, works only on remote machines. For some reason, WMI won't let you run a script under alternate credentials on your own computer. Go figure.

Arf !!!!!!!!!!!!!!!

Jacques Barathon [MS]

unread,
Nov 10, 2006, 8:57:41 AM11/10/06
to
De toute évidence il n'y a pas une réponse simple à ta question. Bon, si tu
veux vraiment reproduire ce que fait la commande runas, tu peux utiliser la
technique que je décrivais. Je donne l'exemple écrit en PowerShell, une âme
charitable saura traduire en syntaxe VBScript s'il le faut:

$shell = new-object -com Shell.Application
$shell.ShellExecute("monscript.vbs","","","runas",1)

Cet exemple va afficher la boîte de dialogue te proposant de saisir les
informations utilisateur/mot de passe (ou, si tu es sous Vista et que tu es
administrateur, tu auras la demande de confirmation de l'élévation de tes
privilèges).

Maintenant, si tu veux rendre la manip transparente pour l'utilisateur, la
commande runas.exe permet de sauvegarder les informations du compte
alternatif et de les réutiliser sans avoir à saisir le mot de passe. Il faut
quand même une première saisie au moins une fois sous le profil concerné:

C:\> runas /user:administrateur /savecred monscript.vbs
Tentative de lancement de notepad en tant qu'utilisateur
"MCE01\administrateur" ...
Entrez le mot de passe de administrateur :
********
<exécution de monscript.vbs en tant qu'administrateur...>

C:\> runas /user:administrateur /savecred monscript.vbs
<exécution de monscript.vbs en tant qu'administrateur...>

Si cette solution te convient, elle peut vraisemblablement être utilisée à
partir d'un VBScript.

En fouillant un peu, on doit pouvoir exporter l'entrée de registre qui
contient le hash enregistré par /savecred et la réutiliser sous un autre
profil ou sur un autre poste. A manier avec précaution...

Jacques

"Oriane" <ori...@guermantes.com> wrote in message

news:%23IbdXlM...@TK2MSFTNGP04.phx.gbl...
<...>
Arf !!!!!!!!!!!!!!!

Gilles LAURENT

unread,
Nov 10, 2006, 10:15:39 AM11/10/06
to
"Jacques Barathon [MS]" <jbar...@online.microsoft.com> a écrit dans le
message de news:OZhn2ANB...@TK2MSFTNGP02.phx.gbl

[...]


| Je donne l'exemple écrit en
| PowerShell, une âme charitable saura traduire en syntaxe VBScript
| s'il le faut:
|
| $shell = new-object -com Shell.Application
| $shell.ShellExecute("monscript.vbs","","","runas",1)

shell = createobject ("Shell.Application")
shell.ShellExecute ("monscript.vbs","","","runas",1)

| En fouillant un peu, on doit pouvoir exporter l'entrée de registre qui
| contient le hash enregistré par /savecred et la réutiliser sous un
| autre profil ou sur un autre poste. A manier avec précaution...

Les informations d'authentification sauvegardées semblent disponibles
dans le profil de l'utilisateur dans le fichier \Application
Data\Microsoft\Credentials\<SID>\Credentials.

Dagor

unread,
Nov 10, 2006, 6:22:24 PM11/10/06
to

Oriane a écrit :

> Bonjour,

Bonsoir

> est-il possible d'exécuter un bout de script dans un contexte utilisateur
> différent du contexte courant ? En fait ce que je veuxc'est l'équivalent
> du "RunAs" en vbs...

>allez voir içi : http://www.bellamyjc.org/fr/vbsdownload.html#xrunas
>c'est un excellent site et un super personnage !

>Oui je suis allé voir, et il y a des choses. On utilise Wscript.Shell pour
>lancer RunAs et lui passer un mot de passe. Mais j'aurais préféré avoir une
> >commande wscript "pur" et non pas lancer un shell...

>Je me demande si la solution n'est pas d'utiliser la technique consistant à
>se connecter à un computer distant sous un autre compte, et à l'appliquer à
> >l'ordinateur local (je n'arrive pas à retrouver cela dans le script
>center).

Voila ce que j'ai !!!

C'est un script qui tente d'installer un msi qui demande des droits d'admin
pour désinstaller la version précedente alors que le user n'a pas ces droits
et qu'on ne veut pas les lui donner.

Pour alleger le réseau (1200 postes) pour les users qui sont dans l'un des
deux groupes de distribution, je test la présence d'un marqueur pour ne pas
lancer le msi

Ensuite, j'installe soit en mode barre d'avancement pour ceux qui se servent
de l'appli, soit en mode sliencieux pour les autres

Le marqueur est duplique dans une directorie réseau pour le service du
controle qui doit faire des manip réseaux ensuite

Il faut un prog qui s'appelle cpau.exe mais si tu cherche dans ce forum, tu
trouveras l'adresse

Il faut lancer ce script depuis le login script ou alors à la main depuis un
controleur de domaine

IsInstalledApplication.vbs

coupe ici ******

Function IsProductInstalled (strProductName)

' déclaration des variables
Dim oReg
Dim strKey, strData
Dim arrKeys
Dim bRet: bRet = False
Dim fso

' définition des constantes
Const HKLM = &H80000002
Const KEY = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
Const DNA = "DisplayName"

' initialisation des objets
Set oReg = GetObject ("winmgmts:\root\default:StdRegProv")

' énumération des clés
oReg.EnumKey HKLM, KEY, arrKeys
For Each strKey In arrKeys
' lecture du nom affiché (ajout/suppression de programmes)
oReg.GetStringValue HKLM, KEY & "\" & strKey, DNA, strData

' recherche du nom du produit dans le nom de la clé ou dans le nom
affiché
If _
InStr (1, strKey, strProductName, 1) Or _
InStr (1, strData, strProductName, 1) Then
' Le produit est installé
bRet = True
End If
Next

' retour du résultat de la recherche
IsProductInstalled = bRet
End Function

Function IsLocalAdmin ()


' déclaration des variables
Dim oNetwork, oAdminGroup


' initialisation des objets
Set oNetwork = CreateObject ("WScript.Network")
Set oAdminGroup = GetObject ("WinNT://./Administrateurs")


' détermination de l'appartenance au groupe
IsLocalAdmin = oAdminGroup.IsMember ( _
"WinNT://" & oNetwork.UserDomain & "/" & _
oNetWork.UserName)


End Function

'-----------------------
'Le corps du programme
'-----------------------


strComputer = "."
Set objWMIService = GetObject("winmgmts:" &
"{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set Shell = WScript.CreateObject("WScript.Shell")
Set Shellprocess = Shell.Environment("PROCESS")

Set objSysinfo = WScript.CreateObject("ADSystemInfo")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")

set UserObj = GetObject("LDAP://" & objsysinfo.UserName)

Ou=UserObj.parent

Set objWMIService = GetObject("winmgmts:" &
"{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colOSes = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")

For Each objOS in colOSes
PcName=objOS.CSName
Next

Username=Shellprocess("USERNAME")
'msg="Computer Name: " & PcName & VBCRLF
'msg=msg & "Name: " & Username & VBCRLF
'wscript.echo msg

For Each GroupObj In UserObj.Groups
Select Case GroupObj.Name

Case "CN=Appli" ' appli est installé et actif
If IsProductInstalled ("Appli") = True Then
Set tfolder = fso.GetSpecialFolder(2)
nom_fich = tfolder & "\appli.log"

If fso.FileExists(nom_fich) = false Then
If IsLocalAdmin() = false Then
' msg= "Il n est pas admin local"
' wscript.echo msg
commande = "\\MonControleur\temp\cpau.exe -u MonDomaine\task -p
scheduler -ex ""msiexec -i \\srvimg\appli\Appli.msi /quiet /passive /log
%temp%\appli.log "" -wait -lwp"
Shell.Run commande,1,true
Else
commande = "\\srvimg\Appli\appli.msi /quiet /passive /log
%temp%\appli.log"
Shell.Run commande,1,true
End if
'copie du résultat pour le controle
fso.CopyFile tfolder & "\appli.log",
"\\serveur1\echange\InstallAppli\" & Username & "-appli.log"
End If
End If
Case "CN=NonAppli" ' appli est pas installé
If IsProductInstalled ("Appli") = True Then
Set tfolder = fso.GetSpecialFolder(2)
nom_fich = tfolder & "\appli.log"

If fso.FileExists(nom_fich) = false Then 'on dépose Appli en silencieux
et par groupe pour ne pas surcharger le réseau
If IsLocalAdmin() = false Then
commande = "\\MonControleur\temp\cpau.exe -u MonDomaine\task -p
scheduler -ex ""msiexec -i \\srvimg\Appli\appli.msi /quiet "" -c -wait -lwp"
Shell.Run commande,1,true
Else
commande = "\\srvimg\Appli\appli.msi /quiet"
Shell.Run commande,1,true
End if
'pas de log copié on s'en fout sinon, il faut copier le progr
sleep.exe et envoyer la cmde sleep 5000..
'fso.CopyFile tfolder & "\appli.log",
"\\serveur1\echange\InstallNonAppli\" & Username & "-appli.log"
End If
End If
'Pas de Appli...on ne fait rien.....
End Select
Next
wscript.quit


coupe ici *****


Voila, j'espère que tu en feras qlq chose car ce script a été construit
grace aux participants de ce forum, que je remercie encore

Georges


globalscript

unread,
Mar 1, 2010, 5:57:08 PM3/1/10
to
Oriane a �crit le 08/11/2006 � 15h59 :
> Bonjour,
>
> est-il possible d'ex=E9cuter un bout de script dans un contexte =
> utilisateur diff=E9rent du contexte courant ? En fait ce que je =
> veuxc'est l'=E9quivalent du "RunAs" en vbs...
>
> Merci
depuis le temps que je cherchais comment lancer un process avec un compte
diff�rent a partir d'un script...

Sur le site http://Globalscript.free.fr, il y a une application
"GlobalscriptGUI" qui fourni un ActiveX "GlobalscriptCOM" qui permet de faire un
runas sans utiliser runas.exe ou autres astuces pas toujours tr�s stable...

En plus c'est gratuit!!

0 new messages