Skąd ten pomysł?

Kilka dni temu dostaliśmy zapytanie, po którym postanowiliśmy opublikować ten wpis. Zapytanie brzmiało następująco:

Cześć. Zmieniłem robote i nowy kierownik zobaczył że pracowałem kiedyś z servicedeskiem i stwierdził że będę nim administrował. Problem jest taki że jestem windowsiarzem i z linuxem mam tyle wspólnego że mam telefon na adroidzie a firmowy sd stoi na linuxie. ogarniam powershella a całkowicie nie znam pythona. Jest jakiś sposób na konwersje skryptów powershell na pythona?

Po wymianie kilku wiadomości jasne było, że nic dostępnego „w standardzie” na linuxie nie wchodzi w grę. Daliśmy sobie chwilę czasu na przemyślenie tematu i dostaliśmy olśnienia. Skoro kolega stoi pod ścianą to czemu nie uruchomić Powershell na linuxie? Wiemy, że przez fanów Linuxa rozwiązanie to zostanie odebrane jako profanacja ale każdy z nas pamięta jak zaczynał pracę w nowej firmie i chciał się „wykazać” już na starcie. Dość gadania – przechodzimy do działania.

Linux a Powershell

Microsoft ogłosił kilka lat temu hasło „Microsoft <3 Linux”. Trzymając się tego hasła została wprowadzona możliwość użycia Powershell’a na systemach Linux’owych. Początki były bardzo trudne ale z biegiem czasu projekt ten dość mocno się rozwinął. Nie będziemy się rozpływać nad tym tematem – więcej informacji możecie znaleźć tutaj. W naszym przykładzie zainstalujemy i użyjemy Powershell w wersji 7.1 na systemie Centos 8.

Instalacja

Sam proces instalacji dla wielu dystrybucji linuxowych ogranicza się do jednego polecenia. Tabelę zgodnych dystrybucji możecie znaleźć w rozdziale Installing PowerShell on Linux dokumentu z poprzedniego akapitu. Mamy dwie możliwości instalacji – z repozytorium oraz „ręcznie”. Jeśli wybieramy opcję z dodaniem repozytorium Microsoftu to wykonujemy następujące polecenie:

curl https://packages.microsoft.com/config/rhel/8/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo

W naszym przypadku mamy dodane już repo Microsoft. Powershell posiada wsparcie dla Centos 8 a sama instalacja to tak jak pisaliśmy – jedno polecenie:

sudo yum install -y powershell

Polecenie to zainstaluje wersję stabilną Powershell na naszej maszynie. Microsoft udostępnia także opcję instalowania wersji Preview. Możemy to zrobić następującym poleceniem:

sudo yum install -y powershell-preview

A co jeśli chcemy wykonać instalację bez dodawania repozytorium? Jest to możliwe – należy odwiedzić Microsoft’owego Githuba Powershell i tam odnaleźć interesującą nas wersję dla naszej dystrybucji. Następnie pobieramy paczkę na dysk – w naszym przykładnie będzie to wersja 7.1.4:

wget https://github.com/PowerShell/PowerShell/releases/download/v7.1.4/powershell-7.1.4-1.centos.8.x86_64.rpm

Następnie instalujemy pobraną wcześniej paczkę:

sudo yum install powershell-7.1.4-1.rhel.7.x86_64.rpm

Po zakończeniu instalacji możemy sprawdzić działanie Powershella wyświetlając zainstalowaną wersję:

pwsh --version

Wykonujemy pierwszą operację

Przyszedł czas aby wykonać pierwszą operację używając Powershell na Linux’ie. W celach demonstracyjnych posłużymy się przykładowym skryptem PS, który możecie znaleźć w dokumentacji API. Przechodzimy do katalogu gdzie chcemy utworzyć nasz plik ze skryptem – w naszym przykładzie będzie to /home/admin/documents. Jeśli już jesteśmy w tej ścieżce – musimy utworzyć plik ze skryptem. Możliwości jest wiele – my użyjemy vi (<3):

vi test.ps1

Teraz główny punkt programu – skrypt. Poniżej – tak jak wspominaliśmy – przykładowy skrypt z dokumentacji (oczywiście należy podać prawidłowy $url oraz $technician_key). Zapisujemy go jako test.ps1:

$url = "https://demo.servicedeskplus.com/api/v3/requests"
$technician_key = @{ 'authtoken' = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'}
$input_data = @'
{
    "request": {
        "subject": "Unable to fetch mails",
        "description": "I am unable to fetch mails from the mail server",
        "requester": {
            "id": "4",
            "name": "administrator"
        },
        "impact_details": "Routine tasks are pending due to mail server problem",
        "resolution": {
            "content": "Mail Fetching Server problem has been fixed"
        },
        "status": {
            "name": "Open"
        }
    }
}
'@
$data = @{ 'input_data' = $input_data}
$response = Invoke-RestMethod -Uri $url -Method post -Body $data -Headers $technician_Key -ContentType "application/x-www-form-urlencoded"
$response

Zapisujemy plik i przechodzimy do testu. W tym celu musimy wykonać polecenie pwsh oraz podać nazwę pliku:

pswh test.ps1

Jeśli wszystko zadziałało prawidłowo – utworzone zostało zgłoszenie a w konsoli widzimy odpowiedź z API 🙂

Na zakończenie

Teraz możecie używać Powershell’a na maszynie z Linux’em. Nie pozostaje nam nic innego jak zaprosić Was do przejrzenia naszych poprzednich wpisów, w których pokazujemy przykładowe skrypty napisane właśnie w Powershell’u jak np. Powershell i API SDP (cz. IV) – pobieramy dane przez nieopisane w dokumentacji operacje