Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

oTranslate / "cet objet ne se trouve pas sur le serveur"

1 réponse
Avatar
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

Merci d'avance,
Franck
http://supermarches.faire-le-bon-choix.fr

1 réponse

Avatar
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.

--
Franck
http://supermarches.faire-le-bon-choix.fr" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://supermarches.faire-le-bon-choix.fr


"magnum42" wrote:

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 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

Merci d'avance,
Franck
http://supermarches.faire-le-bon-choix.fr" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://supermarches.faire-le-bon-choix.fr