bonjour à tous il manque de peu mais je sature et j'ai besoin d'aide
je vous explique avant tout ^^
j'ai un script qui a pour but de chercher dans l'AD tous les ordinateurs qui sont admin local de leur machine
ce script génère 3 fichiers de sortie
- résultat des ordinateurs avec le compte admin local
- les machines qui n'ont pas pu être testées car déconnectées
- et un fichier de log
mais c'est là que ça se complique on m'a demandé que le script vérifie si un fichier de la liste des machines non connectées existe, si oui alors on charge la liste sinon le script cherche dans l'AD
on m'a demandé de mettre ces 2 options dans des fonctions
et de faire appel à elle pour que le script sache quelle méthode utiliser (fichier csv ou requête AD)
mais mon code ne fonctionne pas pouvez-vous m'aider à voir mes erreurs svp ?
Code PowerShell : 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 $n=0 $v=0 $w=0 #-------------------- fichiers -------------------------------------- $strFilePathResut = $PSCommand.Basename + ".csv" $log = "c:\temp\logAdminLocal$(get-date -f dd-MM-yyyy-HH-mm-ss).rtf" $strFilePathNotConnected = "C:\temp\NotestAdminLocal.csv" Function Get-ComputersFromFile ([ref]$ComputersName) { $ComputersName = Import-CSV -path "C:\temp\NotestAdminLocal.csv" -Encoding UTF8 } Function Get-ComputersFromAD ([ref]$ComputersName) { #-------------------- Domaine --------------------------------------- $adFilter = "(objectClass=Computer)" $adSearch = New-Object System.DirectoryServices.DirectorySearcher $adSearch.PageSize = 15000 $adSearch.Filter = $adFilter $adSearch.SearchRoot = "LDAP://OU=Racine,DC=XXX,DC=local" $adall = $adSearch.FindAll() $adItemT = $Adall.Properties $ComputersName = $adItemT.name } Start-Transcript -Path $log Write-host -nonewline "Vérification en cour ..." `n #=============================================================================== #Si j'ai un fichier strFilePathNotConnected, je charge les valeurs if (Test-Path "C:\temp\NotestAdminLocal.csv"){ $arrayComputersName = Get-ComputersFromFile ([ref]$ComputersName) } #=============================================================================== #=============================================================================== #Sinon je recherche dans l'AD else { $arrayComputersName = Get-ComputersFromAD ([ref]$ComputersName) } #=============================================================================== foreach ( $Computers in $arrayComputersName) { ############# machine en cours de vérification et test de connexion Write-host -nonewline "Vérification Machine " `n if ( Test-Connection $Computer -count 1 -quiet ) { Get-WmiObject Win32_UserAccount -ComputerName $Computer $MembresAdmin ="" $Connexion = [ADSI]"WinNT://$Computer/Administrateurs,group" $MembresAdmin = $Connexion.psbase.invoke('Members') | %{$_.GetType().InvokeMember('Name','GetProperty', $null, $_, $null)}| Where-Object {$_ -notlike "*admin*" -and $_ -notlike ""} if ( !$MembresAdmin ) { Write-host -nonewline "Machine $Computer testé mais sans compte admin local" `n } else { Write-host -nonewline "Machine $Computer connecté avec compte administrateur local"`n "Nom de la machine ; Nom du compte $Computer ; $MembresAdmin ------------" | Out-File -filepath $strFilePathResut -encoding -Encoding UTF8 } $v++ } else { Write-host -nonewline "$Computer, Machine non connectées" `n if (Test-Path "C:\temp\NotestAdminLocal.csv") { Remove-Item - chemin C:\temp\NotestAdminLocal.csv } else { " $Computer" | Out-File -filepath -Force $strFilePathNotConnected -Encoding UTF8 } $n++ } } Write-host "il y a $n machines deconnectées" Write-host "il y a $v machines connectées" $w=$n+$v Write-Host "Il y a $w machines" Write-host -nonewline "Vérification terminé" Stop-Transcript
Partager