-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathIISsync.vbs
More file actions
executable file
·130 lines (120 loc) · 6.63 KB
/
Copy pathIISsync.vbs
File metadata and controls
executable file
·130 lines (120 loc) · 6.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
Option Explicit
Dim ActiveNode
Dim Today
Const ClusterManagementIP = "192.168.17.1"
Const PrimaryNode = "Webnode1" 'Ensure that the server hosting the script can resolve the nodes via DNS.
Const SecondaryNode = "Webnode2"
Const SourceBackupPath = "C:\Metabase Backup\" 'Path to location to backup Metabase - Must Be A Local Directory!(IIScnf.vbs limitation)
Const UNCSourceBackupPath = "\C$\Metabase Backup\"'Path Used for backup consolidation, leave \\Node name out.
Const MetabaseImportPath = "\C$\Metabase Import\" 'Path used to search for the most recent Active metabase Backup. Used to import to passive. Leave \\Node name out.
Const MetabaseImportPathLocal = "C:\Metabase Import\"
'Discover which node is Active (1.)Works only from a remote server 2.)NLB must be configured in Single Host mode for Port rules)
Today = Now
ActiveNode = GetActiveNode(ClusterManagementIP)
'Backup The Metabase of Primary Node
BackupMetabase ActiveNode, PrimaryNode, SourceBackupPath, Today
'Backup The Metabase of Secondary node
BackupMetabase ActiveNode, SecondaryNode, SourceBackupPath, Today
ConsolidateBackupFiles PrimaryNode, SourceBackupPath,UNCSourceBackupPath
ConsolidateBackupFiles SecondaryNode, SourceBackupPath, UNCSourceBackupPath
If Lcase(ActiveNode) <> Lcase(PrimaryNode) Then
ImportMetabase ActiveNode, PrimaryNode, MetabaseImportPath, SourceBackupPath, MetabaseImportPathLocal, Today
ElseIf Lcase(ActiveNode) <> Lcase(SecondaryNode) Then
ImportMetabase ActiveNode, SecondaryNode, MetabaseImportPath, SourceBackupPath, MetabaseImportPathLocal, Today
End If
'**********************************GetActiveNode*******************************************
Private Function GetActiveNode(ClusterManagementIP)
Dim objWMIService, colItems, objItem
Set objWMIService = GetObject("winmgmts:\\" & ClusterManagementIP & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT CSName FROM Win32_OperatingSystem",,48)
For Each objItem in colItems
GetActiveNode = objItem.CSName
Next
End Function
'*********************************BackupMetabase(ActiveNode, PrimaryNode, SecondaryNode)****
Private Sub BackupMetabase(ActiveNode, NodeToBackup, SourceBackupPath, Today)
Dim strFileName
Dim objShell
Dim objExec
Dim MetabaseBackupCommand
Dim objWMIService
Dim intProcessID
Dim errReturn
Dim stdErrLogFile
Dim stdOutLogFile
Dim ProcessRunning
'Construct the Backup FileName
Today = Now
If Lcase(ActiveNode) = Lcase(NodeToBackup) Then
strFileName = Month(Today)& "-" & Day(Today) & "-" & Year(today) & " IIS Metabase Backup(Active - " & NodeToBackup & ")"& ".xml"
stdErrLogFile = Month(Today)& "-" & Day(Today) & "-" & Year(today) & " IIS Metabase Backup(Active - " & NodeToBackup & ")"& "stdERR.log"
stdOutLogFile = Month(Today)& "-" & Day(Today) & "-" & Year(today) & " IIS Metabase Backup(Active - " & NodeToBackup & ")"& "stdOUT.log"
Elseif Lcase(ActiveNode) <> Lcase(NodeToBackup) Then
strFileName = Month(Today)& "-" & Day(Today) & "-" & Year(today) & " IIS Metabase Backup(Passive - " & NodeToBackup & ")"& ".xml"
stdErrLogFile = Month(Today)& "-" & Day(Today) & "-" & Year(today) & " IIS Metabase Backup(Passive - " & NodeToBackup & ")"& "stdERR.log"
stdOutLogFile = Month(Today)& "-" & Day(Today) & "-" & Year(today) & " IIS Metabase Backup(Passive - " & NodeToBackup & ")"& "stdOUT.log"
End If
MetabaseBackupCommand = "cmd.exe /c cscript C:\Windows\System32\iiscnfg.vbs /export /f """ & SourceBackupPath & strFileName & """ /sp / /children > """ & SourceBackupPath & stdOutLogFile & """ 2> """ & SourceBackupPath & stdErrLogFile & """" & "& net stop ""IIS Admin Service"" /Y & net start ""World Wide Web Publishing Service"" & net start ""Simple Mail Transfer Protocol (SMTP)"""
'Run IIScnfg.vbs
Set objWMIService = GetObject _
("winmgmts:\\" & NodeToBackup & "\root\cimv2:Win32_Process")
errReturn = objWMIService.Create _
(MetabaseBackupCommand, Null, Null, intProcessID)
'Wscript.Echo "(If 0, then no error occured creating process): " & errReturn
ProcessRunning = ProcessMonitor(NodeToBackup, intProcessID)
Do While ProcessRunning = 0
'wscript.echo "ProcessID: " & intProcessID & " Active"
ProcessRunning = ProcessMonitor(NodeToBackup, intProcessID)
wscript.sleep(1000)
Loop
End Sub
'*************************************ConsolidateBackupFiles**********************
Private Sub ConsolidateBackupFiles(Node, SourceBackupPath, UNCSourceBackupPath)
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "\\" & Node & UNCSourceBackupPath & "*", SourceBackupPath, true
objFSO.DeleteFile "\\" & Node & UNCSourceBackupPath & "*", true
End Sub
'*********************************ProcessMonitor**********************************
Private Function ProcessMonitor(Node, PID)
Dim objWMIService
Dim colItems
Dim objItem
Dim PIDPresent
PIDPresent = 1
Set objWMIService = GetObject("winmgmts:\\" & Node & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT ProcessId FROM Win32_Process",,48)
For Each objItem in colItems
If PID = objItem.ProcessId Then
PIDPresent = 0
End If
Next
ProcessMonitor = PIDPresent
End Function
'****************************************ImportMetabase******************************
Private Sub ImportMetabase(ActiveNode, ImportTargetNode, MetabaseImportPath, SourceBackupPath, MetabaseImportPathLocal, Today)
Dim objFSO
Dim objWMIService
Dim errReturn
Dim ProcessRunning
Dim strFileName
Dim MetabaseImportCommand
Dim intProcessID
strFileName = Month(Today)& "-" & Day(Today) & "-" & Year(today) & " IIS Metabase Backup(Active - " & ActiveNode & ").xml"
MetabaseImportCommand = "cmd.exe /c cscript C:\Windows\System32\iiscnfg.vbs /import /f """ & MetabaseImportPathLocal & strFileName & """ /sp / /dp / /children > """ & "C:\Metabase Import\LastImport-stdOut.log" & """ 2> """ & "C:\Metabase Import\LastImport-stdErr.log" & """"& "& net stop ""IIS Admin Service"" /Y & net start ""World Wide Web Publishing Service"" & net start ""Simple Mail Transfer Protocol (SMTP)"""
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile SourceBackupPath & strFileName, "\\" & ImportTargetNode & MetabaseImportPath, true
'wscript.echo MetabaseImportCommand
Set objWMIService = GetObject _
("winmgmts:\\" & ImportTargetNode & "\root\cimv2:Win32_Process")
errReturn = objWMIService.Create _
(MetabaseImportCommand, Null, Null, intProcessID)
'Wscript.Echo "(If 0, then no error occured creating process): " & errReturn
ProcessRunning = ProcessMonitor(ImportTargetNode, intProcessID)
Do While ProcessRunning = 0
'wscript.echo "ProcessID: " & intProcessID & " Active"
ProcessRunning = ProcessMonitor(ImportTargetNode, intProcessID)
wscript.sleep(1000)
Loop
End Sub