IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

'System.OutOfMemoryException' mémoire saturée [PowerShell]


Sujet :

Scripts/Batch

  1. #21
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Citation Envoyé par powershell
    try{
    Return Get-ADGroupMember -Identity $GroupName -recursive
    }Catch{

    }
    Tu ferais comme ça ?

  2. #22
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Je suis aussi développeur !
    Alors 1 000 000 fois oui !

    Parce que dis moi, sinon, admettons qu'on trouve un truc pour te cacher le message d'erreur.
    Comment tu traiterais le cas ou le groupe n'existe pas ?
    Ça m’intéresse
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  3. #23
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Citation Envoyé par cerede2000 Voir le message
    +1 pour ADSI et ADSI => MS


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $Group = [ADSI]"LDAP://CN=Administrateurs,CN=Builtin,DC=xxxxxx,DC=local"
    $Members = $Group.Member | %{[ADSI]"LDAP://$($_)"}
    Je viens de testé ce code, mais cela n'est pas récursive. Il faut faire une fonction qui rappel la fonction.

  4. #24
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Ces deux lignes de code servent à récupérer les membres d'un groupe et à afficher leur distinguishedName

    Donc en effet si tu veux boucler sur une liste de groupe, il faut rajouter quelque chose
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  5. #25
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    J'ai viré les commande powerquest de mon script. Ca consomme un peu moins de mémoire, mais c'est pas encore ça. Je sèche sur ce qui peut consommer comme ça !

  6. #26
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Dans les grandes lignes que fais ton script au final ?
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  7. #27
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Depuis un fichier CSV où j'ai des chemins de répertoire, j'analyse les droits d'accès de ceux-ci : Je relève les utilisateurs / groupes et le type d'accès.

    Ensuite, si j'ai des groupes (locaux ou de domaine), je relève les membres (afin d'avoir une liste d'utilisateur)

    Une fois que j'ai ceci, je créer un nouveau groupe sur l'AD, qui répond à la nomenclature et j'ajoute les membres obtenu à l'étape précédente. Ensuite, j'applique ce groupe aux répertoire et j'applique des droits.

    En gros, je remplace les groupes existant par des nouveaux, et au passage je vire les imbrications de groupe pour avoir une liste unique d'utilisateur. Je fais ceci en prérequis d'un projet qui demande ça.

    Par la suite, je viendrais taguer les anciens groupes que j'ai remplacé par les nouveaux en vu des les supprimer plus tard.

    J'ai l'impression que ma fonction GetGroupsMembers en est la cause avec mes recherches récursives sur l'AD. Il cumule les données au fur et à mesure de l'avancement du script sans libérer la mémoire après utilisation.

  8. #28
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Ah oui sympa
    Une belle usine nucléaire au maïs quoi !

    Je n'ai que très peu survolé ton code mais genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    # Conversion SID vers SamAccountName
    Function ConvertFrom-SID{  
    	[CmdletBinding()] 
    	param( 
    		[Parameter(Mandatory=$true,ValueFromPipeline=$true)]$sid,
    		[Parameter(Mandatory=$true,ValueFromPipeline=$true)][string[]]$ComputerName
    	) 
     
    	$objSID = New-Object System.Security.Principal.SecurityIdentifier($sid) 
    	try
    	{
    		# Conversion sur le domaine
    		$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
    		$name = $objUser.Value
     
    		$GetQADObject = Get-QADObject $sid | SELECT Type,DN
    		$ObjectType = $GetQADObject.Type+" domain"
    		$DN = $GetQADObject.DN
    	}
    	catch
    	{
    		# Conversion sur la machine local
    		$adsi = [adsi]"WinNT://$ComputerName"
    		$users = $adsi.Children | where {($_.SchemaClassName -eq 'user') -OR ($_.SchemaClassName -eq 'group')}
    		$users | ForEach-Object{
    			$localSID = New-Object System.Security.Principal.SecurityIdentifier($_.objectSid.Value,0)
    			if ($localSID.Value -eq $sid)
    			{
    				$Split = $_.Path -Split '/'
    				$name = $Split[$Split.count-1]
    				$ObjectType = $_.SchemaClassName+" local"
    				$DN = "Compte local" # Pas de DN car en local
    			}
    		}
    	}
     
    	# Affichage des résultats
    	New-Object -TypeName PSObject -Property @{ 	SID = $sid 
    												Name = $name
    												ObjectType = $ObjectType
    												DN = $DN
    											} | Select SID,Name,ObjectType,DN
    }
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [wmi]"Win32_SID.SID='<SID>'"
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  9. #29
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Citation Envoyé par cerede2000 Voir le message
    Ah oui sympa
    Une belle usine nucléaire au maïs quoi !
    MDR !

    J'évite d'utilisé du WMI car sur certains serveurs, le service est HS.

  10. #30
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Le services est HS ???
    Comment ça ?
    WMI c'est, pour moi en tout cas, indispensable !
    En plus j'ai des outils de supervision qui utilise WMI pour surveiller les espaces disques et d'autres joyeuseté sur mes serveurs

    Tu utilise quoi du coup dans ta fonction GetGroupsMembers ?
    Get-QADGroupMember, Get-ADGroupMember, ADSI ?
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  11. #31
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Citation Envoyé par cerede2000 Voir le message
    Le services est HS ???
    Comment ça ?
    WMI c'est, pour moi en tout cas, indispensable !
    En plus j'ai des outils de supervision qui utilise WMI pour surveiller les espaces disques et d'autres joyeuseté sur mes serveurs

    Tu utilise quoi du coup dans ta fonction GetGroupsMembers ?
    Get-QADGroupMember, Get-ADGroupMember, ADSI ?
    Et oui, HS, le service ne répond plus. Après ce n'est pas chez moi, mais chez mon client. Un gros client qui fait du chocolat Je dois faire avec !

    J'utilise Get-ADGroupMember

  12. #32
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Miam.... CHOCOLAT !!!!!!!

    Oui je comprends, dommage car ce genre d'astuce réduit considérablement les temps de traitement et la charge du code

    Et pourquoi pas ADSI du coup ?
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  13. #33
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Bah il faut que j'essai. Il faut que je code la fonction. J'ai fais en sorte de pouvoir remonter le DN du groupe pour l'utiliser avec ADSI

  14. #34
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Avec ce code,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $Group = [ADSI]"LDAP://CN=Administrateurs,CN=Builtin,DC=xxxxxx,DC=local"
    $Members = $Group.Member | %{[ADSI]"LDAP://$($_)"}
    y-a-t-il moyen d'avoir le Sid, Name, objectClass et le distinguishedName (que nous avons déjà) des membres ?

  15. #35
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Bien sur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $Group = [ADSI]"LDAP://CN=Administrateurs,CN=Builtin,DC=xxxxxx,DC=local"
    $Members = $Group.Member | %{[ADSI]"LDAP://$($_)"}
    $Members[0].name
    $Members[0].objectSID
    $Members[0].objectClass
    $Members[0].distinguishedName
    Il n'y a que le objectSID qui est en fait un tableau qui décompose la valeur....
    Donc si tu en as absolument besoin il faudra le reconvertir.
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  16. #36
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Je ne pige pas trop ton code.
    Enfin si je le comprend mais je ne comprend pas pourquoi j'ai ce résultat.

    CN=test2,OU=GroupShare,OU=FileSharing,OU=ouSecurityGroups,OU=ouSite,DC=domain,DC=com
    test2
    1
    5
    0
    0
    0
    0
    0
    5
    21
    0
    0
    0
    250
    79
    12
    47
    38
    118
    30
    47
    35
    95
    99
    107
    47
    81
    7
    0
    top
    group

  17. #37
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Il n'y a que le objectSID qui est en fait un tableau qui décompose la valeur....
    Donc si tu en as absolument besoin il faudra le reconvertir.
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  18. #38
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    oui, j'ai bien vu, mais je ne comprend pas pourquoi...

  19. #39
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Ben parce qu'il est stocké comme ca dans l'objet User ADSI....
    Donc si tu en as besoin il faut le convertir ou le récupérer à partir du Name (ce qui est largement plus simple !).
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  20. #40
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Bon, je n'arrive pas a avoir ce que je souhaite. Pas grave.

    J'ai pensé à une autre méthode pour exécuter mon script :

    Je pourrais faire un script principal qui parcoure mon fichier CSV et exécuter une autre instance POWERSHELL avec mon script usine nucléaire.

    L'idée est d'espérer qu'à la fin de l'exécution du second script, la mémoire soit libéré.

    Je pensais tester cette solution avec des Jobs (start-jobs), mais aucune idée si cela peut fonctionner. Qu'en penses-tu ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/06/2008, 09h54
  2. problème de mémoire saturée
    Par paradeofphp dans le forum ASP.NET
    Réponses: 9
    Dernier message: 03/09/2007, 16h45
  3. Réponses: 1
    Dernier message: 16/01/2007, 10h21
  4. Réponses: 2
    Dernier message: 11/10/2006, 10h36
  5. [VB.net]system.outofmemoryexception
    Par grand_prophete dans le forum Windows Forms
    Réponses: 31
    Dernier message: 21/04/2006, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo