2009-08-31 7 views
11

J'ai deux serveurs Serveur A et Serveur B. Je veux arrêter le serveur A du serveur B à distance en utilisant le script Powershell.Comment démarrer/arrêter IIS 6.0/7.0 à distance à l'aide de scripts PowerShell?

+0

Nous avons besoin de plus d'informations sur la configuration de votre domaine. Les deux serveurs fonctionnent-ils dans le même domaine qu'un seul compte d'utilisateur a des autorisations équivalentes sur le serveur? –

+0

Aussi cette question devrait probablement être déplacée à la faute de serveur. –

Répondre

14

L'un des moyens les plus simples de le faire est vraiment avec une simple exécution de ligne de commande en utilisant PsExec. Et envoyer plus aux machines

IISReset/STOP ou/START ou/Restart

Alors vous feriez quelque chose comme ça

PsExec \\Server2 -u Administrator -p somePassword IISReset /STOP 

Faites juste attention à la gestion des mots de passe si vous allez dans cette voie ou n'importe quel itinéraire qui implique un certain type d'emprunt d'identité de compte d'administrateur de sorte que personne ne puisse obtenir une copie en texte brut du mot de passe d'administrateur.

9

Parce que vous avez demandé Powershell:

(Get-WmiObject Win32_Service -ComputerName ServerA -Filter "Name='iisadmin'").InvokeMethod("StopService", $null) 

D'accord cette question devrait être déplacé à ServerFault.

3
$service = Get-WmiObject -computer 'ServerA' Win32_Service -Filter "Name='IISAdmin'" 
$service 
$service.InvokeMethod('StopService',$Null) 
start-sleep -s 5 
$service.InvokeMethod('StartService',$Null) 
start-sleep -s 5 
$service.State 

$service = Get-WmiObject -computer 'ServerB' Win32_Service -Filter "Name='IISAdmin'" 
$service 
$service.InvokeMethod('StopService',$Null) 
start-sleep -s 5 
$service.InvokeMethod('StartService',$Null) 
start-sleep -s 5 
$service.State 
2

Dans powershell 2.0, exécuter ce qui suit à partir de l'invite cmd:

invoke-command -computername <yourremoteservername> -scriptblock {iisreset} 
10

Option 1:

iisreset remotepcname /restart 

Option 2:

(Get-Service -ComputerName remotepc -Name 'IISAdmin').stop() 

Option 3:

Invoke-Command -ComputerName remotepc -ScriptBlock {iisreset} 
+0

Réponse parfaite. Merci. –

0

Vous pouvez utiliser get-wmiobject cmdlt avec différents espaces de noms pour les différentes versions de IIS v6 ou v7, au-dessous commande pipelining peut être utilisé pour de telles opérations dans IIS localement ou à distance

pour IIS v6

$srv = "Server Name or IP Address" 

$app = "Name of App Pool" 

$x = get-wmiobject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPool" -ComputerName $srv -Authentication PacketPrivacy | where-object {$_.Name -eq "W3SVC/AppPools/$app"} 

$x.Stop() 

$x.Start() 

for IIS v7 

$srv = "Server Name or IP Address" 

$app = "Name of App Pool" 

$x = Get-WMIObject -Namespace "root\webAdministration" -Class "ApplicationPool" -ComputerName $srv -Authentication PacketPrivacy | Where-Object {$_.Name -eq $app} 

$x.Stop() 

$x.Start() 

vous devez disposer de privilèges de compte suffisants pour ces opérations, événement bien que je préfère faire $ x.Recycle() pour mes sites Web.