我想使用powershell脚本在IIS中启动和停止应用程序池。我曾尝试编写脚本,但我没有得到这个。
k4ymrczo1#
你可以用这个
import-module WebAdministration
请先检查应用程序池的状态。如果应用程序池已停止,则会出现异常。
$applicationPoolName = 'DefaultAppPool' if((Get-WebAppPoolState -Name $applicationPoolName).Value -ne 'Stopped'){ Write-Output ('Stopping Application Pool: {0}' -f $applicationPoolName) Stop-WebAppPool -Name $applicationPoolName }
if((Get-WebAppPoolState -Name $applicationPoolName).Value -ne 'Started'){ Write-Output ('Starting Application Pool: {0}' -f $applicationPoolName) Start-WebAppPool -Name $applicationPoolName }
2w3rbyxf2#
目前,IISAdminstration模块已经基本取代了WebAdministration。因此,如果您使用的是Windows 10 / Server 2016,则可以按如下方式使用Get-IISAppPool:
Import-Module IISAdministration (Get-IISAppPool "name").Recycle()
yuvru6vn3#
要使用PowerShell停止应用程序池,请使用
Stop-WebAppPool -Name YourAppPoolNameHere
要启动应用程序池
Start-WebAppPool -Name YourAppPoolNameHere
您需要安装WebAdministration模块,因此请使用以下命令检查是否已安装
WebAdministration
Get-Module -ListAvailable
p3rjfoxz4#
您可以使用下面的powershell脚本分别停止和停止所有应用程序池。下面的第二行提升权限。您可以排除此权限并仅以管理员身份运行。
停止所有应用程序池脚本
Import-Module WebAdministration if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit } $AppPools=Get-ChildItem IIS:\AppPools | Where {$_.State -eq "Started"} ForEach($AppPool in $AppPools) { Stop-WebAppPool -name $AppPool.name # Write-Output ('Stopping Application Pool: {0}' -f $AppPool.name) }
启动所有应用程序池脚本
Import-Module WebAdministration if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit } $AppPools=Get-ChildItem IIS:\AppPools | Where {$_.State -eq "Stopped"} ForEach($AppPool in $AppPools) { Start-WebAppPool -name $AppPool.name # Write-Output ('Starting Application Pool: {0}' -f $AppPool.name) }
von4xj4u5#
我在Azure管道中使用以下代码:
停止池:
Import-Module -Name 'C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WebAdministration\WebAdministration.psd1'; $AppPoolName = 'DefaultAppPool'; $AppPoolState = (Get-WebAppPoolState -Name $AppPoolName).Value; $WasStarted = $false; $Timeout = [System.TimeSpan]::FromMinutes(1); $StopWatch = New-Object -TypeName 'System.Diagnostics.Stopwatch'; $StopWatch.Start(); # Possible status: "Starting", "Started", "Stopping", "Stopped" and "Unknown". while ($AppPoolState -ne 'Stopped') { if ($AppPoolState -eq 'Started') { $WasStarted = $true; Stop-WebAppPool -Name $AppPoolName; } Start-Sleep -Seconds 2; if ($StopWatch.Elapsed -gt $Timeout) { throw New-Object -TypeName 'System.TimeoutException' -ArgumentList "Timeout of $($Timeout.TotalSeconds) seconds exceeded!"; } $AppPoolState = (Get-WebAppPoolState -Name $AppPoolName).Value; }
启动池:
Import-Module -Name 'C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WebAdministration\WebAdministration.psd1'; $AppPoolName = 'DefaultAppPool'; $AppPoolState = (Get-WebAppPoolState -Name $AppPoolName).Value; $WasStopped = $false; $Timeout = [System.TimeSpan]::FromMinutes(1); $StopWatch = New-Object -TypeName 'System.Diagnostics.Stopwatch'; $StopWatch.Start(); # Possible status: "Starting", "Started", "Stopping", "Stopped" and "Unknown". while ($AppPoolState -ne 'Started') { if ($AppPoolState -eq 'Stopped') { $WasStopped = $true; Start-WebAppPool -Name $AppPoolName; } Start-Sleep -Seconds 2; if ($StopWatch.Elapsed -gt $Timeout) { throw New-Object -TypeName 'System.TimeoutException' -ArgumentList "Timeout of $($Timeout.TotalSeconds) seconds exceeded!"; } $AppPoolState = (Get-WebAppPoolState -Name $AppPoolName).Value; }
变量$WasStarted和$WasStopped是本示例中未使用的额外信息,但可用于确定是否应在完成新版本部署后重新启动应用程序池(因为它之前已停止)。
$WasStarted
$WasStopped
vlju58qv6#
必须使用Import-Module导入WebAdministration模块,然后才能使用Start-WebAppPool和Stop-WebAppPool
gcmastyq7#
来自微软文档https://learn.microsoft.com/en-us/powershell/module/webadminstration/restart-webapppool?view=winserver2012-ps重新启动-WebAppPool回收应用程序池。这样你就不用考虑停、等、再开始了。
Import-Module WebAdministration
对于特定的正在运行的AppPool
$applicationPoolName = 'DefaultAppPool' Get-ChildItem IIS:\AppPools | Where {$_.State -ne "Stopped" -and $_.name -eq $applicationPoolName} | Restart-WebAppPool
对于所有正在运行的AppPools
Get-ChildItem IIS:\AppPools | Where {$_.State -ne "Stopped"} | Restart-WebAppPool
dy1byipe8#
正如Mitch Pomery在评论中提到的,apppool不会立即停止。因此,我的CI脚本无法将文件复制到apppool仍在使用的目录中。相反,我恢复到appcmd工具(显然是等待apppool真正停止),但仍然使用WebAdministration模块检查池是否正在运行。
appcmd
Import-Module WebAdministration if ((Get-WebAppPoolState -Name PCSServer).Value -ne 'Stopped'){ C:\Windows\system32\inetsrv\appcmd stop apppool "PCSServer-WS" } Expand-Archive -Path MBE.zip -DestinationPath $DEPLOY_PATH -Force C:\Windows\system32\inetsrv\appcmd start apppool "PCSServer-WS"
8条答案
按热度按时间k4ymrczo1#
你可以用这个
请先检查应用程序池的状态。如果应用程序池已停止,则会出现异常。
2w3rbyxf2#
目前,IISAdminstration模块已经基本取代了WebAdministration。
因此,如果您使用的是Windows 10 / Server 2016,则可以按如下方式使用Get-IISAppPool:
yuvru6vn3#
要使用PowerShell停止应用程序池,请使用
要启动应用程序池
您需要安装
WebAdministration
模块,因此请使用以下命令检查是否已安装p3rjfoxz4#
您可以使用下面的powershell脚本分别停止和停止所有应用程序池。下面的第二行提升权限。您可以排除此权限并仅以管理员身份运行。
停止所有应用程序池脚本
启动所有应用程序池脚本
von4xj4u5#
我在Azure管道中使用以下代码:
停止池:
启动池:
变量
$WasStarted
和$WasStopped
是本示例中未使用的额外信息,但可用于确定是否应在完成新版本部署后重新启动应用程序池(因为它之前已停止)。vlju58qv6#
必须使用Import-Module导入
WebAdministration
模块,然后才能使用Start-WebAppPool和Stop-WebAppPoolgcmastyq7#
来自微软文档https://learn.microsoft.com/en-us/powershell/module/webadminstration/restart-webapppool?view=winserver2012-ps
重新启动-WebAppPool回收应用程序池。
这样你就不用考虑停、等、再开始了。
对于特定的正在运行的AppPool
对于所有正在运行的AppPools
dy1byipe8#
正如Mitch Pomery在评论中提到的,apppool不会立即停止。因此,我的CI脚本无法将文件复制到apppool仍在使用的目录中。相反,我恢复到
appcmd
工具(显然是等待apppool真正停止),但仍然使用WebAdministration
模块检查池是否正在运行。