641 lines
21 KiB
XML
641 lines
21 KiB
XML
<?XML version="1.0" ?>
|
|
<package>
|
|
<job error="false" bpDebug="false" logo="false">
|
|
<object id="opShell2"
|
|
name="Shell Object"
|
|
classid="clsid:13709620-C279-11CE-A49E-444553540000"/>
|
|
<runtime>
|
|
<named name="op" helpstring="operation"
|
|
required="true" type="string"/>
|
|
<named name="file" helpstring="file to copy [FILE]"
|
|
required="true" type="string"/>
|
|
<named name="path"
|
|
helpstring="path, special folder name or registry key [REGISTRY/FILE]"
|
|
required="true" type="string"/>
|
|
<named name="hive" helpstring="registry hive [REGISTRY]"
|
|
required="false" type="string"/>
|
|
<named name="value" helpstring="registry value [REGISTRY]"
|
|
required="false" type="string"/>
|
|
<named name="user" helpstring="user name [AUTOLOGON]"
|
|
required="false" type="string"/>
|
|
<named name="domain" helpstring="user domain [AUTOLOGON]"
|
|
required="false" type="string"/>
|
|
<named name="password" helpstring="user password [AUTOLOGON]"
|
|
required="false" type="string"/>
|
|
<named name="debug" helpstring="print debug output"
|
|
required="false" type="simple"/>
|
|
<named name="reboot" helpstring="reboot, esp. remotely"
|
|
required="false" type="simple"/>
|
|
<named name="shuffle" helpstring="shuffle the boot options"
|
|
required="false" type="simple"/>
|
|
|
|
<description>
|
|
<![CDATA[
|
|
The script provides VBSCRIPT handling for the
|
|
|
|
* Reboot win32_operatingsystem invocation:
|
|
cscript.exe opshellfolder.wsf /op:reboot /op:shuffle /boot:XXX
|
|
|
|
* Special Folder file operations:
|
|
|
|
cscript.exe opshellfolder.wsf /op:copyfileto /path:Desktop /file:XXX
|
|
cscript.exe opshellfolder.wsf /op:delfile /path:startup /file:XXX
|
|
cscript.exe opshellfolder.wsf /op:mapfolder /path:"C:\Documents and Settings\WINBUILD.001\Start Menu\Programs\Administrative Tools"
|
|
|
|
The first two are useful to manipulate files. The last one can be used
|
|
to identify the current directory.
|
|
|
|
* Registry operations
|
|
|
|
cscript.exe opshellfolder.wsf /op:testkey /path:"XXX\YYY\ZZZ" /hive:HKLM
|
|
cscript.exe opshellfolder.wsf /op:setkEy /path:"XXX\YYY\ZZZ" /hive:HKLM
|
|
cscript.exe opshellfolder.wsf /op:clearkey /path:"XXX\YYY\ZZZ" /hive:HKLM
|
|
cscript.exe opshellfolder.wsf /op:setvalue /path:"XXX\YYY\ZZZ" /hive:HKLM
|
|
|
|
* Administrator operations: AUTOLOGON
|
|
|
|
cscript.exe opshellfolder.wsf /op:autologon /user:"UUU" /pass:"PPP" /domain:"DDD"
|
|
cscript.exe opshellfolder.wsf /op:add2grp /group:"GGG" /user:"UUU" /pass:"PPP" /domain:"DDD"
|
|
cscript.exe opshellfolder.wsf /op:clean
|
|
|
|
This operation is actually a shortcut for the following Registry ops:
|
|
|
|
HKLM,%WINLOGON%,DefaultDomainName
|
|
HKLM,%WINLOGON%,DefaultUserName
|
|
HKLM,%WINLOGON%,DefaultPassword
|
|
HKLM,%WINLOGON%,AutoAdminLogon
|
|
HKLM,%WINLOGON%,ForceAutoLogon
|
|
HKLM,%WINLOGON%,PasswordExpiryWarning
|
|
|
|
|
|
* Dialog/IO operations: POPUP/INPUT
|
|
|
|
*
|
|
]]>
|
|
|
|
</description>
|
|
|
|
</runtime>
|
|
<resource id="autologon registry path">HKLM\SOFTWARE\Microsoft\WINDOWS NT\CurrentVersion\Winlogon</resource>
|
|
<resource id="autologon fields">
|
|
DefaultUserName
|
|
DefaultPassword
|
|
DefaultDomainName
|
|
AutoAdminLogon
|
|
ForceAutoLogon
|
|
</resource>
|
|
<resource id="special folder names">
|
|
AllUsersDesktop
|
|
AllUsersStartMenu
|
|
AllUsersPrograms
|
|
AllUsersStartup
|
|
Desktop
|
|
Favorites
|
|
Fonts
|
|
MyDocuments
|
|
NetHood
|
|
PrintHood
|
|
Programs
|
|
Recent
|
|
SendTo
|
|
StartMenu
|
|
Startup
|
|
Templates
|
|
</resource>
|
|
|
|
<resource id="op">
|
|
filesystemop
|
|
registryop
|
|
adminop
|
|
bootop
|
|
</resource>
|
|
|
|
<resource id="bootop">
|
|
Reboot
|
|
Shuffle
|
|
</resource>
|
|
|
|
<resource id="filesystemop">
|
|
CopyFileTo
|
|
Delfile
|
|
MapFolder
|
|
</resource>
|
|
|
|
<resource id="registryop">
|
|
ClearKey
|
|
SetKey
|
|
QueryValue
|
|
DeleteValue
|
|
SetValue
|
|
TestKey
|
|
</resource>
|
|
|
|
<resource id="adminop">
|
|
add2grp
|
|
clean
|
|
autologon
|
|
cpl
|
|
</resource>
|
|
<script language="VBScript">
|
|
<![CDATA[
|
|
|
|
Option Explicit
|
|
|
|
'' One of three Tristate values used to indicate
|
|
'' the format of the opened file.
|
|
Const TristateFalse = 0 '' Opens the file as ASCII.
|
|
Const TristateTrue = - 1 '' Opens the file as Unicode.
|
|
Const TristateUseDefault = - 2 '' Opens the file using the system default.
|
|
|
|
Const QUOTE = """"
|
|
|
|
Const ForReading = 1
|
|
Const ForWriting = 2
|
|
Const ForAppending = 8
|
|
|
|
Dim siOp, siPath, siFile, siValue, spRootHive, spExpdIPath, sAnsw, npRet
|
|
Dim opShell, opFileSys
|
|
Dim aspOps, dpOps, spOp, sDebug
|
|
Dim asOpTypes, sOpType, npCnt
|
|
If WScript.Arguments.Named.Exists("debug") Then
|
|
sDebug = "1"
|
|
End If
|
|
asOpTypes = ReadResource("op")
|
|
Set dpOps = CreateObject("Scripting.Dictionary")
|
|
|
|
For Each sOpType in asOpTypes
|
|
aspOps = ReadResource(sOpType)
|
|
For Each spOp in aspOps
|
|
dpOps.add UCase(spOp), uCase(sOpType)
|
|
Next
|
|
Next
|
|
_
|
|
siOp = UCase(WScript.Arguments.Named("op"))
|
|
If (WScript.Arguments.Count = 0) Or _
|
|
isEmpty(siOp) Or _
|
|
(Not dpOps.Exists(siOp)) Then
|
|
WScript.Arguments.ShowUsage
|
|
If sDebug then
|
|
WScript.echo "Unrecognized operation: " & _
|
|
QUOTE & siOp & QUOTE
|
|
_
|
|
For each spOp in dpOps.keys
|
|
WSCript.echo spOp & chr(09) & "=>" & chr(09) & dpOps(spOp)
|
|
Next
|
|
End If
|
|
_
|
|
WScript.quit(172)
|
|
End If
|
|
|
|
Set opBrowser = WScript.CreateObject("Shell.Application")
|
|
Set opFileSys = CreateObject("Scripting.FilesystemObject")
|
|
Set opShell = WScript.CreateObject("WScript.Shell")
|
|
Dim spKey
|
|
Dim opArgTRestRx
|
|
Set opArgTRestRx = CreateObject("VBScript.Regexp")
|
|
_
|
|
If 0 = strComp(dpOps(siOp),"registryop", VBTextCompare) Then
|
|
_
|
|
siPath = sURLDecoded(WSCript.Arguments.Named("path"))
|
|
spRootHive = UCase(WScript.Arguments.Named("hive"))
|
|
_
|
|
With opargTRestRx
|
|
.ignoreCase = True
|
|
.Pattern = "\bHKLM\b|\bHKCU\b"
|
|
End With
|
|
If Not opargTRestRx.Test(spRootHive) Then
|
|
WSCript.echo "Invalid Registry Hive for", siOp, ":", _
|
|
QUOTE & spRootHive & QUOTE
|
|
WSCript.quit(112)
|
|
End If
|
|
_
|
|
If 0 = strComp(siOp,"QueryValue", VBTextCompare) Then
|
|
sAnsw = opShell.RegRead(spRootHive & "\" & siPath)
|
|
WScript.echo sAnsw
|
|
End If
|
|
If 0 = strComp(siOp,"DeleteValue", VBTextCompare) Then
|
|
on error resume next
|
|
opShell.RegDelete spRootHive & "\" & siPath
|
|
on error goto 0
|
|
End If
|
|
_
|
|
If 0 = strComp(siOp,"TestKey", VBTextCompare) Then
|
|
on error resume next
|
|
err.clear
|
|
sAnsw = opShell.RegRead(spRootHive & "\" & siPath & "\")
|
|
sAnsw = True
|
|
If err <> 0 Then
|
|
sansw = False
|
|
If sDebug Then
|
|
WSCript.echo err.number , err.description
|
|
End If
|
|
End If
|
|
WSCript.echo sAnsw
|
|
end If
|
|
_
|
|
_
|
|
If 0 = strComp(siOp,"SetKey", VBTextCompare) Then
|
|
If Len(siPath) <> InStrRev(siPath, "\") Then
|
|
siPath = siPath & "\" 'Keys ending in "\" operate on the key itself
|
|
End If
|
|
opShell.RegWrite spRootHive & "\" & siPath, "", "REG_SZ"
|
|
End If
|
|
_
|
|
If 0 = strComp(siOp,"SetValue", VBTextCompare) Then
|
|
siValue = WScript.Arguments.Named("value")
|
|
opShell.RegWrite spRootHive & "\" & siPath, siValue, "REG_SZ"
|
|
End If
|
|
_
|
|
If 0 = strComp(siOp,"ClearKey", VBTextCompare) Then
|
|
If Len(siPath) <> InStrRev(siPath, "\") Then
|
|
siPath = siPath & "\" 'Keys ending in "\" operate on the key itself
|
|
End If
|
|
opShell.RegDelete spRootHive & "\" & siPath
|
|
End If
|
|
_
|
|
End If
|
|
_
|
|
If 0 = strComp(dpOps(siOp),"filesystemop", VBTextCompare) Then
|
|
_
|
|
siPath = uCase(sURLDecoded(WSCript.Arguments.Named("path")))
|
|
siFile = WScript.Arguments.Named("file")
|
|
_
|
|
Dim asPeNmzs, ndNrdX
|
|
Dim opeNaRx, opoNtRX, stePxRs
|
|
_
|
|
asPeNmzs = ReadResource("special folder names")
|
|
set opeNaRx = CreateObject("VBScript.Regexp")
|
|
set opoNtRX = CreateObject("VBScript.Regexp")
|
|
opeNaRx.pattern = " +$"
|
|
opoNtRX.pattern = "FOLDER"
|
|
stePxRs = "\b" & opoNtRX.pattern & "\b"
|
|
|
|
For ndNrdX = 0 to uBound(asPeNmzs)
|
|
asPeNmzs(ndNrdX) = opoNtRX.replace(stePxRs,opeNaRx.replace(asPeNmzs(ndNrdX), ""))
|
|
Next
|
|
Set opeNaRx = Nothing
|
|
Set opoNtRX = Nothing
|
|
_
|
|
With opargTRestRx
|
|
.ignoreCase = True
|
|
.Pattern = "\b\w\:\\[ \w]+(\\[ \w]+)?\b" & "|" & join(asPeNmzs, "|")
|
|
End With
|
|
_
|
|
If Not opargTRestRx.Test(siPath) Then
|
|
WSCript.echo "Invalid Special Folder for", siOp, ":", _
|
|
QUOTE & siPath & QUOTE
|
|
WSCript.quit(112)
|
|
End If
|
|
_
|
|
Dim spPath
|
|
spPath = opShell.SpecialFolders.Item(UCase(siPath))
|
|
IF "" <> spPath Then
|
|
siPath = spPath
|
|
End If
|
|
On error resume next
|
|
_
|
|
If 0 = strComp(siOp, "CopyFileTo", VBTextCompare) Then
|
|
opFileSys.CopyFile siFile, _
|
|
opFileSys.BuildPath(siPath, opFileSys.GetFileName(siFile)), _
|
|
True
|
|
End If
|
|
_
|
|
If 0 = strComp(siOp, "MapFolder", VBTextCompare) Then
|
|
|
|
Dim opFolderD, opBrowser, pnSpecFolderCont, psShortPath, sCursiPathRx
|
|
If Len(siPath) <> InStrRev(siPath, "\") Then
|
|
spPath = siPath
|
|
Else
|
|
spPath = Mid(siPath,1,-1+Len(siPath))
|
|
End If
|
|
spPath = replace(spPath,"\","\\", 1, 100)
|
|
Set sCursiPathRx = CreateObject("VBScript.Regexp")
|
|
With sCursiPathRx
|
|
.ignoreCase = True
|
|
.Global = True
|
|
.Pattern = "^" & spPath & "$"
|
|
End With
|
|
_
|
|
Set opFolderD = CreateObject("Scripting.Dictionary")
|
|
Dim spStartupFolder, bpNFo
|
|
bpNFo = False
|
|
asPeNmzs = ReadResource("special folder names")
|
|
set opeNaRx = CreateObject("VBScript.Regexp")
|
|
opeNaRx.pattern = " +$"
|
|
|
|
For ndNrdX = 0 to uBound(asPeNmzs)
|
|
spStartupFolder = asPeNmzs(ndNrdX)
|
|
spPath = opShell.SpecialFolders(opeNaRx.replace(spStartupFolder,""))
|
|
If sCursiPathRx.Test(spPath) Then
|
|
WScript.echo _
|
|
spStartupFolder
|
|
bpNFo = True
|
|
End If
|
|
Next
|
|
|
|
If Not bpNFo Then
|
|
For pnSpecFolderCont = &H001 To &H038 Step 1
|
|
Set psShortPath = opBrowser.NameSpace(pnSpecFolderCont)
|
|
|
|
If CStr(TypeName(psShortPath)) <> "Nothing" Then
|
|
|
|
If "" <> psShortPath Then
|
|
spPath = ParsedFullName(psShortPath )
|
|
|
|
If sCursiPathRx.Test(spPath) then
|
|
If cbpDebug Then
|
|
WScript.echo _
|
|
"&H00" &_
|
|
Hex(pnSpecFolderCont) & _
|
|
" " & _
|
|
psShortPath & _
|
|
" " & _
|
|
ParsedFullName(psShortPath)
|
|
Else
|
|
WScript.echo _
|
|
psShortPath
|
|
End If
|
|
|
|
End If
|
|
End If
|
|
End If
|
|
Set psShortPath = Nothing
|
|
Next
|
|
End If
|
|
End If
|
|
_
|
|
If 0 = strComp(siOp, "Delfile", VBTextCompare) Then
|
|
opFileSys.DeleteFile _
|
|
opFileSys.BuildPath(siPath, opFileSys.GetFileName(siFile)), _
|
|
True
|
|
End If
|
|
End If
|
|
|
|
_
|
|
If 0 = strComp(dpOps(siOp),"adminop", VBTextCompare) Then
|
|
_
|
|
Dim opDefault : Set opDefault = CreateObject("WinNTSystemInfo")
|
|
Dim spReGptDr : spReGptDr = CStr(GetResource("autologon registry path"))
|
|
Dim apMagKys : apMagKys = ReadResource("autologon fields")
|
|
Dim opMaKyLs : Set opMaKyLs = CreateObject("Scripting.Dictionary")
|
|
Dim spDomainUser: Dim spDomainName: Dim spLocalGroup: Dim spPassword
|
|
_
|
|
If 0 = strComp(siOp, "AutoLogon", VBTextCompare) Then
|
|
_
|
|
spDomainUser = sURLDecoded(WSCript.Arguments.Named("user"))
|
|
spDomainName = sURLDecoded(WSCript.Arguments.Named("domain"))
|
|
spPassword = sURLDecoded(WSCript.Arguments.Named("password"))
|
|
_
|
|
For npCnt = 0 to UBound(apMagKys)
|
|
opMaKyLs.add apMagKys(npCnt), ""
|
|
'' create keys but leave them undefined
|
|
Next
|
|
_
|
|
opMaKyLs("DefaultUserName") = spDomainUser
|
|
If "" <> spDomainName Then
|
|
opMaKyLs("DefaultDomainName") = spDomainName
|
|
End If
|
|
If "" <> spPassword Then
|
|
opMaKyLs("DefaultPassword") = sURLDecoded(spPassword)
|
|
End If
|
|
opMaKyLs("AutoAdminLogon") = "1"
|
|
opMaKyLs("ForceAutoLogon") = "1"
|
|
_
|
|
For Each spKey in opMaKyLs.Keys
|
|
If "" <> opMaKyLs(spKey) Then
|
|
opShell.RegWrite spReGptDr & "\" & spKey, opMaKyLs(spKey) ,"REG_SZ"
|
|
If sDebug Then
|
|
WScript.Echo spKey , "=", opShell.RegRead(spReGptDr & "\" & spKey)
|
|
End If
|
|
End If
|
|
Next
|
|
opShell.RegWrite spReGptDr & "\" & "passwordexpirywarning", 0, "REG_DWORD"
|
|
If sDebug Then
|
|
WScript.Echo "passwordexpirywarning=" & _
|
|
opShell.RegRead(spReGptDr & "\" & "passwordexpirywarning")
|
|
End If
|
|
End If
|
|
If 0 = strComp(siOp, "cpl", VBTextCompare) Then
|
|
Dim spCplName: spCplName = WSCript.Arguments.Named("file")
|
|
Dim spComment: spComment = WSCript.Arguments.Named("comment")
|
|
opBrowser.MinimizeAll
|
|
call opShell.PopUp(spComment, 30, spComment, 1 + 16)
|
|
WSCript.Sleep 5
|
|
opBrowser.ControlPanelItem(spCplName)
|
|
opBrowser.UndoMinimizeALL
|
|
_
|
|
End If
|
|
If 0 = strComp(siOp, "Clean", VBTextCompare) Then
|
|
_
|
|
opMaKyLs("ForceAutoLogon") = "0"
|
|
opMaKyLs("AutoAdminLogon") = "0"
|
|
opMaKyLs("DefaultDomainName") = opDefault.ComputerName
|
|
opMaKyLs("DefaultUserName") = "ADMINISTRATOR"
|
|
_
|
|
For Each spKey in opMaKyLs.Keys
|
|
on error resume next
|
|
err.clear
|
|
_
|
|
If "" = opMaKyLs(spKey) Then
|
|
opShell.RegWrite spReGptDr & "\" & spKey, opMaKyLs(spKey) ,"REG_SZ"
|
|
opShell.RegDelete spReGptDr & "\" & spKey
|
|
Else
|
|
opShell.RegWrite spReGptDr & "\" & spKey, opMaKyLs(spKey) ,"REG_SZ"
|
|
If sDebug Then
|
|
WScript.Echo spKey , "=", opShell.RegRead(spReGptDr & "\" & spKey)
|
|
End If
|
|
End If
|
|
_
|
|
Next
|
|
_
|
|
End If
|
|
If 0 = strComp(siOp, "add2grp", VBTextCompare) Then
|
|
spDomainUser = sURLDecoded(WSCript.Arguments.Named("user"))
|
|
spDomainName = sURLDecoded(WSCript.Arguments.Named("domain"))
|
|
spLocalGroup = sURLDecoded(WSCript.Arguments.Named("group"))
|
|
WSCript.echo spLocalGroup
|
|
Call AddUser(opDefault.ComputerName, spDomainName, spLocalGroup, spDomainUser)
|
|
End If
|
|
Set opMaKyLs = Nothing
|
|
Set opDefault = Nothing
|
|
End If
|
|
|
|
Set opeNaRx = Nothing
|
|
Set opFolderD = Nothing
|
|
Set opBrowser = Nothing
|
|
|
|
Set opFileSys = Nothing
|
|
Set opShell = Nothing
|
|
Set dpOps = Nothing
|
|
|
|
|
|
WScript.quit(0)
|
|
|
|
Function ReadResource(sPresId)
|
|
_
|
|
On Error resume next
|
|
Dim WshShell: Set WshShell = CreateObject("WScript.Shell")
|
|
Dim sPRes, asRes, uRes, tsRes: sPREs = GetResource(sPresId)
|
|
_
|
|
If Err.number <> 0 Then
|
|
Wscript.echo err.number & " " & err.description
|
|
' The Error description are not informative when failed getresource
|
|
IF Err.number = 7 Then
|
|
Wscript.echo chr(9) & "Null resource: " & _
|
|
sPresId
|
|
End If
|
|
IF Err.number = 5 Then
|
|
Wscript.echo chr(9) & "Undefined resource: " & _
|
|
sPresId
|
|
End If
|
|
Wscript.quit
|
|
End If
|
|
_
|
|
asRes = Split(WshShell.ExpandEnvironmentStrings(sPRes), VBNEWLINE)
|
|
Set ures = CreateObject("Scripting.Dictionary")
|
|
For Each tsRes in asRes
|
|
If 0 <> Len(tsRes) Then
|
|
uRes(tsRes) = 1
|
|
End If
|
|
Next
|
|
Dim tResource: tResource = uRes.Keys
|
|
If uBound(tResource) = 0 Then
|
|
ReadResource = tResource(0)
|
|
Else
|
|
ReadResource = tResource
|
|
End If
|
|
_
|
|
Set WshShell = Nothing
|
|
Set uRes = Nothing
|
|
_
|
|
End Function
|
|
|
|
Function ParsedFullName (ByVal SelectedF)
|
|
|
|
On Error Resume next
|
|
Dim poPArentOfSelectedF, poFolderItm, lsFieldA, psSelectedFInfo, uBGotValid, psObjType
|
|
If InStr(1, TypeName(SelectedF), "Folder") = 0 Then Exit Function
|
|
Set poPArentOfSelectedF = SelectedF.ParentFolder
|
|
lsFieldA = CStr(SelectedF.Title)
|
|
Set poFolderItm = poPArentOfSelectedF.ParseName(lsFieldA) ' FolderItem in Parent Folder
|
|
psSelectedFInfo=poPArentOfSelectedF.GetDetailsOf(poFolderItm, 2)
|
|
If InStr(1,psSelectedFInfo,"File Folder") = 0 Then
|
|
uBGotValid = False
|
|
Else
|
|
psObjType = CStr(TypeName(poFolderItm))
|
|
If psObjType="Nothing" Then
|
|
If cbpDebug = 1 Then WScript.echo "got invalid type " & psObjType
|
|
uBGotValid = False
|
|
ElseIf InStr(1,psObjType,"FolderItem") = 0 Then
|
|
If cbpDebug = 1 Then WScript.echo "got unexpected type " & psObjType
|
|
uBGotValid = False
|
|
Else
|
|
If cbpDebug = 1 Then WScript.echo "got " & psObjType
|
|
uBGotValid = True
|
|
End If
|
|
End If
|
|
If uBGotValid = True Then
|
|
ParsedFullName = poFolderItm.Path
|
|
End If
|
|
End Function
|
|
|
|
Public Function sURLDecoded (sTestPassInputv)
|
|
_
|
|
Dim oHexBackDict, sOutPut, npCnt
|
|
Set oHexBackDict = CreateObject("Scripting.Dictionary")
|
|
_
|
|
For npCnt = 32 To 64
|
|
sOutPut = "%" & Hex(npCnt)
|
|
oHexBackDict.Add sOutPut, Chr(npCnt)
|
|
Next
|
|
_
|
|
For Each sOutPut in oHexBackDict.Keys
|
|
sTestPassInputv = Replace(sTestPassInputv, sOutPut, oHexBackDict(sOutPut), 1, 1000)
|
|
Next
|
|
_
|
|
sURLDecoded = sTestPassInputv
|
|
_
|
|
End Function
|
|
|
|
|
|
Private Sub AddUser (sLocalComputer, sDomain, sLocalGroup, sDomainUser)
|
|
sDEBUG = True
|
|
Dim objGroup
|
|
''on error resume next
|
|
''err.clear
|
|
_
|
|
set objGroup = GetObject("WinNT://" & sLocalComputer & "/" & sLocalGroup)
|
|
objGroup.Add "WinNT://" & sDomain & "/" & sDomainUser
|
|
_
|
|
If err.number <> 0 Then
|
|
If True = sDebug then
|
|
WScript.Echo "Unable to add " & _
|
|
sDomainUser & _
|
|
" to group " & _
|
|
sLocalGroup & _
|
|
VBNEWLINE & _
|
|
Err.number & _
|
|
VBNEWLINE & _
|
|
err.Description
|
|
End If
|
|
_
|
|
Const cMode ="WQL"
|
|
Const lsWMIMoniker = "winmgmts:{impersonationLevel=impersonate}"
|
|
_
|
|
sPGroupComponentTemplate = _
|
|
"Win32_Group.Domain=\""" & _
|
|
Ucase(sLocalComputer) & _
|
|
"\"",Name=\"""& _
|
|
sLocalGroup & _
|
|
"\"""
|
|
|
|
_
|
|
sPWMIQueryString="SELECT * FROM Win32_GroupUser " &_
|
|
"WHERE GroupComponent=""" & sPGroupComponentTemplate & """"
|
|
|
|
_
|
|
Set atPResWMIObjS = GetObject(lsWMIMoniker)._
|
|
ExecQuery(sPWMIQueryString, _
|
|
cMode)
|
|
_
|
|
sPPartComponentTemplate="Win32_UserAccount.Domain=\""" & _
|
|
UCase(sDomain) & _
|
|
"\"",Name=\""" & _
|
|
UCase(sDomainUser) & _
|
|
"\"""
|
|
_
|
|
For Each tPResWMIObjS In atPResWMIObjS
|
|
Set oPPartComponentRegEx = CreateObject("VBScript.Regexp")
|
|
With oPPartComponentRegEx
|
|
.Global = True
|
|
.IgnoreCase = True
|
|
.Pattern = sPPartComponentTemplate
|
|
End With
|
|
_
|
|
Set aDummy = oPPartComponentRegEx.Execute(tPResWMIObjS.PartComponent)
|
|
_
|
|
If aDummy.Count <> 0 Then
|
|
If sDebug = True Then
|
|
WScript.echo """" & _
|
|
sPWMIQueryString & _
|
|
"""" & _
|
|
VBNEWLINE & _
|
|
tPResWMIObjS.PartComponent
|
|
End If
|
|
End If
|
|
Next
|
|
Else
|
|
If True = sDebug Then
|
|
Wscript.Echo "Added" , _
|
|
sDomain &"\"& sDomainUser , _
|
|
"to group" , _
|
|
sLocalGroup
|
|
End If
|
|
End if
|
|
End Sub
|
|
|
|
|
|
]]>
|
|
</script>
|
|
</job>
|
|
</package> |