Att stoppa 100 iis siter
På jobbet har vi ca 100 iis siter på vår webserver och nu har den blivit klonad, det är en så kallad virtuell maskin (VPS) och jag skulle nu stänga ner alla siterna för att senare i veckan börja testa lastbalanserings funktioner vi ska sätta up.
Var bara det att IIS har ingen multiselect funktion för iis siter, så jag skrev ihop ett litet program i C# (.Net) som stängde ner en efter en.
Se koden nedan:
static void Main(string[] args)
{
Dictionary<string, string> sites = new Dictionary<string, string>();
DirectoryEntry iis = new DirectoryEntry("IIS://" + Environment.MachineName + "/w3svc");
iis = new DirectoryEntry("IIS://" + Environment.MachineName + "/w3svc");
foreach (DirectoryEntry site in iis.Children)
{
if (site.SchemaClassName == "IIsWebServer") //Web Sites have the IIsWebServer schema{
{
sites.Add(site.Name, site.Properties["ServerComment"].Value.ToString());
}
}
foreach (string siteName in sites.Keys)
{
Console.WriteLine(siteName + " - " + sites[siteName]);
StopIISSite(siteName);
}
Console.ReadLine();
}
static void StopIISSite(string site)
{
try
{
ConnectionOptions connectionOptions = new ConnectionOptions();
connectionOptions.Impersonation = ImpersonationLevel.Impersonate;
//connectionOptions.Username = "xxxx";
//connectionOptions.Password = "xxxx!";
ManagementScope managementScope =
new ManagementScope(@"\\localhost\root\microsoftiisv2", connectionOptions);
managementScope.Connect();
if (managementScope.IsConnected == false)
{
Console.WriteLine("Could not connect to WMI namespace " + managementScope.Path, "Connect Failed");
}
else
{
SelectQuery selectQuery =
new SelectQuery("Select * From IIsWebServer Where Name = 'W3SVC/" + site + "'");
using (ManagementObjectSearcher managementObjectSearcher =
new ManagementObjectSearcher(managementScope, selectQuery))
{
foreach (ManagementObject objMgmt in managementObjectSearcher.Get())
objMgmt.InvokeMethod("Stop", new object[0]);
}
}
}
catch (Exception ex)
{
if (ex.ToString().Contains("Invalid namespace"))
{
Console.WriteLine("Invalid Namespace Exception" + Environment.NewLine + Environment.NewLine +
"This program only works with IIS 6 and later", "Can't stop website");
}
else
{
Console.WriteLine(ex.Message, "Can't stop website");
}
}
}