Bonjour,
Je suis confronté à un problème :
J'ai fait un script qui permet d'inventorier les KB sur des serveurs distants et d'envoyer les résultats dans un fichier *.txt.
Le script fonctionne cependant j'ai des erreurs (accès refusé) sur certaines machines :
J'ai activé transcript mais j'utilise une variable pour le nom des serveurs alimentée par une recherche de Computer dans une OU.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 "Get-WmiObject : Accès refusé. (Exception de HRESULT : 0x80070005 (E_ACCESSDENIE D)) Au niveau de C:\COMMUN\POWERSHELL\KB_Check\KB_Check.ps1*: 77 Caractère*: 20 + $kb = get-wmiobject <<<< -class "Win32_QuickFixEngineering" -ComputerName $S ervup | Select-Object -Property HotFixId + CategoryInfo : NotSpecified: (:) [Get-WmiObject], UnauthorizedA ccessException + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.Pow erShell.Commands.GetWmiObjectCommand"
Comment puis connaître le nom des machines qui posent problème ?
Je vous remercie par avance de vous pencher sur mon problème.
Ci-joint le script :
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 # Chemin des fichiers # $chemin = "C:\COMMUN\POWERSHELL\KB_Check" # Création des répertoires "result" et "Log" # if (test-path $Chemin\log) {} else {$Log = new-item "$Chemin\log" –type directory} if (test-path $Chemin\result) {} else {$result = new-item "$Chemin\result" –type directory} Start-Transcript $chemin\log\KB_Check.log # Suppression des *.txt dans le répertoire $chemin et ses sous-dossiers # if ((get-childitem $Chemin -include *.txt -recurse) -like "*.txt") { get-childitem $Chemin -include *.txt -recurse | remove-item } # Recherche des serveurs a scanner dans l'OU XX - Resultats dans servers.txt # $searcher=new-object System.DirectoryServices.DirectorySearcher([adsi]'LDAP://ou=XX,ou=serveurs,dc=domain,dc=com','objectCategory=computer') $searcher.FindAll()|%{$_.Properties.name}|Out-File $chemin\servers.txt # Obtention de la date du jour au format yyyymmdd # $date = get-date -uformat "%Y%m%d" # Pour chaque serveur dans servers.txt... # foreach($name in (get-content $chemin\servers.txt)) { # Test ping # if (test-connection -computername $name -count 1 -quiet) {Out-file $Chemin\result\Ping_OK.txt -inputobject "$Name" -encoding ASCII -append} else {Out-file $Chemin\result\Ping_KO.txt -inputobject "$Name" -encoding ASCII -append} # Pour chaque serveur qui ping : remonter des ID de KB dans un Date_KB_Nom_du_serveur.txt # foreach($Servup in (get-content $chemin\result\Ping_OK.txt)) { $NomFichier = "$date"+"_"+"KB"+"_"+"$Servup" $kb = get-wmiobject -class "Win32_QuickFixEngineering" -ComputerName $Servup | Select-Object -Property HotFixId out-file -inputobject $kb $chemin\result\$NomFichier.txt -encoding ASCII} } # Affichage d'une boîte de dialogue "traitement terminé" [void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $MaMsgBox = [Windows.Forms.MessageBox] $Monbouton=[Windows.Forms.MessageBoxButtons]::OK $Monicon=[windows.forms.MessageBoxIcon]::Information $MaMsgBox::show("Traitement terminé !","Inventaire des KB des serveurs de l'ou XX",$Monbouton,$Monicon) # Suppression du fichier servers.txt s'il existe ;-) # if (test-path $chemin\servers.txt) { Remove-Item $chemin\servers.txt} # Arrêt de la log # Stop-transcript
Partager