[gelöst] PowerShell-Funktion wird nicht gefunden

11. März 2016 10:21

Es ist mir peinlich, aber so haben wenigstens alle etwas davon, wenn sie bei Null anfangen:

Ich nutze die Dynamics NAV 2016 Development Shell, und möchte mittels eines Skripts eine weitere Serviceinstanz anlegen, welche einen anderen Build als meine Standardinstallation hat (so wie hier, wobei der Blog gerade nicht erreichbar ist). Dies funktioniert, indem die Registry des Admin Tools vorübergehend auf den neuen Build umgeleitet wird.

Code:
$nstDefaultPath = "C:\Program Files\Microsoft Dynamics NAV\90\Service\"
$nstPath = "C:\NAV Versionen\NAV 2016 CU4 44974 DE\Service\"
$regPath = "HKLM:\SOFTWARE\Microsoft\Microsoft Dynamics NAV\90\Service"

#Switch registry to correct path
set-itemproperty -path 
$regPath -name "Path" -value $nstPath

New-NAVServerInstance "
NEU" -DatabaseName "NEU" -DatabaseServer "MeinSQLServer" -ClientServicesPort 7050 -SOAPServicesPort 7051 -ODataServicesPort 7052 -ManagementServicesPort 7049

#Switch registry to default
set-itemproperty -path 
$regPath -name "Path" -value $nstDefaultPath

(Wer dies ebenfalls nutzen möchte: Achtung, dieses Skript funktioniert erst, wenn dies die ZWEITE oder noch weitere Instanz eines Builds sein soll).

Mein Problem ist folgende Fehlermeldung, betreffend New-NAVServerInstance:
New-NAVServerInstance : The term 'New-NAVServerInstance' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct
and try again.


Was ist zu tun?

Re: PowerShell-Funktion wird nicht gefunden

11. März 2016 11:41

New-NAVServerInstance (gehört zum NavAdminTool.ps1) ist bei der Dynamics NAV 2016 Adminstration Shell mit dabei, nicht bei der Development Shell.
Einsatzgebiete der beiden siehe hier:
Microsoft Dynamics NAV Windows PowerShell Cmdlets
The Microsoft Dynamics NAV 2016 Administration Shell includes cmdlets for administering the Microsoft Dynamics NAV deployment, such as adding and configuring Microsoft Dynamics NAV server instances, databases, and users. Also included are cmdlets for administering extension packages. The Microsoft Dynamics NAV 2016 Administration Shell is installed with the Microsoft Dynamics NAV Server.

The Microsoft Dynamics NAV 2016 Development Shell includes cmdlets for merging and modifying application object files. Also included are cmdlets for creating extension packages. The Microsoft Dynamics NAV 2016 Development Shell is installed with the Microsoft Dynamics NAV Development Environment.


Manueller Import des Moduls ist alternativ möglich.
Code:
Import-Module 'C:\Program Files\Microsoft Dynamics NAV\90\Service\NavAdminTool.ps1' -WarningAction SilentlyContinue | Out-Null

Das NavAdminTool erfordert aber einen Administrator :wink: für den Einsatz, die anderen Cmdlets zum Codemergen,Extensions u.ä., die bei der Development Shell geladen werden, nicht.
Code:
-Module Microsoft.Dynamics.Nav.Model.Tools, Microsoft.Dynamics.Nav.Apps.Tools, Microsoft.Dynamics.Nav.Apps.Management

Re: PowerShell-Funktion wird nicht gefunden

11. März 2016 11:47

Super, danke!

Re: [gelöst] PowerShell-Funktion wird nicht gefunden

11. März 2016 12:00

Obwohl ich sehr viel mit PowerShell arbeite: Ich nutze sowohl die eine noch die andere der obigen Shells so gut wie nie.
Generell würde ich empfehlen, sich gleich das PowerShell ISE für NAV einzurichten.
Das Arbeiten damit macht Spaß, was man von den beiden Bordwerkzeugen (die sind nichts anderes als die normale PowerShell-Konsole mit automatischem Laden der Module) nicht behaupten kann. Die weiteren Möglichkeiten des ISE sind auch quasi unbegrenzt.
Der obige MSDN-Artikel weist auch schon, zumindest "durch die Blume", darauf hin:
Alternatively to running Microsoft Dynamics NAV 2016 Administration Shell and Microsoft Dynamics NAV 2016 Development Shell from where they are installed, you can import the relevant module into the Windows PowerShell Integrated Scripting Environment (ISE).


Wie man dort versionsbezogene Module per Mausklick laden kann, steht hier (für NAV 2015):
Load Dynamics NAV CmdLets in PowerShell ISE with Profiles

