Künstliche Intelligenz kann ein Segen für Administratoren sein, die entweder neue PowerShell-Skripte erstellen oder die bereits verwendeten verbessern möchten. Ein besonders vielversprechendes Angebot ist chatgpt von OpenAI, das PowerShell-Code schreiben, Code-Ideen bereitstellen und sogar ein fehlerhaftes Skript reparieren kann.

Denken Sie daran, dass ChatGPT das KI-Modell in natürlicher Sprache von OpenAI ist, auf das Sie über eine Online-Konversationsschnittstelle zugreifen. Sie geben Fragen ein und die KI antwortet Ihnen; Es ist ein Chatbot. Vor allem handelt es sich um eine überraschend einfache und zugängliche KI.

Die kostenlose Version nutzt das GPT-3.5-Modell von OpenAI. Abonnenten, die 20 US-Dollar pro Monat zahlen, erhalten ChatGPT Plus mit erweiterten Funktionen: Zugriff auf GPT-3.5- und GPT-4-Modelle, schnellere Reaktion, Navigation, Plugins … Wenn Sie ChatGPT intensiv oder im professionellen Umfeld nutzen möchten, kann ein Upgrade auf ChatGPT Plus sinnvoll sein hilfreich. Für Gelegenheitsnutzer ist es am besten, bei der kostenlosen Version zu bleiben.

Es ist auch möglich, einen kostenpflichtigen Zugriff auf die APIs zu abonnieren, um Skripte oder Anwendungen zu schreiben, die ihrerseits Anfragen an OpenAI-Modelle senden. Die Preisgestaltung basierend auf der Anzahl der generierten Antworten hängt vom verwendeten Modul ab.

Alle Beispiele in diesem Artikel verwenden den kostenlosen Online-Chatbot.

Eröffnen Sie zunächst ein Konto bei OpenAI auf der ChatGPT-Anmeldeseite.

YouTube Video

Welche Vorteile bietet generative KI beim PowerShell-Scripting?

Einer der Vorteile eines KI-Modells in natürlicher Sprache wie ChatGPT besteht darin, dass Sie die KI nur fragen müssen, welchen Code sie schreiben soll, und sie wird Ihnen einen besonders funktionalen Code präsentieren. Es ist viel effizienter, als google-Suchen durchzuführen und Codefragmente, die Sie hier und da finden, selbst zusammenzustellen. Ihre Interaktionen mit ChatGPT erfolgen im Dialog, sodass Sie die KI basierend auf früheren Antworten zu den gewünschten Informationen führen können.

Siehe auch  Große Investoren in OpenAI versuchen, Sam Altman, den entlassenen Chef, zurückzuholen

Angenommen, Sie möchten ein Skript schreiben, um alle virtuellen Maschinen in Azure zu finden, die über eine bestimmte Bezeichnung verfügen, um sie herunterzufahren. Vor der KI bestand Ihr Prozess darin, die Ausgabe von PowerShell-Befehlen zu überprüfen Get-AzVMsuchen Sie nach einer Eigenschaft mit Tags als Filter und untersuchen Sie dann die Syntax des Stop-AzVM-Cmdlets.

Sie können ChatGPT bitten, das Skript zu schreiben, das alle diese Aktionen ausführt, indem Sie ihm die folgende Anfrage senden:

Schreiben Sie ein Skript, das alle virtuellen Maschinen von Azure abruft, die über das Tag „shutdown“ mit dem Wert „daily“ verfügen, und diese virtuellen Maschinen herunterfährt.

Wir haben hier weder PowerShell spezifiziert noch eine Methode zum Ausführen der Aktion vorgeschlagen. Hier ist das Skript, das generiert wurde:

# Connect to Azure
Connect-AzAccount

# Define the resource group and tag criteria
$resourceGroup = "YourResourceGroup"
$tagName = "shutdown"
$tagValue = "daily"

# Retrieve the virtual machines with the specified tag
$vms = Get-AzResource -ResourceGroupName $resourceGroup -Tag @{ $tagName = $tagValue } | Where-Object {$_.ResourceType -eq "Microsoft.Compute/virtualMachines"}

# Stop each virtual machine
foreach ($vm in $vms) {
    $vmName = $vm.Name
    Write-Host "Stopping virtual machine: $vmName"
    Stop-AzVM -ResourceGroupName $resourceGroup -Name $vmName -Force
}

ChatGPT hat das Cmdlet nicht verwendet Get-AzVMsondern eher ein Cmdlet Get-AzResource, das Ressourcen abrufen und durch Angabe eines Tags filtern kann. Sie wussten wirklich nichts von dieser Funktion; ChatGPT nimmt daher an unserer Schulung teil.

Ein weiterer hervorzuhebender Punkt ist die Art und Weise, wie das Skript mit Ressourcengruppen umgeht. Das von ChatGPT generierte PowerShell-Skript geht davon aus, dass wir im Code eine Gruppe von Ressourcen festlegen möchten, auf die wir unsere Arbeit beschränken. Das ist nicht unbedingt das, was wir tun wollen. Zumal jeder Wert von produziert wird Get-AzResource enthält den Namen der Gruppe, zu der die gefundenen Ressourcen gehören. Möglicherweise möchten Sie keinen Gruppennamen selbst angeben und ihn vom Skript für jeden von erzeugten Wert ermitteln lassen Get-AzResource.

Siehe auch  Wie Eltern ChatGPT nutzen können, um bessere Kinder großzuziehen: KI-Experte

Bitten Sie ChatGPT von da an, das Problem mit der folgenden Anfrage zu beheben:

Die Ausgabe von „Get-AzResource“ enthält den Namen der Ressourcengruppe. Könnten Sie diesen mit „stop-azvm“ verwenden, anstatt den Namen der Ressourcengruppe fest zu codieren?

ChatGPT antwortet mit dieser neuen Version des Skripts:

# Connect to Azure
Connect-AzAccount

# Define the tag criteria
$tagName = "shutdown"
$tagValue = "daily"

# Retrieve the virtual machines with the specified tag
$vms = Get-AzResource -Tag @{ $tagName = $tagValue } | Where-Object {$_.ResourceType -eq "Microsoft.Compute/virtualMachines"}

# Stop each virtual machine
foreach ($vm in $vms) {
    $vmName = $vm.Name
    $resourceGroup = $vm.ResourceGroupName
    Write-Host "Stopping virtual machine: $vmName"
    Stop-AzVM -ResourceGroupName $resourceGroup -Name $vmName -Force
}

Dieses Skript entspricht der erwarteten Aufgabe. Es ist jedoch wichtig, den Code immer sorgfältig zu prüfen. Das Schlimmste, was in unserem Fall hätte passieren können, wäre gewesen, dass das Skript beim Versuch, eine VM mit der falschen Ressourcengruppe herunterzufahren, einen Fehler auslöste.

Wie verwende ich ChatGPT, um PowerShell-Code zu verbessern?

Ein weiterer Vorteil der Verwendung von ChatGPT mit PowerShell besteht in der Fehlerbehebung oder Verbesserung von vorhandenem Code. Angenommen, Sie haben das folgende Skript, das alle offenen TCP-Verbindungen abrufen und an einen laufenden Prozess binden soll:

Get-NetTCPConnection | foreach-Object {
    [pscustomobject]@{
        LocalAddress = $_.LocalAddress
        LocalPort = $_.LocalPort
        RemoteAddress = $_.RemoteAddress
        RemotePort = $_.RemotePort
        State = $_.State
        OwningProcess = $_.OwningProcess
        CreationTime = $_.CreationTime
        PID = $_.OwningProcess
        Process = (Get-Process -Id $_.OwningProcess).Name
        UserName = (Get-Process -IncludeUserName -Id $_.OwningProcess).UserName
        Path = (Get-Process -Id $_.OwningProcess).Path
        SHA1 = try{(Get-FileHash (Get-Process -Id $_.OwningProcess).Path -Algorithm SHA1 | select-object -ExpandProperty Hash)}catch{};
        CommandLine = (Get-Process -Id $_.OwningProcess).CommandLine
    }
}

