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