Téma několika následujících příspěvků je Dynamics AX, PowerShell a TFS, často dohromady. Rád bych si také v příštích dnech trochu vyčistil “frontu příspěvků”…
Pokud znáte můj předchozí blog, možná si pamatujete pár PowerShellových skriptů, které jsem zveřejnil zhruba před dvěma lety (příspěvky se štítkem “PowerShell” zde) a mezitím jsem vytvořil pár dalších. Nyní jsem se rozhodl zabalit některé části do znovupoužitelných komponent and implementovat nějaké nové schopnosti.
Hlavní motivací bylo zjednodušit použití mých skriptů v automatizovaných buildech (časem ukážu jak je využít v buildech s i bez TFS Buildu, ale pro dnešek je to mimo záběr). Jako vedlejší efekt mohou nové funkce pomoci také s “manuální” správou AX přes příkazovou řádku PowerShellu.
Není to v nějakém konečném stavu – vím o pár chybějících vlastnostech, dokumentace není kompletní atd. a vždy existují nějaké nápady jak to vylepšit. Ale myslím, že je to dostatečně dobré, aby se to dalo použít – a pokud je celá věc zveřejněná, můžu dostat nějakou zpětnou vazbu (takže prosím neváhejte komentovat).
Koncept
Funkce, které jsou momentálně naimplementovány, umožňují snadno získat podrobnosti o instancích Dynamics AX, kompilovat AX aplikace a podobně. Jako vstupní bod používají AX konfigurace uložené v registrech Windows nebo v souborech .axc. Některé příkazy mohou běžet na vzdálených počítačích (např. restart vzdáleného AOS) a vy v takových případech musíte jen poskytnout přihlašovací údaje.
Kód je zapouzdřen v PowerShellových advanced funkcí, které se chovají téměř jako cmdlety – takže můžete používat piping, parameter -WhatIf atd. Můžete také použít Get-Help k zobrazení dokumentace.
Funkce jsou umístěny v PowerShell modulu, který může být nainstalován běžným způsobem. Více viz v sekci Instalace.
Modul bych vyvinut pro AX2012 a testován také na AX2009.
Pojmenování
Dynamics AX 2012 Management Shell používá “AX” jako prefix druhé části jména cmdletů, jako New-AXUser a já používám tutéž konvenci (např. Get-AXConfig).
Funkce
Zde je seznam dostupných funkcí, rozdělený do několika skupin:
Správa klientských konfigurací AX
Get-AXConfig | Vrací podrobnosti o instanci AX a zobrazuje konfigurace z registrů. |
Set-AXConfig | Nastavuje aktivní klientskou konfiguraci. |
Spouštění klienta A
Start-AXClient | Spouští klienta AX, volitelně s parametry. |
Spouštění startup příkazů
Compile-AXIL | Generuje CIL sestavení. |
Compile-AXXpp | Kompiluje aplikaci AX (X++). |
Synchronize-AXDatabase | Synchronizuje databázi AX. |
Synchronize-AXVCS | Synchronizuje aplikaci s modelem v systému pro správu verzí. |
Update-XRef | Aktualizuje křížové reference. |
Správa AX databáze
Update-XRefIndex | Aktualizuje databázové indexy tabulek s křížovými referencemi. |
Správa AOS
Umožňuje spravovat služby AOS, dokonce i na vzdálených počítačích.
Restart-AXAOS | Restartuje službu AOS. |
Start-AXAOS | Spustí službu AOS. |
Stop-AXAOS | Zastaví službu AOS. |
Počkejte si na následující příspěvek, kde bude mnohem více detailů.
Kde najít
Rád bych v Dynamics AX komunitě viděl určitou konsolidaci – je lepší spolupracovat na široce používaných a otestovaných nástrojích než mít v každém týmu unikátní ad-hoc řešení (a spoustu týmů bez jakéhokoli řešení). Proto v naší práci vytváříme znovupoužitelné komponenty, ne?
To je důvod proč jsem se raději připojil ke CodePlex projektu Jorise de Gruytera než abych vytvářel vlastní. Můj PowerShellový modul nenahrazuje Jorisovy scripty pro buildy (mají některé společné vlastnosti, ale ne všechny), nicméně rád bych takové sloučení v budoucnu viděl. Nyní je to jen umístěno ve stejném projektu, ale je to dobrý první krok.
Instalace
Stáhněte .zip archiv DynamicsAxCommunity modulu z dynamicsaxbuild.codeplex.com. V něm najdete adresář DynamicsAxCommunity – celý tento adresář představuje PowerShellový modul (nebudeme pracovat přímo s jednotlivými soubory).
PowerShellové moduly se instalující pomocí cmdletu Import-Module
. Můžete modul buď dát do standardního umístění (viz $env:PSModulePath) a v Import-Cmdlet na něj odkazovat prostě jménem, nebo uvést plnou cestu vašemu vlastnímu umístění.
Například můžete zkopírovat modul do standarního adresáře c:\Windows\system32\WindowsPowerShell\v1.0\Modules\ a zavolat Import-Module DynamicsAxCommunity
(k potlačení zprávy o neschválených slovesech použijte parametr DisableNameChecking).
Tento příkaz můžete přidat to svého profilu a mít tak funkce pro AX vždy k dispozici.
Dynamics AX 2012 Management Shell není vyžadován, ačkoli může být použit společně s tímto modulem.
Další věci ke zvážení
Remoting – Abyste mohli získat data ze vzdálených počítačů a spouštět na nich nějaké akce, musíte mít nakonfigurovaný PowerShell remoting. Navíc musíte na vzdáleném počítači (počítačích) nainstalovat tento modul a zpřístupnit ho pro vzdálená připojení. Já jsem to vyřešil přidáním skriptu obsahujícího Import-Module do výchozí konfigurace vzdálených připojení (Set-PSSessionConfiguration microsoft.powershell -StartupScript $pathToScript
).
Synchronize-AXVCS -Synchronizace s modelem v systému pro řízení verzí používá vlastní startup příkaz – musíte naimportovat .xpo do každého prostředí, kde chcete používat Synchronize-AXVCS. Soubor SysStartupCmdSyncVCS.xpo je obsažen v .zip archivu popsaného v Instalaci. Podporovaná je pouze AX2012.
Update-XRefIndex – Update-XRefIndex používá SQL Server Cmdlet Snapin pro přímé připojení k SQL Serveru, což může vyžadovat dodatečnou konfiguraci. Na druhou stranu nevyžaduje žádnou změnu v Dynamics AX.
Co chybí?
Několik věcí buď není dokončeno, nejsou integrovány do modulu nebo zkátka nejsou vůbec vyvinuty. Napadají mě tyto:
- Dokomentace není špatná, ale pořád není kompletní.
- Funkce používající startup příkazy neposkytují žádný výstup. Například by byly užitečné výsledky kompilace z Compile-AXXpp. Také hlášení chyb by mohlo být vylepšeno (nicméně přístup založený na evenlogu, jaký je implementovaný v RunAxClentAndWait, vypadá slibně).
- Užitečná by mohla být určitá přímá podpora pro buildy (například přesun souborů popisků v AX <2012).
- Podpora PSSession, lepší Verbose zprávy atd. atd.
Doufám, že se vám bude modul hodit. A všimněte si, že jsem ho záměrně nazval Community, abych ukázal, že zdrojový kód je otevřený modifikacím…