如何使用 PowerShell 在 IIS 中停止和启动各个网站?

Posted

技术标签:

【中文标题】如何使用 PowerShell 在 IIS 中停止和启动各个网站?【英文标题】:How can I stop and start individual websites in IIS using PowerShell? 【发布时间】:2010-04-25 22:06:24 【问题描述】:

我在我的 Windows 7 开发机器上的 IIS7 中配置了多个站点,以在同一个端口上运行,并且通常一次只运行一个,具体取决于我正在处理的内容。我希望能够从 PowerShell 启动和停止我的开发站点,而不是打开 IIS 管理器。有没有人有很好的资源可以为我指明正确的方向或已经完成此任务的脚本?

【问题讨论】:

IIS 站点可能有 WMI 类。 我想我会通过提供以下链接来回答我自己的问题。 technet.microsoft.com/en-us/library/ee790599.aspx 【参考方案1】:

只是为了将来快速参考,命令是:

Import-Module WebAdministration
Stop-WebSite 'Default Web Site'
Start-WebSite 'Default Web Site'

【讨论】:

我完全是 PowerShell 菜鸟。我需要在您发布代码之前导入任何内容吗?我尝试的是启动 PowerShell,然后输入您发布的第一个 cmd,PowerShell 抛出错误。 阅读异常后它说我不需要导入 WebAdministration 但接下来它告诉我 Start-Website 'SiteName' 不是一个可识别的 cmdlet。 你从哪里得到的模块? 它带有 PowerShell。 这是完美的。我有一个需要在 azure dev ops 中部署的网站,大约 30% 的情况下,它无法将 dll 复制到 iis 站点文件夹,原因是它被另一个进程使用。我在部署步骤之前和之后添加了一个 powershell 任务来停止和启动站点,它就像魅力一样工作。谢谢。【参考方案2】:

除了 Keith 的回答,您可以使用 Invoke-Command 远程执行此操作。

Import-Module WebAdministration
$siteName = "Default Web Site"
$serverName = "name"
$block = Stop-WebSite $args[0]; Start-WebSite $args[0];  
$session = New-PSSession -ComputerName $serverName
Invoke-Command -Session $session -ScriptBlock $block -ArgumentList $siteName 

【讨论】:

它有效,但有人可以解释 $args[0] 部分吗?谢谢 @ToastMan $args 是脚本块输入参数数组。 Docs for $args and other auto variables 我需要远程命令。感谢您指出要实现这一目标还需要做一些额外的工作!【参考方案3】:

要访问系统模块,Powershell 需要像这样运行:

[path]\powershell.exe -NoExit -ImportSystemModules

我在这个iis forum上找到了上述内容。

【讨论】:

【参考方案4】:

我发现以下方法可以阻止远程服务器上的个别网站工作:

Invoke-Command -Computername $servername -Scriptblock  
    (Import-Module WebAdministration); 
    Stop-Website -Name "WebsiteName"; 
    Stop-Website -Name "AnotherWebsiteName"

在将Import-Module 放入() 之前,我遇到了上述一些错误

【讨论】:

以上是关于如何使用 PowerShell 在 IIS 中停止和启动各个网站?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PowerShell 远程检查 Web 应用程序池的状态?

如何通过 windows powershell 命令在 IIS 网站中设置 ID 属性

如何使用 Powershell 回收 IIS AppPool?

如何使用 powershell 设置 IIS 的表单身份验证(system.web/authentication)的 overrideMode?

是否可以/如何使用某些 cmdlet 停止 powershell?

是否可以/如何使用某些 cmdlet 停止 powershell?