#!/usr/bin/perl -w ##################################### # # Script Name: iisexport.pl # Written by: Billy Strader # E-Mail Address: losts@mindspring.com # Purpose: To export IIS setting and import to another box such as a DR box. # Notes: This script ONLY works on Windows 2003 Server with IIS 6.0. # The account that runs this script will need Administrator access to both servers. # ##################################### use strict; use File::Copy; use Win32::Service; # Set the main server you wish to export data for my $server = "myserver"; # Set the server you wish to import the data to my $drserver = "mydrserver"; # Set the domain my $domain = "mydomain.com"; # Set any variables such as IP's you wish to have changed from 1 system to the other my %ips = ( "192.168.0.1" => "192.168.0.100", "192.168.0.2" => "192.168.0.200"); # First lets remove the old files if they exist if (-f "\\\\$server.$domain\\c\$\\$server.xml") { unlink("\\\\$server.$domain\\c\$\\$server.xml"); } if (-f "\\\\$server.$domain\\c\$\\new$server.xml") { unlink("\\\\$drserver.$domain\\c\$\\new$server.xml"); } if (-f "\\\\$drserver.$domain\\c\$\\$server.xml") { unlink("\\\\$drserver.$domain\\c\$\\$server.xml"); } if (-f "\\\\$drserver.$domain\\c\$\\new$server.xml") { unlink("\\\\$drserver.$domain\\c\$\\new$server.xml"); } # Now lets runs the iiscnfg command to export the entire IIS setup system("iiscnfg /s $server.$domain /export /f c:\\$server.xml /sp /lm /children"); # Open the file and dump it to an array so we can go through it open(FILE, "c:\\$server.xml"); my @file = ; close(FILE); # Create new file and for each entry in the replace catagory lets replace those selected items. open(NEWFILE, ">c:\\new$server.xml"); foreach my $line (@file) { chomp $line; foreach my $ip (sort(keys %ips)){ my $newip = $ips{$ip}; $line =~ s/$ip/$newip/ig; } print NEWFILE "$line\n"; } close(NEWFILE); # Lets now copy the new file to the DR server my $srcfile = "\\\\$server.$domain\\c\$\\new$server.xml"; my $dstfile = "\\\\$drserver.$domain\\c\$\\new$server.xml"; copy($srcfile, $dstfile) or die "Copy failed: $!"; # Now we import the IIS setting to the DR box with the changes system("iiscnfg /s $drserver.$domain /import /f c:\\new$server.xml /sp /lm /dp /lm /children"); # Here we go back through the XML file and start each instance using IISWEB my $inserver = 0; foreach my $newline (@file) { chomp $newline; if ($newline =~ /ServerBindings/i) { print "$newline\n"; $inserver = 1; } if (($newline =~ /ServerComment/i) and ($inserver == 1)) { my ($com, $inst) = split(/=/,$newline); system("iisweb /start $inst /s $drserver.$domain"); $inserver = 0; } }