This handy script lets you easily run any command on a specified subset of computers in your domain. Running the same command on multiple computers in your domain can be tedious indeed, but such a scenario is common in an administrator's life. I've written this hack to make this chore easier. The script traverses member systems of a domain, executing a command against each system that has a name that matches a particular specification you specify in the command line. Note that regular expressions are legal in this script, which makes it a powerful and flexible addition to the administrator's toolkit. The CodeTo use this script, type it into a text editor such as Notepad (make sure Word Wrap is disabled) and save it with a .vbs extension as ExecuteAll.vbs. 'Script Name: ExecuteAll.vbs Option Explicit Dim oDomain, oService, oItem, oShell Dim strDomain, strSpec, strCommand, intButton Dim oArgs, strFinalCommand, oRegEx, boolConfirm ' Prepare to execute commands & do popups Set oShell = CreateObject("WScript.Shell")
GetArguments ' Access the domain so we can traverse objects WScript.Echo "Accessing NT Domain " & strDomain Set oDomain = GetObject("WinNT://" & strDomain)
' Initiate our regular expression support Set oRegEx = New RegExp oRegEx.Pattern = strSpec oRegEx.IgnoreCase = True ' Traverse each computer (WinNT) object in the domain WScript.Echo "Searching for " & strSpec oDomain.Filter = Array("Computer") ' only look at computers
For Each oItem In oDomain If oRegEx.Test(oItem.Name) Then WScript.Echo " Matched " & oItem.Name strFinalCommand = Replace(strCommand, "$n", oItem.Name) intButton = vbNo If boolConfirm Then intButton = oShell.Popup("Execute " & strFinalCommand & "?",,_
"System " & oItem.Name, vbYesno + vbQuestion) End If If (boolConfirm = False) Or (intButton = vbYes) Then WScript.Echo " Executing: " & strFinalCommand execute strFinalCommand End If End If Next ' All done; clean up Set oItem = Nothing Set oRegEx = Nothing Set oDomain = Nothing Set oShell = Nothing Set oArgs = Nothing ' ' Glean the arguments for our run from the command line, if provided. ' If any are missing, prompt for input. A blank input signals an abort. ' ' /Y is an optional last argument Sub GetArguments Dim i, strConfirm, intButton Set oArgs = WScript.Arguments boolConfirm = True ' assume always confirm strDomain = "" ' domain to be traversed strSpec = "" ' name specification to be matched strCommand = "" ' command to be executed on each match strConfirm = "" ' track prompting for confirmation setting ' Look for our optional 4th argument If oArgs.Length = 4 Then If UCase(oArgs.Item(3)) = "/Y" Then boolConfirm = False strConfirm = "/Y" ' don't prompt below End If End If ' Look for any specified arguments, in order If oArgs.Length >= 1 Then strDomain = oArgs(0) If oArgs.Length >= 2 Then strSpec = oArgs(1) If oArgs.Length >= 3 Then strCommand = oArgs(2) ' Prompt for any arguments not specified on the command line If strDomain = "" Then strDomain = InputBox _ ("Enter the name of the NT Domain to be traversed", _
"NT Domain") End If If strDomain = "" Then WScript.Quit strDomain = UCase(strDomain) If strSpec = "" Then strSpec = InputBox _ ("Enter your name specification for the computer(s) " & _
"that will be matched within the " & strDomain & " Domain." & _ vbCrlf & "Regular Expressions are acceptable.", _ "Name Specification") End If If strSpec = "" Then WScript.Quit If strCommand = "" Then strCommand = InputBox _ ("Enter the command to be executed on each computer matching " & _
strSpec & " within the " & strDomain & " Domain." & _ vbCrlf & "$n will be substituted for the computer name.", _ "Command to Execute") End If If strCommand = "" Then WScript.Quit If strConfirm = "" Then intButton = oShell.Popup("Confirm each command prior to execution?",,_
"Confirm?", vbYesNo + vbQuestion) If intButton = vbNo Then boolConfirm = False End If End If End Sub ' Execute a command. Each is always run under a new instance of the command ' processor. This allows the use of built-in commands and I/O redirection. ' ' We won't wait for command completion. Sub Execute(strCommand) Dim RetVal strCommand = "%COMSPEC% /c " & strCommand RetVal = oShell.Run(strCommand, 1, False) End Sub Running the HackHere is the syntax for running the script: ExexcuteAll.vbs <DomainToTraverse> <ComputerSpecification> <Command> [/Y] When the script runs, the matched system's name will be substituted for the occurrence of $n in the command to be performed. By default, each command instance is confirmed before it is executed, but you can specify /Y to always answer Yes instead. Here's an example of how to run the script: ExexcuteAll.vbs MYDOMAIN WKSATL* "del \\$n\admin$\activitylog.txt" This example traverses the MYDOMAIN domain, looking for computer names that start with WKSATL* (note the wildcard) and deletes the activitylog.txt file from the C:\Winnt folder
|
|||||||||||||
Disclaimer
1) E-articles is not responsible for the information contained by this article as well for any and all copyright infringements by authors and writers. E-articles is a free information resource. If you suspect this article for any copyright infringement, please read the terms of service and contact us or use the "Report this article" button on this page to investigate the problem.
2) E-articles is not responsible for inaccuracies, falsehoods, or any other types of misinformation this article may contain and will not be liable for any loss or damage suffered by a user through the user's reliance on the information gained here. |
|||||||||||||