Getty Images/iStockphoto
So nutzen Sie GitHub Copilot für PowerShell-Codierung
Die Integration dieses Tools zur Codevervollständigung in VS Code kann Administratoren zugute kommen, die Aufgaben automatisieren möchten. Aber es gibt einige Einschränkungen.
Für IT-Administratoren, die mit PowerShell programmieren, beginnt die Zukunft jetzt.
Generative KI findet ihren Weg in jeden Aspekt unseres Lebens, einschließlich der von IT-Mitarbeitern verwendeten Tools und Technologien. GitHub Copilot nutzt KI, um Benutzer bei ihren Programmierarbeiten zu unterstützen. Dieses Tool, das zusammen mit Visual Studio Code (VS Code) verwendet wird, kann Admins dabei helfen, die PowerShell-Lernkurve zu erleichtern, indem es Code auf der Grundlage von Eingabeaufforderungen erzeugt.
Wie GitHub Copilot funktioniert
In manchen Kreisen ist die KI eine umstrittene Technologie. Sie erfordert eine unglaubliche Menge an Rechenleistung, um vorhandene Inhalte zu überprüfen und zu verarbeiten, und verwendet dann Algorithmen, um auf Eingabeaufforderungen von Benutzern hin eigene Werke zu erstellen. Im Fall von GitHub Copilot werden öffentliche GitHub-Repositories gescannt, um zu verstehen, wie man Code schreibt, und dann werden die Ergebnisse angewendet, um anderen Benutzern bei der Erstellung von Skripten zu helfen.
Wenn PowerShell neu für Sie ist, können Sie mit GitHub Copilot viel lernen und in kurzer Zeit beeindruckenden Code erstellen. Da GitHub Copilot sein Fachwissen jedoch auf Menschen stützt, die Fehler machen, besteht die Möglichkeit, dass die Ergebnisse nicht ideal sind oder veraltete Informationen verwenden.
So bereiten Sie sich auf die Verwendung von GitHub Copilot vor
Sie benötigen ein GitHub-Konto, um sich für GitHub Copilot anzumelden.
Sobald Sie sich angemeldet haben, navigieren Sie zum Abschnitt Einstellungen und dann zur Seite Copilot. Sie können mit einer 30-tägigen kostenlosen Testversion beginnen. Danach kostet GitHub Copilot 10 US-Dollar pro Monat oder 100 Dollar pro Jahr für eine Einzelperson und 19 Dollar pro Benutzer für den Copilot for Business-Plan. Studierende können einen Preisnachlass anfragen und mit einem Studiennachweis erhalten.
Während des Anmeldevorgangs haben Sie die Wahl, ob Sie Vorschläge erhalten möchten, die mit öffentlichem Code übereinstimmen, oder ob Sie Ihre eigenen Codeschnipsel für Produktverbesserungen einreichen möchten. Beides ist optional.
Als Nächstes installieren Sie die GitHub Copilot-Erweiterung und genehmigen die Autorisierung für VS Code, wenn Sie dazu aufgefordert werden. Das Copilot-Symbol sollte in der unteren rechten Ecke des VS Code-Fensters erscheinen.
So schreiben Sie PowerShell-Code mit GitHub Copilot
Selbst mit einem AI-Pair-Programming-Tool können Sie keinen Code erstellen, ohne dem Produkt einen Ausgangspunkt zu geben. Was soll das PowerShell-Skript im Grunde genommen erreichen? GitHub Copilot benötigt von Ihnen Anweisungen, um zu verstehen, wie es vorgehen soll. Eine Möglichkeit, damit zu beginnen, ist, Copilot eine Beschreibung dessen zu geben, was das Skript tun soll. Ein wenig PowerShell-Kenntnisse helfen Ihnen auch dabei, GitHub Copilot so zu steuern, dass Sie den richtigen Code erhalten.
Für dieses Beispiel nehmen wir an, Sie möchten alle laufenden Windows-Dienste auf einem Computer anzeigen. Als Administrator, der mit Windows-Systemen arbeitet, möchten Sie das Anmeldekonto für jeden Dienst sehen.
Schreiben Sie zunächst den folgenden Kommentar in VS Code und drücken Sie Enter.
# Get all running services
Dies ergab von GitHub Copilot den folgenden Code.
Get-Service | Where-Object {$_Status -eq "Running"}
Um den Vorschlag von GitHub Copilot zu akzeptieren, drücken Sie Tab.
Als Nächstes möchten wir diesen PowerShell-Befehl einer Variablen zuweisen. Dazu wird wahrscheinlich eine foreach-Schleife erforderlich sein, also geben Sie den folgenden Kommentar ein.
# foreach service, get the account the service is running as
Drücken Sie die Eingabetaste, um den Code-Vorschlag von GitHub Copilot anzuzeigen.
# foreach service, get the account the service is running as
foreach ($service in $services) {
$serviceAccount = Get-WmiObject -Class Win32_Service -Filter "Name='$($service.Name)'" | Select-Object -ExpandProperty StartName
Write-Host $service.Name $serviceAccount
}
Das Ergebnis ist beeindruckend, aber es gibt ein Problem. Der Code funktioniert für Windows PowerShell 5.1, aber ich verwende PowerShell 7, das nicht über die Cmdlets für die Windows-Verwaltungsinstrumentierung verfügt. Ich habe den Kommentar angepasst, um anzugeben, dass ich kompatiblen Code für PowerShell 7 benötige, der dann von GitHub Copilot bereitgestellt wurde.
# foreach service, get the account the service is running as in PowerShell 7
foreach ($service in $services) {
$serviceAccount = Get-Service -Name $service.Name | Select-Object -ExpandProperty UserName
Write-Host $service.Name $serviceAccount
}
So fortschrittlich GitHub Copilot auch ist, die Änderung des Kommentars funktioniert möglicherweise nicht bei jedem Befehl. GitHub Copilot schlug vor, die Ausgabe über die Pipeline an Select-Object weiterzuleiten und die Eigenschaft UserName zu referenzieren.
Der Kommentar, den wir für eine Eingabeaufforderung eingegeben haben, wäre besser, wenn wir unser PowerShell-Verständnis nutzen würden, um auf die UserName-Eigenschaft zu verweisen. Durch Anpassen des Kommentars erhalten wir anderen Code von GitHub Copilot.
# foreach service, Ausgabe des Benutzernamens
foreach ($service in $services) {
$service | Select-Object Name, DisplayName, Status, UserName
}
Diese KI-Codierungs-Tools sind immer noch kein Ersatz für jemanden, der über ausreichende PowerShell-Kenntnisse verfügt. Sie können einen Code erhalten, der zwar funktioniert, aber möglicherweise nicht effizient ist. Im vorherigen Code wird beispielsweise im ersten foreach-Look jedes Mal das Cmdlet Get-Service aufgerufen, was unnötig ist, da der Code diese Informationen bereits in der Variablen $services gespeichert hat.
Skript für die Bereitstellung einer Azure-VM mit GitHub Copilot
GitHub Copilot automatisiert viele serverbezogene Aufgaben, wie zum Beispiel ein einfaches PowerShell-Skript, das eine neue VM in Azure bereitstellt.
Beginnen Sie zunächst mit einem beschreibenden Kommentar.
# Azure VM deployment script
Nachdem Sie zweimal die Eingabetaste gedrückt haben, schlägt GitHub Copilot Folgendes vor.
# Login to Azure
Das ist sinnvoll, denn wir müssen uns bei Azure anmelden, um auf unser Abonnement und seine Cloud-Ressourcen zuzugreifen. Durch Drücken der Tabulatortaste wurde der Vorschlag vervollständigt, aber GitHub Copilot schlug vor, das veraltete Cmdlet Login-AzureRmAccount zu verwenden und nicht das Cmdlet Connect-AzAccount im neueren Az PowerShell-Modul.
Nachdem ich jedoch den richtigen Befehl manuell eingegeben und ein paar Mal die Eingabetaste gedrückt hatte, passte sich GitHub Copilot an und bot an, ein Abonnement mit dem richtigen Cmdlet auszuwählen, und schlug sogar den Kommentar vor, um den Stil durchgehend beizubehalten.
# Set the subskription
Set-AzContext -SubscriptionId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
GitHub Copilot empfahl dann eine Ressourcengruppe.
# Create a resource group
New-AzResourceGroup -Name "RESOURCE_GROUP_NAME" -Ort "LOCATION"
GitHub Copilot fuhr mit der Codierung für ein virtuelles Netzwerk, ein Subnetz, eine öffentliche IP und eine Netzwerkschnittstelle fort.
# Create a virtual network
New-AzVirtualNetwork -ResourceGroupName "RESOURCE_GROUP_NAME" -Name "VNET_NAME" -AddressPrefix ""
# Create a subnet
Add-AzVirtualNetworkSubnetConfig -Name "SUBNET_NAME" -AddressPrefix "" -VirtualNetwork $vnet# Erstellen einer öffentlichen IP-Adresse
New-AzPublicIpAddress -ResourceGroupName "RESOURCE_GROUP_NAME" -Name "PUBLIC_IP_NAME" -AllocationMethod Dynamic -DomainNameLabel "DOMAIN_NAME_LABEL"
# Erstellen a network interface
New-AzNetworkInterface -ResourceGroupName "RESOURCE_GROUP_NAME" -Name "NIC_NAME" -Location "LOCATION" -SubnetId $subnet.Id -PublicIpAddressId $publicIp.Id
Als Nächstes produzierte GitHub Copilot den PowerShell-Code zum Erstellen, Starten und Abrufen der Azure-VM.
# Create a virtual machine
New-AzVM -ResourceGroupName "RESOURCE_GROUP_NAME" -Name "VM_NAME" -Location "LOCATION" -VirtualNetworkName "VNET_NAME" -SubnetName "SUBNET_NAME" -SecurityGroupName "SECURITY_GROUP_NAME" -PublicIpAddressName "PUBLIC_IP_NAME" -OpenPorts 80, 3389 -VirtualNetwork $vnet -NetworkInterfaceName "NIC_NAME" -Image "IMAGE_NAME" -Size "SIZE_NAME"
# Start the virtual machine
Start-AzVM -ResourceGroupName "RESOURCE_GROUP_NAME" -Name "VM_NAME"
# Get the virtual machine
$vm = Get-AzVM -ResourceGroupName "RESOURCE_GROUP_NAME" -Name "VM_NAME"
Wenn Sie fortfahren, wird GitHub Copilot vorschlagen, die anderen unterstützenden Ressourcen wie ein Speicherkonto einzubeziehen.
Für dieses Projekt habe ich nur eine minimale Menge an Code geschrieben. Abgesehen von der Korrektur des Login-Befehls musste ich nur die Parameternamen ausfüllen und die Ausgabe den Variablen zuweisen. Abgesehen vom Testen des Skripts war meine Arbeit damit getan. GitHub CoPilot hat mir etwa eine Stunde oder mehr Arbeit erspart, um ein Skript zu schreiben, das auf den von mir bereitgestellten Eingabeaufforderungen basiert.
GitHub Copilot kann nicht jedes Problem lösen und wird nicht immer perfekten PowerShell-Code schreiben. Aber es kann Ihnen helfen, vorhandene Skripts zu aktualisieren und neue Skripts zu entwickeln. Es kann besonders hilfreich sein, wenn Sie unter Zeitdruck stehen und ein Automatisierungsskript so schnell wie möglich erstellen müssen.