windows-nt/Source/XPSP1/NT/admin/dsutils/migrate/scripts/sidhist.vbt

172 lines
4.1 KiB
Plaintext
Raw Normal View History

2020-09-26 03:20:57 -05:00
'
' Example usage of ICloneSecurityPrincipal::AddSidHistory
'
' Copyright (c) 1999 Microsoft Corporation
option explicit
const SCRIPT_FILENAME = "sidhist.vbs"
const SCRIPT_SOURCE_NAME = __FILE__
const SCRIPT_DATE = __DATE__
const SCRIPT_TIME = __TIME__
const ARG_COUNT = 6
' command line parameters
Dim srcDC ' source domain controller
Dim srcDom ' source domain
Dim srcSam ' source principal SAM name
Dim dstDC ' destination controller
Dim dstDom ' destination domain
Dim dstSam ' destination principal SAM name
If wscript.arguments.count <> ARG_COUNT Then
PrintUsage
End If
Dim args()
ReDim args(0)
args(0) = ""
Dim i
For i = 0 to wscript.arguments.count - 1
ReDim Preserve args(i)
args(i) = wscript.arguments.item(i)
Next
srcDC = GetArgValue("srcdc", args)
srcDom = GetArgValue("srcdom", args)
srcSam = GetArgValue("srcsam", args)
dstDC = GetArgValue("dstdc", args)
dstDom = GetArgValue("dstdom", args)
dstSam = GetArgValue("dstsam", args)
If CheckForBadArgs(args) Then
wscript.echo "Unknown command-line arguments specified"
PrintUsage
End If
' Create the COM object implementing ICloneSecurity Principal
Dim clonepr
Set clonepr = CreateObject("DSUtils.ClonePrincipal")
On Error Resume Next
' Connect to the source and destination domain controllers
clonepr.Connect srcDC, srcDom, dstDC, dstDom
If Err.Number then
DumpErr
wscript.quit(0)
Else
wscript.echo "Connected"
End If
' Add the SID of the source principal to the sid history of the destination
' principal.
clonepr.AddSidHistory srcSam, dstSam, 0
If Err.Number then
DumpErr
wscript.quit(0)
Else
wscript.echo "Success"
End If
wscript.quit(0)
Function GetArgValue(argName, args())
Dim a
Dim v
Dim iLenArgName
Dim x
Dim iArgCount
Dim fullArgName
fullArgName = "/" & argName & ":"
iArgCount = Ubound(args)
' Get the length of the argname we are looking for
iLenArgName = Len(fullArgName)
GetArgValue = "" ' default to nothing
For x = 0 To iArgCount
If Len(args(x)) >= iLenArgName Then
a = Mid(args(x), 1, iLenArgName)
If UCase(a) = UCase(fullArgName) Then
' erase it so we can look for unknown args later
v = args(x)
args(x) = ""
If Len(v) > iLenArgName Then
GetArgValue = Mid(v, iLenArgName + 1)
Exit Function
Else
GetArgValue = ""
Exit Function
End If
End If
End If
Next
End Function
Function CheckForBadArgs(args())
For i = 0 to UBound(args)
If Len(args(i)) > 0 Then
CheckForBadArgs = 1
Exit Function
End If
Next
CheckForBadArgs = 0
End Function
Sub PrintUsage
Echo "Usage: cscript " & SCRIPT_FILENAME & " /srcdc:<dcname> /srcdom:<domain>"
Echo "/srcsam:<name> /dstdc:<dcname> /dstdom:<domain> /dstsam:<name>"
Echo ""
Echo "Parameters:"
Echo " /srcdc - source domain controller NetBIOS computer name (without leading \\)"
Echo ""
Echo " /srcdom - source domain NetBIOS name"
Echo ""
Echo " /srcsam - source principal SAM name"
Echo ""
Echo " /dstdc - destination domain controller NetBIOS computer name (without "
Echo " leading \\)"
Echo " This script must be run on the machine indicated here."
Echo ""
Echo " /dstdom - destination domain DNS name"
Echo ""
Echo " /dstsam - destination principal SAM name"
Echo ""
Echo SCRIPT_DATE & " " & SCRIPT_TIME
wscript.quit(0)
End Sub
Sub DumpErr
wscript.echo "Error 0x" & CStr(Hex(Err.Number)) & " occurred."
wscript.echo "Error Description: " & Err.Description
wscript.echo "Error HelpContext: " & Err.HelpContext
wscript.echo "Error HelpFile : " & Err.HelpFile
wscript.echo "Error Source : " & Err.Source
Err.Clear
End Sub
sub Echo(byref message)
wscript.echo message
end sub