oTranslate / "cet objet ne se trouve pas sur le serveur"
1 réponse
magnum42
Bonjour,
J'ai un souci avec un loginscript que je suis en train de re-créer.
J'ai une fonction qui récupère la liste des tous les groupes du user (y
compris les groupes parents des groupes du user, et grand-parents, ...).
Le problème est un message d'erreur ("Cet objet ne se trouve pas sur le
serveur") lors du chargement de l'utilisateur sur la ligne << Set oUserFamily
= GetObject("LDAP://" & oTranslate.Get(ADS_NAME_TYPE_1779)) >>
Ce qui est "gênant" c'est que l'erreur se produit une seule fois, mais le
script semble fonctionner correctement (tous les maps sont montés selon les
groupes). Si je re-ouvre une session, ou reboot, l'erreur ne se reproduit
plus. Pas évident pour tester ... et impossible à mettre ne prod!
L'erreur se fait dans la fonction suivante :
Sub Get_User_Groups_Complete_Family(sUserName)
Dim oUserFamil
'====================================================================================
' Cette fonction récupère la liste de tous les groupes de l'utilisateur, y
compris les parents/grand-parents/...
' Ex : User U1 dans G1, G2, G3, et G2 est compris dans G21 et G22 :
' Cette fonction renvoie un tableau [G1,G2,G21,G22,G3
'====================================================================================
oTranslate.Set ADS_NAME_TYPE_NT4, sUserDomain & "\" & sUserName
Set oUserFamily = GetObject("LDAP://" & oTranslate.Get(ADS_NAME_TYPE_1779))
ReDim aGroupFamily(0)
Get_parent_groups oUserFamily,aGroupFamily
ReDim Preserve aGroupFamily(UBound(aGroupFamily)-1)
'Get_User_Groups_Complete_Family = aGroupFamily
Set oUserFamily = Nothing
End Sub
Pour info si ca peut aider, mais sans rapport direct à priori avec mon
souci, la fonction ci-dessus utilise la fonction ci-dessous :
Function Get_parent_groups(oUserGroup,aGroupFamily
'====================================================================================
' Fonction qui teste si un groupe est dans un groupe de manière récursive.
' Franck FELIX / Mai 201
'====================================================================================
Dim oParentGroup,oParentGroups
Dim sParentGroup
On Error Resume Next
oParentGroups = oUserGroup.GetEx("memberOf")
On Error GoTo 0
If(Not(IsEmpty(oParentGroups))) Then
For each sParentGroup in oParentGroups
If(sParentGroup<>"") Then
Set oParentGroup = GetObject("LDAP://" & sParentGroup)
'wscript.echo oParentGroup.Name & vbtab & UBound(aGroupFamily)
ReDim Preserve aGroupFamily(UBound(aGroupFamily)+1)
aGroupFamily(UBound(aGroupFamily)-1) = Mid(oParentGroup.Name,4)
Get_parent_groups oParentGroup,aGroupFamily
End If
Next
End If
End Function
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
magnum42
Ahhh, pas de réponses. Bon, j'ai trouvé une solution, alors la voici : je n'utilise plus d'objet oTranslate. Je récupère le chemin LDAP de l'utilisateur à partir de son login avec cette nouvelle fonction :
Function Load_LDAP_User_Path(sLogin) Dim sLDAP_Root_Path,sDN Dim oRootDSE,oAdoDB_Connection,oAdoDB_Command,oAdoDB_RecordSet 'Const ADS_SCOPE_SUBTREE = 2 'On Error Resume Next Set oRootDSE = GetObject("LDAP://RootDSE") sLDAP_Root_Path = oRootDSE.get("defaultNamingContext") Set oAdoDB_Connection = CreateObject("ADODB.Connection") Set oAdoDB_Command = CreateObject("ADODB.Command") Set oAdoDB_RecordSet = createobject("ADODB.Recordset") oAdoDB_Connection.Provider = "ADsDSOObject" 'Implémenté autrement dans l'autre fonction de YA ... oAdoDB_Connection.Open "Active Directory Provider" Set oAdoDB_Command.ActiveConnection = oAdoDB_Connection oAdoDB_Command.Properties("Page Size") = 1000 'oCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE oAdoDB_Command.CommandText = "SELECT distinguishedName FROM 'LDAP://" & sLDAP_Root_Path & "' WHERE objectCategory='user' AND sAMAccountName = '" & sLogin & "'" Set oAdoDB_RecordSet = oAdoDB_Command.Execute oAdoDB_RecordSet.MoveFirst Do Until oAdoDB_RecordSet.EOF sDN = oAdoDB_RecordSet.Fields("distinguishedName").Value oAdoDB_RecordSet.MoveNext Loop Load_LDAP_User_Path = sDN Set oRootDSE = Nothing Set oAdoDB_Connection = Nothing Set oAdoDB_Command = Nothing Set oAdoDB_RecordSet = Nothing End Function
Ensuite, un petit : Set oUser = GetObject("LDAP://" & Load_LDAP_User_Path(sUserName)) suffit.
J'ai un souci avec un loginscript que je suis en train de re-créer. J'ai une fonction qui récupère la liste des tous les groupes du user (y compris les groupes parents des groupes du user, et grand-parents, ...). Le problème est un message d'erreur ("Cet objet ne se trouve pas sur le serveur") lors du chargement de l'utilisateur sur la ligne << Set oUserFamily = GetObject("LDAP://" & oTranslate.Get(ADS_NAME_TYPE_1779)) >> Ce qui est "gênant" c'est que l'erreur se produit une seule fois, mais le script semble fonctionner correctement (tous les maps sont montés selon les groupes). Si je re-ouvre une session, ou reboot, l'erreur ne se reproduit plus. Pas évident pour tester ... et impossible à mettre ne prod!
L'erreur se fait dans la fonction suivante :
Sub Get_User_Groups_Complete_Family(sUserName) Dim oUserFamily '=================================================================================== > ' Cette fonction récupère la liste de tous les groupes de l'utilisateur, y compris les parents/grand-parents/... ' Ex : User U1 dans G1, G2, G3, et G2 est compris dans G21 et G22 : ' Cette fonction renvoie un tableau [G1,G2,G21,G22,G3] '=================================================================================== > oTranslate.Set ADS_NAME_TYPE_NT4, sUserDomain & "" & sUserName Set oUserFamily = GetObject("LDAP://" & oTranslate.Get(ADS_NAME_TYPE_1779)) ReDim aGroupFamily(0) Get_parent_groups oUserFamily,aGroupFamily ReDim Preserve aGroupFamily(UBound(aGroupFamily)-1) 'Get_User_Groups_Complete_Family = aGroupFamily Set oUserFamily = Nothing End Sub
Pour info si ca peut aider, mais sans rapport direct à priori avec mon souci, la fonction ci-dessus utilise la fonction ci-dessous :
Function Get_parent_groups(oUserGroup,aGroupFamily) '=================================================================================== > ' Fonction qui teste si un groupe est dans un groupe de manière récursive. ' Franck FELIX / Mai 2010 '=================================================================================== > Dim oParentGroup,oParentGroups Dim sParentGroup On Error Resume Next oParentGroups = oUserGroup.GetEx("memberOf") On Error GoTo 0 If(Not(IsEmpty(oParentGroups))) Then For each sParentGroup in oParentGroups If(sParentGroup<>"") Then Set oParentGroup = GetObject("LDAP://" & sParentGroup) 'wscript.echo oParentGroup.Name & vbtab & UBound(aGroupFamily) ReDim Preserve aGroupFamily(UBound(aGroupFamily)+1) aGroupFamily(UBound(aGroupFamily)-1) = Mid(oParentGroup.Name,4) Get_parent_groups oParentGroup,aGroupFamily End If Next End If End Function
Ahhh, pas de réponses.
Bon, j'ai trouvé une solution, alors la voici : je n'utilise plus d'objet
oTranslate.
Je récupère le chemin LDAP de l'utilisateur à partir de son login avec cette
nouvelle fonction :
Function Load_LDAP_User_Path(sLogin)
Dim sLDAP_Root_Path,sDN
Dim oRootDSE,oAdoDB_Connection,oAdoDB_Command,oAdoDB_RecordSet
'Const ADS_SCOPE_SUBTREE = 2
'On Error Resume Next
Set oRootDSE = GetObject("LDAP://RootDSE")
sLDAP_Root_Path = oRootDSE.get("defaultNamingContext")
Set oAdoDB_Connection = CreateObject("ADODB.Connection")
Set oAdoDB_Command = CreateObject("ADODB.Command")
Set oAdoDB_RecordSet = createobject("ADODB.Recordset")
oAdoDB_Connection.Provider = "ADsDSOObject" 'Implémenté autrement dans
l'autre fonction de YA ...
oAdoDB_Connection.Open "Active Directory Provider"
Set oAdoDB_Command.ActiveConnection = oAdoDB_Connection
oAdoDB_Command.Properties("Page Size") = 1000
'oCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
oAdoDB_Command.CommandText = "SELECT distinguishedName FROM 'LDAP://" &
sLDAP_Root_Path & "' WHERE objectCategory='user' AND sAMAccountName = '" &
sLogin & "'"
Set oAdoDB_RecordSet = oAdoDB_Command.Execute
oAdoDB_RecordSet.MoveFirst
Do Until oAdoDB_RecordSet.EOF
sDN = oAdoDB_RecordSet.Fields("distinguishedName").Value
oAdoDB_RecordSet.MoveNext
Loop
Load_LDAP_User_Path = sDN
Set oRootDSE = Nothing
Set oAdoDB_Connection = Nothing
Set oAdoDB_Command = Nothing
Set oAdoDB_RecordSet = Nothing
End Function
Ensuite, un petit :
Set oUser = GetObject("LDAP://" & Load_LDAP_User_Path(sUserName))
suffit.
J'ai un souci avec un loginscript que je suis en train de re-créer.
J'ai une fonction qui récupère la liste des tous les groupes du user (y
compris les groupes parents des groupes du user, et grand-parents, ...).
Le problème est un message d'erreur ("Cet objet ne se trouve pas sur le
serveur") lors du chargement de l'utilisateur sur la ligne << Set oUserFamily
= GetObject("LDAP://" & oTranslate.Get(ADS_NAME_TYPE_1779)) >>
Ce qui est "gênant" c'est que l'erreur se produit une seule fois, mais le
script semble fonctionner correctement (tous les maps sont montés selon les
groupes). Si je re-ouvre une session, ou reboot, l'erreur ne se reproduit
plus. Pas évident pour tester ... et impossible à mettre ne prod!
L'erreur se fait dans la fonction suivante :
Sub Get_User_Groups_Complete_Family(sUserName)
Dim oUserFamily
'=================================================================================== > ' Cette fonction récupère la liste de tous les groupes de l'utilisateur, y
compris les parents/grand-parents/...
' Ex : User U1 dans G1, G2, G3, et G2 est compris dans G21 et G22 :
' Cette fonction renvoie un tableau [G1,G2,G21,G22,G3]
'=================================================================================== > oTranslate.Set ADS_NAME_TYPE_NT4, sUserDomain & "" & sUserName
Set oUserFamily = GetObject("LDAP://" & oTranslate.Get(ADS_NAME_TYPE_1779))
ReDim aGroupFamily(0)
Get_parent_groups oUserFamily,aGroupFamily
ReDim Preserve aGroupFamily(UBound(aGroupFamily)-1)
'Get_User_Groups_Complete_Family = aGroupFamily
Set oUserFamily = Nothing
End Sub
Pour info si ca peut aider, mais sans rapport direct à priori avec mon
souci, la fonction ci-dessus utilise la fonction ci-dessous :
Function Get_parent_groups(oUserGroup,aGroupFamily)
'=================================================================================== > ' Fonction qui teste si un groupe est dans un groupe de manière récursive.
' Franck FELIX / Mai 2010
'=================================================================================== > Dim oParentGroup,oParentGroups
Dim sParentGroup
On Error Resume Next
oParentGroups = oUserGroup.GetEx("memberOf")
On Error GoTo 0
If(Not(IsEmpty(oParentGroups))) Then
For each sParentGroup in oParentGroups
If(sParentGroup<>"") Then
Set oParentGroup = GetObject("LDAP://" & sParentGroup)
'wscript.echo oParentGroup.Name & vbtab & UBound(aGroupFamily)
ReDim Preserve aGroupFamily(UBound(aGroupFamily)+1)
aGroupFamily(UBound(aGroupFamily)-1) = Mid(oParentGroup.Name,4)
Get_parent_groups oParentGroup,aGroupFamily
End If
Next
End If
End Function
Ahhh, pas de réponses. Bon, j'ai trouvé une solution, alors la voici : je n'utilise plus d'objet oTranslate. Je récupère le chemin LDAP de l'utilisateur à partir de son login avec cette nouvelle fonction :
Function Load_LDAP_User_Path(sLogin) Dim sLDAP_Root_Path,sDN Dim oRootDSE,oAdoDB_Connection,oAdoDB_Command,oAdoDB_RecordSet 'Const ADS_SCOPE_SUBTREE = 2 'On Error Resume Next Set oRootDSE = GetObject("LDAP://RootDSE") sLDAP_Root_Path = oRootDSE.get("defaultNamingContext") Set oAdoDB_Connection = CreateObject("ADODB.Connection") Set oAdoDB_Command = CreateObject("ADODB.Command") Set oAdoDB_RecordSet = createobject("ADODB.Recordset") oAdoDB_Connection.Provider = "ADsDSOObject" 'Implémenté autrement dans l'autre fonction de YA ... oAdoDB_Connection.Open "Active Directory Provider" Set oAdoDB_Command.ActiveConnection = oAdoDB_Connection oAdoDB_Command.Properties("Page Size") = 1000 'oCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE oAdoDB_Command.CommandText = "SELECT distinguishedName FROM 'LDAP://" & sLDAP_Root_Path & "' WHERE objectCategory='user' AND sAMAccountName = '" & sLogin & "'" Set oAdoDB_RecordSet = oAdoDB_Command.Execute oAdoDB_RecordSet.MoveFirst Do Until oAdoDB_RecordSet.EOF sDN = oAdoDB_RecordSet.Fields("distinguishedName").Value oAdoDB_RecordSet.MoveNext Loop Load_LDAP_User_Path = sDN Set oRootDSE = Nothing Set oAdoDB_Connection = Nothing Set oAdoDB_Command = Nothing Set oAdoDB_RecordSet = Nothing End Function
Ensuite, un petit : Set oUser = GetObject("LDAP://" & Load_LDAP_User_Path(sUserName)) suffit.
J'ai un souci avec un loginscript que je suis en train de re-créer. J'ai une fonction qui récupère la liste des tous les groupes du user (y compris les groupes parents des groupes du user, et grand-parents, ...). Le problème est un message d'erreur ("Cet objet ne se trouve pas sur le serveur") lors du chargement de l'utilisateur sur la ligne << Set oUserFamily = GetObject("LDAP://" & oTranslate.Get(ADS_NAME_TYPE_1779)) >> Ce qui est "gênant" c'est que l'erreur se produit une seule fois, mais le script semble fonctionner correctement (tous les maps sont montés selon les groupes). Si je re-ouvre une session, ou reboot, l'erreur ne se reproduit plus. Pas évident pour tester ... et impossible à mettre ne prod!
L'erreur se fait dans la fonction suivante :
Sub Get_User_Groups_Complete_Family(sUserName) Dim oUserFamily '=================================================================================== > ' Cette fonction récupère la liste de tous les groupes de l'utilisateur, y compris les parents/grand-parents/... ' Ex : User U1 dans G1, G2, G3, et G2 est compris dans G21 et G22 : ' Cette fonction renvoie un tableau [G1,G2,G21,G22,G3] '=================================================================================== > oTranslate.Set ADS_NAME_TYPE_NT4, sUserDomain & "" & sUserName Set oUserFamily = GetObject("LDAP://" & oTranslate.Get(ADS_NAME_TYPE_1779)) ReDim aGroupFamily(0) Get_parent_groups oUserFamily,aGroupFamily ReDim Preserve aGroupFamily(UBound(aGroupFamily)-1) 'Get_User_Groups_Complete_Family = aGroupFamily Set oUserFamily = Nothing End Sub
Pour info si ca peut aider, mais sans rapport direct à priori avec mon souci, la fonction ci-dessus utilise la fonction ci-dessous :
Function Get_parent_groups(oUserGroup,aGroupFamily) '=================================================================================== > ' Fonction qui teste si un groupe est dans un groupe de manière récursive. ' Franck FELIX / Mai 2010 '=================================================================================== > Dim oParentGroup,oParentGroups Dim sParentGroup On Error Resume Next oParentGroups = oUserGroup.GetEx("memberOf") On Error GoTo 0 If(Not(IsEmpty(oParentGroups))) Then For each sParentGroup in oParentGroups If(sParentGroup<>"") Then Set oParentGroup = GetObject("LDAP://" & sParentGroup) 'wscript.echo oParentGroup.Name & vbtab & UBound(aGroupFamily) ReDim Preserve aGroupFamily(UBound(aGroupFamily)+1) aGroupFamily(UBound(aGroupFamily)-1) = Mid(oParentGroup.Name,4) Get_parent_groups oParentGroup,aGroupFamily End If Next End If End Function