Я использую Apache (в качестве службы Windows) и IIS 10 и хотел бы иметь возможность включать или отключать каждую из этих служб, поскольку они оба захватывают порт 80, и я не хочу настраивать ни один из них для использования другой порт.

Поэтому я хотел бы сделать сценарий PowerShell, который либо останавливает IIS и запускает Apache, либо наоборот. Как мне этого добиться?

2 ответа2

2
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
0

Хитрость заключается в использовании аргумента при запуске и остановке служб, чтобы они могли работать в фоновом режиме. Во-первых, вам может понадобиться установить сервис. Затем. чтобы корректно остановить apache, используйте это в скрипте:

httpd -k graceful-stop

Просто поместите вышеперечисленное в скрипт и выполните его, и он остановит Apache.

Для начала вы могли догадаться:

httpd -k start

Для остановки и запуска IIS, вы можете найти там инструкции здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .