Kategorie:

Powershell i AI – to możliwe

W czasach gdy AI jest praktycznie wszędzie, pytanie czy w ogóle ma sens użycie go z Powershellem. W tym wpisie pokaże w jaki sposób użyć i do czego Powershella wraz z modelem LLM. Nie będę poruszał kwestii analizy kodu, bo to każdy może zrobić w dowolnym asystencie AI. Skupie się na przekazaniu wyników skryptu do modelu LLM, tak aby ułatwić interpretacje wyników skryptu.

Jako przykładu użyje lokalnego LLM, ale nic nie stoi na przeszkodzie by użyć tych chmurowych. Z jedną uwagą – uważajcie na bezpieczeństwo, ponieważ chmurowi asystenci AI mogą używać Waszych promptów do nauki i doskonalenia modelu. Jeśli ładujecie dane organizacji lub dane systemów to mogą stać się one publicznie dostępne, więc sprawdzajcie warunki zanim wrzucicie jakiekolwiek dane do chmury.

Uruchamiamy lokalnego LLMa

W moim scenariuszu do uruchomienia lokalnego modelu językowego użyję serwera Ollama uruchomionego na Dockerze pod Windows. Można również Ollame uruchomić bezpośrednio na systemie Windows, jednak zdecydowałem się na Dockera Desktop, ze względu na większą elastyczność rozwiązania. W przypadku uruchamiania środowiska produkcyjnego warto rozważyć Docker Engine. Rozpocznijmy od instalacji, do działania Dockera w systemie Windows niezbędny jest WSL2 (Windows Sybsystem for Linux).

WSL2 jest instalowany automatycznie wraz z Dockerem. Z uwagi, że WSL opiera się na Hyper-V, przed instalacją musicie zwrócić uwagę, czy w Waszej instancji Windowsa można aktywować Hyper-V. Jeśli robicie to na maszynie wirtualnej sprawdźcie, czy Wasz hiperwizor wspiera usługę zagnieżdżenia wirtualizacji. Po zainstalowaniu instancji Dockera można już przejść do uruchomienia kontenera z LLM, jednak warto jeszcze zweryfikować czy macie kartę graficzną, na którą można przenieść część obliczeń. Znacznie do przyspieszy działanie modelu. Więcej o procesie.

Teraz utwórzmy kontener z aplikacją Ollama.

PowerShell
docker run --gpus=all -d -v ollama:/root/.ollama -p 11434:11434 --name Ollama1 ollama/ollama

Następnie czas już wewnątrz kontenera pobrać model, ja użyłem gemma3 z 12B parametrów.

Dockerfile
ollama run gemma3:12b

Model pobrany i gotowy do działania. Nasłuchuje domyślnie na porcie 11434. Przejdźmy zatem do Powershella.

Łączymy się z LLMem

Przygotujmy zatem parametry do zapytania, które zostaną przekonwertowane do JSONa. Musimy zawrzeć w tablicy hashy: nazwę modelu, tekst prompta, stream i jeśli potrzebujemy ciągłość konwersacji to kontekst poprzednich wypowiedzi

PowerShell
$body = @{
    "model" = "gemma3:12b"
    "prompt" = $($prompt)
    "stream" = ""
    "context" = $($odpowiedz.context)
}

$body.stream = $null

#Jeśli nie potrzebujecie korzystać z kontekstu poprzednich wypowiedzi
#$body.context = $null 

$body = $body | ConvertTo-Json

Teraz przygotujmy web request do wcześniej zainstalowanej Ollamy.

PowerShell
(Invoke-WebRequest -Method POST -Body $body -Uri http://192.168.5.5:11434/api/generate).Content

Pozostało tylko przygotować odpowiedni prompt. Do przykładu użyłem logów replikacji Active Directory. Przy dużych środowiskach zamiast przeglądać wynik i je analizować, możemy otrzymać już przeanalizowane dane.

PowerShell
$logi = repadmin /showrepl * /csv 

$prompt = "W prompcie są załączone logi replikacji kontrolerów domeny, przeanalizuj je, zweryfikuj i opisz zwięźle czy replikacja działa poprawnie" + $logi

W efekcie otrzymujemy przeanalizowane dane replikacji. Wystarczy odpowiednio zaprezentować je w postaci maila, powiadomienia na Teamsie i mamy pokazane w prosty i przystępny sposób status replikacji w naszym środowisku.

Cały skrypt prezentuje się następująco:

PowerShell
#Zebranie logów
$logi = repadmin /showrepl * /csv

#Przygotowanie promptu
$prompt = "W prompcie są załączone logi replikacji kontrolerów domeny, przeanalizuj je i zweryfikuj i opisz zwięźle czy replikacja działa poprawnie" + $logi

#Przygotowanie treści zapytania
$body = @{
    "model" = "gemma3:12b"
    "prompt" = $($prompt)
    "stream" = ""
    "context" = $($odpowiedz.context)
}

$body.stream = $false

#Jeśli nie potrzebujecie korzystać z kontekstu poprzednich wypowiedzi
#$body.context = $null 

$body = $body | ConvertTo-Json

#Zapytanie do modelu LLM
$odpowiedz = (Invoke-WebRequest -Method POST -Body $body -Uri http://192.168.5.5:11434/api/generate).Content | ConvertFrom-Json

#Wynik analizy
$odpowiedz

Podobny scenariusz można wykorzystać do logów podglądu zdarzeń, czy innych logów systemowych lub aplikacyjnych. Ogranicza Was tylko wyobraźnia i możliwości infrastruktury. Nic nie stoi na przeszkodzie, aby wykorzystać do tego asystenta chmurowego. Ja zdecydowałem się na lokalny model, ze względu na bezpieczeństwo danych. Wiem, że moje dane organizacji zostają wewnątrz organizacji.

Dodaj komentarz

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