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 :

ne contient pas de méthode nommée « op_Addition » [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Par défaut ne contient pas de méthode nommée « op_Addition »
    Bonjour

    Je suis débutant sur powershell et je ne comprend pas ce qui ce passe.

    J'ai écris le code ci-dessous que j’exécute en mode débug, la pas d'erreur.
    Par contre quand j’exécute normalement mon script j'ai le message d'erreur suivant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Échec lors de l’appel de la méthode, car [System.Management.Automation.PSObject] ne contient pas de méthode nommée «*op_Addition*».
    Au caractère C:\Users\...\Desktop\AccessRights.ps1:66 : 17
    +                 $tabACL+=fAddTab -strDirectory $strFolder -strMemberName $objADO ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation : (op_Addition:String) [], RuntimeException
        + FullyQualifiedErrorId : MethodNotFound
    Mon script qui sert à affiché les droits d’accès a partir d'un dossier racine.
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    #Import ActiveDirectory Module if not loaded
    $Module = Get-Module ActiveDIrectory
    If ($Module -eq $Null) {Import-Module ActiveDirectory}
    
    $DEBUG = 0
    
    #Chemin racine à analyser
    $strPATH = "D:\DATA"
    
    $tabACL=@() #Initialisation du tableau à vide
    
    Function fAD_Name(){
    	Param ([string]$strAccountName)
    	
    	if ($strAccountName.Contains("\")){
    		#Retourne uniquement le sAMAccountName
    		return [String]$strAccountName = ($strAccountName.Split("\")[-1]).Trim()
        } Else {
            return $strAccountName.Trim()
    	}
    }
    
    Function fAddTab(){
        Param([String]$strDirectory,[String]$strMemberName,[String]$strMemberOf='',[String]$strFSRights)
        
        $Dico=New-Object PSObject
    	$Dico | Add-Member -Name Directory -MemberType NoteProperty -Value $strDirectory
        $Dico | Add-Member -Name MemberName -MemberType NoteProperty -Value $strMemberName
        $Dico | Add-Member -Name MemberOf -MemberType NoteProperty -Value $strMemberOf
    	$Dico | Add-Member -Name FileSystemRights -MemberType NoteProperty -Value $strFSRights
        Return $Dico
    }
    
    Function fAD_AddMembers(){
        Param (
            [String]$strCNObjectAD,
            [String]$strFolder,
            [String]$strFSR,
            [String]$strSubCNObjectAD=''
        )
        
        $strCNObjectAD = $strCNObjectAD.Trim()
    
        if($DEBUG -eq 1){Write-Host "strCNObjectAD : $strCNObjectAD"}
    
    	#Récupureation de l'objet Active Directory (User ou Group)
        $objADObject = Get-ADObject -LDAPFilter "(sAMAccountName=$strCNObjectAD)" -properties Name, ObjectClass, Member
    
        if($DEBUG -eq 1){Write-Host '$objADObject.Name :' $objADObject.Name '$objADObject.Class :' $objADObject.ObjectClass}
    
        if([String]$objADObject.ObjectClass -like "group"){
            #Pour Chaque membre du  groupe
    		ForEach ($Member in $objADObject.member){
                
                $objADO = Get-ADObject -LDAPFilter "(distinguishedName=$Member)" -properties cn, ObjectClass
    
                #Si dans les membres ont trouve un autre groupe, alors ont rappel la fonction
    			if ($objADO.ObjectClass -like 'group') {
                    
    				fAD_AddMembers -strCNObjectAD $objADO.cn -strFolder $strFolder -strFSR $strFSR -strSubCNObjectAD $strCNObjectAD
    				
                }Else{
    
                    if($DEBUG -eq 1){Write-Host fAddTab -strDirectory $strFolder -strMemberName $objADO.cn -strMemberOf $strCNObjectAD -strFSRights $strFSR}
    
                    $tabACL+=fAddTab -strDirectory $strFolder -strMemberName $objADO.cn -strMemberOf $strCNObjectAD -strFSRights $strFSR
    				
                }
            }
        }Else{
    		
            if($DEBUG -eq 1){Write-Host fAddTab -strDirectory $strFolder -strMemberName $objADObject.Name -strFSRights $strFSR}
    
    		$tabACL+=fAddTab -strDirectory $strFolder -strMemberName $objADObject.Name -strFSRights $strFSR
    
            if($DEBUG -eq 1){$tabACL}
        }
    }
    
    $liste_repertoire = Get-childitem $strPATH -recurse
    
    foreach ($repertoire in $liste_repertoire){
        if($repertoire.Attributes -eq "Directory"){
            
            if($DEBUG -eq 1){Write-Host "REPERTOIRE : " $repertoire.FullName}
    
            $global_acl = Get-Acl $repertoire.FullName
    
            foreach ($droit in $global_acl.Access){
                
                $strIdentification = fAD_Name $droit.IdentityReference
    
                if($DEBUG -eq 1){Write-Host "IdentityReference " $droit.IdentityReference}
                if($DEBUG -eq 1){Write-Host "strIdentification : $strIdentification"}
    
                fAD_AddMembers -strCNObjectAD $strIdentification.trim() -strFolder $repertoire.FullName -strFSR $droit.FileSystemRights
    		}
        }
    }
    
    return $tabACL

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    a priori ton code affecte un autre type à ta variable.
    Ceci reproduit ton erreur:
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $tabACL=new-object pscustomObject
    $tabACL +=fAddTab -strDirectory $strFolder -strMemberName $objADObject.Name -strFSRights $strFSR
    En passant ceci est redondant :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Function fAD_AddMembers(){
      Param (
     
    #La clause Param suffit
    Function fAD_AddMembers{
        Param (
    Ensuite où est le bug...
    Utilise des assertions pour vérifier ton code

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    C'est un problème de portée de ta variable $tabACL.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Par défaut
    Bonjour et merci

    j'ai donc déclaré mon tableau comme indiquer en début de script (problème persistant).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
    #Initialisation du tableau
    $tabACL=new-object pscustomObject
    $tabACL=@()
    
    Function fAD_Name{
    ...
    Pour la porté de la variable j'y es pensé mais j'ai du mal a comprendre.
    Par défaut, elle est local donc accessible aux processus enfant et dans mon cas à tous le script???

    Je vais étudier le document fourni que je crois avoir déjà lu.

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par borislotte Voir le message
    Je vais étudier le document fourni que je crois avoir déjà lu.
    Oui c'est le mieux je pense, c'est surtout de pratiquer autour de cette notion qui est important. Lire est ici insuffisant.
    L'heure tardive à laquelle je t'ai répondu m'a tout de même demandé un peu de réflexion, il n'y a rien donc d'évident à débusquer ce type de bug.

    J'utilise rarement la notion de portée dans mon code car elle restreint la réutilisation, et je ne t'ai pas donné la solution (qui est très simple) car à mon avis il vaut mieux que tu comprennes ce qui se passe.
    Pour terminer je te conseille de ne pas utiliser la notation hongroise et d'utiliser la convention Powershell Verb-Noun. Pour ce dernier point ton code en l'état ne pourrait être inséré dans un module.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Par défaut
    Merci de l'aide

    J’étudie et ferai un retour.

    et puis j'aurai certainement besoin éclaircissement sur cette phrase :
    Pour ce dernier point ton code en l'état ne pourrait être inséré dans un module.
    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [python 2.7] - import os ne contient pas la méthode mkfifo
    Par spidetra dans le forum Général Python
    Réponses: 5
    Dernier message: 18/11/2014, 17h41
  2. Problème La méthode nommée n'existe pas.
    Par superxou dans le forum ActionScript 1 & ActionScript 2
    Réponses: 7
    Dernier message: 09/06/2008, 22h43
  3. [JNI] Java ne trouve pas mes méthodes natives
    Par carotte31 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 14/06/2006, 21h47
  4. Réponses: 2
    Dernier message: 07/09/2005, 09h55
  5. Réponses: 19
    Dernier message: 26/05/2005, 09h26

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