begin process at 2012 05 27 22:05:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

ASP.NET

 > 

Scripting

 > 

VBScript

 > 

C'est mon script ou mon pc qui veut pas ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

C'est mon script ou mon pc qui veut pas ?

vendredi 28 août 2009 à 09:38:38 | C'est mon script ou mon pc qui veut pas ?

xrorox

Bonjour,

Pour donner la couleur tout de suite, je travaille sous windows server 2003 que j'ai fraichement formaté, puis mis à jour pour essayez en vain de résoudre un problème, avec ce morceau de code.

Code VBScript :
Set account = getObject("Winmgmts:{impersonationlevel=impersonate}!//./root/cimv2:Win32_Account.Name='" & strUsername & "',Domain='" & strDomain &"'")


Mon problème cette ligne est syntaxiquement correcte. J'ai une erreur indiquant que mon objet n'a pas été trouvé. Le but de la partie du code dans laquelle elle est insérée est de gérer les droits NTFS sans utiliser xcacls ou cacls ou leurs équivalents. Et c'est cette partie, le dernier appel de fonction pour obtenir la dernière information manquante qui foire.

J'avais déjà posté sur le forum VB, il y a quelques temps. On m'a dit que cette partie du code marchait, et que le problème ne venait pas de là ...
Diagnostiquant des erreurs WMI et n'arrivant pas à les réparer j'ai fini par formater le pc pour essayez d'avoir une version neuve efficace. Et j'ai installé tous les modules complémentaires qui affirmaient expressement avoir un lien avec WMI.

Cependant, ca ne marche toujours pas. Donc ma question, c'est est-ce que ce code marche chez vous ? Et pour ceux qui sauront répondre, comment je dois configurer mon système pour qu'il accepte.

Les utilisateurs sont créés via active directory. Et je n'avais pas de soucis pour gérer les droits avec xcacls. (Mais on m'a demandé de faire autrement ...).

