Od zera do extansion – cz. 2 PowerShell

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…

Windows Shell

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

  1. Skrypty
    W nich zapisuje się kod PowerShella – podobne do plików .bat. Zazwyczaj posiadają rozszerzenie .ps1
  2. CmdLets
    Komend PowerShell zwane są właśnie CmdLetsami. Przykładowo Get-Process, Stop-Process
  3. Snapins
    Grupy funkcji skompilowane do postaci .dll. Przykładowo Microsoft.Dynamics.NavModelTools.
  4. Potoki
    Sposób przekazywania zmiennych do kolejnych funkcji
  5. 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)

1
2
Write-Host "Hello World!"
Get-Process -Name "*NAV*"

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#:

1
2
3
4
x = klasa.funkcja();
y = innaklasa.funkcja(x);
#powyższy kod można zapisać jako:
y = innaklasa.funkcja(klasa.funkcja());

Używając PowerShella zapisalibyśmy to następująco:

1
klasa.funkcja() | innaklasa.funkcja()

Do poczytania:

Potoki

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:

1
2
3
4
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

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:

Get-Help

Get-Command

Manipuluj obiektami

PowerShell to także bogactwo komend służących do manipulacji zwracanymi obiektami:

1
2
3
4
5
6
7
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

Poniżej mały przykład, resztę informacji znajdziesz w pomocy.

Do poczytania:

Praca z obiektami

Transformuj wyjście

Możesz korzystać także z różnych poleceń służących formatowaniu wyjścia:

1
2
3
4
5
Format-* #konwertuje do postaci sfromatowanej
Out-* #przekerowuje do danego "wyjścia"
Export-* #eksportuje
Import-* #importuje
ConvertTo-* #konwertuje do innych obiektów

Do poczytania:

Formatowanie wyjścia

Przekierowanie wyjścia

Zmienne

W PowerShellu mamy różne możliwości definiowania zmiennych:

1
2
3
4
5
6
$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)

Do poczytania:

O zmiennych

Operatory

Poniżej lista dostępnych operatorów:

1
2
3
4
5
6
7
8
#Arytmetyczne
+ - * / %
#Przypisania
= += -= *= /= %=
#Warunkowe
-gt -lt -ge -le -ne -eq -contain
#Tekstowe
+ * -replace -match -like

Do poczytania:

O operatorach

Konstrukcje

Sposoby budowania podstawowych konstrukcji:

1
2
3
4
5
6
7
If($i -eq 100) {
    # zrób coś
} ElseIf {
    # zrób coś
} Else {
    # zrób coś
}
1
2
3
4
For($i=0; $i -lt 10; $i++)
{
    # zrób coś
}
1
2
3
4
Foreach($element in zestaw)
{
    # zrób coś
}
1
2
3
4
Switch($zmienna) {
    "wartosc1" { # zrób coś }
    "wartosc2" { # zrób coś }
}

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 + "!")
    }
}

Do poczytania:

Funkcje

Funkcje zaawansowane

Metody zaawansowane

Parametry zaawansowane

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.

1
Set-ExecutionPolicy -ExecutionPolicy Unrestricted

Aby skorzystać z funkcji dostępnych w danym module należy go najpierw zaimportować. 

1
import-module"${env:ProgramFiles}\MicrosoftDynamics NAV\80\Service\NavAdminTool.ps1”

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

OpisModuł
Administracja serwerem Business CentralMicrosoft.Dynamics.Nav.Management
Administracja Extensions Business CentralMicrosoft.Dynamics.Nav.Apps.Management
Administracja instancjami klienta WEBNAVWebClientManagement

Narzędzia programistyczne

OpisModuł
CmdLets dla programistówMicrosoft.Dynamics.Nav.Model.Tools
J.w. (moduł skryptów)Microsoft.Dynamics.Nav.Ide
CmdLets dla programistów ExtensionsMicrosoft.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

Od zera do Extension – cz. 4 Business Central Sandbox

Od zera do Extension – cz5. Pierwsze Extension

Zostaw odpowiedź

Twój adres e-mail nie zostanie opublikowany Wymagane pola są zaznaczone *