Comment puis-je recycler un pool d'applications IIS avec Powershell?
Je n'ai pas vraiment fait de Windows scripting à tous, je suis à une perte sur la façon de tirer celui-ci hors. De toute façon, en gros ce que nous voulons faire est d'avoir un script qui va prendre un argument sur lequel IIS AppPool à recycler. J'ai fait quelques recherches sur Google et je n'ai pas eu beaucoup de succès, de mettre les choses au travail.
Voici ce que j'essaie maintenant:
$appPoolName = $args[0]
$appPool = get-wmiobject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPools" Where-Object {$_.Name -eq "W3SVC/APPPOOLS/$appPoolName"}
$appPool.Recycle()
et l'erreur que je reçois:
Get-WmiObject : A parameter cannot be found that matches parameter name '$_.Name -eq "W3SVC/APPPOOLS/$appPoolName"'.
De toute façon, ce serait bien si je savais aussi comment déboguer des choses comme ça. J'ai déjà corrigé un bug avec le script d'origine en faisant gwmi de l'espace de noms "root\MicrosoftIISv2" -liste. Tout les autres trucs comme ça serait génial.
Merci!
Mise à jour: Voici quelques infos
$appPool = gwmi -namespace "root\MicrosoftIISv2" -class "IISApplicationPools" | Get-Member
. TypeName: System.Management.ManagementObject#root\MicrosoftIISv2\IIsApplicationPools
Name MemberType Definition
---- ---------- ----------
Caption Property System.String Caption {get;set;}
Description Property System.String Description {get;set;}
InstallDate Property System.String InstallDate {get;set;}
Name Property System.String Name {get;set;}
Status Property System.String Status {get;set;}
__CLASS Property System.String __CLASS {get;set;}
__DERIVATION Property System.String[] __DERIVATION {get;set;}
__DYNASTY Property System.String __DYNASTY {get;set;}
__GENUS Property System.Int32 __GENUS {get;set;}
__NAMESPACE Property System.String __NAMESPACE {get;set;}
__PATH Property System.String __PATH {get;set;}
__PROPERTY_COUNT Property System.Int32 __PROPERTY_COUNT {get;set;}
__RELPATH Property System.String __RELPATH {get;set;}
__SERVER Property System.String __SERVER {get;set;}
__SUPERCLASS Property System.String __SUPERCLASS {get;set;}
ConvertFromDateTime ScriptMethod System.Object ConvertFromDateTime();
ConvertToDateTime ScriptMethod System.Object ConvertToDateTime();
Delete ScriptMethod System.Object Delete();
GetType ScriptMethod System.Object GetType();
Put ScriptMethod System.Object Put();
gwmi -namespace "root\MicrosoftIISv2" -class "IISApplicationPools"
__GENUS : 2
__CLASS : IIsApplicationPools
__SUPERCLASS : CIM_LogicalElement
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : IIsApplicationPools.Name="W3SVC/AppPools"
__PROPERTY_COUNT : 5
__DERIVATION : {CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER : IRON
__NAMESPACE : root\MicrosoftIISv2
__PATH : \\IRON\root\MicrosoftIISv2:IIsApplicationPools.Name="W3SVC/A
ppPools"
Caption :
Description :
InstallDate :
Name : W3SVC/AppPools
Status :
- Juste une petite note style.. plutôt que d'utiliser $args pour obtenir l'application le nom du pool, vous pouvez déclarer un nom de paramater. Scripts PowerShell prendra les paramètres nommés et les remplir d'abord par son nom, et ensuite par la poste. Vous pouvez également spécifier un type du paramètre. Exemple: (param [string]$AppPoolName)
- Curieux de savoir si vous avez obtenu ce que cela va avec la mise à jour du nom de la classe WMI suggestion faite dans ma réponse?
Vous devez vous connecter pour publier un commentaire.
Where-Object est un filtre qui s'attend à quelque chose comme en entrée. Il semble y avoir un manque pipe, avant la où filtre.
Essayer:
Modifier: j'ai remarqué que la classe WMI a été IISApplicationPools, qui comme vous l'avez vu, n'est pas de nous montrer le contenu de la méthode lorsque les canalisations de Get-member. Ce doit être modifié pour IISApplicationPool (non-pluriel). Avec ce changement, vous êtes en mesure d'utiliser le contenu de la méthode. Le code ci-dessus a été mis à jour.
En utilisant les données de cette question, j'ai été en mesure de créer 2 fonctions très utiles.
Le code:
Vous pouvez utiliser ces fonctions comme ce
Lors de l'utilisation de get-WMIObject vous devriez probablement utiliser de filtre à la place de la tuyauterie where-Object. le paramètre de filtre utilise WQL la syntaxe de la langue au lieu de PowerShell, alors ne la laissez pas vous passionner.
Avoir dit que le fait de mettre le tuyau il devrait y travailler, et certainement plus facile de travailler avec, sauf si vous savez déjà WQL.
Ce n'est pas une Powershell-réponse spécifique, mais iisapp.vbs sera la liste de l'exécution de l'application des piscines, et il y a un /r drapeau de recycler une application particulière de la piscine.
Vous pouvez également utiliser une requête WQL, pour obtenir le pool d'applications que vous voulez; cela a l'avantage de filtrer les résultats sur le WMI côté, qui est particulièrement utile lors de l'obtention d'objets à partir d'une machine distante.
Avec IIS 8.0 j'ai trouvé, j'ai dû utiliser
-namespace root\webadministration -class ApplicationPool
Par exemple, pour recycler un Pool d'Applications IIS 8 à distance à l'aide de PowerShell:
Comme toujours, merci de tester ce tout d'abord par faire la liste des pools d'applications. Il suffit de retirer le
| where
et la première(
de la commande:Et sur une seule ligne:
En Powershell: