functions/service/Manage-DynamicsNavService.ps1

function Manage-DynamicsNavService {
<#
.SYNOPSIS
Startet, stoppt oder startet eine Dynamics NAV/BC Serviceinstanz neu.
 
.DESCRIPTION
Diese Funktion überprüft den Status der angegebenen Dynamics NAV/Business Central Serverinstanz
und führt die gewünschte Aktion (Start, Stop oder Restart) aus. Falls die nötigen Cmdlets noch
nicht importiert wurden, erfolgt dies automatisch über Import-DynamicsNavModule.
 
.PARAMETER PlatformVersion
Die installierte Dynamics NAV/BC Plattformversion (z. B. "150").
 
.PARAMETER ServerInstance
Der Name der Dynamics NAV/BC Serverinstanz, z. B. "BC150".
 
.PARAMETER Action
Die gewünschte Aktion, die auf die Serverinstanz angewendet wird. Mögliche Werte: Start, Stop, Restart.
 
.EXAMPLE
Manage-DynamicsNavService -PlatformVersion 150 -ServerInstance "BC150" -Action Start
Startet die Serverinstanz "BC150", sofern sie nicht bereits läuft.
 
.EXAMPLE
Manage-DynamicsNavService -PlatformVersion 150 -ServerInstance "BC150" -Action Restart
Startet die Instanz neu, falls sie bereits läuft.
 
.INPUTS
Keine.
 
.OUTPUTS
Keine. Gibt Statusmeldungen auf der Konsole aus.
 
.NOTES
Autor: Dein Name
Datum: 2025-06-05
#>


    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string]$PlatformVersion,

        [Parameter(Mandatory = $true)]
        [string]$ServerInstance,

        [Parameter(Mandatory = $true)]
        [ValidateSet("Start", "Stop", "Restart")]
        [string]$Action
    )

    if (-not (Get-Command -Name Stop-NAVServerInstance -ErrorAction SilentlyContinue)) {
        Import-DynamicsNavModule -PlatformVersion $PlatformVersion
    }

    $instance = Get-NAVServerInstance -ServerInstance $ServerInstance

    if (-not $instance) {
        throw "ServerInstance '$ServerInstance' wurde nicht gefunden!"
    }

    switch ($Action) {
        "Start" {
            if ($instance.State -ne "Running") {
                Start-NAVServerInstance -ServerInstance $ServerInstance | Out-Null
                Write-Host "ServerInstance '$ServerInstance' gestartet."
            }
            else {
                Write-Host "ServerInstance '$ServerInstance' läuft bereits."
            }
        }
        "Stop" {
            if ($instance.State -eq "Running") {
                Stop-NAVServerInstance -ServerInstance $ServerInstance | Out-Null
                Write-Host "ServerInstance '$ServerInstance' gestoppt."
            }
            else {
                Write-Host "ServerInstance '$ServerInstance' ist nicht aktiv."
            }
        }
        "Restart" {
            if ($instance.State -eq "Running") {
                Stop-NAVServerInstance -ServerInstance $ServerInstance | Out-Null
                Write-Host "ServerInstance '$ServerInstance' gestoppt."
                Start-Sleep -Seconds 3
            }
            Start-NAVServerInstance -ServerInstance $ServerInstance | Out-Null
            Write-Host "ServerInstance '$ServerInstance' gestartet."
        }
    }
}