Dzisiaj czas poznać kolejne narzędzie niezbędne do pracy z Business Central czyli PowerShell. Jest on obecny w ekosystemie Dynamics NAV już od kilku lat, ale jeżeli jeszcze nie wiesz z czym to się je to masz okazję dowiedzieć się czegoś nowego. Jest to kolejny krok do tego aby stworzyć własne Extension dla Business Central, niemniej zanim zacznę od konkretów to opowiem Ci nieco o tym czym jest PowerShell.
Czym jest Shell (Powłoka)?
Powłoka to nic innego jak interpreter poleceń systemowych, znany od czasów gdy na komputerach nie było jeszcze interfejsów graficznych. Myślę, że nieomal każdy widział wiersz poleceń systemu Windows…
Czym jest PowerShell?
PowerShell to w skrócie nowoczesny zamiennik wiekowej konsoli systemu windows (CMD). Czym wyróżnia się PowerShell?
- Pracuje z obiektami
- Jest zintegrowany z .NET Framework
- Jest oparty na poleceniach (CmdLets)
Jest to potężne i zaawansowane narzędzie do zarządzania nie tylko systemem Windows.
PowerShell – narzędzia
Do pracy z PowerShellem można używać różnych narzędzi:
- Konsoli PowerShell – pojedynczy wiersz, brak debuggera.
- PowerShell ISE – świetne narzędzie, środowisko programistyczne z debuggerem, pomocą, itp.
- Visual Studio Code – dobra alternatywa dla PowerShell ISE – dzisiaj właśnie tego programu będziemy używać
PowerShell – podstawowe pojęcia
- Skrypty
W nich zapisuje się kod PowerShella – podobne do plików .bat. Zazwyczaj posiadają rozszerzenie .ps1 - CmdLets
Komend PowerShell zwane są właśnie CmdLetsami. Przykładowo Get-Process, Stop-Process - Snapins
Grupy funkcji skompilowane do postaci .dll. Przykładowo Microsoft.Dynamics.NavModelTools. - Potoki
Sposób przekazywania zmiennych do kolejnych funkcji - Formatowanie wyjścia
PS (PowerShell) zawiera zestaw funkcji do formatowania i filtrowania wyników zwracanych przez komendy
Zaczynamy
Aby rozpocząć pracę z PowerShellem uruchom jako administrator Visual Studio Code, które omawiane było w poprzednim wpisie. Dlaczego jako administrator? Często w PowerShellu wykonujemy zadania administracyjne do których wymagane są podniesione uprawnienia. Ot i tyle.
W VS Code uruchamiamy paletę komend (CTRL+SHIFT+P) i wpisujemy “install extensions”, następnie wyszukujemy rozszerzenia PowerShell i je instalujemy.
Na początek utwórz nowy plik i zapisz go jako “hellopowershell.ps1”.
Wprowadź poniższy kod i uruchom go używając klawisza F5 (całość kodu) lub F8 (tylko zaznaczony fragment)
[cc lang=”powershell”]Write-Host “Hello World!”
Get-Process -Name “*NAV*”[/cc]
Uwaga!
Używaj CTRL+SPACE w celu wymuszenia podpowiadania składni!
Potoki (Pipelineing)
Potoki to unikatowa właściwość PowerShella. Służą one do przekazywania obiektów zwracanych przez komendy (CmdLets) do innych komend.
Gdybym miał wyjaśnić to na przykładzie posłużyłbym się analogią do języka C#:
[cc lang=”c#”]x = klasa.funkcja();
y = innaklasa.funkcja(x);
#powyższy kod można zapisać jako:
y = innaklasa.funkcja(klasa.funkcja());[/cc]
Używając PowerShella zapisalibyśmy to następująco:
[cc lang=”powershell”]klasa.funkcja() | innaklasa.funkcja()[/cc]
Do poczytania:
Odkrywaj
Aby zacząć przygodę z PowerShellem należy poznać komendy (CmdLets). Tutaj poza intuicyjnymi nazwami (czasownik-rzeczownik) pomaga nam system pomocy. Jeżeli chcemy dowiedzieć się jakie są dostępne komendy i uzyskać pomoc na ich temat wystarczy skorzystać z poniższych komend:
[cc lang=”powershell”]Get-Command #wszystkie dostępne komendy
Get-Help #pomoc dotycząca danej komendy (parametr -Examples wyświetla przykłady)
Get-Member #co możne zrobić z danym obiektem
Get-Variable #pokazuje aktywne zmienne[/cc]
Uwaga!
Po ustawieniu się kursorem na komendzie i naciśnięciu przycisków CTRL+F1 – otworzy się okno z pomocy. Jest to dużo wygodniejsze i czytelniejsze aniżeli stosowanie comendy Get-Help
Do poczytania:
Manipuluj obiektami
PowerShell to także bogactwo komend służących do manipulacji zwracanymi obiektami:
[cc lang=”powershell”]Compare #porównianie dwóch obiektów
Group #podział obiektów na grupy
Measure #pomiar właściwości obiektów
Select #wybór właściwości z zestawu
Sort #sortowanie obiektów
Tee #kopiowanie obiektów
Where #wybieranie obiektów spełniających dane kryteria[/cc]
Poniżej mały przykład, resztę informacji znajdziesz w pomocy.
Do poczytania:
Transformuj wyjście
Możesz korzystać także z różnych poleceń służących formatowaniu wyjścia:
[cc lang=”powershell”]Format-* #konwertuje do postaci sfromatowanej
Out-* #przekerowuje do danego “wyjścia”
Export-* #eksportuje
Import-* #importuje
ConvertTo-* #konwertuje do innych obiektów[/cc]
Do poczytania:
Zmienne
W PowerShellu mamy różne możliwości definiowania zmiennych:
[cc lang=”powershell”]$zmienna = “tekst” #typ zmiennej zależy od jej pierwszego przypisania
[int] $i #zmienna o zadanym typie
Set-Variable pi 3.14 -option Constant #definicja stałej
$arr = @(1,2,3) #tablica – $arr[0] zwróci 1
$arr = @{a=1,b=2} #tablica asocjacyjna – $arr.a zwróci 1 ($arr[“a”] także zwróci 1)[/cc]
Do poczytania:
Operatory
Poniżej lista dostępnych operatorów:
[cc lang=powershell]#Arytmetyczne
+ – * / %
#Przypisania
= += -= *= /= %=
#Warunkowe
-gt -lt -ge -le -ne -eq -contain
#Tekstowe
+ * -replace -match -like[/cc]
Do poczytania:
Konstrukcje
Sposoby budowania podstawowych konstrukcji:
[cc lang=”powershell”]If($i -eq 100) {
# zrób coś
} ElseIf {
# zrób coś
} Else {
# zrób coś
}[/cc]
[cc lang=”powershell”]For($i=0; $i -lt 10; $i++)
{
# zrób coś
}[/cc]
[cc lang=”powershell”]Foreach($element in zestaw)
{
# zrób coś
}[/cc]
[cc lang=”powershell”]Switch($zmienna) {
“wartosc1” { # zrób coś }
“wartosc2” { # zrób coś }
}[/cc]
Funkcje
Jeżeli chcesz zobaczyć jak definiuje się funkcje to najlepiej zajrzeć do dokumentacji lub gotowych modułów. Niemniej poniżej trzy proste przykłady:
[cc lang=”powershell” lines=”25″]#Funkcja przyjmuje wszystkie parametry
function przyklad_argumentow {
Write-Host $Args[0]
}
#Funkcja przyjmuje zdefiniowane parametry
function przyklad_zdef_arg([int] $i=0)
{
# zrób coś
}
#Funkcja w postaci bardziej zaawansowanej
function Send-Greeting
{
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string] $Name
)
Process
{
Write-Host (“Hello ” + $Name + “!”)
}
}[/cc]
Do poczytania:
Moduły do obsługi Dynamics 365 Business Central /Microsoft Dynamics NAV
PowerShell to głównie bogactwo modułów. Pokażę Ci nieco na przykładzie tych przeznaczonych dla Dynamics 365 Business Central.
Uwaga!
Przed rozpoczęciem pracy z modułami należy ustawić odpowiedni poziom zabezpieczeń, aby swobodnie korzystać z niepodpisanych modułów. Może pokazać się błąd wynikający z konfiguracji zasad grupy – ale nie ma on większego znaczenia.
[cc lang=”PowerShell”]Set-ExecutionPolicy -ExecutionPolicy Unrestricted[/cc]
Aby skorzystać z funkcji dostępnych w danym module należy go najpierw zaimportować.
[cc lang=”PowerShell”]import-module”${env:ProgramFiles}\MicrosoftDynamics NAV\80\Service\NavAdminTool.ps1”[/cc]
Następnie można już spokojnie korzystać z dostępnych komend. Listę modułów i komend dostępnych dla Business Central załączam pod gifem z przykładami użycia modułów.
Administracja Business Central
Opis | Moduł |
---|---|
Administracja serwerem Business Central | Microsoft.Dynamics.Nav.Management |
Administracja Extensions Business Central | Microsoft.Dynamics.Nav.Apps.Management |
Administracja instancjami klienta WEB | NAVWebClientManagement |
Narzędzia programistyczne
Opis | Moduł |
---|---|
CmdLets dla programistów | Microsoft.Dynamics.Nav.Model.Tools |
J.w. (moduł skryptów) | Microsoft.Dynamics.Nav.Ide |
CmdLets dla programistów Extensions | Microsoft.Dynamics.Nav.Apps.Tools |
Podsumowanie
Dzisiaj pokazałem Ci podstawowe pojęcia i zagadnienia związane z PowerShellem. Mimo, że wpis jest dość długi to tylko pobieżnie ukazuje zagadnienie, dlatego zachęcam do nauki i szukania wiedzy w zewnętrznych źródłach.
Do poczytania w wolnej chwili
Dokumentacja PowerShella: https://docs.microsoft.com/en-us/powershell/
Moduły PowerShell dla Business Central: https://docs.microsoft.com/en-us/powershell/business-central/overview?view=businesscentral-psC
Od zera do extension – cz. 1 Visual Studio Code
Od zera do extension – cz. 3 Docker