· 8 years ago · May 20, 2018, 06:04 PM
1''''''''''''''''''''''''''''''''''''
2'
3' ADSUTIL.VBS
4'
5' Date: 7/24/97
6' Revision History:
7' Date Comment
8' 7/24/97 Initial version started
9' 5/8/98 Bug fixes and ENUM_ALL
10' 12/1/98 Fixed display error on list data.
11' 7/27/99 AppCreate2 fix
12' 8/5/99 Dont display encrypted data
13''''''''''''''''''''''''''''''''''''
14Option Explicit
15On Error Resume Next
16
17Const StrRes0 = "COPY is not yet supported. It will be soon."
18Const StrRes1 = "Command not recognized: "
19Const StrRes2 = "For help, just type ""Cscript.exe adsutil.vbs""."
20Const StrRes3 = "Usage:"
21Const StrRes4 = " ADSUTIL.VBS <cmd> [<path> [<value>]]"
22Const StrRes6 = "Description:"
23Const StrRes7 = "IIS administration utility that enables the configuration of metabase properties."
24Const StrRes9 = "Supported Commands:"
25Const StrRes12 = "Samples:"
26Const StrRes18 = "For Extended Help type:"
27Const StrRes19 = " adsutil.vbs HELP"
28Const StrRes21 = " ADSUTIL.VBS CMD [param param]"
29Const StrRes23 = "Description:"
30Const StrRes24 = "IIS administration utility that enables the manipulation with ADSI parameters"
31Const StrRes26 = "Standard Commands:"
32Const StrRes27 = " adsutil.vbs GET path - display chosen parameter"
33Const StrRes28 = " adsutil.vbs SET path value ... - assign the new value"
34Const StrRes29 = " adsutil.vbs ENUM path [""/P"" ] - enumerate all parameters for given path"
35Const StrRes30 = " adsutil.vbs DELETE path - delete given path or parameter"
36Const StrRes31 = " adsutil.vbs CREATE path [KeyType] - create given path and assigns it the given KeyType"
37Const StrRes32 = " adsutil.vbs APPCREATEINPROC w3svc/1/root - Create an in-proc application"
38Const StrRes33 = " adsutil.vbs APPCREATEOUTPROC w3svc/1/root - Create an out-proc application"
39Const StrRes34 = " adsutil.vbs APPCREATEPOOLPROC w3svc/1/root- Create a pooled-proc application"
40Const StrRes35 = " adsutil.vbs APPDELETE w3svc/1/root - Delete the application if there is one"
41Const StrRes36 = " adsutil.vbs APPUNLOAD w3svc/1/root - Unload an application from w3svc runtime lookup table."
42Const StrRes37 = " adsutil.vbs APPDISABLE w3svc/1/root - Disable an application - appropriate for porting to another machine."
43Const StrRes38 = " adsutil.vbs APPENABLE w3svc/1/root - Enable an application - appropriate for importing from another machine."
44Const StrRes39 = " adsutil.vbs APPGETSTATUS w3svc/1/root - Get status of the application"
45Const StrRes40 = "New ADSI Options:"
46Const StrRes41 = " /P - Valid for ENUM only. Enumerates the paths only (no data)"
47Const StrRes42 = " KeyType - Valide for CREATE only. Assigns the valid KeyType to the path"
48Const StrRes43 = "Extended ADSUTIL Commands:"
49Const StrRes44 = " adsutil.vbs FIND path - find the paths where a given parameter is set"
50Const StrRes45 = " adsutil.vbs CREATE_VDIR path - create given path as a Virtual Directory"
51Const StrRes46 = " adsutil.vbs CREATE_VSERV path - create given path as a Virtual Server"
52Const StrRes47 = " adsutil.vbs START_SERVER path - starts the given web site"
53Const StrRes48 = " adsutil.vbs STOP_SERVER path - stops the given web site"
54Const StrRes49 = " adsutil.vbs PAUSE_SERVER path - pauses the given web site"
55Const StrRes50 = " adsutil.vbs CONTINUE_SERVER path - continues the given web site"
56Const StrRes52 = " adsutil.vbs GET W3SVC/1/ServerBindings"
57Const StrRes53 = " adsutil.vbs SET W3SVC/1/ServerBindings "":81:"""
58Const StrRes54 = " adsutil.vbs CREATE W3SVC/1/Root/MyVdir ""IIsWebVirtualDir"""
59Const StrRes55 = " adsutil.vbs START_SERVER W3SVC/1"
60Const StrRes56 = " adsutil.vbs ENUM /P W3SVC"
61Const StrRes57 = "Extended ADSUTIL Commands:"
62Const StrRes58 = " adsutil.vbs FIND path - find the paths where a given parameter is set"
63Const StrRes59 = " adsutil.vbs CREATE_VDIR path - create given path as a Virtual Directory"
64Const StrRes60 = " adsutil.vbs CREATE_VSERV path - create given path as a Virtual Server"
65Const StrRes61 = " adsutil.vbs START_SERVER path - starts the given web site"
66Const StrRes62 = " adsutil.vbs STOP_SERVER path - stops the given web site"
67Const StrRes63 = " adsutil.vbs PAUSE_SERVER path - pauses the given web site"
68Const StrRes64 = " adsutil.vbs CONTINUE_SERVER path - continues the given web site"
69Const StrRes65 = "Samples:"
70Const StrRes66 = " adsutil.vbs GET W3SVC/1/ServerBindings"
71Const StrRes67 = " adsutil.vbs SET W3SVC/1/ServerBindings "":81:"""
72Const StrRes68 = " adsutil.vbs CREATE W3SVC/1/Root/MyVdir ""IIsWebVirtualDir"""
73Const StrRes69 = " adsutil.vbs START_SERVER W3SVC/1"
74Const StrRes70 = " adsutil.vbs ENUM /P W3SVC"
75Const StrRes71 = "This script does not work with WScript."
76Const StrRes72 = "To run this script using CScript, type: ""CScript.exe "
77Const StrRes73 = "Error Trying to write the registry settings!"
78Const StrRes74 = "Successfully registered CScript"
79Const StrRes75 = "To run this script type: ""CScript.Exe adsutil.vbs <cmd> <params>"""
80Const StrRes76 = "Error: Wrong number of Args for the SET command"
81Const StrRes77 = "Error Trying To Get the Object: "
82Const StrRes78 = "Error Trying To GET the Schema of the property: "
83Const StrRes79 = "Error: Unknown data type in schema: "
84Const StrRes80 = "Error Trying To SET the Property: "
85Const StrRes81 = "Error: Wrong number of Args for the GET command"
86Const StrRes82 = "Error Trying To GET the Object (GetObject Failed): "
87Const StrRes83 = "Error Trying To GET the Schema of the property: "
88Const StrRes84 = "Error Trying To GET the property: (Get Method Failed) "
89Const StrRes85 = " (This property is probably not allowed at this node)"
90Const StrRes86 = "The parameter """
91Const StrRes87 = " is not set at this node."
92Const StrRes90 = " Items)"
93Const StrRes91 = "Error Trying To GET the Property: "
94Const StrRes92 = "Error: Invalid arguments for the ENUM command"
95Const StrRes93 = "Error: Wrong number of Args for the ENUM command"
96Const StrRes94 = "Error Trying To ENUM the Object (GetObject Failed): "
97Const StrRes95 = "Error Trying To GET the Schema of the class: "
98Const StrRes96 = "Error trying to get the list of properties: "
99Const StrRes97 = "Warning: The optionalproperties list is of an invalid type"
100Const StrRes98 = "Warning: The OptionalProperties list for this node is empty."
101Const StrRes99 = "Error trying to enumerate the Optional properties (Couldn't Get Property Information): "
102Const StrRes100 = "Last Property Name: "
103Const StrRes102 = " Items)"
104Const StrRes103 = "DataType: "
105Const StrRes104 = " Not Yet Supported on property: "
106Const StrRes105 = "Error trying to enumerate the Optional properties (Error trying to get property value): "
107Const StrRes108 = "Continuing..."
108Const StrRes109 = "Error trying to enumerate the properties lists:"
109Const StrRes111 = "Error trying to enumerate the child nodes"
110Const StrRes112 = "Error: Wrong number of Args for the CREATE command"
111Const StrRes120 = "Error accessing the object: "
112Const StrRes121 = "Error creating the object: "
113Const StrRes123 = "WARNING: The parent path ("
114Const StrRes124 = ") was not already created."
115Const StrRes125 = " This means that some of the intermediate objects will not have an accurate"
116Const StrRes126 = " Object Type. You should fix this by setting the KeyType on the intermediate"
117Const StrRes127 = " objects."
118Const StrRes128 = "WARNING: The Object Type of this object was not specified or was specified as"
119Const StrRes129 = " IIsObject. This means that you will not be able to set or get properties"
120Const StrRes130 = " on the object until the KeyType property is set."
121Const StrRes131 = "created """
122Const StrRes132 = "Error: Wrong number of Args for the DELETE command"
123Const StrRes133 = "Error deleting the object: "
124Const StrRes134 = "deleted property """
125Const StrRes135 = "Error deleting the object: "
126Const StrRes136 = "deleted path """
127Const StrRes137 = "ENUM_ALL Command not yet supported"
128Const StrRes138 = "Error: Wrong number of Args for the Copy/Move command"
129Const StrRes139 = "Error trying to open the object: "
130Const StrRes140 = "Error trying to Copy/Move Source to Dest."
131Const StrRes141 = "copied from "
132Const StrRes142 = " to "
133Const StrRes143 = "moved from "
134Const StrRes145 = "Error: Wrong number of Args for the START_SERVER command"
135Const StrRes146 = "Error trying to open the object: "
136Const StrRes147 = "Error trying to START the server: "
137Const StrRes148 = "Server "
138Const StrRes149 = " Successfully STARTED"
139Const StrRes150 = "Error: Wrong number of Args for the STOP_SERVER command"
140Const StrRes151 = "Error trying to open the object: "
141Const StrRes152 = "Error trying to STOP the server: "
142Const StrRes154 = " Successfully STOPPED"
143Const StrRes155 = "Error: Wrong number of Args for the PAUSE_SERVER command"
144Const StrRes156 = "Error trying to open the object: "
145Const StrRes157 = "Error trying to PAUSE the server: "
146Const StrRes159 = " Successfully PAUSED"
147Const StrRes160 = "Error: Wrong number of Args for the CONTINUE_SERVER command"
148Const StrRes161 = "Error trying to open the object: "
149Const StrRes162 = "Error trying to CONTINUE the server: "
150Const StrRes164 = " Successfully CONTINUED"
151Const StrRes165 = "Error: Wrong number of Args for the FIND_DATA command"
152Const StrRes166 = "Error trying to find data paths for the Object (GetObject Failed): "
153Const StrRes167 = "Error trying to get a path list (GetDataPaths Failed): "
154Const StrRes168 = "Property "
155Const StrRes169 = " was not found at any node beneath "
156Const StrRes171 = " found at:"
157Const StrRes172 = "Error listing the data paths (_newEnum Failed): "
158Const StrRes173 = "Error trying to get the Object: "
159Const StrRes175 = "Error trying to Create the Mime Map List."
160Const StrRes176 = "Error: Wrong number of Args for the Set MIMEMAP command"
161Const StrRes177 = "Error trying to get the Object: "
162Const StrRes179 = "Error Trying to set the Object's ""MimeMap"" property to the new mimemap list."
163Const StrRes180 = "Error Trying To Get the Object: "
164Const StrRes181 = "Can't set ServerCommand on a non-IIsWebServer object."
165Const StrRes182 = "Error Trying To Start the server: "
166Const StrRes184 = " Successfully STARTED"
167Const StrRes185 = "Error Trying To Stop the server: "
168Const StrRes187 = " Successfully STOPPED"
169Const StrRes188 = "Error Trying To Pause the server: "
170Const StrRes190 = " Successfully PAUSED"
171Const StrRes191 = "Error Trying To Continue the server: "
172Const StrRes193 = " Successfully Continued"
173Const StrRes194 = "Invalid ServerCommand: "
174Const StrRes195 = "Error Trying To Get the Object: "
175Const StrRes196 = "Can't set AppPoolCommand on a non-IIsApplicationPool object."
176Const StrRes197 = "Error Trying To Start the application pool: "
177Const StrRes198 = "Application pool "
178Const StrRes199 = " Successfully STARTED"
179Const StrRes200 = "Error Trying To Stop the application pool: "
180Const StrRes202 = " Successfully STOPPED"
181Const StrRes203 = "Invalid AppPoolCommand: "
182Const StrRes204 = "Error Trying To Get the Object: "
183Const StrRes205 = "Error: Setting not supported: "
184Const StrRes206 = "Error Trying To Set data on the Object: "
185Const StrRes208 = "Error Trying To Get the Object: "
186Const StrRes215 = "Note: Your parameter """
187Const StrRes216 = " is being mapped to AccessFlags"
188Const StrRes217 = " Check individual perms using ""GET AccessRead"", ""GET AccessWrite"", etc."
189Const StrRes221 = " is being mapped to AuthFlags"
190Const StrRes222 = " Check individual auths using ""GET AuthNTLM"", ""GET AuthBasic"", etc."
191Const StrRes223 = "ErrNumber: "
192Const StrRes225 = "Error trying to Split the parameter from the object: "
193Const StrRes234 = "Error trying to split the left part of the path: "
194Const StrRes235 = "Error Trying To Sanitize the path: "
195Const StrRes236 = "Error: Wrong number of Args for the APPCREATE command"
196Const StrRes237 = "Error trying to get the path of the application: "
197Const StrRes238 = "Error trying to create the application: "
198Const StrRes239 = "Application Created."
199Const StrRes240 = "Error: Wrong number of Args for the APPDELETE command"
200Const StrRes242 = "Error trying to DELETE the application: "
201Const StrRes243 = "Application Deleted."
202Const StrRes244 = "Error: Wrong number of Args for the APPUNLOAD command"
203Const StrRes246 = "Error trying to UNLOAD the application: "
204Const StrRes247 = "Application Unloaded."
205Const StrRes248 = "Error: Wrong number of Args for the APPDISABLE command"
206Const StrRes251 = "Error trying to disable the application: "
207Const StrRes253 = "Application Disabled."
208Const StrRes254 = "Error: Wrong number of Args for the APPENABLE command"
209Const StrRes257 = "Error trying to Enable the application: "
210Const StrRes259 = "Application Enabled."
211Const StrRes260 = "Error: Wrong number of Args for the APPGETSTATUS command"
212Const StrRes262 = "Error trying to retrieve the application STATUS: "
213Const StrRes263 = "Application Status: "
214Const StrRes264 = "Error trying to get the property: "
215Const StrRes265 = "Would you like to register CScript as your default host for VBscript?"
216Const StrRes266 = "Register CScript"
217Const StrRes267 = "The path requested could not be found."
218Const StrRes268 = "Access is denied for the requested path or property."
219Const StrRes269 = "The requested path is being used by another application."
220Const StrRes270 = "Authorization"
221Const StrRes271 = " Anonymous"
222Const StrRes272 = " Basic"
223
224Dim fso
225Set fso = CreateObject("Scripting.FileSystemObject")
226Const vbSpace = " "
227
228' Get the overridden UI language.
229Function GetLangID()
230 Dim args, lang
231
232 Set args = WScript.Arguments.Named
233 If args.Exists("lang") Then
234 lang = args.Item("lang")
235 GetLangID = CInt(lang)
236 Else
237 GetLangID = GetUILanguage()
238 End If
239
240End Function
241
242' Get a localized resources for 'resourceID' if available;
243' otherwise, get the neutral resource.
244Function GetLocalizedResource(resourceID)
245 Const ForReading = 1, TristateUseDefault = -2
246 Dim lang, value, ini
247
248 lang = GetLangID()
249 ini = fso.GetParentFolderName(WScript.ScriptFullName) & "\" _
250 & ToHex(lang) & "\" & fso.GetBaseName(WScript.ScriptName) & ".ini"
251
252 If fso.FileExists(ini) Then
253 Dim stream, file
254
255 Set file = fso.GetFile(ini)
256 Set stream = file.OpenAsTextStream(ForReading, TristateUseDefault)
257 value = ReadResource(stream, resourceID)
258 End If
259
260 If Not IsEmpty(value) Then
261 GetLocalizedResource = value
262 Else
263 GetLocalizedResource = Eval(resourceID)
264 End If
265End Function
266
267' Read a resource ID from the TextStream
268Function ReadResource(stream, resourceID)
269 Const ERROR_FILE_NOT_FOUND = 2
270 Dim ln, arr, key, value
271
272 If Not IsObject(stream) Then Err.Raise ERROR_FILE_NOT_FOUND
273
274 Do Until stream.AtEndOfStream
275 ln = stream.ReadLine
276
277 arr = Split(ln, "=", 2, 1)
278 If UBound(arr, 1) = 1 Then
279 ' Trim the key and the value first before trimming quotes
280 key = arr(0)
281 key = TrimSpace(key)
282 'key = Replace(key, String(1, vbTab), "")
283
284 If StrComp(resourceID, key, 1) = 0 Then
285 value = TrimChar(TrimSpace(arr(1)), """")
286 ReadResource = value
287 Exit Do
288 End If
289 End If
290 Loop
291
292 stream.Close
293End Function
294
295Function TrimSpace(s)
296 Dim c
297 do
298 c = Left(s, 1)
299 if c <> vbTab and c <> vbSpace then
300 exit do
301 end if
302 s = Right(s, len(s) - 1)
303 loop
304
305 do
306 c = Right(s, 1)
307 if c <> vbTab and c <> vbSpace then
308 exit do
309 end if
310 s = Left(s, len(s) - 1)
311 loop
312
313 TrimSpace = s
314End Function
315
316' Trim a character from the text string
317Function TrimChar(s, c)
318 Dim a
319 do
320 a = Left(s, 1)
321 if a <> c then
322 exit do
323 end if
324 s = Right(s, len(s) - 1)
325 loop
326
327 do
328 a = Right(s, 1)
329 if a <> c then
330 exit do
331 end if
332 s = Left(s, len(s) - 1)
333 loop
334
335 TrimChar = s
336End Function
337
338Function ToHex(n)
339 Dim s : s = Hex(n)
340 ToHex = String(4 - Len(s), "0") & s
341End Function
342
343''''''''''''''''''
344' Main Script Code
345''''''''''''''''''
346Dim ArgObj ' Object which contains the command line argument
347Dim Result ' Result of the command function call
348Dim Args(999) ' Array that contains all of the non-global arguments
349Dim ArgCount ' Tracks the size of the Args array
350
351' Used for string formatting
352Dim Spacer
353Dim SpacerSize
354
355Const IIS_DATA_NO_INHERIT = 0
356Const IIS_DATA_INHERIT = 1
357Const GENERAL_FAILURE = 2
358Const GENERAL_WARNING = 1
359Const AppCreate_InProc = 0
360Const AppCreate_OutOfProc = 1
361Const AppCreate_PooledOutOfProc = 2
362
363Const APPSTATUS_NOTDEFINED = 2
364Const APPSTATUS_RUNNING = 1
365Const APPSTATUS_STOPPED = 0
366
367Spacer = " " ' Used to format the strings
368SpacerSize = Len(Spacer)
369
370' Note: The default execution mode may be under WScript.exe.
371' That would be very annoying since WScript has popups for Echo.
372' So, I want to detect that, and warn the user that it may cause
373' problems.
374DetectExeType
375
376' Get the Arguments object
377Set ArgObj = WScript.Arguments
378
379' Test to make sure there is at least one command line arg - the command
380If ArgObj.Count < 1 Then
381 DisplayHelpMessage
382 WScript.Quit (GENERAL_FAILURE)
383End If
384
385'*****************************************************
386Dim TargetServer 'The server to be examined/modified
387Dim I
388For I = 0 To ArgObj.Count - 1
389 If LCase(Left(ArgObj.Item(I), 3)) = "-s:" Then
390 TargetServer = Right(ArgObj.Item(I), Len(ArgObj.Item(I)) - 3)
391 Else
392 Args(ArgCount) = ArgObj.Item(I)
393 ArgCount = ArgCount + 1
394 End If
395Next
396If Len(TargetServer) = 0 Then
397 TargetServer = "localhost"
398End If
399'*****************************************************
400
401' Call the function associated with the given command
402Select Case UCase(Args(0))
403 Case "SET"
404 Result = SetCommand()
405 Case "CREATE"
406 Result = CreateCommand("")
407 Case "DELETE"
408 Result = DeleteCommand()
409 Case "GET"
410 Result = GetCommand()
411 Case "ENUM"
412 Result = EnumCommand(False, "")
413 Case "ENUM_ALL"
414 Result = EnumCommand(True, "")
415 Case "ENUMALL"
416 Result = EnumCommand(True, "")
417 Case "COPY"
418 Result = CopyMoveCommand(True) ' The TRUE means COPY, not MOVE
419 Case "MOVE"
420 Result = CopyMoveCommand(False) ' The FALSE means MOVE, not COPY
421 Case "CREATE_VDIR"
422 Result = CreateCommand("IIsWebVirtualDir")
423 Case "CREATE_VSERV"
424 Result = CreateCommand("IIsWebServer")
425 Case "START_SERVER"
426 Result = StartServerCommand()
427 Case "STOP_SERVER"
428 Result = StopServerCommand()
429 Case "PAUSE_SERVER"
430 Result = PauseServerCommand()
431 Case "CONTINUE_SERVER"
432 Result = ContinueServerCommand()
433' New Stuff being added
434 Case "FIND"
435 Result = FindData()
436 Case "COPY"
437 WScript.Echo GetLocalizedResource("StrRes0")
438 Case "APPCREATEINPROC"
439 Result = AppCreateCommand(AppCreate_InProc)
440 Case "APPCREATEOUTPROC"
441 Result = AppCreateCommand(AppCreate_OutOfProc)
442 Case "APPCREATEPOOLPROC"
443 Result = AppCreateCommand(AppCreate_PooledOutOfProc)
444 Case "APPDELETE"
445 Result = AppDeleteCommand()
446 Case "APPUNLOAD"
447 Result = AppUnloadCommand()
448 Case "APPDISABLE"
449 Result = AppDisableCommand()
450 Case "APPENABLE"
451 Result = AppEnableCommand()
452 Case "APPGETSTATUS"
453 Result = AppGetStatusCommand()
454 Case "HELP"
455 DisplayHelpMessageEx
456
457' End New Stuff
458
459 Case Else
460 WScript.Echo GetLocalizedResource("StrRes1") & Args(0)
461 WScript.Echo GetLocalizedResource("StrRes2")
462 Result = GENERAL_FAILURE
463
464End Select
465
466WScript.Quit (Result)
467
468''''''''''
469' End Main
470''''''''''
471
472
473''''''''''''''''''''''''''''
474'
475' Display Help Message
476'
477''''''''''''''''''''''''''''
478Sub DisplayHelpMessage()
479 WScript.Echo
480 WScript.Echo GetLocalizedResource("StrRes3")
481 WScript.Echo GetLocalizedResource("StrRes4")
482 WScript.Echo
483 WScript.Echo GetLocalizedResource("StrRes6")
484 WScript.Echo GetLocalizedResource("StrRes7")
485 WScript.Echo
486 WScript.Echo GetLocalizedResource("StrRes9")
487 WScript.Echo " GET, SET, ENUM, DELETE, CREATE, COPY, "
488 WScript.Echo " APPCREATEINPROC, APPCREATEOUTPROC, APPCREATEPOOLPROC, APPDELETE, APPUNLOAD, APPGETSTATUS "
489 WScript.Echo
490 WScript.Echo GetLocalizedResource("StrRes12")
491 WScript.Echo " adsutil.vbs GET W3SVC/1/ServerBindings"
492 WScript.Echo " adsutil.vbs SET W3SVC/1/ServerBindings "":81:"""
493 WScript.Echo " adsutil.vbs CREATE W3SVC/1/Root/MyVdir ""IIsWebVirtualDir"""
494 WScript.Echo " adsutil.vbs START_SERVER W3SVC/1"
495 WScript.Echo " adsutil.vbs ENUM /P W3SVC"
496 WScript.Echo
497 WScript.Echo GetLocalizedResource("StrRes18")
498 WScript.Echo " adsutil.vbs HELP"
499End Sub
500
501
502
503''''''''''''''''''''''''''''
504'
505' Display Help Message
506'
507''''''''''''''''''''''''''''
508Sub DisplayHelpMessageEx()
509
510 WScript.Echo
511 WScript.Echo GetLocalizedResource("StrRes3")
512 WScript.Echo GetLocalizedResource("StrRes21")
513 WScript.Echo
514 WScript.Echo GetLocalizedResource("StrRes23")
515 WScript.Echo GetLocalizedResource("StrRes24")
516 WScript.Echo
517 WScript.Echo GetLocalizedResource("StrRes26")
518 WScript.Echo GetLocalizedResource("StrRes27")
519 WScript.Echo GetLocalizedResource("StrRes28")
520 WScript.Echo GetLocalizedResource("StrRes29")
521 WScript.Echo GetLocalizedResource("StrRes30")
522 WScript.Echo GetLocalizedResource("StrRes31")
523 WScript.Echo
524 WScript.Echo GetLocalizedResource("StrRes32")
525 WScript.Echo GetLocalizedResource("StrRes33")
526 WScript.Echo GetLocalizedResource("StrRes34")
527 WScript.Echo GetLocalizedResource("StrRes35")
528 WScript.Echo GetLocalizedResource("StrRes36")
529 WScript.Echo GetLocalizedResource("StrRes37")
530 WScript.Echo GetLocalizedResource("StrRes38")
531 WScript.Echo GetLocalizedResource("StrRes39")
532 WScript.Echo
533 WScript.Echo GetLocalizedResource("StrRes40")
534 WScript.Echo GetLocalizedResource("StrRes41")
535 WScript.Echo GetLocalizedResource("StrRes42")
536 WScript.Echo
537 WScript.Echo GetLocalizedResource("StrRes43")
538 WScript.Echo GetLocalizedResource("StrRes44")
539 WScript.Echo GetLocalizedResource("StrRes45")
540 WScript.Echo GetLocalizedResource("StrRes46")
541 WScript.Echo GetLocalizedResource("StrRes47")
542 WScript.Echo GetLocalizedResource("StrRes48")
543 WScript.Echo GetLocalizedResource("StrRes49")
544 WScript.Echo GetLocalizedResource("StrRes50")
545 WScript.Echo
546 WScript.Echo
547 WScript.Echo GetLocalizedResource("StrRes12")
548 WScript.Echo GetLocalizedResource("StrRes52")
549 WScript.Echo GetLocalizedResource("StrRes53")
550 WScript.Echo GetLocalizedResource("StrRes54")
551 WScript.Echo GetLocalizedResource("StrRes55")
552 WScript.Echo GetLocalizedResource("StrRes56")
553
554 WScript.Echo GetLocalizedResource("StrRes57")
555 WScript.Echo GetLocalizedResource("StrRes58")
556 WScript.Echo GetLocalizedResource("StrRes59")
557 WScript.Echo GetLocalizedResource("StrRes60")
558 WScript.Echo GetLocalizedResource("StrRes61")
559 WScript.Echo GetLocalizedResource("StrRes62")
560 WScript.Echo GetLocalizedResource("StrRes63")
561 WScript.Echo GetLocalizedResource("StrRes64")
562 WScript.Echo
563 WScript.Echo
564 WScript.Echo GetLocalizedResource("StrRes65")
565 WScript.Echo GetLocalizedResource("StrRes66")
566 WScript.Echo GetLocalizedResource("StrRes67")
567 WScript.Echo GetLocalizedResource("StrRes68")
568 WScript.Echo GetLocalizedResource("StrRes69")
569 WScript.Echo GetLocalizedResource("StrRes70")
570
571' adsutil.vbs ENUM_ALL path - recursively enumerate all parameters
572' adsutil.vbs COPY pathsrc pathdst - copy all from pathsrc to pathdst (will create pathdst)
573' adsutil.vbs SCRIPT scriptname - runs the script
574
575' -path has format: {computer}/{service}/{instance}/{URL}/{Parameter}
576
577End Sub
578
579
580
581
582
583
584'''''''''''''''''''''''''''
585'
586' DetectExeType
587'
588' This can detect the type of exe the
589' script is running under and warns the
590' user of the popups.
591'
592'''''''''''''''''''''''''''
593Sub DetectExeType()
594 Dim ScriptHost
595 Dim ShellObject
596
597 Dim CurrentPathExt
598 Dim EnvObject
599
600 Dim RegCScript
601 Dim RegPopupType ' This is used to set the pop-up box flags.
602 ' I couldn't find the pre-defined names
603 RegPopupType = 32 + 4
604
605 On Error Resume Next
606
607 ScriptHost = WScript.FullName
608 ScriptHost = Right(ScriptHost, Len(ScriptHost) - InStrRev(ScriptHost, "\"))
609
610 If (UCase(ScriptHost) = "WSCRIPT.EXE") Then
611 WScript.Echo GetLocalizedResource("StrRes71")
612
613 ' Create a pop-up box and ask if they want to register cscript as the default host.
614 Set ShellObject = WScript.CreateObject("WScript.Shell")
615 ' -1 is the time to wait. 0 means wait forever.
616 RegCScript = ShellObject.PopUp(GetLocalizedResource("StrRes265"), 0, GetLocalizedResource("StrRes266"), RegPopupType)
617
618 If (Err.Number <> 0) Then
619 ReportError ()
620 WScript.Echo GetLocalizedResource("StrRes72") & WScript.ScriptName & """"
621 WScript.Quit (GENERAL_FAILURE)
622 WScript.Quit (Err.Number)
623 End If
624
625 ' Check to see if the user pressed yes or no. Yes is 6, no is 7
626 If (RegCScript = 6) Then
627 ShellObject.RegWrite "HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command\", "%WINDIR%\System32\CScript.exe //nologo ""%1"" %*", "REG_EXPAND_SZ"
628 ShellObject.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\VBSFile\Shell\Open\Command\", "%WINDIR%\System32\CScript.exe //nologo ""%1"" %*", "REG_EXPAND_SZ"
629 ' Check if PathExt already existed
630 CurrentPathExt = ShellObject.RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PATHEXT")
631 If Err.Number = &H80070002 Then
632 Err.Clear
633 Set EnvObject = ShellObject.Environment("PROCESS")
634 CurrentPathExt = EnvObject.Item("PATHEXT")
635 End If
636
637 ShellObject.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PATHEXT", CurrentPathExt & ";.VBS", "REG_SZ"
638
639 If (Err.Number <> 0) Then
640 ReportError ()
641 WScript.Echo GetLocalizedResource("StrRes73")
642 WScript.Quit (Err.Number)
643 Else
644 WScript.Echo GetLocalizedResource("StrRes74")
645 End If
646 Else
647 WScript.Echo GetLocalizedResource("StrRes75")
648 End If
649
650 Dim ProcString
651 Dim ArgIndex
652 Dim ArgObj
653 Dim Result
654
655 ProcString = "Cscript //nologo " & WScript.ScriptFullName
656
657 Set ArgObj = WScript.Arguments
658
659 For ArgIndex = 0 To ArgCount - 1
660 ProcString = ProcString & " " & Args(ArgIndex)
661 Next
662
663 'Now, run the original executable under CScript.exe
664 Result = ShellObject.Run(ProcString, 0, True)
665
666 WScript.Quit (Result)
667 End If
668
669End Sub
670
671
672''''''''''''''''''''''''''
673'
674' SetCommand Function
675'
676' Sets the value of a property in the metabase.
677'
678''''''''''''''''''''''''''
679Function SetCommand()
680 Dim IIsObject
681 Dim IIsObjectPath
682 Dim IIsSchemaObject
683 Dim IIsSchemaPath
684 Dim ObjectPath
685 Dim ObjectParameter
686 Dim MachineName
687 Dim ValueIndex
688 Dim ValueList
689 Dim ValueDisplay
690 Dim ValueDisplayLen
691 Dim ValueDataType
692
693 Dim ValueData
694
695 Dim ObjectDataType
696
697 On Error Resume Next
698
699 SetCommand = 0 ' Assume Success
700
701 If ArgCount < 3 Then
702 WScript.Echo GetLocalizedResource("StrRes76")
703 WScript.Quit (GENERAL_FAILURE)
704 End If
705
706 ObjectPath = Args(1)
707 SanitizePath ObjectPath
708 MachineName = SeparateMachineName(ObjectPath)
709 ObjectParameter = SplitParam(ObjectPath)
710
711 ' Some Property Types have special needs - like ServerCommand.
712 ' Check to see if this is a special command. If it is, then process it special.
713 If (IsSpecialSetProperty(ObjectParameter)) Then
714 SetCommand = DoSpecialSetProp(ObjectPath, ObjectParameter, MachineName)
715 Exit Function
716 End If
717
718 If ObjectPath = "" Then
719 IIsObjectPath = "IIS://" & MachineName
720 Else
721 IIsObjectPath = "IIS://" & MachineName & "/" & ObjectPath
722 End If
723 Set IIsObject = GetObject(IIsObjectPath)
724
725 If (Err.Number <> 0) Then
726 ReportError ()
727 WScript.Echo GetLocalizedResource("StrRes77") & ObjectPath
728 WScript.Quit (Err.Number)
729 End If
730
731 ' Get the Schema of the property and determine if it's multivalued
732 IIsSchemaPath = "IIS://" & MachineName & "/Schema/" & ObjectParameter
733 Set IIsSchemaObject = GetObject(IIsSchemaPath)
734
735 If (Err.Number <> 0) Then
736 ReportError ()
737 WScript.Echo GetLocalizedResource("StrRes78") & IIsSchemaPath
738 WScript.Quit (Err.Number)
739 End If
740
741 ObjectDataType = UCase(IIsSchemaObject.Syntax)
742 SanitizePath ObjectDataType
743
744 Select Case (ObjectDataType)
745
746 Case "STRING"
747 ValueList = Args(2)
748 IIsObject.Put ObjectParameter, (ValueList)
749
750 Case "EXPANDSZ"
751 ValueList = Args(2)
752 IIsObject.Put ObjectParameter, (ValueList)
753
754 Case "INTEGER"
755 ' Added to convert hex values to integers
756 ValueData = Args(2)
757
758 If (UCase(Left(ValueData, 2))) = "0X" Then
759 ValueData = "&h" & Right(ValueData, Len(ValueData) - 2)
760 End If
761
762 ValueList = StringTo32BitUnsignedInteger(ValueData)
763 IIsObject.Put ObjectParameter, (ValueList)
764
765 Case "BOOLEAN"
766 ValueList = CBool(Args(2))
767 IIsObject.Put ObjectParameter, (ValueList)
768
769 Case "LIST"
770 ReDim ValueList(ArgCount - 3)
771 For ValueIndex = 2 To ArgCount - 1
772 ValueList(ValueIndex - 2) = Args(ValueIndex)
773 Next
774
775 IIsObject.Put ObjectParameter, (ValueList)
776
777 Case Else
778 WScript.Echo GetLocalizedResource("StrRes79") & IIsSchemaObject.Syntax
779
780 End Select
781
782 IIsObject.Setinfo
783
784 If (Err.Number <> 0) Then
785 ReportError ()
786 WScript.Echo GetLocalizedResource("StrRes80") & ObjectParameter
787 WScript.Quit (Err.Number)
788 End If
789
790 ' The function call succeeded, so display the output
791 ' Set up the initial part of the display - the property name and data type
792 ValueDisplay = ObjectParameter
793 ValueDisplayLen = Len(ValueDisplay)
794
795 If (ValueDisplayLen < SpacerSize) Then
796 ValueDisplay = ValueDisplay & (Right(Spacer, SpacerSize - ValueDisplayLen)) & ": " & "(" & ObjectDataType & ") "
797Else
798 ValueDisplay = ValueDisplay & ": " & "(" & TypeName(ValueList) & ") "
799 End If
800
801 ' Create the rest of the display - The actual data
802 If (IIsSchemaObject.MultiValued) Then
803 For ValueIndex = 0 To UBound(ValueList)
804 ValueDisplay = ValueDisplay & """" & ValueList(ValueIndex) & """ "
805 Next
806 Else
807 If (UCase(IIsSchemaObject.Syntax) = "STRING") Then
808 If (IsSecureProperty(ObjectParameter,MachineName) = True) Then
809 ValueDisplay = ValueDisplay & """" & "**********" & """"
810 Else
811 ValueDisplay = ValueDisplay & """" & ValueList & """"
812 End If
813 ElseIf (UCase(IIsSchemaObject.Syntax) = "INTEGER") Then
814 ValueDisplay = ValueDisplay & UnsignedIntegerToString(ValueList)
815 Else
816 ValueDisplay = ValueDisplay & ValueList
817 End If
818 End If
819
820 ' Display the output
821 WScript.Echo ValueDisplay
822
823 SetCommand = 0 ' Success
824
825End Function
826
827
828''''''''''''''''''''''''''
829'
830' GetCommand Function
831'
832' Gets the value of a property in the metabase.
833'
834''''''''''''''''''''''''''
835Function GetCommand()
836
837 Dim IIsObject
838 Dim IIsObjectPath
839 Dim IIsSchemaObject
840 Dim IIsSchemaPath
841 Dim ObjectPath
842 Dim ObjectParameter
843 Dim MachineName
844 Dim ValueIndex
845 Dim ValueList
846 Dim ValueListArray
847 Dim ValueDisplay
848 Dim ValueDisplayLen
849 Dim NewObjectparameter
850
851 Dim DataPathList
852 Dim DataPath
853
854 On Error Resume Next
855
856 GetCommand = 0 ' Assume Success
857
858 If ArgCount <> 2 Then
859 WScript.Echo GetLocalizedResource("StrRes81")
860 WScript.Quit (GENERAL_FAILURE)
861 End If
862
863 ObjectPath = Args(1)
864
865 SanitizePath ObjectPath
866 MachineName = SeparateMachineName(ObjectPath)
867 ObjectParameter = SplitParam(ObjectPath)
868
869 NewObjectparameter = MapSpecGetParamName(ObjectParameter)
870 ObjectParameter = NewObjectparameter
871
872 If (IsSpecialGetProperty(ObjectParameter)) Then
873 GetCommand = DoSpecialGetProp(ObjectPath, ObjectParameter, MachineName)
874 Exit Function
875 End If
876
877 If ObjectPath = "" Then
878 IIsObjectPath = "IIS://" & MachineName
879 Else
880 IIsObjectPath = "IIS://" & MachineName & "/" & ObjectPath
881 End If
882
883 Set IIsObject = GetObject(IIsObjectPath)
884
885 If (Err.Number <> 0) Then
886 ReportError ()
887 WScript.Echo GetLocalizedResource("StrRes82") & ObjectPath
888 WScript.Quit (Err.Number)
889 End If
890
891 ' Get the Schema of the property and determine if it's multivalued
892 IIsSchemaPath = "IIS://" & MachineName & "/Schema/" & ObjectParameter
893 Set IIsSchemaObject = GetObject(IIsSchemaPath)
894
895 If (Err.Number <> 0) Then
896 ReportError ()
897 WScript.Echo GetLocalizedResource("StrRes83") & IIsSchemaPath
898 WScript.Quit (Err.Number)
899 End If
900
901 ' First, attempt to retrieve the property - this will tell us
902 ' if you are even allowed to set the property at this node.
903 ' Retrieve the property
904 ValueList = IIsObject.Get(ObjectParameter)
905 If (Err.Number <> 0) Then
906 ReportError ()
907 WScript.Echo GetLocalizedResource("StrRes84") & ObjectParameter
908 WScript.Echo GetLocalizedResource("StrRes85")
909 WScript.Quit (Err.Number)
910 End If
911
912 ' Test to see if the property is ACTUALLY set at this node
913 DataPathList = IIsObject.GetDataPaths(ObjectParameter, IIS_DATA_INHERIT)
914 If Err.Number <> 0 Then DataPathList = IIsObject.GetDataPaths(ObjectParameter, IIS_DATA_NO_INHERIT)
915 Err.Clear
916
917 ' If the data is not set anywhere, then stop the madness
918 If (UBound(DataPathList) < 0) Then
919 WScript.Echo GetLocalizedResource("StrRes86") & ObjectParameter & GetLocalizedResource("StrRes87")
920 WScript.Quit (&H80005006) ' end with property not set error
921 End If
922
923 DataPath = DataPathList(0)
924 SanitizePath DataPath
925
926 ' Test to see if the item is actually set HERE
927 If UCase(DataPath) <> UCase(IIsObjectPath) Then
928 WScript.Echo GetLocalizedResource("StrRes86") & ObjectParameter & GetLocalizedResource("StrRes87")
929 WScript.Quit (&H80005006) ' end with property not set error
930 End If
931
932 ' Set up the initial part of the display - the property name and data type
933 ValueDisplay = ObjectParameter
934 ValueDisplayLen = Len(ValueDisplay)
935
936 If (ValueDisplayLen < SpacerSize) Then
937 ValueDisplay = ValueDisplay & (Right(Spacer, SpacerSize - ValueDisplayLen)) & ": " & "(" & UCase(IIsSchemaObject.Syntax) & ") "
938 Else
939 ValueDisplay = ValueDisplay & ": " & "(" & TypeName(ValueList) & ") "
940 End If
941
942 ' Create the rest of the display - The actual data
943 If (IIsSchemaObject.MultiValued) Then
944 WScript.Echo ValueDisplay & " (" & UBound (ValueList) + 1 & GetLocalizedResource("StrRes90")
945
946 For ValueIndex = 0 To UBound(ValueList)
947 WScript.Echo " """ & ValueList(ValueIndex) & """"
948 Next
949 Else
950 If (UCase(IIsSchemaObject.Syntax) = "STRING") Then
951 If (IsSecureProperty(ObjectParameter,MachineName) = True) Then
952 ValueDisplay = ValueDisplay & """" & "**********" & """"
953 Else
954 ValueDisplay = ValueDisplay & """" & ValueList & """"
955 End If
956
957 ElseIf (UCase(IIsSchemaObject.Syntax) = "BINARY") Then
958 ValueListArray = IIsObject.Get(ObjectParameter)
959
960 ValueList = "0x"
961
962 For ValueIndex = 0 To UBound(ValueListArray)
963 ValueList = ValueList & ValueListArray(ValueIndex) & " "
964 Next
965
966 ValueDisplay = ValueDisplay & ValueList
967
968 ElseIf (UCase(IIsSchemaObject.Syntax) = "INTEGER") Then
969 ValueDisplay = ValueDisplay & UnsignedIntegerToString(ValueList)
970 Else
971 'WScript.Echo ValueList
972 ValueDisplay = ValueDisplay & ValueList
973 End If
974
975 ' Display the output
976 WScript.Echo ValueDisplay
977 End If
978
979 If (Err.Number <> 0) Then
980 ReportError ()
981 WScript.Echo GetLocalizedResource("StrRes91") & ObjectParameter
982 WScript.Quit (Err.Number)
983 End If
984
985 GetCommand = 0 ' Success
986
987End Function
988
989
990''''''''''''''''''''''''''
991'
992' EnumCommand Function
993'
994' Enumerates all properties at a path in the metabase.
995'
996''''''''''''''''''''''''''
997Function EnumCommand(Recurse, StartPath)
998
999 On Error Resume Next
1000
1001 Dim IIsObject
1002 Dim IIsObjectPath
1003 Dim IIsSchemaObject
1004 Dim IIsSchemaPath
1005 Dim ObjectPath
1006 Dim MachineName
1007 Dim ValueIndex
1008 Dim ValueList
1009 Dim ValueListArray
1010 Dim ValueString
1011 Dim PropertyName
1012 Dim PropertyAttribObj
1013 Dim PropertyListSet
1014 Dim PropertyList
1015 Dim PropertyObjPath
1016 Dim PropertyObject
1017 Dim ChildObject
1018 Dim ChildObjectName
1019 Dim EnumPathsOnly
1020 Dim EnumAllData
1021 Dim ErrMask
1022 Dim IsInherit
1023
1024 Dim PropertyDataType
1025
1026 Dim SpecialResult
1027
1028 Dim PathOnlyOption
1029 PathOnlyOption = "/P"
1030
1031 EnumCommand = 0 ' Assume Success
1032 EnumPathsOnly = False ' Assume that the user wants all of the data items
1033 EnumAllData = False ' Assume that the user wants only the actual data items
1034
1035 If (ArgCount = 1) Then
1036 ObjectPath = ""
1037 EnumPathsOnly = False
1038 ArgCount = 2
1039 ElseIf (ArgCount = 2) Then
1040 If UCase(Args(1)) = PathOnlyOption Then
1041 ObjectPath = ""
1042 EnumPathsOnly = True
1043 Else
1044 ObjectPath = Args(1)
1045 EnumPathsOnly = False
1046 End If
1047 ElseIf (ArgCount = 3) Then
1048
1049 If UCase(Args(1)) = PathOnlyOption Then
1050 ObjectPath = Args(2)
1051 EnumPathsOnly = True
1052 ElseIf UCase(Args(2)) = PathOnlyOption Then
1053 ObjectPath = Args(1)
1054 EnumPathsOnly = True
1055 Else
1056 WScript.Echo GetLocalizedResource("StrRes92")
1057 WScript.Quit (GENERAL_FAILURE)
1058 End If
1059 Else
1060 WScript.Echo GetLocalizedResource("StrRes93")
1061 WScript.Quit (GENERAL_FAILURE)
1062 End If
1063
1064 If StartPath <> "" Then ObjectPath = StartPath
1065
1066 SanitizePath ObjectPath
1067 MachineName = SeparateMachineName(ObjectPath)
1068
1069 IIsObjectPath = "IIS://" & MachineName
1070 If (ObjectPath <> "") Then
1071 IIsObjectPath = IIsObjectPath & "/" & ObjectPath
1072 End If
1073
1074 Set IIsObject = GetObject(IIsObjectPath)
1075
1076 If (Err.Number <> 0) Then
1077 WScript.Echo
1078 ReportError ()
1079 WScript.Echo GetLocalizedResource("StrRes94") & ObjectPath
1080 WScript.Quit (Err.Number)
1081 End If
1082
1083 ' Get the Schema of the object and enumerate through all of the properties
1084 IIsSchemaPath = IIsObject.Schema
1085 Set IIsSchemaObject = GetObject(IIsSchemaPath)
1086
1087 If (Err.Number <> 0) Then
1088 WScript.Echo
1089 ReportError ()
1090 WScript.Echo GetLocalizedResource("StrRes95") & IIsSchemaPath
1091 WScript.Quit (Err.Number)
1092 End If
1093
1094 ReDim PropertyListSet(1)
1095 PropertyListSet(0) = IIsSchemaObject.MandatoryProperties
1096 PropertyListSet(1) = IIsSchemaObject.OptionalProperties
1097
1098 If (Err.Number <> 0) Then
1099 WScript.Echo
1100 ReportError ()
1101 WScript.Echo GetLocalizedResource("StrRes96") & IIsSchemaPath
1102 WScript.Quit (Err.Number)
1103 End If
1104
1105 ' This now checks for an empty OptionalProperties list
1106 If TypeName (PropertyListSet(1)) <> "Variant()" Then
1107 WScript.Echo
1108 WScript.Echo GetLocalizedResource("StrRes97")
1109 WScript.Echo
1110 ElseIf (UBound (PropertyListSet(1)) = -1) Then
1111 WScript.Echo
1112 WScript.Echo GetLocalizedResource("StrRes98")
1113 WScript.Echo
1114 End If
1115
1116 If (Not EnumPathsOnly) Then
1117 For Each PropertyList In PropertyListSet
1118
1119 For Each PropertyName In PropertyList
1120 If Err <> 0 Then
1121 Exit For
1122 End If
1123
1124 ' Test to see if the property is even set at this node
1125 IsInherit = False
1126 Err.Clear
1127 Set PropertyAttribObj = IIsObject.GetPropertyAttribObj(PropertyName)
1128 If (Err.Number = 0) Then
1129
1130 If (PropertyAttribObj.IsInherit) Then
1131 IsInherit = True
1132 End If
1133 Err.Clear
1134
1135 If (IsInherit = False) Or (EnumAllData) Then
1136 ' If the above statement is true, then the data exists here or the user wants it anyway.
1137
1138 PropertyObjPath = "IIS://" & MachineName & "/Schema/" & PropertyName
1139 Set PropertyObject = GetObject(PropertyObjPath)
1140
1141 If (Err.Number <> 0) Then
1142 WScript.Echo
1143 ReportError ()
1144 WScript.Echo GetLocalizedResource("StrRes99") & PropertyObjPath
1145 WScript.Echo GetLocalizedResource("StrRes100") & PropertyName
1146 WScript.Echo "PropertyObjPath: " & PropertyObjPath
1147 WScript.Echo
1148 EnumCommand = Err.Number
1149 Err.Clear
1150 End If
1151
1152 ValueList = ""
1153 ValueListArray = ""
1154
1155 PropertyDataType = UCase(PropertyObject.Syntax)
1156 Select Case PropertyDataType
1157 Case "STRING"
1158 ValueList = IIsObject.Get(PropertyName)
1159 If (IsSecureProperty(PropertyName,MachineName) = True) Then
1160 WScript.Echo PropertyName & Left(Spacer, Len(Spacer) - Len(PropertyName)) & ": " & "(" & PropertyDataType & ") " & """" & "**********" & """"
1161 Else
1162 If (Len(PropertyName) < SpacerSize) Then
1163 WScript.Echo PropertyName & Left(Spacer, Len(Spacer) - Len(PropertyName)) & ": " & "(" & PropertyDataType & ") """ & ValueList & """"
1164 Else
1165 WScript.Echo PropertyName & " : " & "(" & PropertyDataType & ")" & """" & ValueList & """"
1166 End If
1167 End If
1168
1169 Case "EXPANDSZ"
1170 ValueList = IIsObject.Get(PropertyName)
1171 If (Len(PropertyName) < SpacerSize) Then
1172 WScript.Echo PropertyName & Left(Spacer, Len(Spacer) - Len(PropertyName)) & ": " & "(" & PropertyDataType & ") """ & ValueList & """"
1173 Else
1174 WScript.Echo PropertyName & " : " & "(" & PropertyDataType & ") """ & ValueList & """"
1175 End If
1176
1177 Case "BINARY"
1178 ValueListArray = IIsObject.Get(PropertyName)
1179
1180 ValueList = "0x"
1181
1182 For ValueIndex = 0 To UBound(ValueListArray)
1183 ValueList = ValueList & ValueListArray(ValueIndex) & " "
1184 Next
1185
1186 If (Len(PropertyName) < SpacerSize) Then
1187 WScript.Echo PropertyName & Left(Spacer, Len(Spacer) - Len(PropertyName)) & ": " & "(" & PropertyDataType & ") " & ValueList
1188 Else
1189 WScript.Echo PropertyName & " : " & "(" & PropertyDataType & ") " & ValueList
1190 End If
1191
1192 Case "INTEGER"
1193 ValueList = IIsObject.Get(PropertyName)
1194 If (Len(PropertyName) < SpacerSize) Then
1195 WScript.Echo PropertyName & Left(Spacer, Len(Spacer) - Len(PropertyName)) & ": " & "(" & PropertyDataType & ") " & UnsignedIntegerToString(ValueList)
1196 Else
1197 WScript.Echo PropertyName & " : " & "(" & PropertyDataType & ") " & UnsignedIntegerToString(ValueList)
1198 End If
1199
1200 Case "BOOLEAN"
1201 ValueList = IIsObject.Get(PropertyName)
1202 If (Len(PropertyName) < SpacerSize) Then
1203 WScript.Echo PropertyName & Left(Spacer, Len(Spacer) - Len(PropertyName)) & ": " & "(" & PropertyDataType & ") " & ValueList
1204 Else
1205 WScript.Echo PropertyName & " : " & "(" & PropertyDataType & ") " & ValueList
1206 End If
1207
1208 Case "LIST"
1209 ValueList = IIsObject.Get(PropertyName)
1210 If (Len(PropertyName) < SpacerSize) Then
1211 WScript.Echo PropertyName & _
1212 Left(Spacer, Len(Spacer) - Len(PropertyName)) & _
1213 ": " & "(" & PropertyDataType & ") (" & _
1214 (UBound (ValueList) + 1) & GetLocalizedResource("StrRes102")
1215 Else
1216 WScript.Echo PropertyName & " : " & "(" & PropertyDataType & ") (" & (UBound (ValueList) + 1) & GetLocalizedResource("StrRes102")
1217 End If
1218 ValueString = ""
1219
1220 For ValueIndex = 0 To UBound(ValueList)
1221 WScript.Echo " """ & ValueList(ValueIndex) & """"
1222 Next
1223 WScript.Echo
1224
1225 Case Else
1226
1227 If (IsSpecialGetProperty(PropertyName)) Then
1228
1229 SpecialResult = DoSpecialGetProp(ObjectPath, PropertyName, MachineName)
1230 Err.Clear
1231
1232 Else
1233 WScript.Echo
1234 WScript.Echo GetLocalizedResource("StrRes103") & """" & PropertyObject.Syntax & """" & GetLocalizedResource("StrRes104") & PropertyName
1235 ReportError
1236 WScript.Echo
1237 End If
1238
1239 End Select
1240
1241 End If ' End if data exists at the current node
1242
1243 Else ' Error during GetPropertyAttribObj
1244 Err.Clear 'ignore and go to the next property
1245 End If
1246
1247 If (Err.Number <> 0) Then
1248 WScript.Echo
1249 ReportError ()
1250 WScript.Echo GetLocalizedResource("StrRes105") & PropertyObjPath
1251 WScript.Echo GetLocalizedResource("StrRes100") & PropertyName
1252 WScript.Echo "PropertyObjPath: " & PropertyObjPath
1253 ' If there is an ADS error, just ignore it and move on
1254 ' otherwise, quit
1255 If ((Err.Number) >= &H80005000) And ((Err.Number) < &H80006000) Then
1256 Err.Clear
1257 WScript.Echo GetLocalizedResource("StrRes108")
1258 Else
1259 WScript.Quit (Err.Number)
1260 End If
1261 WScript.Echo
1262 End If
1263 Next
1264 Next
1265
1266 If (Err.Number <> 0) Then
1267 WScript.Echo GetLocalizedResource("StrRes109")
1268 ReportError ()
1269 WScript.Echo
1270 EnumCommand = Err.Number
1271 Err.Clear
1272 End If
1273
1274 End If ' End if (Not EnumPathsOnly)
1275
1276 ' Now, enumerate the data paths
1277 For Each ChildObject In IIsObject
1278 If (Err.Number <> 0) Then Exit For
1279
1280 ChildObjectName = Right(ChildObject.AdsPath, Len(ChildObject.AdsPath) - 6)
1281 ChildObjectName = Right(ChildObjectName, Len(ChildObjectName) - InStr(ChildObjectName, "/") + 1)
1282 WScript.Echo "[" & ChildObjectName & "]"
1283 If (Recurse = True) And (ChildObjectName <> Args(1)) Then
1284 EnumCommand = EnumCommand(True, ChildObjectName)
1285 End If
1286 Next
1287
1288 If (Err.Number <> 0) Then
1289 WScript.Echo GetLocalizedResource("StrRes111")
1290 ReportError ()
1291 WScript.Echo
1292 EnumCommand = Err.Number
1293 Err.Clear
1294 End If
1295
1296 WScript.Echo ""
1297
1298End Function
1299
1300
1301''''''''''''''''''''''''''
1302'
1303' Create Function
1304'
1305' Creates a path in the metabase. An additional parameter that is
1306' not found in mdutil is optional. That is the Object Type (KeyType)
1307' If this is not specified, the object type will be assumed to be
1308' IIsObject (which, of course, is useless).
1309'
1310''''''''''''''''''''''''''
1311Function CreateCommand(ObjectTypeParam)
1312
1313 On Error Resume Next
1314
1315 Dim IIsObject
1316 Dim IIsObjectPath
1317 Dim IIsObjectRelativePath
1318 Dim NewObject
1319 Dim ObjectTypeName
1320 Dim ParentObjPath
1321 Dim ParentObjSize
1322 Dim FullAdsParentPath
1323 Dim MachineName
1324 Dim OpenErr
1325
1326 ' Set the return code - assume success
1327 CreateCommand = 0
1328
1329 ' Setup the parameters
1330 If (ArgCount = 2) Then
1331 If (ObjectTypeParam = "") Then
1332 ObjectTypeName = "IIsObject"
1333 Else
1334 ObjectTypeName = ObjectTypeParam
1335 End If
1336 ElseIf (ArgCount = 3) Then
1337 ObjectTypeName = Args(2)
1338 Else
1339 WScript.Echo GetLocalizedResource("StrRes112")
1340 DisplayHelpMessage
1341 WScript.Quit (GENERAL_FAILURE)
1342 End If
1343
1344 IIsObjectPath = Args(1)
1345 SanitizePath IIsObjectPath
1346 MachineName = SeparateMachineName(IIsObjectPath)
1347
1348 ' Parse the path and determine if the parent exists.
1349 ParentObjSize = InStrRev(IIsObjectPath, "/")
1350 ParentObjPath = ""
1351
1352 If ParentObjSize <> 0 Then
1353 ParentObjPath = Left(IIsObjectPath, ParentObjSize - 1)
1354 IIsObjectRelativePath = Right(IIsObjectPath, Len(IIsObjectPath) - ParentObjSize)
1355 Else
1356 IIsObjectRelativePath = IIsObjectPath
1357 End If
1358
1359 If ParentObjPath <> "" Then
1360 FullAdsParentPath = "IIS://" & MachineName & "/" & ParentObjPath
1361 Else
1362 FullAdsParentPath = "IIS://" & MachineName
1363 End If
1364'debug
1365'WScript.Echo "Last Error: " & Err.Number
1366'WScript.Echo "MachineName: " & MachineName
1367'WScript.Echo "ParentObjPath: " & ParentObjPath
1368'WScript.Echo "FullAdsParentPath: " & FullAdsParentPath
1369'WScript.Echo "IIsObjectPath: " & IIsObjectPath
1370'WScript.Echo "IIsObjectRelativePath: " & IIsObjectRelativePath
1371'WScript.Echo "ObjectTypeName: " & ObjectTypeName
1372
1373 ' First, attempt to open the parent path and add the new path.
1374 Set IIsObject = GetObject(FullAdsParentPath)
1375 If Err.Number <> 0 Then
1376 OpenErr = Err.Number
1377 OpenErrDesc = Err.Description
1378 Err.Clear
1379 ' Attempt to get the Computer Object (IIS://LocalHost)
1380 Set IIsObject = GetObject("IIS://" & MachineName)
1381 If Err.Number <> 0 Then
1382 WScript.Echo
1383 ReportError ()
1384 WScript.Echo GetLocalizedResource("StrRes120") & IIsObjectPath
1385 WScript.Quit (Err.Number)
1386 End If
1387 End If
1388
1389 'Now, attempt to add the new object.
1390 If (OpenErr <> 0) Then
1391 Set NewObject = IIsObject.Create(ObjectTypeName, IIsObjectPath)
1392 Else
1393 Set NewObject = IIsObject.Create(ObjectTypeName, IIsObjectRelativePath)
1394 End If
1395
1396 If Err.Number <> 0 Then
1397 WScript.Echo
1398 ReportError ()
1399 WScript.Echo GetLocalizedResource("StrRes121") & IIsObjectPath
1400 WScript.Quit (Err.Number)
1401 End If
1402
1403 NewObject.Setinfo
1404
1405 If Err.Number <> 0 Then
1406 WScript.Echo
1407 ReportError ()
1408 WScript.Echo GetLocalizedResource("StrRes121") & IIsObjectPath
1409 WScript.Quit (Err.Number)
1410 End If
1411
1412
1413 ' Now, if the parent object was not created, generate a warning.
1414 If OpenErr <> 0 Then
1415 WScript.Echo
1416 WScript.Echo GetLocalizedResource("StrRes123") & ParentObjPath & GetLocalizedResource("StrRes124")
1417 WScript.Echo GetLocalizedResource("StrRes125")
1418 WScript.Echo GetLocalizedResource("StrRes126")
1419 WScript.Echo GetLocalizedResource("StrRes127")
1420 WScript.Echo
1421 CreateCommand = GENERAL_WARNING
1422 End If
1423
1424 If UCase(ObjectTypeName) = "IISOBJECT" Then
1425 WScript.Echo
1426 WScript.Echo GetLocalizedResource("StrRes128")
1427 WScript.Echo GetLocalizedResource("StrRes129")
1428 WScript.Echo GetLocalizedResource("StrRes130")
1429 WScript.Echo
1430 CreateCommand = GENERAL_WARNING
1431 End If
1432
1433 WScript.Echo GetLocalizedResource("StrRes131") & IIsObjectPath & """"
1434End Function
1435
1436''''''''''''''''''''''''''
1437'
1438' Delete Function
1439'
1440' Deletes a path in the metabase.
1441'
1442''''''''''''''''''''''''''
1443Function DeleteCommand()
1444
1445 On Error Resume Next
1446
1447 Dim IIsObject
1448 Dim IIsObjectPath
1449
1450 Dim ObjectPath
1451 Dim ObjectParam
1452 Dim MachineName
1453
1454 Dim DummyVariant
1455 Dim DeletePathOnly
1456 ReDim DummyVariant(0)
1457 DummyVariant(0) = "Bogus"
1458
1459 ' Set the return code - assume success
1460 DeleteCommand = 0
1461
1462 ' Setup the parameters
1463 If (ArgCount <> 2) Then
1464 WScript.Echo GetLocalizedResource("StrRes132")
1465 WScript.Quit (GENERAL_FAILURE)
1466 End If
1467
1468 ObjectPath = Args(1)
1469
1470 ' Check and see if the user is specifically asking to delete the path
1471 DeletePathOnly = False
1472 If Right(ObjectPath, 1) = "/" Then
1473 DeletePathOnly = True
1474 End If
1475
1476 ' Sanitize the path and split parameter and path
1477 SanitizePath ObjectPath
1478 MachineName = SeparateMachineName(ObjectPath)
1479 ObjectParam = SplitParam(ObjectPath)
1480
1481 ' Open the parent object
1482 IIsObjectPath = "IIS://" & MachineName
1483 If ObjectPath <> "" Then
1484 IIsObjectPath = IIsObjectPath & "/" & ObjectPath
1485 End If
1486
1487 Set IIsObject = GetObject(IIsObjectPath)
1488
1489 If Err.Number <> 0 Then
1490 WScript.Echo
1491 ReportError ()
1492 WScript.Echo GetLocalizedResource("StrRes133") & ObjectPath & "/" & ObjectParam
1493 WScript.Quit (Err.Number)
1494 End If
1495
1496 ' If they did not specifically ask to delete the path, then attempt to delete the property
1497 If Not DeletePathOnly Then
1498 ' Try to delete the property
1499
1500 ' ADS_PROPERTY_CLEAR used to be defined, but it isn't anymore.
1501 'IIsObject.PutEx ADS_PROPERTY_CLEAR, ObjectParam, DummyVariant
1502 IIsObject.PutEx "1", ObjectParam, DummyVariant
1503
1504 ' If it succeeded, then just return, else continue and try to delete the path
1505 If Err.Number = 0 Then
1506 IIsObject.SetInfo
1507 WScript.Echo GetLocalizedResource("StrRes134") & ObjectParam & """"
1508 Exit Function
1509 End If
1510 Err.Clear
1511 End If
1512
1513 ' Try to just delete the path
1514 IIsObject.Delete "IIsObject", ObjectParam
1515
1516 If Err.Number <> 0 Then
1517 WScript.Echo
1518 ReportError ()
1519 WScript.Echo GetLocalizedResource("StrRes135") & ObjectPath & "/" & ObjectParam
1520 WScript.Quit (Err.Number)
1521 End If
1522
1523 WScript.Echo GetLocalizedResource("StrRes136") & ObjectPath & "/" & ObjectParam & """"
1524
1525 Exit Function
1526
1527End Function
1528
1529
1530''''''''''''''''''''''''''
1531'
1532' EnumAllCommand
1533'
1534' Enumerates all data and all properties in the metabase under the current path.
1535'
1536''''''''''''''''''''''''''
1537Function EnumAllCommand()
1538 On Error Resume Next
1539
1540 WScript.Echo GetLocalizedResource("StrRes137")
1541
1542End Function
1543
1544
1545''''''''''''''''''''''''''
1546'
1547' CopyMoveCommand
1548'
1549' Copies a path in the metabase to another path.
1550'
1551''''''''''''''''''''''''''
1552Function CopyMoveCommand(bCopyFlag)
1553 On Error Resume Next
1554
1555 Dim SrcObjectPath
1556 Dim DestObjectPath
1557 Dim DestObject
1558
1559 Dim ParentObjectPath
1560 Dim ParentRelativePath
1561 Dim ParentObject
1562
1563 Dim MachineName
1564
1565 Dim TmpDestLeftPath
1566 Dim TmpSrcLeftPath
1567
1568 CopyMoveCommand = 0 ' Assume Success
1569
1570 If ArgCount <> 3 Then
1571 WScript.Echo GetLocalizedResource("StrRes138")
1572 WScript.Quit (GENERAL_FAILURE)
1573 End If
1574
1575 SrcObjectPath = Args(1)
1576 DestObjectPath = Args(2)
1577
1578 SanitizePath SrcObjectPath
1579 SanitizePath DestObjectPath
1580 MachineName = SeparateMachineName(SrcObjectPath)
1581 ParentObjectPath = "IIS://" & MachineName
1582
1583 ' Extract the left part of the paths until there are no more left parts to extract
1584 Do
1585 TmpSrcLeftPath = SplitLeftPath(SrcObjectPath)
1586 TmpDestLeftPath = SplitLeftPath(DestObjectPath)
1587
1588 If (SrcObjectPath = "") Or (DestObjectPath = "") Then
1589 SrcObjectPath = TmpSrcLeftPath & "/" & SrcObjectPath
1590 DestObjectPath = TmpDestLeftPath & "/" & DestObjectPath
1591 Exit Do
1592 End If
1593
1594 If (TmpSrcLeftPath <> TmpDestLeftPath) Then
1595 SrcObjectPath = TmpSrcLeftPath & "/" & SrcObjectPath
1596 DestObjectPath = TmpDestLeftPath & "/" & DestObjectPath
1597 Exit Do
1598 End If
1599
1600 ParentObjectPath = ParentObjectPath & "/" & TmpSrcLeftPath
1601 ParentRelativePath = ParentRelativePath & "/" & TmpSrcLeftPath
1602
1603 Loop
1604
1605 SanitizePath SrcObjectPath
1606 SanitizePath DestObjectPath
1607 SanitizePath ParentObjectPath
1608
1609 ' Now, open the parent object and Copy/Move the objects
1610 Set ParentObject = GetObject(ParentObjectPath)
1611
1612 If (Err.Number <> 0) Then
1613 ReportError ()
1614 WScript.Echo GetLocalizedResource("StrRes139") & ParentObjectPath
1615 WScript.Quit (Err.Number)
1616 End If
1617
1618 If (bCopyFlag) Then
1619 Set DestObject = ParentObject.CopyHere(SrcObjectPath, DestObjectPath)
1620 Else
1621 Set DestObject = ParentObject.MoveHere(SrcObjectPath, DestObjectPath)
1622 End If
1623
1624 If (Err.Number <> 0) Then
1625 ReportError ()
1626 WScript.Echo GetLocalizedResource("StrRes140")
1627 WScript.Quit (Err.Number)
1628 End If
1629
1630 If (bCopyFlag) Then
1631 WScript.Echo GetLocalizedResource("StrRes141") & ParentRelativePath & "/" & SrcObjectPath & GetLocalizedResource("StrRes142") & ParentRelativePath & "/" & DestObjectPath
1632 Else
1633 WScript.Echo GetLocalizedResource("StrRes143") & ParentRelativePath & "/" & SrcObjectPath & GetLocalizedResource("StrRes142") & ParentRelativePath & "/" & DestObjectPath
1634 End If
1635
1636End Function
1637
1638''''''''''''''''''''''''''
1639'
1640' StartServerCommand
1641'
1642' Starts a server in the metabase.
1643'
1644''''''''''''''''''''''''''
1645Function StartServerCommand()
1646
1647 On Error Resume Next
1648
1649 Dim IIsObject
1650 Dim IIsObjectPath
1651 Dim ObjectPath
1652 Dim MachineName
1653
1654 If ArgCount <> 2 Then
1655 WScript.Echo GetLocalizedResource("StrRes145")
1656 WScript.Quit (GENERAL_FAILURE)
1657 End If
1658
1659 ObjectPath = Args(1)
1660 SanitizePath ObjectPath
1661 MachineName = SeparateMachineName(ObjectPath)
1662 IIsObjectPath = "IIS://" & MachineName & "/" & ObjectPath
1663
1664 Set IIsObject = GetObject(IIsObjectPath)
1665
1666 If (Err.Number <> 0) Then
1667 ReportError ()
1668 WScript.Echo GetLocalizedResource("StrRes146") & ObjectPath
1669 WScript.Quit (Err.Number)
1670 End If
1671'debug
1672'WScript.echo "About to start server. Last Error: " & Err.Number
1673 IIsObject.Start
1674'WScript.echo "After starting server. Last Error: " & Err.Number
1675 If (Err.Number <> 0) Then
1676 ReportError ()
1677 WScript.Echo GetLocalizedResource("StrRes147") & ObjectPath
1678 WScript.Quit (Err.Number)
1679 End If
1680 WScript.Echo GetLocalizedResource("StrRes148") & ObjectPath & GetLocalizedResource("StrRes149")
1681
1682End Function
1683
1684''''''''''''''''''''''''''
1685'
1686' StopServerCommand
1687'
1688' Stops a server in the metabase.
1689'
1690''''''''''''''''''''''''''
1691Function StopServerCommand()
1692
1693 On Error Resume Next
1694
1695 Dim IIsObject
1696 Dim IIsObjectPath
1697 Dim ObjectPath
1698 Dim MachineName
1699
1700 If ArgCount <> 2 Then
1701 WScript.Echo GetLocalizedResource("StrRes150")
1702 WScript.Quit (GENERAL_FAILURE)
1703 End If
1704
1705 ObjectPath = Args(1)
1706 SanitizePath ObjectPath
1707 MachineName = SeparateMachineName(ObjectPath)
1708 IIsObjectPath = "IIS://" & MachineName & "/" & ObjectPath
1709
1710 Set IIsObject = GetObject(IIsObjectPath)
1711
1712 If (Err.Number <> 0) Then
1713 ReportError ()
1714 WScript.Echo GetLocalizedResource("StrRes151") & ObjectPath
1715 WScript.Quit (Err.Number)
1716 End If
1717
1718 IIsObject.Stop
1719 If (Err.Number <> 0) Then
1720 ReportError ()
1721 WScript.Echo GetLocalizedResource("StrRes152") & ObjectPath
1722 WScript.Quit (Err.Number)
1723 End If
1724 WScript.Echo GetLocalizedResource("StrRes148") & ObjectPath & GetLocalizedResource("StrRes154")
1725
1726End Function
1727
1728''''''''''''''''''''''''''
1729'
1730' PauseServerCommand
1731'
1732' Pauses a server in the metabase.
1733'
1734''''''''''''''''''''''''''
1735Function PauseServerCommand()
1736
1737 On Error Resume Next
1738
1739 Dim IIsObject
1740 Dim IIsObjectPath
1741 Dim ObjectPath
1742 Dim MachineName
1743
1744 If ArgCount <> 2 Then
1745 WScript.Echo GetLocalizedResource("StrRes155")
1746 WScript.Quit (GENERAL_FAILURE)
1747 End If
1748
1749 ObjectPath = Args(1)
1750 SanitizePath ObjectPath
1751 MachineName = SeparateMachineName(ObjectPath)
1752 IIsObjectPath = "IIS://" & MachineName & "/" & ObjectPath
1753
1754 Set IIsObject = GetObject(IIsObjectPath)
1755
1756 If (Err.Number <> 0) Then
1757 ReportError ()
1758 WScript.Echo GetLocalizedResource("StrRes156") & ObjectPath
1759 WScript.Quit (Err.Number)
1760 End If
1761
1762 IIsObject.Pause
1763 If (Err.Number <> 0) Then
1764 ReportError ()
1765 WScript.Echo GetLocalizedResource("StrRes157") & ObjectPath
1766 WScript.Quit (Err.Number)
1767 End If
1768 WScript.Echo GetLocalizedResource("StrRes148") & ObjectPath & GetLocalizedResource("StrRes159")
1769
1770End Function
1771
1772''''''''''''''''''''''''''
1773'
1774' ContinueServerCommand
1775'
1776' Continues a server in the metabase.
1777'
1778''''''''''''''''''''''''''
1779Function ContinueServerCommand()
1780
1781 On Error Resume Next
1782
1783 Dim IIsObject
1784 Dim IIsObjectPath
1785 Dim ObjectPath
1786 Dim MachineName
1787
1788 If ArgCount <> 2 Then
1789 WScript.Echo GetLocalizedResource("StrRes160")
1790 WScript.Quit (GENERAL_FAILURE)
1791 End If
1792
1793 ObjectPath = Args(1)
1794 SanitizePath ObjectPath
1795 MachineName = SeparateMachineName(ObjectPath)
1796 IIsObjectPath = "IIS://" & MachineName & "/" & ObjectPath
1797
1798 Set IIsObject = GetObject(IIsObjectPath)
1799
1800 If (Err.Number <> 0) Then
1801 ReportError ()
1802 WScript.Echo GetLocalizedResource("StrRes161") & ObjectPath
1803 WScript.Quit (Err.Number)
1804 End If
1805
1806 IIsObject.Continue
1807 If (Err.Number <> 0) Then
1808 ReportError ()
1809 WScript.Echo GetLocalizedResource("StrRes162") & ObjectPath
1810 WScript.Quit (Err.Number)
1811 End If
1812 WScript.Echo GetLocalizedResource("StrRes148") & ObjectPath & GetLocalizedResource("StrRes164")
1813
1814End Function
1815
1816
1817Function FindData()
1818 ' FindData will accept 1 parameter from the command line - the node and
1819 ' property to search for (i.e. w3svc/1/ServerComment)
1820
1821 On Error Resume Next
1822
1823 Dim ObjectPath
1824 Dim ObjectParameter
1825 Dim NewObjectparameter
1826 Dim MachineName
1827
1828 Dim IIsObjectPath
1829 Dim IIsObject
1830
1831 Dim Path
1832 Dim PathList
1833 Dim I
1834
1835 FindData = 0 ' Assume Success
1836
1837 If ArgCount <> 2 Then
1838 WScript.Echo GetLocalizedResource("StrRes165")
1839 WScript.Quit (GENERAL_FAILURE)
1840 End If
1841
1842 ObjectPath = Args(1)
1843
1844 SanitizePath ObjectPath
1845 MachineName = SeparateMachineName(ObjectPath)
1846 ObjectParameter = SplitParam(ObjectPath)
1847
1848 ' Since people may still want to use MDUTIL parameter names
1849 ' we should still do the GET translation of parameter names.
1850 NewObjectparameter = MapSpecGetParamName(ObjectParameter)
1851 ObjectParameter = NewObjectparameter
1852
1853 If ObjectPath = "" Then
1854 IIsObjectPath = "IIS://" & MachineName
1855 Else
1856 IIsObjectPath = "IIS://" & MachineName & "/" & ObjectPath
1857 End If
1858
1859 Set IIsObject = GetObject(IIsObjectPath)
1860
1861 If (Err.Number <> 0) Then
1862 ReportError ()
1863 WScript.Echo GetLocalizedResource("StrRes166") & ObjectPath
1864 WScript.Quit (Err.Number)
1865 End If
1866
1867 ' Now, list out all the places where this property exists.
1868 PathList = IIsObject.GetDataPaths(ObjectParameter, IIS_DATA_INHERIT)
1869 If Err.Number <> 0 Then PathList = IIsObject.GetDataPaths(ObjectParameter, IIS_DATA_NO_INHERIT)
1870
1871 If (Err.Number <> 0) Then
1872 ReportError ()
1873 WScript.Echo GetLocalizedResource("StrRes167") & ObjectPath
1874 WScript.Quit (Err.Number)
1875 End If
1876
1877 If UBound(PathList) < 0 Then
1878 WScript.Echo GetLocalizedResource("StrRes168") & ObjectParameter & GetLocalizedResource("StrRes169") & ObjectPath
1879 Else
1880 WScript.Echo GetLocalizedResource("StrRes168") & ObjectParameter & GetLocalizedResource("StrRes171")
1881
1882 For Each Path In PathList
1883 Path = Right(Path, Len(Path) - 6)
1884 Path = Right(Path, Len(Path) - InStr(Path, "/"))
1885 WScript.Echo " " & Path
1886 Next
1887 End If
1888
1889 If (Err.Number <> 0) Then
1890 ReportError ()
1891 WScript.Echo GetLocalizedResource("StrRes172") & ObjectPath
1892 WScript.Quit (Err.Number)
1893 End If
1894
1895End Function
1896
1897'''''''''''''''''''''
1898'
1899' MimeMapGet
1900'
1901' Special function for displaying a MimeMap property
1902'
1903'''''''''''''''''''''
1904Function MimeMapGet(ObjectPath, MachineName)
1905 On Error Resume Next
1906
1907 Dim MimePath
1908
1909 Dim MimeMapList
1910 Dim MimeMapObject
1911 Dim MimeEntry
1912 Dim MimeEntryIndex
1913
1914 Dim MimeStr
1915 Dim MimeOutPutStr
1916
1917 Dim DataPathList
1918 Dim DataPath
1919
1920 MimeMapGet = 0 ' Assume Success
1921
1922 MimePath = "IIS://" & MachineName
1923 If ObjectPath <> "" Then MimePath = MimePath & "/" & ObjectPath
1924
1925 ' Get the object that contains the mimemap
1926 Set MimeMapObject = GetObject(MimePath)
1927 If (Err.Number <> 0) Then
1928 ReportError ()
1929 WScript.Echo GetLocalizedResource("StrRes173") & ObjectPath
1930 WScript.Quit (Err.Number)
1931 End If
1932
1933 ' Test to see if the property is ACTUALLY set at this node
1934 DataPathList = MimeMapObject.GetDataPaths("MimeMap", IIS_DATA_INHERIT)
1935 If Err.Number <> 0 Then DataPathList = IIsObject.GetDataPaths(MimeMap, IIS_DATA_NO_INHERIT)
1936 Err.Clear
1937
1938 ' If the data is not set anywhere, then stop the madness
1939 If (UBound(DataPathList) < 0) Then
1940 MimeMapGet = &H80005006 ' end with property not set error
1941 Exit Function
1942 End If
1943
1944 DataPath = DataPathList(0)
1945 SanitizePath DataPath
1946
1947 ' Test to see if the item is actually set HERE
1948 If UCase(DataPath) <> UCase(MimePath) Then
1949 MimeMapGet = &H80005006 ' end with property not set error
1950 Exit Function
1951 End If
1952
1953 ' Get the mime map list from the object
1954 MimeMapList = MimeMapObject.Get("MimeMap")
1955 If (Err.Number <> 0) Then
1956 ReportError ()
1957 WScript.Echo GetLocalizedResource("StrRes173") & ObjectPath
1958 WScript.Quit (Err.Number)
1959 End If
1960
1961 MimeOutPutStr = "MimeMap : (MimeMapList) "
1962
1963 ' Enumerate the Mime Entries
1964 For MimeEntryIndex = 0 To UBound(MimeMapList)
1965 Set MimeEntry = MimeMapList(MimeEntryIndex)
1966 MimeOutPutStr = MimeOutPutStr & """" & MimeEntry.Extension & "," & MimeEntry.MimeType & """ "
1967 Next
1968
1969 If (Err.Number <> 0) Then
1970 ReportError ()
1971 WScript.Echo GetLocalizedResource("StrRes175")
1972 WScript.Quit (Err.Number)
1973 End If
1974
1975 WScript.Echo MimeOutPutStr
1976
1977End Function
1978
1979
1980
1981Function MimeMapSet(ObjectPath, ObjectParameter, MachineName)
1982 On Error Resume Next
1983
1984 Dim MimePath
1985
1986 Dim MimeEntryIndex
1987 Dim MimeMapList()
1988 Dim MimeMapObject
1989 Dim MimeEntry
1990
1991 Dim MimeStr
1992 Dim MimeOutPutStr
1993
1994 MimeMapSet = 0 ' Assume Success
1995
1996 ' First, check the number of args
1997 If ArgCount < 3 Then
1998 WScript.Echo GetLocalizedResource("StrRes176")
1999 WScript.Quit (GENERAL_FAILURE)
2000 End If
2001
2002
2003 MimePath = "IIS://" & MachineName
2004 If ObjectPath <> "" Then MimePath = MimePath & "/" & ObjectPath
2005
2006 ' Get the object that contains the mimemap
2007 Set MimeMapObject = GetObject(MimePath)
2008 If (Err.Number <> 0) Then
2009 ReportError ()
2010 WScript.Echo GetLocalizedResource("StrRes177") & ObjectPath
2011 WScript.Quit (Err.Number)
2012 End If
2013
2014 ' Create a new MimeMapList of Mime Entries
2015 ReDim MimeMapList(ArgCount - 3)
2016
2017 MimeOutPutStr = "MimeMap : (MimeMapList) "
2018
2019 ' Fill the list with mime entries
2020 For MimeEntryIndex = 0 To UBound(MimeMapList)
2021
2022 MimeStr = Args(2 + MimeEntryIndex)
2023 MimeOutPutStr = MimeOutPutStr & """" & MimeStr & """ "
2024
2025 Set MimeEntry = CreateObject("MimeMap")
2026
2027 MimeEntry.MimeType = Right (MimeStr, Len(MimeStr) - InStr(MimeStr, ","))
2028 MimeEntry.Extension = Left(MimeStr, InStr(MimeStr, ",") - 1)
2029
2030 Set MimeMapList(MimeEntryIndex) = MimeEntry
2031 Next
2032
2033 If (Err.Number <> 0) Then
2034 ReportError ()
2035 WScript.Echo GetLocalizedResource("StrRes175")
2036 WScript.Quit (Err.Number)
2037 End If
2038
2039 MimeMapObject.MimeMap = MimeMapList
2040 MimeMapObject.Setinfo
2041
2042 If (Err.Number <> 0) Then
2043 ReportError ()
2044 WScript.Echo GetLocalizedResource("StrRes179")
2045 WScript.Quit (Err.Number)
2046 End If
2047
2048 WScript.Echo MimeOutPutStr
2049
2050End Function
2051
2052''''''''''''''''''''''''''
2053'
2054' IsSpecialGetProperty
2055'
2056' Checks to see if the property requires special processing in order to
2057' display its contents.
2058'
2059''''''''''''''''''''''''''
2060Function IsSpecialGetProperty(ObjectParameter)
2061
2062 On Error Resume Next
2063
2064 Select Case UCase(ObjectParameter)
2065 Case "MIMEMAP"
2066 IsSpecialGetProperty = True
2067 Case Else
2068 IsSpecialGetProperty = False
2069 End Select
2070
2071End Function
2072
2073''''''''''''''''''''''''''
2074'
2075' DoSpecialGetProp
2076'
2077' Checks to see if the property requires special processing in order to
2078' display its contents.
2079'
2080''''''''''''''''''''''''''
2081Function DoSpecialGetProp(ObjectPath, ObjectParameter, MachineName)
2082
2083 On Error Resume Next
2084
2085 Select Case UCase(ObjectParameter)
2086 Case "MIMEMAP"
2087 DoSpecialGetProp = MimeMapGet(ObjectPath, MachineName)
2088 Case Else
2089 DoSpecialGetProp = False
2090 End Select
2091
2092End Function
2093
2094
2095
2096''''''''''''''''''''''''''
2097'
2098' IsSpecialSetProperty
2099'
2100' Checks to see if the property is a type that needs to be handled
2101' specially for compatibility with mdutil
2102'
2103''''''''''''''''''''''''''
2104Function IsSpecialSetProperty(ObjectParameter)
2105
2106 On Error Resume Next
2107
2108 Select Case UCase(ObjectParameter)
2109 Case "APPPOOLCOMMAND"
2110 IsSpecialSetProperty = True
2111 Case "SERVERCOMMAND"
2112 IsSpecialSetProperty = True
2113 Case "ACCESSPERM"
2114 IsSpecialSetProperty = True
2115 Case "VRPATH"
2116 IsSpecialSetProperty = True
2117 Case "AUTHORIZATION"
2118 IsSpecialSetProperty = True
2119 Case "MIMEMAP"
2120 IsSpecialSetProperty = True
2121 Case Else
2122 IsSpecialSetProperty = False
2123 End Select
2124End Function
2125
2126''''''''''''''''''''''''''
2127'
2128' DoSpecialSetProp
2129'
2130' Handles datatypes that need to be handled
2131' specially for compatibility with mdutil
2132'
2133''''''''''''''''''''''''''
2134Function DoSpecialSetProp(ObjectPath, ObjectParameter, MachineName)
2135 Dim IIsObjectPath
2136 Dim IIsObject
2137 Dim ValueList
2138 Dim ValueDisplay
2139 Dim PermIndex
2140
2141 On Error Resume Next
2142
2143 DoSpecialSetProp = 0 ' Assume Success
2144 Select Case UCase(ObjectParameter)
2145 Case "SERVERCOMMAND"
2146
2147 IIsObjectPath = "IIS://" & MachineName & "/" & ObjectPath
2148 Set IIsObject = GetObject(IIsObjectPath)
2149
2150 If (Err.Number <> 0) Then
2151 ReportError ()
2152 WScript.Echo GetLocalizedResource("StrRes180") & ObjectPath
2153 WScript.Quit (Err.Number)
2154 End If
2155
2156 If (IIsObject.KeyType <> "IIsWebServer") Then
2157 ReportError ()
2158 WScript.Echo GetLocalizedResource("StrRes181")
2159 WScript.Quit (GENERAL_FAILURE)
2160 End If
2161
2162 ValueList = CLng(Args(2))
2163 Select Case ValueList
2164 Case 1
2165 IIsObject.Start
2166 If (Err.Number <> 0) Then
2167 ReportError ()
2168 WScript.Echo GetLocalizedResource("StrRes182") & ObjectPath
2169 WScript.Quit (Err.Number)
2170 End If
2171 WScript.Echo GetLocalizedResource("StrRes148") & ObjectPath & GetLocalizedResource("StrRes184")
2172 Case 2
2173 IIsObject.Stop
2174 If (Err.Number <> 0) Then
2175 ReportError ()
2176 WScript.Echo GetLocalizedResource("StrRes185") & ObjectPath
2177 WScript.Quit (Err.Number)
2178 End If
2179 WScript.Echo GetLocalizedResource("StrRes148") & ObjectPath & GetLocalizedResource("StrRes187")
2180 Case 3
2181 IIsObject.Pause
2182 If (Err.Number <> 0) Then
2183 ReportError ()
2184 WScript.Echo GetLocalizedResource("StrRes188") & ObjectPath
2185 WScript.Quit (Err.Number)
2186 End If
2187 WScript.Echo GetLocalizedResource("StrRes148") & ObjectPath & GetLocalizedResource("StrRes190")
2188 Case 4
2189 IIsObject.Continue
2190 If (Err.Number <> 0) Then
2191 ReportError ()
2192 WScript.Echo GetLocalizedResource("StrRes191") & ObjectPath
2193 WScript.Quit (Err.Number)
2194 End If
2195 WScript.Echo GetLocalizedResource("StrRes148") & ObjectPath & GetLocalizedResource("StrRes193")
2196 Case Else
2197 WScript.Echo GetLocalizedResource("StrRes194") & ValueList
2198 DoSpecialSetProp = GENERAL_FAILURE
2199 End Select
2200 Exit Function
2201
2202 Case "APPPOOLCOMMAND"
2203
2204 IIsObjectPath = "IIS://" & MachineName & "/" & ObjectPath
2205 Set IIsObject = GetObject(IIsObjectPath)
2206
2207 If (Err.Number <> 0) Then
2208 ReportError ()
2209 WScript.Echo GetLocalizedResource("StrRes195") & ObjectPath
2210 WScript.Quit (Err.Number)
2211 End If
2212
2213 If (IIsObject.KeyType <> "IIsApplicationPool") Then
2214 ReportError ()
2215 WScript.Echo GetLocalizedResource("StrRes196")
2216 WScript.Quit (GENERAL_FAILURE)
2217 End If
2218
2219 ValueList = CLng(Args(2))
2220 Select Case ValueList
2221 Case 1
2222 IIsObject.Start
2223 If (Err.Number <> 0) Then
2224 ReportError ()
2225 WScript.Echo GetLocalizedResource("StrRes197") & ObjectPath
2226 WScript.Quit (Err.Number)
2227 End If
2228 WScript.Echo GetLocalizedResource("StrRes198") & ObjectPath & GetLocalizedResource("StrRes199")
2229 Case 2
2230 IIsObject.Stop
2231 If (Err.Number <> 0) Then
2232 ReportError ()
2233 WScript.Echo GetLocalizedResource("StrRes200") & ObjectPath
2234 WScript.Quit (Err.Number)
2235 End If
2236 WScript.Echo GetLocalizedResource("StrRes198") & ObjectPath & GetLocalizedResource("StrRes201")
2237 Case Else
2238 WScript.Echo GetLocalizedResource("StrRes203") & ValueList
2239 DoSpecialSetProp = GENERAL_FAILURE
2240 End Select
2241 Exit Function
2242
2243 Case "ACCESSPERM"
2244 IIsObjectPath = "IIS://" & MachineName & "/" & ObjectPath
2245 Set IIsObject = GetObject(IIsObjectPath)
2246
2247 If (Err.Number <> 0) Then
2248 ReportError ()
2249 WScript.Echo GetLocalizedResource("StrRes204") & ObjectPath
2250 WScript.Quit (Err.Number)
2251 End If
2252
2253 ' Set the access flags to None, first, and then add them back, as necessary
2254 IIsObject.AccessFlags = 0
2255
2256 ' Set up the display output
2257 ValueDisplay = "AccessFlags (AccessPerm)" & (Right(Spacer, SpacerSize - Len("AccessFlags (AccessPerm)")) & ": " & "(" & TypeName(IIsObject.AccessFlags) & ") ")
2258
2259 ' Attempt to convert parameter to number
2260 Dim APValue
2261 Dim TempValStr
2262
2263 TempValStr = Args(2)
2264
2265 ' Check for Hex
2266 If (UCase(Left(Args(2), 2)) = "0X") Then
2267 TempValStr = "&H" & Right(TempValStr, Len(TempValStr) - 2)
2268 End If
2269
2270 APValue = CLng(TempValStr)
2271
2272 If (Err.Number = 0) Then
2273 IIsObject.AccessFlags = APValue
2274 ValueDisplay = ValueDisplay & " " & APValue & " (0x" & Hex(APValue) & ")"
2275 Else
2276 Err.Clear
2277 For PermIndex = 2 To ArgCount - 1
2278 Select Case UCase(Args(PermIndex))
2279 Case "READ"
2280 IIsObject.AccessRead = True
2281 ValueDisplay = ValueDisplay & " Read"
2282 Case "WRITE"
2283 IIsObject.AccessWrite = True
2284 ValueDisplay = ValueDisplay & " Write"
2285 Case "EXECUTE"
2286 IIsObject.AccessExecute = True
2287 ValueDisplay = ValueDisplay & " Execute"
2288 Case "SCRIPT"
2289 IIsObject.AccessScript = True
2290 ValueDisplay = ValueDisplay & " Script"
2291 Case Else
2292 WScript.Echo GetLocalizedResource("StrRes205") & Args(PermIndex)
2293 WScript.Quit (GENERAL_FAILURE)
2294 End Select
2295 Next
2296 End If
2297
2298 If (Err.Number <> 0) Then
2299 ReportError ()
2300 WScript.Echo GetLocalizedResource("StrRes206") & ObjectPath
2301 WScript.Quit (Err.Number)
2302 End If
2303
2304 IIsObject.Setinfo
2305
2306 If (Err.Number <> 0) Then
2307 ReportError ()
2308 WScript.Echo GetLocalizedResource("StrRes206") & ObjectPath
2309 WScript.Quit (Err.Number)
2310 End If
2311
2312 ' Send the current settings to the screen
2313 WScript.Echo ValueDisplay
2314
2315 Case "VRPATH"
2316 IIsObjectPath = "IIS://" & MachineName & "/" & ObjectPath
2317 Set IIsObject = GetObject(IIsObjectPath)
2318
2319 If (Err.Number <> 0) Then
2320 ReportError ()
2321 WScript.Echo GetLocalizedResource("StrRes208") & ObjectPath
2322 WScript.Quit (Err.Number)
2323 End If
2324
2325 ' Set the access flags to None, first, and then add them back, as necessary
2326 IIsObject.Path = Args(2)
2327
2328 If (Err.Number <> 0) Then
2329 ReportError ()
2330 WScript.Echo GetLocalizedResource("StrRes206") & ObjectPath
2331 WScript.Quit (Err.Number)
2332 End If
2333
2334 ' Set up the display output
2335 ValueDisplay = "Path (VRPath)" & (Right(Spacer, SpacerSize - Len("Path (VRPath)")) & ": " & "(" & TypeName(IIsObject.Path) & ") " & IIsObject.Path)
2336
2337 IIsObject.Setinfo
2338
2339 If (Err.Number <> 0) Then
2340 ReportError ()
2341 WScript.Echo GetLocalizedResource("StrRes206") & ObjectPath
2342 WScript.Quit (Err.Number)
2343 End If
2344
2345 ' Send the current settings to the screen
2346 WScript.Echo ValueDisplay
2347
2348 Case "AUTHORIZATION"
2349 IIsObjectPath = "IIS://" & MachineName & "/" & ObjectPath
2350 Set IIsObject = GetObject(IIsObjectPath)
2351
2352 If (Err.Number <> 0) Then
2353 ReportError ()
2354 WScript.Echo GetLocalizedResource("StrRes208") & ObjectPath
2355 WScript.Quit (Err.Number)
2356 End If
2357
2358 ' Set the auth flags to None, first, and then add them back, as necessary
2359 IIsObject.AuthFlags = 0
2360
2361 ' Set up the display output
2362 ValueDisplay = GetLocalizedResource("StrRes270") & (Right(Spacer, SpacerSize - Len(GetLocalizedResource("StrRes270"))) & ": " & "(" & TypeName(IIsObject.AuthFlags) & ") ")
2363
2364 For PermIndex = 2 To ArgCount - 1
2365 Select Case UCase(Args(PermIndex))
2366 Case "NT"
2367 IIsObject.AuthNTLM = True
2368 ValueDisplay = ValueDisplay & " NT"
2369 Case "ANONYMOUS"
2370 IIsObject.AuthAnonymous = True
2371 ValueDisplay = ValueDisplay & GetLocalizedResource("StrRes271")
2372 Case "BASIC"
2373 IIsObject.AuthBasic = True
2374 ValueDisplay = ValueDisplay & GetLocalizedResource("StrRes272")
2375 Case Else
2376 WScript.Echo GetLocalizedResource("StrRes205") & Args(PermIndex)
2377 WScript.Quit (GENERAL_FAILURE)
2378 End Select
2379 Next
2380
2381 If (Err.Number <> 0) Then
2382 ReportError ()
2383 WScript.Echo GetLocalizedResource("StrRes206") & ObjectPath
2384 WScript.Quit (Err.Number)
2385 End If
2386
2387 IIsObject.Setinfo
2388
2389 If (Err.Number <> 0) Then
2390 ReportError ()
2391 WScript.Echo GetLocalizedResource("StrRes206") & ObjectPath
2392 WScript.Quit (Err.Number)
2393 End If
2394
2395 ' Send the current settings to the screen
2396 WScript.Echo ValueDisplay
2397
2398 Case "MIMEMAP"
2399 DoSpecialSetProp = MimeMapSet(ObjectPath, ObjectParameter, MachineName)
2400' Case "FILTER"
2401' DoSpecialSetProp = FiltersSet()
2402 Case Else
2403 DoSpecialSetProp = GENERAL_FAILURE
2404 End Select
2405End Function
2406
2407''''''''''''''''''''''''''''''
2408'
2409' Function SeparateMachineName
2410'
2411' This function will get the machine name from the Path parameter
2412' that was passed into the script. It will also alter the passed in
2413' path so that it contains only the rest of the path - not the machine
2414' name. If there is no machine name in the path, then the script
2415' will assume LocalHost.
2416'
2417''''''''''''''''''''''''''''''
2418Function SeparateMachineName(Path)
2419 On Error Resume Next
2420
2421 ' Temporarily, just return LocalHost
2422 ' SeparateMachineName = "LocalHost"
2423
2424 SeparateMachineName = TargetServer
2425
2426 Exit Function
2427End Function
2428
2429''''''''''''''''''''''''''''''
2430'
2431' Function MapSpecGetParamName
2432'
2433' Some parameters in MDUTIL are named differently in ADSI.
2434' This function maps the improtant parameter names to ADSI
2435' names.
2436'
2437''''''''''''''''''''''''''''''
2438Function MapSpecGetParamName(ObjectParameter)
2439 On Error Resume Next
2440
2441 Select Case UCase(ObjectParameter)
2442 Case "ACCESSPERM"
2443 WScript.Echo GetLocalizedResource("StrRes215") & ObjectParameter & GetLocalizedResource("StrRes216")
2444 WScript.Echo GetLocalizedResource("StrRes217")
2445 MapSpecGetParamName = "AccessFlags"
2446 Case "VRPATH"
2447 MapSpecGetParamName = "Path"
2448 Case "AUTHORIZATION"
2449 WScript.Echo GetLocalizedResource("StrRes215") & ObjectParameter & GetLocalizedResource("StrRes221")
2450 WScript.Echo GetLocalizedResource("StrRes222")
2451 MapSpecGetParamName = "AuthFlags"
2452 Case Else
2453 ' Do nothing - the parameter doesn't map to anything special
2454 MapSpecGetParamName = ObjectParameter
2455 End Select
2456End Function
2457
2458Sub ReportError()
2459' On Error Resume Next
2460
2461 Dim ErrorDescription
2462
2463 Select Case (Err.Number)
2464 Case &H80070003
2465 ErrorDescription = GetLocalizedResource("StrRes267")
2466 Case &H80070005
2467 ErrorDescription = GetLocalizedResource("StrRes268")
2468 Case &H80070094
2469 ErrorDescription = GetLocalizedResource("StrRes269")
2470 Case Else
2471 ErrorDescription = Err.Description
2472 End Select
2473
2474 WScript.Echo ErrorDescription
2475 WScript.Echo GetLocalizedResource("StrRes223") & Err.Number & " (0x" & Hex(Err.Number) & ")"
2476End Sub
2477
2478
2479
2480
2481Function SplitParam(ObjectPath)
2482' Note: Assume the string has been sanitized (no leading or trailing slashes)
2483 On Error Resume Next
2484
2485 Dim SlashIndex
2486 Dim TempParam
2487 Dim ObjectPathLen
2488
2489 SplitParam = "" ' Assume no parameter
2490 ObjectPathLen = Len(ObjectPath)
2491
2492 ' Separate the path of the node from the parameter
2493 SlashIndex = InStrRev(ObjectPath, "/")
2494
2495 If (SlashIndex = 0) Or (SlashIndex = ObjectPathLen) Then
2496 TempParam = ObjectPath
2497 ObjectPath = "" ' ObjectParameter is more important
2498 Else
2499 TempParam = ObjectPath
2500 ObjectPath = Left(ObjectPath, SlashIndex - 1)
2501 TempParam = Right(TempParam, Len(TempParam) - SlashIndex)
2502 End If
2503
2504 SplitParam = TempParam
2505
2506 If (Err.Number <> 0) Then
2507 ReportError ()
2508 WScript.Echo GetLocalizedResource("StrRes225") & ObjectPath
2509 WScript.Quit (Err.Number)
2510 End If
2511
2512End Function
2513
2514
2515
2516Function SplitLeftPath(ObjectPath)
2517' Note: Assume the string has been sanitized (no leading or trailing slashes)
2518 On Error Resume Next
2519
2520 Dim SlashIndex
2521 Dim TmpLeftPath
2522 Dim ObjectPathLen
2523
2524 SplitLeftPath = "" ' Assume no LeftPath
2525 ObjectPathLen = Len(ObjectPath)
2526
2527 ' Separate the left part of the path from the remaining path
2528 SlashIndex = InStr(ObjectPath, "/")
2529
2530 If (SlashIndex = 0) Or (SlashIndex = ObjectPathLen) Then
2531 TmpLeftPath = ObjectPath
2532 ObjectPath = ""
2533 Else
2534 TmpLeftPath = Left(ObjectPath, SlashIndex - 1)
2535 ObjectPath = Right(ObjectPath, Len(ObjectPath) - SlashIndex)
2536 End If
2537
2538 SplitLeftPath = TmpLeftPath
2539
2540 If (Err.Number <> 0) Then
2541 ReportError ()
2542 WScript.Echo GetLocalizedResource("StrRes234") & ObjectPath
2543 WScript.Quit (Err.Number)
2544 End If
2545
2546End Function
2547
2548
2549
2550
2551Sub SanitizePath(ObjectPath)
2552 On Error Resume Next
2553
2554 ' Remove WhiteSpace
2555 Do While (Left(ObjectPath, 1) = " ")
2556 ObjectPath = Right(ObjectPath, Len(ObjectPath) - 1)
2557 Loop
2558
2559 Do While (Right(ObjectPath, 1) = " ")
2560 ObjectPath = Left(ObjectPath, Len(ObjectPath) - 1)
2561 Loop
2562
2563 ' Replace all occurrences of \ with /
2564 ObjectPath = Replace(ObjectPath, "\", "/")
2565
2566 ' Remove leading and trailing slashes
2567 If Left(ObjectPath, 1) = "/" Then
2568 ObjectPath = Right(ObjectPath, Len(ObjectPath) - 1)
2569 End If
2570
2571 If Right(ObjectPath, 1) = "/" Then
2572 ObjectPath = Left(ObjectPath, Len(ObjectPath) - 1)
2573 End If
2574
2575 If (Err.Number <> 0) Then
2576 ReportError ()
2577 WScript.Echo GetLocalizedResource("StrRes235") & ObjectPath
2578 WScript.Quit (Err.Number)
2579 End If
2580
2581End Sub
2582
2583
2584'''''''''''''''''''''''''''''
2585' AppCreateCommand
2586'''''''''''''''''''''''''''''
2587Function AppCreateCommand(InProcFlag)
2588 On Error Resume Next
2589
2590 Dim IIsObject
2591 Dim IIsObjectPath
2592 Dim ObjectPath
2593 Dim MachineName
2594
2595 AppCreateCommand = 0 ' Assume Success
2596
2597 If ArgCount <> 2 Then
2598 WScript.Echo GetLocalizedResource("StrRes236")
2599 WScript.Quit (GENERAL_FAILURE)
2600 End If
2601
2602 ObjectPath = Args(1)
2603 SanitizePath ObjectPath
2604 MachineName = SeparateMachineName(ObjectPath)
2605
2606 IIsObjectPath = "IIS://" & MachineName
2607 If ObjectPath <> "" Then
2608 IIsObjectPath = IIsObjectPath & "/" & ObjectPath
2609 End If
2610
2611 Set IIsObject = GetObject(IIsObjectPath)
2612
2613 If (Err.Number <> 0) Then
2614 ReportError ()
2615 WScript.Echo GetLocalizedResource("StrRes237") & ObjectPath
2616 WScript.Quit (Err.Number)
2617 End If
2618
2619 IIsObject.AppCreate2 (InProcFlag)
2620
2621 If (Err.Number <> 0) Then
2622 ReportError ()
2623 WScript.Echo GetLocalizedResource("StrRes238") & ObjectPath
2624 WScript.Quit (Err.Number)
2625 End If
2626
2627 WScript.Echo GetLocalizedResource("StrRes239")
2628
2629End Function
2630
2631
2632'''''''''''''''''''''''''''''
2633' AppDeleteCommand
2634'''''''''''''''''''''''''''''
2635Function AppDeleteCommand()
2636 On Error Resume Next
2637
2638 Dim IIsObject
2639 Dim IIsObjectPath
2640 Dim ObjectPath
2641 Dim MachineName
2642
2643 AppDeleteCommand = 0 ' Assume Success
2644
2645 If ArgCount <> 2 Then
2646 WScript.Echo GetLocalizedResource("StrRes240")
2647 WScript.Quit (GENERAL_FAILURE)
2648 End If
2649
2650 ObjectPath = Args(1)
2651 SanitizePath ObjectPath
2652 MachineName = SeparateMachineName(ObjectPath)
2653
2654 IIsObjectPath = "IIS://" & MachineName
2655 If ObjectPath <> "" Then
2656 IIsObjectPath = IIsObjectPath & "/" & ObjectPath
2657 End If
2658
2659 Set IIsObject = GetObject(IIsObjectPath)
2660
2661 If (Err.Number <> 0) Then
2662 ReportError ()
2663 WScript.Echo GetLocalizedResource("StrRes237") & ObjectPath
2664 WScript.Quit (Err.Number)
2665 End If
2666
2667 IIsObject.AppDelete
2668
2669 If (Err.Number <> 0) Then
2670 ReportError ()
2671 WScript.Echo GetLocalizedResource("StrRes242") & ObjectPath
2672 WScript.Quit (Err.Number)
2673 End If
2674
2675 WScript.Echo GetLocalizedResource("StrRes243")
2676
2677End Function
2678
2679
2680'''''''''''''''''''''''''''''
2681' AppUnloadCommand
2682'''''''''''''''''''''''''''''
2683Function AppUnloadCommand()
2684 On Error Resume Next
2685
2686 Dim IIsObject
2687 Dim IIsObjectPath
2688 Dim ObjectPath
2689 Dim MachineName
2690
2691 AppUnloadCommand = 0 ' Assume Success
2692
2693 If ArgCount <> 2 Then
2694 WScript.Echo GetLocalizedResource("StrRes244")
2695 WScript.Quit (GENERAL_FAILURE)
2696 End If
2697
2698 ObjectPath = Args(1)
2699 SanitizePath ObjectPath
2700 MachineName = SeparateMachineName(ObjectPath)
2701
2702 IIsObjectPath = "IIS://" & MachineName
2703 If ObjectPath <> "" Then
2704 IIsObjectPath = IIsObjectPath & "/" & ObjectPath
2705 End If
2706
2707 Set IIsObject = GetObject(IIsObjectPath)
2708
2709 If (Err.Number <> 0) Then
2710 ReportError ()
2711 WScript.Echo GetLocalizedResource("StrRes237") & ObjectPath
2712 WScript.Quit (Err.Number)
2713 End If
2714
2715 IIsObject.AppUnload
2716
2717 If (Err.Number <> 0) Then
2718 ReportError ()
2719 WScript.Echo GetLocalizedResource("StrRes246") & ObjectPath
2720 WScript.Quit (Err.Number)
2721 End If
2722
2723 WScript.Echo GetLocalizedResource("StrRes247")
2724
2725End Function
2726
2727
2728Function AppDisableCommand()
2729 On Error Resume Next
2730
2731 Dim IIsObject
2732 Dim IIsObjectPath
2733 Dim ObjectPath
2734 Dim MachineName
2735
2736 AppDisableCommand = 0 ' Assume Success
2737
2738 If ArgCount <> 2 Then
2739 WScript.Echo GetLocalizedResource("StrRes248")
2740 WScript.Quit (GENERAL_FAILURE)
2741 End If
2742
2743 ObjectPath = Args(1)
2744 SanitizePath ObjectPath
2745 MachineName = SeparateMachineName(ObjectPath)
2746
2747'debug
2748'WScript.Echo "Last Error: " & Err & " (" & Hex (Err) & "): " & Err.Description
2749
2750 IIsObjectPath = "IIS://" & MachineName
2751 If ObjectPath <> "" Then
2752 IIsObjectPath = IIsObjectPath & "/" & ObjectPath
2753 End If
2754
2755 Set IIsObject = GetObject(IIsObjectPath)
2756
2757 If (Err.Number <> 0) Then
2758 ReportError ()
2759 WScript.Echo GetLocalizedResource("StrRes237") & ObjectPath
2760 WScript.Quit (Err.Number)
2761 End If
2762
2763 IIsObject.AppDisable
2764
2765 If (Err.Number <> 0) Then
2766 ReportError ()
2767 WScript.Echo GetLocalizedResource("StrRes251") & ObjectPath
2768 WScript.Quit (Err.Number)
2769 End If
2770
2771'debug
2772'WScript.Echo "Last Error: " & Err & " (" & Hex (Err) & "): " & Err.Description
2773
2774 WScript.Echo GetLocalizedResource("StrRes253")
2775
2776End Function
2777
2778Function AppEnableCommand()
2779 On Error Resume Next
2780
2781 Dim IIsObject
2782 Dim IIsObjectPath
2783 Dim ObjectPath
2784 Dim MachineName
2785
2786 AppEnableCommand = 0 ' Assume Success
2787
2788 If ArgCount <> 2 Then
2789 WScript.Echo GetLocalizedResource("StrRes254")
2790 WScript.Quit (GENERAL_FAILURE)
2791 End If
2792
2793 ObjectPath = Args(1)
2794 SanitizePath ObjectPath
2795 MachineName = SeparateMachineName(ObjectPath)
2796
2797'debug
2798'WScript.Echo "Last Error: " & Err & " (" & Hex (Err) & "): " & Err.Description
2799
2800 IIsObjectPath = "IIS://" & MachineName
2801 If ObjectPath <> "" Then
2802 IIsObjectPath = IIsObjectPath & "/" & ObjectPath
2803 End If
2804
2805 Set IIsObject = GetObject(IIsObjectPath)
2806
2807 If (Err.Number <> 0) Then
2808 ReportError ()
2809 WScript.Echo GetLocalizedResource("StrRes237") & ObjectPath
2810 WScript.Quit (Err.Number)
2811 End If
2812
2813 IIsObject.AppEnable
2814
2815 If (Err.Number <> 0) Then
2816 ReportError ()
2817 WScript.Echo GetLocalizedResource("StrRes257") & ObjectPath
2818 WScript.Quit (Err.Number)
2819 End If
2820
2821'debug
2822'WScript.Echo "Last Error: " & Err & " (" & Hex (Err) & "): " & Err.Description
2823
2824 WScript.Echo GetLocalizedResource("StrRes259")
2825
2826End Function
2827
2828'''''''''''''''''''''''''''''
2829' AppGetStatusCommand
2830'''''''''''''''''''''''''''''
2831Function AppGetStatusCommand()
2832 On Error Resume Next
2833
2834 Dim IIsObject
2835 Dim IIsObjectPath
2836 Dim ObjectPath
2837 Dim MachineName
2838 Dim Status
2839
2840 AppGetStatusCommand = 0 ' Assume Success
2841
2842 If ArgCount <> 2 Then
2843 WScript.Echo GetLocalizedResource("StrRes260")
2844 WScript.Quit (GENERAL_FAILURE)
2845 End If
2846
2847 ObjectPath = Args(1)
2848 SanitizePath ObjectPath
2849 MachineName = SeparateMachineName(ObjectPath)
2850
2851 IIsObjectPath = "IIS://" & MachineName
2852 If ObjectPath <> "" Then
2853 IIsObjectPath = IIsObjectPath & "/" & ObjectPath
2854 End If
2855
2856 Set IIsObject = GetObject(IIsObjectPath)
2857
2858 If (Err.Number <> 0) Then
2859 ReportError ()
2860 WScript.Echo GetLocalizedResource("StrRes237") & ObjectPath
2861 WScript.Quit (Err.Number)
2862 End If
2863
2864 Status = IIsObject.AppGetStatus2
2865
2866 If (Err.Number <> 0) Then
2867 ReportError ()
2868 WScript.Echo GetLocalizedResource("StrRes262") & ObjectPath
2869 WScript.Quit (Err.Number)
2870 End If
2871
2872 WScript.Echo GetLocalizedResource("StrRes263") & Status
2873
2874End Function
2875
2876
2877
2878 ''''''''''''''''''''''''''
2879'
2880' IsSecureProperty
2881'
2882' Checks to see if the property requires special processing in order to
2883' display its contents.
2884'
2885''''''''''''''''''''''''''
2886Function IsSecureProperty(ObjectParameter,MachineName)
2887
2888 On Error Resume Next
2889 Dim PropObj,Attribute
2890 Set PropObj = GetObject("IIS://" & MachineName & "/schema/" & ObjectParameter)
2891 If (Err.Number <> 0) Then
2892 ReportError ()
2893 WScript.Echo GetLocalizedResource("StrRes264") & err.number
2894 WScript.Quit (Err.Number)
2895 End If
2896 Attribute = PropObj.Secure
2897 If (Attribute = True) Then
2898 IsSecureProperty = True
2899 Else
2900 IsSecureProperty = False
2901 End If
2902End Function
2903
2904
2905' We want to be able to cope with 32-bit unsigned integers,
2906' but CLng works with 32-bit signed integers
2907Function StringTo32BitUnsignedInteger(ValueData)
2908 Dim numVal
2909 If (UCase(Left(ValueData, 2))) = "0X" Then
2910 ValueData = "&h" & Right(ValueData, Len(ValueData) - 2)
2911 End If
2912
2913 numVal = Int(ValueData) ' Despite its name, this actually turns it into a double.
2914
2915 If numVal < 0 Or numVal >= 4294967296 Then
2916 ' this number is out of the range of a 32-bit unsigned integer,
2917 Err.Raise 6 ' overflow
2918 ElseIf numVal >= 2147483648 Then
2919 ' bias downwards by -2^32
2920 numVal = numVal - 4294967296
2921 End If
2922
2923 StringTo32BitUnsignedInteger = CLng(numVal)
2924End Function
2925
2926
2927Function UnsignedIntegerToString(ValueData)
2928 Dim numVal
2929
2930 numVal = CLng(ValueData)
2931 numVal = Int(numVal)
2932
2933 If numVal < 0 Then
2934 numVal = numVal + 4294967296
2935 End If
2936
2937 UnsignedIntegerToString = CStr(numVal)
2938End Function
2939</p>
2940<p align="center"><small>
2941<span style="font-family: Comic Sans MS; font-weight:700">
2942
2943<font size="4"><font color="#FF0000">Dhom501</font> :</font></span></small><b><font face="Comic Sans MS" size="4">
2944</font>
2945<small><span style="font-family: Comic Sans MS;">
2946<font size="4"> </font></span></small></b><span style="font-family: Comic Sans MS; font-weight: 700"><font size="4">RLR@Hotmail.com</font></span></p>
2947<p align="center"><font size="4" color="#FF0000">
2948<span style="font-family: Comic Sans MS; font-weight: 700">3bod501</span></font><small><span style="font-family: Comic Sans MS; font-weight:700"><font size="4"><font color="#FF0000"> donkey</font> :</font></span></small><b><font face="Comic Sans MS" size="4">
2949</font>
2950<small><span style="font-family: Comic Sans MS;">
2951<font size="4"> </font></span></small></b><span style="font-family: Comic Sans MS; font-weight: 700"><font size="4">qdh@hotmail.com</font></span><small><span style="font-family: Comic Sans MS; font-weight:700"><font size="4">
2952</font></span></small></p>
2953<p align="center"><font size="4" color="#FF0000">
2954<span style="font-family: Comic Sans MS; font-weight: 700">Saudi Hunter</span></font><small><span style="font-family: Comic Sans MS; font-weight:700"><font size="4"><font color="#FF0000"> donkey</font> :</font></span></small><b><font face="Comic Sans MS" size="4">
2955</font>
2956<small><span style="font-family: Comic Sans MS;">
2957<font size="4"> </font></span></small></b><span style="font-family: Comic Sans MS; font-weight: 700"><font color="#E7BC00"><span style="text-decoration: none"><font color="#000000"><font size="4">zQz</font></font></span></font><font color="#FFFFFF"><span style="text-decoration: none"><font color="#000000"><font size="4">@hotmail.com</font></font></span></font></span><small><span style="font-family: Comic Sans MS;"><font size="4"><b>
2958</b>
2959<font color="#FF0000">
2960
2961<b>|#|</b></font><b> </b> </font></span></small>
2962<span style="font-family: Comic Sans MS; font-weight: 700">
2963<font color="#E7BC00">
2964<span style="text-decoration: none"><font size="4" color="#000000">m15</font></span></font><span style="text-decoration: none"><font color="#000000"><font size="4">@hotmail.com</font></font></span></span></p>
2965<p align="center"><small>
2966<span style="font-family: Comic Sans MS; font-weight:700">
2967
2968<font size="4"><font color="#FF0000">TGD</font> :</font></span></small><b><font face="Comic Sans MS" size="4">
2969</font>
2970<small><span style="font-family: Comic Sans MS;">
2971
2972</font>
2973<small><font color="#FF0000"><span style="font-family: Comic Sans MS;">
2974<font size="4"><b> |#|
2975</b></font></span>
2976<span style="font-weight: 700; font-family: Comic Sans MS; text-decoration:none">
2977<font size="4" color="#000000">
2978Dhom501</font></span></font><span style="color: #FF0000; font-family:Comic Sans MS"><font size="4"><b><span style="text-decoration: none"><font color="#000000">@Gmail.com</font></span></b></font></span></small></p>
2979
2980</body>
2981
2982</html>
2983</p>
2984<p align="center"><small>
2985<span style="font-family: Comic Sans MS; font-weight:700">
2986
2987<font size="4"><font color="#FF0000">Dhom501</font> :</font></span></small><b><font face="Comic Sans MS" size="4">
2988</font>
2989</p>
2990<p align="center"><small>
2991<span style="font-family: Comic Sans MS; font-weight:700">
2992
2993<font size="4"><font color="#FF0000">Dhom501</font> :</font></span></small><b><font face="Comic Sans MS" size="4">
2994</font>
2995<small><span style="font-family: Comic Sans MS;">
2996<font size="4"> </font></span></small></b><span style="font-family: Comic Sans MS; font-weight: 700"><font size="4">RLR@Hotmail.com</font></span></p>
2997<p align="center"><font size="4" color="#FF0000">
2998<span style="font-family: Comic Sans MS; font-weight: 700">3bod501</span></font><small><span style="font-family: Comic Sans MS; font-weight:700"><font size="4"><font color="#FF0000"> donkey</font> :</font></span></small><b><font face="Comic Sans MS" size="4">
2999</font>
3000<small><span style="font-family: Comic Sans MS;">
3001<font size="4"> </font></span></small></b><span style="font-family: Comic Sans MS; font-weight: 700"><font size="4">qdh@hotmail.com</font></span><small><span style="font-family: Comic Sans MS; font-weight:700"><font size="4">
3002</font></span></small></p>
3003<p align="center"><font size="4" color="#FF0000">
3004<span style="font-family: Comic Sans MS; font-weight: 700">Saudi Hunter</span></font><small><span style="font-family: Comic Sans MS; font-weight:700"><font size="4"><font color="#FF0000"> donkey</font> :</font></span></small><b><font face="Comic Sans MS" size="4">
3005</font>
3006<small><span style="font-family: Comic Sans MS;">
3007<font size="4"> </font></span></small></b><span style="font-family: Comic Sans MS; font-weight: 700"><font color="#E7BC00"><span style="text-decoration: none"><font color="#000000"><font size="4">zQz</font></font></span></font><font color="#FFFFFF"><span style="text-decoration: none"><font color="#000000"><font size="4">@hotmail.com</font></font></span></font></span><small><span style="font-family: Comic Sans MS;"><font size="4"><b>
3008</b>
3009<font color="#FF0000">
3010
3011<b>|#|</b></font><b> </b> </font></span></small>
3012<span style="font-family: Comic Sans MS; font-weight: 700">
3013<font color="#E7BC00">
3014<span style="text-decoration: none"><font size="4" color="#000000">m15</font></span></font><span style="text-decoration: none"><font color="#000000"><font size="4">@hotmail.com</font></font></span></span></p>
3015<p align="center"><small>
3016<span style="font-family: Comic Sans MS; font-weight:700">
3017
3018<font size="4"><font color="#FF0000">TGD</font> :</font></span></small><b><font face="Comic Sans MS" size="4">
3019</font>
3020<small><span style="font-family: Comic Sans MS;">
3021
3022</font>
3023<small><font color="#FF0000"><span style="font-family: Comic Sans MS;">
3024<font size="4"><b> |#|
3025</b></font></span>
3026<span style="font-weight: 700; font-family: Comic Sans MS; text-decoration:none">
3027<font size="4" color="#000000">
3028Dhom501</font></span></font><span style="color: #FF0000; font-family:Comic Sans MS"><font size="4"><b><span style="text-decoration: none"><font color="#000000">@Gmail.com</font></span></b></font></span></small></p>
3029
3030</body>
3031
3032</html>
3033</p>
3034<p align="center"><small>
3035<span style="font-family: Comic Sans MS; font-weight:700">
3036
3037<font size="4"><font color="#FF0000">Dhom501</font> :</font></span></small><b><font face="Comic Sans MS" size="4">
3038</font>