Module/Administration/Import-BCSDynamicsNavModules.ps1

<#
.SYNOPSIS
  Import NavAdminTool modules via a BC Server Instance
 
.DESCRIPTION
  Import NavAdminTool modules via a BC Server Instance
 
.PARAMETER serverInstance
  The Business Central Server Instance to import module from
 
.EXAMPLE
  Import-BCSDynamicsNavModules -ServerInstance BC
 
.NOTES
    Author: Mathias Stjernfelt
    Website: http://www.brightcom.se
#>

<#
.SYNOPSIS
 
.DESCRIPTION
 
.EXAMPLE
 
.NOTES
    Author: Mathias Stjernfelt
    Website: http://www.brightcom.se
#>

function Import-BCSDynamicsNavModules {
  Param (
    [Parameter(ValueFromPipelineByPropertyName, Mandatory = $false)]
    [string]$serverInstance,
    [Parameter(ValueFromPipelineByPropertyName, Mandatory = $false)]
    [string]$bcVersion
  )

  begin {}

  process {
    # Remove the module if it's installed
    if (Get-Module -Name NavAdminTool -All) {
      Remove-Module -Name NavAdminTool -Force
      Write-Host "NavAdminTool module has been removed."
    }
    else {
      Write-Host "NavAdminTool module is not installed."
    }


    if (-not [string]::IsNullOrEmpty($serverInstance)) {
      $ServicePath = (Get-WmiObject win32_service | Where-Object { $_.Name -eq "MicrosoftDynamicsNavServer`$${serverInstance}" } | Select-Object Name, DisplayName, @{Name = "Path"; Expression = { $_.PathName.split('"')[1] } }).Path
      $modulePath = Get-Item (Join-Path (Split-Path -Path $ServicePath -Parent) 'NavAdminTool.ps1')
      Import-Module $modulePath -Force | Out-Null
      
      Write-Host "$modulePath has been imported using ServerInstance."
      return;
    }

    if (-not [string]::IsNullOrEmpty($bcVersion)) {
      $modulePath = Get-Item "C:\Program Files\Microsoft Dynamics 365 Business Central\$bcVersion\Service\NavAdminTool.ps1"
      Import-Module $modulePath -Force | Out-Null
      
      Write-Host "$modulePath has been imported using BCVersion."
      return;
    }

    if ([String]::IsNullOrEmpty($serverInstance) -and [String]::IsNullOrEmpty($bcVersion)) {
      $modulePath = Get-Item 'C:\Program Files\Microsoft Dynamics 365 Business Central\*\Service\NavAdminTool.ps1'
      Import-Module $modulePath[0] -Force | Out-Null

      Write-Host "$($modulePath[0]) has been imported."
      return;
    }

    Write-Host "No module has been imported."
  }

  end {
  }
}

Export-ModuleMember -Function Import-BCSDynamicsNavModules