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...
"Jacques Barathon [MS]" a écrit dans le message de news:
[...] | 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)
| 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 DataMicrosoftCredentials<SID>Credentials.
-- Gilles LAURENT http://glsft.free.fr
"Jacques Barathon [MS]" <jbaratho@online.microsoft.com> a écrit dans le
message de news:OZhn2ANBHHA.4672@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)
| 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
DataMicrosoftCredentials<SID>Credentials.
"Jacques Barathon [MS]" a écrit dans le message de news:
[...] | 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)
| 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 DataMicrosoftCredentials<SID>Credentials.
-- Gilles LAURENT http://glsft.free.fr
Dagor
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 = "SOFTWAREMicrosoftWindowsCurrentVersionUninstall" Const DNA = "DisplayName"
' initialisation des objets Set oReg = GetObject ("winmgmts:rootdefault: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 & "rootcimv2") 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 & "rootcimv2")
Set colOSes = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOS in colOSes PcName=objOS.CSName Next
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 = "MonControleurtempcpau.exe -u MonDomainetask -p scheduler -ex ""msiexec -i srvimgappliAppli.msi /quiet /passive /log %temp%appli.log "" -wait -lwp" Shell.Run commande,1,true Else commande = "srvimgAppliappli.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", "serveur1echangeInstallAppli" & 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 = "MonControleurtempcpau.exe -u MonDomainetask -p scheduler -ex ""msiexec -i srvimgAppliappli.msi /quiet "" -c -wait -lwp" Shell.Run commande,1,true Else commande = "srvimgAppliappli.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", "serveur1echangeInstallNonAppli" & 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
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 = "SOFTWAREMicrosoftWindowsCurrentVersionUninstall"
Const DNA = "DisplayName"
' initialisation des objets
Set oReg = GetObject ("winmgmts:rootdefault: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 & "rootcimv2")
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 & "rootcimv2")
Set colOSes = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOS in colOSes
PcName=objOS.CSName
Next
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 = "\MonControleurtempcpau.exe -u MonDomainetask -p
scheduler -ex ""msiexec -i \srvimgappliAppli.msi /quiet /passive /log
%temp%appli.log "" -wait -lwp"
Shell.Run commande,1,true
Else
commande = "\srvimgAppliappli.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",
"\serveur1echangeInstallAppli" & 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 = "\MonControleurtempcpau.exe -u MonDomainetask -p
scheduler -ex ""msiexec -i \srvimgAppliappli.msi /quiet "" -c -wait -lwp"
Shell.Run commande,1,true
Else
commande = "\srvimgAppliappli.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",
"\serveur1echangeInstallNonAppli" & 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
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 = "SOFTWAREMicrosoftWindowsCurrentVersionUninstall" Const DNA = "DisplayName"
' initialisation des objets Set oReg = GetObject ("winmgmts:rootdefault: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 & "rootcimv2") 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 & "rootcimv2")
Set colOSes = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOS in colOSes PcName=objOS.CSName Next
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 = "MonControleurtempcpau.exe -u MonDomainetask -p scheduler -ex ""msiexec -i srvimgappliAppli.msi /quiet /passive /log %temp%appli.log "" -wait -lwp" Shell.Run commande,1,true Else commande = "srvimgAppliappli.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", "serveur1echangeInstallAppli" & 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 = "MonControleurtempcpau.exe -u MonDomainetask -p scheduler -ex ""msiexec -i srvimgAppliappli.msi /quiet "" -c -wait -lwp" Shell.Run commande,1,true Else commande = "srvimgAppliappli.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", "serveur1echangeInstallNonAppli" & 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
Oriane a écrit le 08/11/2006 à 15h59 :
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
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!!
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...
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
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...