Artikel zur Profildateiverwaltung
Understanding the six profiles
How to use profiles

Code für alle Versionen für die Profildatei.
Ab NAV 2016 ist für Cmdlets, die für Extensions (Nav.Apps.Tools) benötigt werden, eine dritte Importzeile vorhanden :!: .
Für andere Versionen die Pfade bei …\90\… bei weiteren Menüpunkten entsprechend anpassen: NAV 2017 …\100\…, NAV 2018 …\110\… damit die richtigen Module geladen werden.
Code:
        $code =
    {
     Import-Module "${env:ProgramFiles(x86)}\Microsoft Dynamics NAV\90\RoleTailored Client\Microsoft.Dynamics.Nav.Model.Tools.psd1" -WarningAction SilentlyContinue | out-null
     Import-Module "C:\Program Files\Microsoft Dynamics NAV\90\Service\NavAdminTool.ps1" -WarningAction SilentlyContinue | Out-Null
    Import-Module "${env:ProgramFiles(x86)}\Microsoft Dynamics NAV\90\RoleTailored Client\Microsoft.Dynamics.Nav.Apps.Tools.psd1" -WarningAction SilentlyContinue | Out-Null
    }
    $psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add('Load NAV 2016 CmdLets',$code,$null)


    $code =
    {
     Import-Module "${env:ProgramFiles(x86)}\Microsoft Dynamics NAV\80\RoleTailored Client\Microsoft.Dynamics.Nav.Model.Tools.psd1" -WarningAction SilentlyContinue | out-null
     Import-Module "C:\Program Files\Microsoft Dynamics NAV\80\Service\NavAdminTool.ps1" -WarningAction SilentlyContinue | Out-Null
    }
    $psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add('Load NAV 2015 CmdLets',$code,$null)

    $code =
    {
     Import-Module "${env:ProgramFiles(x86)}\Microsoft Dynamics NAV\71\RoleTailored Client\Microsoft.Dynamics.Nav.Model.Tools.psd1" -WarningAction SilentlyContinue | out-null
     Import-Module "C:\Program Files\Microsoft Dynamics NAV\71\Service\NavAdminTool.ps1" -WarningAction SilentlyContinue | Out-Null
    }
    $psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add('Load NAV 2013 R2 CmdLets',$code,$null)   


Nachtrag: Bei BC die Pfade entsprechend anpassen Microsoft Dynamics NAV -> Microsoft Dynamics 365 Business Central
Code:
  $code =
    {
    Import-Module "${env:ProgramFiles(x86)}\Microsoft Dynamics 365 Business Central\140\RoleTailored Client\Microsoft.Dynamics.Nav.Model.Tools.psd1" -WarningAction SilentlyContinue | out-null
    Import-Module "C:\Program Files\Microsoft Dynamics 365 Business Central\140\Service\NavAdminTool.ps1" -WarningAction SilentlyContinue | Out-Null
    Import-Module "${env:ProgramFiles(x86)}\Microsoft Dynamics 365 Business Central\140\RoleTailored Client\Microsoft.Dynamics.Nav.Apps.Tools.psd1" -WarningAction SilentlyContinue | Out-Null
    }
    $psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add('Load BC 14.x CmdLets',$code,$null)


Im Beispielcode werden für die Programmverzeichnisse sowohl Umgebungsvariablen ${env:ProgramFiles(x86)} als auch feste Pfade "C:\Program Files\…" statt env:ProgramFiles verwendet. Der Grund hierfür ist, dass env:ProgramFiles statt des 64bit-Ordners je nach System ggf. auch den 32bit (x86) findet. Bei Bedarf anpassen :wink: .

Re: [gelöst] PowerShell-Funktion wird nicht gefunden

11. März 2016 12:28

Danke, habe im NAV FAQ - NAV PowerShell verlinkt.

Re: [gelöst] PowerShell-Funktion wird nicht gefunden

11. März 2016 14:14

Kowa hat geschrieben:Wie man dort versionsbezogene Module per Mausklick laden kann, steht hier (für NAV 2015):
Load Dynamics NAV CmdLets in PowerShell ISE with Profiles

Das ist übrigens nur ein klitzekleiner Teil in diesem großen Gesamtpaket (CreateProfileInISE.ps1 nur für das ISE, der Rest auch für die Konsole):
How to install Waldo’s PowerShell Modules

Der Menüpunkt "Start ISE Steriods", der dort in den Screenshots von Waldo zu sehen ist, ist allerdings nicht dabei, das ist ein kostenpflichtiges Add-on für das ISE von PowerShell-MVP Dr. Tobias Weltner.

MVP-Kollegen erhalten von ihm aber netterweise eine kostenlose Lizenz :wink: .
ISEsteroids.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.