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