Witamy ponownie po dość długiej przerwie 😉 Niestety ostatnimi czasy mamy dość sporo pracy, co spowodowało spore opóźnienie kolejnego wpisu, a także brak naszej aktywności zarówno na stronie jak i na forum Manageengine. Tym razem zajmiemy się wyciągnięciem nowoutworzonych Jednostek Organizacyjnych (Organizational Unit – OU) z domeny Active Directory. Mamy nadzieję, że ten wpis będzie równie interesujący co poprzednie 🙂

Artykuł ten jest kolejną częścią wprowadzenia do API ServiceDesk. Staramy się na samym początku przedstawiać w jak najprostszy sposób, tak aby wszystkie informacje tu zawarte były łatwe do zrozumienia i implementacji w Waszych instancjach SDP.

Założenia

Skrypt opisany w tym artykule ma na celu wesprzeć Administratorów w zapanowaniu nad porządkiem w ustawieniach SDP. Mamy tu na myśli głównie automatyczny import użytkowników z AD. W wielu przypadkach Administratorzy aplikacji i domeny są podzieleni na różne biura, co w efekcie może doprowadzić do sytuacji, w której użytkownicy nie zostali zaimportowani zgodnie z definicją powstawania problemu – Problem powstaje wtedy, gdy ktoś komuś czegoś ważnego nie powiedział – w tym wypadku nowe OU w AD.

Wszelkie kroki tutaj przedstawione wymagają pewnych założeń:

  • dostęp do planowania zadań na kontrolerze domeny
  • serwer aplikacji SDP obsługujący skrypty Powershell
  • podstawowa wiedza tworzenia skryptów Powershell
  • podstawowa wiedza tworzenia zgłoszenia przy użyciu API (Powershell i API SDP (cz. I)).

Jeśli wszystkie powyższe warunki mamy spełnione, możemy przejść do działania.

Tworzymy skrypt

Etap 1: Wyciągamy nowe jednostki organizacyjne z Active Directory

Budowanie skryptu rozpoczniemy od napisania części wydobywającej informację o utworzonej OU.

# Funkcja pobierająca nowe jednostki organizacyjne w domenie
function getNewOu
{
# ustawiamy datę na dzisiejszą od północy z pominięciem godziny
$currentDate = (Get-Date).Date

# Pobieramy nowoutworzone OU
# Filtrujemy wg daty ustawionej wcześniej (data większa lub równa)
# wybieramy nazwę, datę utworzenia i DN (dla dokładnej lokalizacji OU)
# sprawdzamy czy w ogóle jakieś dane zostały zwrócone
# jeśli nie, zwracamy NULL, w przeciwnym razie przypisujemy do zmiennej
# wynik i konwertujemy do HTMLa
$getNewOu = Get-ADOrganizationalUnit -Filter {whenCreated -ge $currentDate} -Properties Created | Select-Object Name,Created,DistinguishedName

 if($getNewOu -eq $null)
 {
 $table = $null
 }

 else
 {
 $table = $getNewOu | ConvertTo-Html -Fragment
 }

 return $table
 
 }

# testujemy jakie dane zwraca funkcja
getNewOu 

Po wykonaniu skryptu powinniśmy otrzymać wynik podobny do poniższego

getNewOu

getNewOu

Etap 2: Zapytanie API tworzące zgłoszenie

Gdy już mamy potrzebne informacje, czas utworzyć zgłoszenie. W tym celu musimy dopisać parę zmiennych na początku pliku skryptu.

# parametry połączenia do API SDP
$sdphost = "http://sdp.sdpadmins.local:8080/" # adres aplikacji ServiceDesk Plus
$techkey = "[techniciankey]" # klucz API technika - do wygenerowania w aplikacji
$url = $sdphost + "sdpapi/request" # url wskazujące na zapytanie API
$method = "POST" # metoda wysyłania danych w WebRequest
$operation = "ADD_REQUEST" # operacja jaką chcemy wykonać

Jak widać są to parametry służące do wywołania zapytania API – opisane w części pierwszej. Kolejnym krokiem jest napisanie funkcji, która wykona nasze zapytanie API. Do utworzenia prostego zgłoszenia, będziemy potrzebować Zgłaszającego (Requester), Tematu (Subject), Opisu zgłoszenia (Description), Trybu (Level) oraz Szablonu (Request Template). Pierwsze trzy wartości są przekazywane do funkcji za pomocą parametrów, ponieważ będą się zmieniać a sama funkcja tworzenia zgłoszenia może zostać wykorzystana w przyszłości. Tryb i Szablon w tym przypadku są wartościami stałymi, więc nie ma potrzeby przypisywać zmiennych.

# funkcja tworzenia zgłoszenia
function addRequest($requester, $subject, $description)

Ciało funkcji zawiera już wszystkie potrzebne informacje do utworzenia zgłoszenia, a wygląda ono następująco

{
$inputdata = @{"operation" = @{"details" = @{"requester" = "$requester";"subject" = "$subject";"description" = "$description";"mode" = "Email";"requesttemplate" = "Nowe OU w Active Directory";}}} | ConvertTo-Json

$params = @{INPUT_DATA=$inputdata;OPERATION_NAME=$operation;TECHNICIAN_KEY=$techkey;format='json'}

$result = Invoke-WebRequest -UseBasicParsing -Uri $url -Method POST -Body $params | ConvertFrom-Json

write-host "Wynik operacji: " $result.operation.result.status
write-host "ID zgłoszenia:" $result.operation.Details.WORKORDERID
}

Teraz wystarczy tylko wywołać funkcję w skrypcie i możemy testować działanie 🙂

# przypisujemy zwracaną wartość funkcji do zmiennej
$desc = getNewOu

# sprawdzamy czy nie jest pusta
if($desc -ne $null)
{
 # jeśli nie jest pusta, wykonujemy zapytanie API
 addRequest -requester "administrator" -subject "Nowe OU" -description "$desc"
}

# w przeciwnym razie kończymy pracę
else
{
 Write-Host "-- brak nowych OU --"
 Start-Sleep 3
}

Jeśli otrzymaliśmy wynik podobny do tego poniżej zgłoszenie zostało tworzone pomyślnie. Teraz wystarczy zaplanować zadanie – np. przy użyciu Harmonogramu zadań w Windows Server – aby zautomatyzować cały proces.

Pomyślnie utworzone zgłoszenie

Success

Utworzone zgłoszenie

Request