我正在运行 Apache(作为 Windows 服务)和 IIS 10,并且希望能够打开或关闭这些服务,因为它们都占用端口 80,而我不希望配置任何一个来使用其他端口。
因此,我想编写一个 PowerShell 脚本,用于停止 IIS 并启动 Apache 或反之亦然。我该如何实现这一点?
答案1
function Switch-Webserver {
Param(
[Parameter( ParameterSetName = "IIS")]
[switch]$IIS,
[Parameter( ParameterSetName = "Apache")]
[switch]$Apache
)
switch ($PSCmdlet.ParameterSetName)
{
'IIS' { get-service "Apache" | stop-service -force ; start-service IISAdmin }
'Apache' { get-service IISAdmin | stop-service -force ; start-service "Apache" }
}
}
您可以在 PowerShell 控制台中像这样使用此功能:
Switch-Webserver -IIS # This will stop Apache and start IIS
Switch-Webserver -Apache # This will stop IIS and start Apache
你可以把这个函数放在你的PowerShell 配置文件或者从控制台窗口加载它,如下所示:
. C:\Path\To\Function\Switch-Webserver.ps1
答案2
诀窍是在启动和停止服务时使用参数,以便它们可以在后台运行。首先,您可能需要安装服务。然后。要正常停止 Apache,请在脚本中使用此脚本:
httpd -k graceful-stop
只需将上述内容放入脚本并执行它,它就会停止 apache。
首先,你可能已经猜到了:
httpd -k start
对于停止和启动 IIS,您可以找到说明这里。