Dieses Skript wird auf unserem Testcomputer in etwa zwei Minuten ausgeführt. Sie können ChatGPT bitten, den PowerShell-Code zu optimieren, um zu sehen, ob er schneller ausgeführt werden kann:

Können Sie dieses PowerShell-Skript für mich optimieren?

ChatGPT antwortet mit dem folgenden PowerShell-Skript:

$tcpConnections = Get-NetTCPConnection
$connectionInfo = foreach ($connection in $tcpConnections) {
    $process = Get-Process -Id $connection.OwningProcess -ErrorAction SilentlyContinue
    [pscustomobject]@{
        LocalAddress   = $connection.LocalAddress
        LocalPort      = $connection.LocalPort
        RemoteAddress  = $connection.RemoteAddress
        RemotePort     = $connection.RemotePort
        State          = $connection.State
        OwningProcess  = $connection.OwningProcess
        CreationTime   = $connection.CreationTime
        PID            = $connection.OwningProcess
        Process        = if ($process) { $process.Name } else { $null }
        UserName       = if ($process) { $process.UserName } else { $null }
        Path           = if ($process) { $process.Path } else { $null }
        SHA1           = try { (Get-FileHash $process.Path -Algorithm SHA1).Hash } catch { $null }
        CommandLine    = if ($process) { $process.CommandLine } else { $null }
    }
}
$connectionInfo

Bei der Ausführung erzeugt dieser Code jedoch einen Fehler:

Siehe auch  „KI-Freundinnen“ überschwemmen den GPT-Store von OpenAI trotz Einschränkungen; Hier ist, was ChatGPT über sie denkt
ChatGPT generiert PowerShell-Code, aber es funktioniert nicht beim ersten Mal.

Das ist bedauerlich, da ChatGPT uns hier nicht weiterhelfen kann. Also fügen wir den Fehler wörtlich ein und bitten ChatGPT, die Korrektur vorzunehmen. Aber es gibt weiterhin immer den gleichen Code aus, bis wir ihm explizit sagen, was der Fehler im Code ist:

Die SHA1-Zeile, in der sich der „try-catch“-Block befindet, benötigt am Ende der Zeile ein Semikolon, damit der Code funktioniert.

Von da an produziert ChatGPT endlich funktionierenden Code mit dem Semikolon in Zeile 18. Die gute Nachricht ist, dass das aktualisierte Skript auf unserem Testcomputer in 35 Sekunden statt in zwei Minuten ausgeführt wird.

Die Optimierungsstrategie von ChatGPT für dieses Skript ist gut. Die erste Version des Skripts rief das Cmdlet mehrmals auf Get-Prozess und oft den gleichen Prozess anhand seiner Kennung abgerufen. ChatGPT vermeidet diese Verlangsamung, indem es den besitzenden Prozess einmal pro Schleife abfragt.

ChatGPT kann nützlich sein, hat aber auch Nachteile

Wie wir in den vorherigen Beispielen gesehen haben, ist ChatGPT nicht perfekt. Jeder von ihm erzeugte Code sollte sorgfältig geprüft und, insbesondere wenn Sie ihn nicht verstehen, mit Vorsicht ausgeführt werden. Sie sollten die Verwendung des Parameters -WhatIf in Betracht ziehen, um Änderungen zu visualisieren, bevor sie auftreten. Oder kommentieren Sie die Cmdlets aus, die die Änderungen vornehmen, während Sie die Tests ausführen.

Denken Sie daran, dass Sie als ChatGPT-Benutzer es trainieren. Nichts, was Sie zum Anwerben von ChatGPT verwenden, sollte als privat betrachtet werden. Wenn Sie proprietären Code schreiben, riskieren Sie einen Verstoß gegen Ihre Unternehmensrichtlinien, wenn Sie Skripte in ChatGPT einfügen.

Anzeige
Nina Weber
Nina Weber is a renowned Journalist, who worked for many German Newspaper's Tech coloumns like Die Zukunft, Handelsblatt. She is a contributing Journalist for futuriq.de. She works as a editor also as a fact checker for futuriq.de. Her Bachelor degree in Humanties with Major in Digital Anthropology gave her a solid background for journalism. Know more about her here.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein