Das Interesse an künstlicher Intelligenz und wie sie unser Leben erleichtern kann, ist auch im IT-Bereich stark gestiegen.
Mit der Verbreitung menschenähnlicher Chatbots und generativer KI, die verschiedene Medien produziert, ist KI scheinbar überall. Immer wenn es eine Technologie gibt, die das nachahmen kann, was ein Mensch tut, besteht die Tendenz, ängstlich zu sein und sich zu fragen, ob Arbeitsplätze gefährdet sind. Aber KI kann insbesondere für Administratoren ein Segen sein, die Skripte in PowerShell erstellen und die derzeit verwendeten verbessern möchten. Ein besonders vielversprechendes Angebot ist chatgpt von OpenAI, das PowerShell-Code schreiben, Codierungsideen liefern und sogar Fehler bei einem fehlerhaften Skript beheben kann.
Schauen wir uns genauer an, was ChatGPT ist, wie viel es kostet, wie man es mit PowerShell nutzt und worauf man achten muss.
Was ist ChatGPT?
ChatGPT ist die natürliche Sprachmodell-KI von OpenAI, auf die Sie über eine webbasierte Chat-Schnittstelle zugreifen. Sie geben Eingabeaufforderungen ein und die KI antwortet, ähnlich wie bei einer Online-Konversation. Es ist eine erstaunlich 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 und können sowohl auf das GPT-3.5-Modell als auch auf das GPT-4-Modell zugreifen. Laut Open AI bietet die kostenpflichtige Stufe eine schnellere Reaktion, Zugriff zu Spitzenzeiten sowie Browsing- und Plugin-Zugriff.
OpenAI bietet auch ein Produkt namens ChatGPT Enterprise an, das kein öffentliches Preismodell hat, aber Berichten zufolge Verbesserungen bei der Codierung aufweist und größere Eingaben verarbeiten kann.
Wenn Sie ChatGPT intensiv oder im professionellen Umfeld nutzen möchten, könnte sich das Upgrade auf ChatGPT Plus lohnen. Für Gelegenheitsnutzer ist es möglicherweise besser, beim kostenlosen Kontingent zu bleiben.
Wenn Sie ChatGPT oder eine andere KI von OpenAI integrieren, können Sie auch deren APIs verwenden nutzungsbasiertes Modell mit einer Preisgestaltung, die vom KI-Modul abhängt. Alle Beispiele in diesem Artikel beziehen sich auf die webbasierte Chat-Oberfläche.
Eröffnen Sie zunächst ein Konto bei OpenAI auf der Anmeldeseite für ChatGPT.
Welche Vorteile bietet die Verwendung generativer KI für die PowerShell-Skripterstellung?
Ein Vorteil der PowerShell-Skripterstellung mit einem KI-Modell in natürlicher Sprache wie ChatGPT besteht darin, dass Sie der KI sagen, was Sie wollen, und sie überzeugenden Code erstellt. Es ist eine effizientere Methode, Code zu schreiben, als Suchbegriffe in google einzugeben und die Informationen selbst zusammenzustellen. Ihre Interaktionen mit ChatGPT erfolgen im Dialog, sodass Sie die KI zu den gewünschten Informationen führen können, indem Sie auf früheren Antworten aufbauen.
Angenommen, Sie möchten ein Skript schreiben, um alle VMs in Azure mit einem bestimmten Tag zu finden und herunterzufahren. Vor der KI könnte Ihr Prozess darin bestehen, die Ausgabe des zu untersuchen Get-AzVM Suchen Sie mit dem PowerShell-Befehl nach einer Eigenschaft mit Tags, nach denen gefiltert werden soll, und sehen Sie sich dann die Syntax an Stop-AzVM Cmdlet. Sie können ChatGPT auffordern, das Skript zu schreiben:
Schreiben Sie ein Skript, das alle virtuellen Maschinen von Azure abruft, die das Tag „shutdown“ mit dem Wert „daily“ haben, und diese virtuellen Maschinen dann herunterfährt.
Ich habe weder PowerShell angegeben noch Methoden zum Abschließen 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 nicht verwendet Get-AzVM Cmdlet, was ich erwartet habe. Vielmehr nutzte ChatGPT das Get-AzResource Cmdlet, das nach links filtern und nur Ressourcen mit dem angegebenen Tag abrufen kann. Da ich diese Funktionalität nicht kannte, habe ich etwas Neues gelernt.
Hervorzuheben ist außerdem, wie das Skript mit Ressourcengruppen umgeht. Das ChatGPT PowerShell-Skript geht davon aus, dass sich die VMs in derselben Ressourcengruppe befinden. Allerdings hat jedes Objekt das Get-AzResourceDie Ausgaben enthalten den Namen der Ressourcengruppe. Sie könnten stattdessen auf diesen Wert verweisen, um den Namen der Ressourcengruppe abzurufen.
Wenn Sie das wissen, bitten Sie ChatGPT, das Problem mit der folgenden Eingabeaufforderung 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?
Und es antwortet mit einer 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 schließt die Aufgabe ab.
Es ist wichtig, den Code sorgfältig zu prüfen. Das Schlimmste, was in diesem Fall passiert, ist, dass das Skript einen Fehler auslöst, wenn Sie versuchen, eine VM mit der falschen Ressourcengruppe herunterzufahren. Wir haben den Fehler jedoch erkannt und die Korrektur vorgenommen, da wir über ausreichend PowerShell-Kenntnisse verfügten, um das Problem zu identifizieren und ChatGPT zu bitten, es zu aktualisieren.
So verwenden Sie 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 mit einem laufenden Prozess verknüpfen muss:
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
}
}
Auf meinem Computer dauert die Ausführung des Skripts etwa zwei Minuten. Sie können ChatGPT auffordern, den PowerShell-Code zu optimieren, um zu sehen, ob er schneller läuft:
Können Sie dieses PowerShell-Skript für mich optimieren?
ChatGPT antwortete mit dem folgenden aktualisierten 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
Als ich den Code ausführte, wurde ein Fehler generiert.
Das ist bedauerlich, da ChatGPT nicht helfen konnte. Ich habe den Fehler wörtlich eingefügt und ChatGPT gebeten, die Korrektur vorzunehmen, aber es gab immer wieder denselben Code aus, bis ich die Lösung erklärte:
Die SHA1-Zeile, in der Sie den „try-catch“-Block haben, benötigt tatsächlich ein Semikolon am Ende der Zeile, damit der Code funktioniert.
Mit meiner Hilfe hat ChatGPT funktionierenden Code erstellt, nachdem das Semikolon in Zeile 18 eingefügt wurde. Die gute Nachricht ist, dass das aktualisierte Skript 35 Sekunden statt zwei Minuten benötigt.
Die Optimierungsstrategie von ChatGPT für dieses Skript ist gut. Die erste Version des Skripts nannte wiederholt das Get-Prozess Cmdlet und oft den gleichen Prozess von abgerufen Ausweis. ChatGPT vermeidet diese Verlangsamung, indem es den besitzenden Prozess einmal pro Schleife abfragt.
ChatGPT kann hilfreich sein, es gibt jedoch Einschränkungen
Wie wir anhand der vorherigen Beispiele gesehen haben, ist ChatGPT nicht perfekt. Sie sollten jeden Code, den es erzeugt, sorgfältig prüfen und, insbesondere wenn Sie ihn nicht verstehen, vorsichtig ausführen. Sie sollten die Verwendung des Parameters -WhatIf in Betracht ziehen, um Änderungen anzuzeigen, bevor sie auftreten, oder alle Cmdlets auskommentieren, die die Änderungen vornehmen, während Sie Tests ausführen.
Denken Sie daran, dass Sie als Benutzer von ChatGPT es trainieren. Alles, was Sie zur Eingabe von ChatGPT verwenden, und jeglicher Code, den Sie zur Prüfung einreichen, sollten nicht als privat betrachtet werden. Wenn Sie proprietären Code schreiben, verstoßen Sie möglicherweise gegen die Richtlinien Ihres Unternehmens, wenn Sie Skripte in ChatGPT einfügen.
Wenn Sie ChatGPT noch nicht ausprobiert haben, sollten Sie es tun. KI wird bleiben, und ChatGPT ist unglaublich zugänglich und verfügt über ein großzügiges kostenloses Kontingent. Sie werden wahrscheinlich auf Bereiche stoßen, die ChatGPT nicht versteht oder bei der ersten Eingabeaufforderung nicht die gewünschten Ergebnisse liefern kann, aber Sie sollten es weiter versuchen. Es erfordert neue Fähigkeiten, um zu verstehen, wie Anforderungen anders formuliert werden, oder um einen neuen Ansatz in Betracht zu ziehen, um den PowerShell-Code an Ihre Aufgabe anzupassen.