A la suite vous trouverez la totalité du code gérant les droits NTFS, avec un appel type. Il suffit d'appeller la fonction ModifyFilePerm avec les arguments suivants un "." qui semble signifier localhost, bref désigner que c sur le pc qui execute le script qu'il faut chercher (j'execute mon script sur le controleur de domaine)
Ensuite le chemin d'accès au fichier.
Le nom de l'utilisateur
Le domaine de l'utilisateur
Définir si c'est un utilisateur "u" ou un groupe "g".
Et le paramètre d'execution "a" pour ajouter les droits. "d" pour les retirer.


Code VBScript :

chemin = "C:\$RepertoirePrincipalTSE\" & Classe & "\" & Nom & Prenom
ModifyFilePerm "." , chemin, Login, "lycee.fr", "u", "a"

Function ModifyFilePerm(strComputer, strFilePath, strUsername, strDomain, strUtype, strMode)
Dim dacl, Services, SecDescClass, SecDesc, intRetVal
Dim wmiFileSecSetting, wmiFileSetting, wmiSecurityDescriptor
Set Services = GetObject("winmgmts:{impersonationLevel=impersonate,(Security)}!\\" & strComputer & "\root\cimv2")
Set SecDescClass = Services.Get("Win32_SecurityDescriptor")
Set SecDesc = SecDescClass.SpawnInstance_

strFilePath = replace(strFilePath,"\","\\")
Set wmiFileSetting = GetObject("Winmgmts:{impersonationlevel=impersonate}!//" & strComputer & "/root/cimv2:Win32_Directory='" & strFilePath & "'")
Set wmiFileSecSetting = GetObject("winmgmts:{impersonationLevel=impersonate,(Security)}!\\" & strComputer & _
"\root\cimv2:Win32_LogicalFileSecuritySetting.path='" & strFilePath & "'")
intRetVal = wmiFileSecSetting.GetSecurityDescriptor(wmiSecurityDescriptor)
' obtient le descripteur de sécurité existant

'retrouve le contenu de Win32_SecurityDescriptor DACL property.
DACL = wmiSecurityDescriptor.dacl

If strMode = "a" Then 'ajoute l'utilisateur
AddUserAce dacl, strUsername, strDomain, strUtype, strComputer, Services
SecDesc.Properties_.Item("DACL") = dacl
wscript.echo "adding " & strusername & " to the dacl for " & replace(strFilePath,"\\","\") & "." & vbcrlf & _
"Result of change: " & wmiFileSetting.changesecuritypermissions(SecDesc, 4)
ElseIf strMode = "d" Then 'le supprime
SecDesc.Properties_.Item("DACL") = DeleteUserAce (dacl, strUsername, strDomain, strUtype, strComputer, Services)
wscript.echo "deleting " & strusername & " to the dacl for " & replace(strFilePath,"\\","\") & "." & vbcrlf & _
"Result of change: " & wmiFileSetting.changesecuritypermissions(SecDesc, 4)
Else
wscript.echo ModifyUserAce (wmiSecurityDescriptor.dacl, strUsername, strAccessLvl)

intRetVal = wmiFileSecSetting.SetSecurityDescriptor(wmiSecurityDescriptor)
Wscript.Echo GetResultMessageFile(intretval, replace(strFilePath,"\\","\"), strUsername)
End If

Set Services = nothing
Set SecDescClass = nothing
Set SecDesc = Nothing
Set wmiFileSecSetting = nothing
Set wmiFileSetting = nothing
End Function

Function GetObjTrustee(strUsername, strDomain, strUtype, strComputer)

Dim objTrustee, account, accountSID
Set objTrustee = getObject("Winmgmts:{impersonationlevel=impersonate}!//" & strComputer & "/root/cimv2:Win32_Trustee").Spawninstance_

If strUtype = "g" Then

Set account = getObject("Winmgmts:{impersonationlevel=impersonate}!//./root/cimv2:Win32_Group.Name='" & strUsername & "',Domain='" & strDomain &"'")
Else

Set account = getObject("Winmgmts:{impersonationlevel=impersonate}!//./root/cimv2:Win32_Account.Name='" & strUsername & "',Domain='" & strDomain &"'")
End If
Set accountSID = getObject("Winmgmts:{impersonationlevel=impersonate}!//" & strComputer & "/root/cimv2:Win32_SID.SID='" & account.SID &"'")
objTrustee.Domain = strDomain
objTrustee.Name = strUsername
objTrustee.Properties_.item("SID") = accountSID.BinaryRepresentation
Set GetObjTrustee = objTrustee
Set accountSID = nothing
Set account = Nothing
Set objTrustee = nothing
End Function

Function AddUserAce( byref dacl, strUsername, strDomain, strUtype, strComputer, byref Services )

Dim intArrAceMax, arrACE, objACE
intArrAceMax = UBound(dacl) + 1
ReDim preserve dacl(intArrAceMax)

Set dacl(intArrAceMax) = Services.Get("Win32_Ace").SpawnInstance_
dacl(intArrAceMax).Properties_.Item("AccessMask") = 2032127
dacl(intArrAceMax).Properties_.Item("AceFlags") = 3
dacl(intArrAceMax).Properties_.Item("AceType") = 0
dacl(intArrAceMax).Properties_.Item("Trustee") = GetObjTrustee(strUsername, strDomain, strUtype, strComputer)
Set objACE = Nothing
End Function

Function DeleteUserAce( byref dacl, strUsername, strDomain, strUtype, strComputer, byref Services )
Dim intArrAceMax, arrACE, i, objACE
intArrAceMax = UBound(dacl)
ReDim arrACE(intArrAceMax)
i = 0
For Each objACE in dacl
If UCase(objace.trustee.name) <> UCase(strUsername) Then
Set arrACE(i) = services.get("Win32_Ace").SpawnInstance_
arrACE(i).Properties_.Item("AccessMask") = objace.accessmask
arrACE(i).Properties_.Item("AceFlags") = objace.aceflags
arrACE(i).Properties_.Item("AceType") = objace.acetype
arrACE(i).Properties_.Item("Trustee") = objace.trustee
i = i + 1
End if
Next
If intArrAceMax > i - 1 Then
wscript.echo "User/Group " & strUsername & " removed."
ReDim preserve arrACE(intArrAceMax-1)
Else
wscript.echo "User/Group " & strUsername & " not found."
End If
DeleteUserAce = arrACE
For i = 0 to intArrAceMax - 1
Set arrACE(i) = nothing
Next
Set objACE = nothing
End Function

Function ModifyUserAce(byref dacl, strUsername)
Dim strMsg, objACE
strMsg = "User/Group: " & strUsername & " not found in dacl"
For Each objACE in dacl
If UCase(objace.trustee.name) = UCase(strUsername) Then

objace.Properties_.Item("AccessMask") = 2032127

strMsg = "User: " & strUsername & " found and modified to have "
Exit For
End If
Next
Set objACE = nothing
ModifyUserAce = strMsg
End Function



Function GetResultMessageFile(errReturn, strSharename, strUsername)
If errReturn = 0 Then
GetResultMessageFile = "File permissions for " & strSharename & " successfully updated!"
Else
Select Case errReturn
case 2
errDesc = "Access denied."
Case 8
errDesc = "Unknown failure."
case 9
errDesc = "Privledge Missing."
Case 10
errDesc = "Invalid level."
Case 21
errDesc = "Invalid parameter."
Case 23
errDesc = "Redirected path."
Case 24
errDesc = "Directory does not exist."
Case 25
errDesc = "Net name not found."
End Select
GetResultMessageFile = "Failed to update File permissions for " & strSharename & ". Error number: " & errReturn & ". " & errDesc
End If
End Function
















vendredi 28 août 2009 à 13:41:43 | Re : C'est mon script ou mon pc qui veut pas ?

nhervagault

Administrateur CodeS-SourceS

Salut,

As-tu testé avec des scripts WMI plus simples?
C'est peut etre l'impersonationlevel ??

Exemple http://www.vbfrance.com/codes/CONNAITRE-TOUT-VOS-LECTEURS-LEURS-CARACTERISTIQUES_30468.aspx

Bon dev.

lundi 31 août 2009 à 08:07:48 | Re : C'est mon script ou mon pc qui veut pas ?

xrorox

Merci de ta réponse.

Certaines de mes requêtes WMI fonctionnent, mais certains exemples tout droit tirés de microsoft ne font rien, ou renvoient une erreur. Peut être qu'il me manque quelques classes. Si c'est le cas, je ne sais pas comment les remettre j'ai mis tout les composants additionnels affichant un lien avec WMI. Et je n'ai pas eu de plantage ou de coupure sauvage depuis que j'ai formaté cet ordi.

J'ai essayé sans le impersonationlevel, mais pas de différence. Il renvoie qu'il ne trouve pas l'objet.

Les comptes sont activés, mais n'ont jamais été ouvert, et j'essaie de mettre les droits sur leurs dossiers persos, et les profils. Si vous avez des idées je suis ouvert à toute proposition. On m'a demandé de faire sans xcacls ou ses équivalents, pour des raisons de performances.



Cette discussion est classée dans : set, strusername, dacl, objace, intarracemax


Répondre à ce message

Sujets en rapport avec ce message

probleme connection Access / ASP [ par peguman ] Je suis en ASp et lors de ma requete j'ai l'erreur suivante :Microsoft OLE DB Provider for ODBC Drivers erreur '80040e10' [Microsoft][Pilote ODBC Micr Session_OnEnd & variable [ par Ondex ] salut a tous,bon, j'ai un petit pb, je n'arrive pas a recuperer une variable contenu dans une session quand celle çi se termine, voici mon code :----- ouvrez-moi ce fichier [:)] [ par microGiga ] Bonjourno,j'aimerais arriver à ouvrir un fichier existant de mon serveur.IL faut pouvoir le modifier et en cliquent sur enregistrer; les modifications comment ouvrir un fichier?? [ par microGiga ] J'ai crée le fichier en asp :dim xlsApp dim xlsSheet set xlsApp =Server.CreateObject("Excel.Application")xlsApp.Workbooks.Open(PATH) set xlsSheet = xl Requette dynamique dans une base de donne [ par noufnouf ] Bonjour, Je voudrais faire une requette dans une base de donnees ne connaissant pas le nom du champs que je cherche (valeur recu dynamiquement) :exemp Compter les reponses [ par Ondex ] Salut,je cherche le moyen de compter le nombre de resultat que j'ai suite a une requete dans une grosse base de donne (300 000 lignes).J'ai utiliser l Diff`rences entre IIS 4 et IIS 5 [ par adoxe ] Je suis à me demander pourquoi est-ce que le code que j'implémente tourne bien sur IIS 4 et qu'il "hang" lorsque demandé sur IIS 5. Vous auriez une i **URGENT**Probleme avec RecordCount [ par N.BERRA ] Salut a tous,Je fais afficher dans une page des données que je vais chercher dans une base SQLServerConnection OK!Affichage OK!<img src=/imgs2/smile_a ASP et Excel [ par ExcelAsp ] Bonjour à tous;Je serai très reconnaissant à celle ou celui qui peut me dire où puis-je trouver des informations sur le propriétés et les methodes des RE global.asa [ par AgentSmith ] DESEPERERBonjour,Je voudrais à l'aide du fichier global.asa apres que le client est ouvert une session.A la fermeture de la session ou la fermeture du


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales