【发布时间】:2020-05-10 02:22:22
【问题描述】:
我想停止一个 IIS 站点,将我的新文件/应用程序复制到它,然后通过 PowerShell 脚本自动重启该站点。
当我通过 IIS-Manager-GUI 执行此操作时(右键单击站点 --> 停止),一切正常。该站点无法访问,所有客户端立即断开连接(使用 SignalR)。我替换了我的文件并通过 GUI 重新启动。
如果我尝试使用 PowerShell Stop-IISSite 进行相同操作,则新请求无法访问该站点,但该应用程序似乎可以在其上运行并且现有客户端继续工作(有点)。如果我尝试复制我的文件,应用程序文件仍被锁定且无法替换。
系统是带有 IIS 10.0 的 Win2019 Nano Server,运行 Asp.Net Core 3.1 应用程序(进程集成 AppPool)。
这是我的 PS 代码:
Stop-IISSite -Name siteToReplace -confirm:$False;
Write-Host -NoNewLine 'Site siteToReplace is stopped, copy new files now..!';
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');
Start-IISSite -Name siteToReplace;
我在这里缺少什么?为什么 Stop-IISSite 的工作方式与 UI 不同?如何停止一个站点,包括运行应用程序实例来替换文件,而不必停止整个 IIS?
【问题讨论】:
-
我认为您可以通过停止应用程序池来解决此问题。
Stop-WebAppPool -
Stop-WebAppPool不在 iisadministration 模块中。但我决定:$s=Get-IISSite -Name siteToReplace; $s.Stop(); (Get-IISAppPool -name $s.Applications[0].ApplicationPoolName).Recycle(); <# COPY #>; $s.Start();,只要应用程序池不与其他网站一起使用,这应该可以解决问题...... -
因为 IIS 管理器和 PowerShell cmdlet 不是建立在同一个基础上的,所以它们的行为差异很大,就像您发现的那样。 docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10/…
标签: powershell asp.net-core iis application-pool