We can run set of command on specific host machine remotly using Invoke-Command
```
Invoke-Command -ComputerName $hostname -ScriptBlock {
param($apn)
Import-Module WebAdministration ;
Get-WebAppPoolState $apn} -Args $appPoolName
```
> **pre-requisites** for Invoke-Command are
- **WinRM service** should be running state in both host machine (where triggering commands ) and remote host machine (where executing commands)
- **5985(for http)\5986 (https)** port should be opened between host machine and remote machine.
> We can check WinRm Service is running or not usign below command
```
Get-Service |Where-Object{$_.Name -eq "WinRm" -and $_.Status -eq "Running"}
```
> We can check WinRm port is opened between two servers
```
TNC -CommonTCPPort WINRM
```
- IISAdministration module is newer version of Administration module. This module cmdlets will provide better support for the pipeline and scale better.
- WebAdministration is legacy version of IIS Administration module , this module cmdlets contains more efficient code.
- If it is web server , `IIS Management services`,`IIS Management scripts and Tools` features are enabled under `Web mangement Tools`section in 'Windows Features` (Appwiz.cpl)
> we can install IISAdministration IISAdministration PowerShell Module from the PowerShell Gallery
```
Install-Module IISAdministration
Install-Module WebAdministration ##Legacy version
```
#### App pool commands
1. `Get-WebAppPoolState` cmdlet used to get state of the app pool whether App pool is Started or stopped or Starting or Stopping
```
function Get-AppPoolStatus(){
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
$appPoolName)
Import-Module WebAdministration ;
$appPoolStatus=Get-WebAppPoolState -Name $appPoolName
$status =$appPoolStatus.Value
Write-Host "Status of the $appPoolName app pool is $status in $hostname"
return $status
}
$appPoolName="UserAppPool"
$status =Get-AppPoolStatus -HostName "WebServer-01" -appPoolName $appPoolName
```
2. `Start-WebAppPool` cmdlet is used to start particular app pool
> Note: It will throw execption if App pool doesn't exist or App pool is already started.
```
function Start-AppPool(){
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
$appPoolName)
Import-Module WebAdministration ;
Start-WebAppPool -Name $appPoolName
return $status
}
$appPoolName="UserAppPool"
$status =Start-AppPool -HostName "WebServer-01" -appPoolName $appPoolName
```
3. `Stop-WebAppPool` cmdlet is used to stop particular app pool
> Note: It will throw execption if App pool doesn't exist or App pool is already stopped.
```
function Stop-AppPool(){
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
$appPoolName)
Import-Module WebAdministration ;
Stop-WebAppPool -Name $appPoolName
}
$appPoolName="UserAppPool"
$status =Start-AppPool -HostName "WebServer-01" -appPoolName $appPoolName
```
4. `Restart-WebAppPool` cmdlet is used to stop particular app pool
> Note: It will throw execption if App pool doesn't exist or App pool is already stopped.
```
function Restart-AppPool(){
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
$appPoolName)
Import-Module WebAdministration ;
Restart-WebAppPool -Name $appPoolName
}
$appPoolName="UserAppPool"
$status =Start-AppPool -HostName "WebServer-01" -appPoolName $appPoolName
```
> Note: How to convert string to script block
```
$cmd="Import-Module WebAdministration; $Operation -Name $appPoolName"
$scriptBlock=[scriptblock]::Create($cmd)
```
Here is the [complete script ](https://raw.githubusercontent.com/KollaRajesh/aztdPowershellAutomation/main/AppPool/AppPool.ps1) to make actions on specific App pool in specific machine remotely.
Azure Cloud Solution Architect, Full-Stack Development in .Net Eco system, Senior Manager at Capgemini
Tuesday, March 28, 2023
How to perform Actions on App Pool across all servers for specific environment
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment