Bonjour

voila j'ai un script qui fonctionne a peut près mais des que j'ai un pb de droit sur un pc le script s'arret avec erreur permission refusée 'getobject'

y a t'il la possibilité de faire en sorte que le script ne s'arret pas mais dans le fichier de sortie il m’affiche la machine sur la laquelle il y a eu une erreur.

voici le script et merci si vous pouvez m'aider.

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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
Option Explicit
Const ForReading = 1
Const ForWriting = 2
Const UF_LOCKOUT = &H0010
Dim inputFile, outputFile
 
inputFile = "c:\workstations.txt"
outputFile = "c:\localAdmins.csv"
 
Dim objFSO, objTextFile, ts, objAdminsRegEx
Dim strComputer, objShell
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objAdminsRegEx = New RegExp
objAdminsRegEx.Pattern = "^S-1-2-32-544$"
 
If objFSO.FileExists(inputFile) = True Then
   Set objTextFile = objFSO.OpenTextFile(_
     outputFile, ForWriting, True)
   objTextFile.WriteLine _
     """Name of Group"",""Name of Member"",""lck"""
   With objFSO.GetFile(inputFile)
     Set ts = .OpenAsTextStream(ForReading)
   End With
   Do While ts.AtEndOfStream <> True
     strComputer = trim(ts.ReadLine)
     If len(strComputer) >0 Then 
      If (IsConnectible(strComputer) = True) Then
        call LocalAdmins(strComputer)
      Else
        objTextFile.WriteLine """" & strComputer _
          & " [unconnectable]"","""","""""
      End If
     End If
   Loop
   ts.Close : objTextFile.close
   Set objTextFile = Nothing
End If
 
WSCRIPT.ECHO "Terminer"
WSCRIPT.QUIT  0
 
Sub LocalAdmins(sHost)
   '# objAdminsRegEx, objTextFile are declared globaly
     Dim strConn, objComputer, objAdmins
     Dim strAdministrators, sep, l, cUserFlags
     Dim objItem, arrbytSid, strSID, objMember
     Dim usrSID, IsLocal, strDomain, strMember
 
     strConn = "WinNT://" & sHost
     Set objComputer = GetObject(strConn & ", computer") 
	 objComputer.Filter = Array("Group")
	 on error resume next
 
     For each objItem in objComputer
 
       If objItem.Class = "Group" Then
         '# Retrieve SID of each group.
         arrbytSid = objItem.get("objectSid")
         strSID = OctetToDecStr(arrbytSid)
         If objAdminsRegEx.Test(strSID) Then
           Set objAdmins = objComputer.GetObject(_
             "Group", objItem.name)
           exit For
         End If
       End If
     Next
     Set objComputer = Nothing
 
     If IsObject(objAdmins) Then
       strAdministrators = UCase(sHost) & "\" & objAdmins.name
       sep = Chr(34) & "," & chr(34)
       For each objMember in objAdmins.members
         arrbytSid = objMember.Get("objectSid")
         usrSID = OctetToDecStr(arrbytSid)
 
         With GetObject("winmgmts:\\" & sHost & "\root\cimv2")
           With .Get("Win32_SID.SID='" & usrSID & "'")
             IsLocal = True
             strDomain = .ReferencedDomainName
             strMember = .AccountName
             If LCase(strDomain) <> LCase(sHost) Then IsLocal = False
           End With
         End With
         l = empty: If IsLocal = True Then
           cUserFlags = objMember.Get("UserFlags")
           If (cUserFlags And UF_LOCKOUT) _
             Then l = "LOCKED OUT"
         End If
 
         objTextFile.WriteLine chr(34) & strAdministrators & sep _
                 & strDomain & "\" & strMember & sep & l & chr(34)
       next
     End If
End Sub
 
 
Function OctetToDecStr(ByVal arrSid)
   ' Function to convert OctetString SID values to decimal format.
   ' A 2nd Function OctetToHexStr is called from within this function
   Dim strHexSid, arrbytSid, lngTemp, j
 
   ' 1. Convert OctetString (byte array) to Hex string.
   strHexSid = OctetToHexStr(arrSid)
 
   ' 2. Convert most HexString SID values to decimal format.
   ReDim arrbytSid(Len(strHexSid)/2 - 1)
   For j = 0 To UBound(arrbytSid)
     arrbytSid(j) = CInt("&H" & Mid(strHexSid, 2*j + 1, 2))
   Next
 
   If (UBound(arrbytSid) = 11) Then
     OctetToDecStr = "S-" & arrbytSid(0) & "-" _
       & arrbytSid(1) & "-" & arrbytSid(8)
 
     Exit Function
   End If
 
   If (UBound(arrbytSid) = 15) Then
     OctetToDecStr = "S-" & arrbytSid(0) & "-" _
       & arrbytSid(1) & "-" & arrbytSid(8)
 
     lngTemp = arrbytSid(15)
     lngTemp = lngTemp * 256 + arrbytSid(14)
     lngTemp = lngTemp * 256 + arrbytSid(13)
     lngTemp = lngTemp * 256 + arrbytSid(12)
     OctetToDecStr = OctetToDecStr & "-" & CStr(lngTemp)
 
     Exit Function
   End If
 
   OctetToDecStr = "S-" & arrbytSid(0) & "-" _
     & arrbytSid(1) & "-" & arrbytSid(8)
 
   lngTemp = arrbytSid(15)
   lngTemp = lngTemp * 256 + arrbytSid(14)
   lngTemp = lngTemp * 256 + arrbytSid(13)
   lngTemp = lngTemp * 256 + arrbytSid(12)
   OctetToDecStr = OctetToDecStr & "-" & CStr(lngTemp)
 
   lngTemp = arrbytSid(19)
   lngTemp = lngTemp * 256 + arrbytSid(18)
   lngTemp = lngTemp * 256 + arrbytSid(17)
   lngTemp = lngTemp * 256 + arrbytSid(16)
   OctetToDecStr = OctetToDecStr & "-" & CStr(lngTemp)
 
   lngTemp = arrbytSid(23)
   lngTemp = lngTemp * 256 + arrbytSid(22)
   lngTemp = lngTemp * 256 + arrbytSid(21)
   lngTemp = lngTemp * 256 + arrbytSid(20)
   OctetToDecStr = OctetToDecStr & "-" & CStr(lngTemp)
 
   If (UBound(arrbytSid) > 23) Then
 
     lngTemp = arrbytSid(25)
     lngTemp = lngTemp * 256 + arrbytSid(24)
     OctetToDecStr = OctetToDecStr & "-" & CStr(lngTemp)
 
   End If
End Function
 
Function OctetToHexStr(ByVal arrbytOctet)
   ' This function convert OctetString (byte array) to Hex string.
   Dim k
   OctetToHexStr = ""
   For k = 1 To Lenb(arrbytOctet)
      OctetToHexStr = OctetToHexStr _
         & Right("0" & Hex(Ascb(Midb(arrbytOctet, k, 1))), 2)
   Next
End Function
 
Function IsConnectible(strHost)
   Dim lngResult
   ' objShell has been globally declared
   If Not IsObject(objShell) _
     Then Set objShell = CreateObject("Wscript.Shell")
   lngResult = objShell.Run("%comspec% /c ping -n 1 " _
     & " -w 750 " & strHost _
     & " | find /i ""TTL="" > nul 2>&1", 0, True)
   Select Case lngResult
     Case 0
       IsConnectible = True
     Case Else
       IsConnectible = False
   End Select
End Function