Getty Images
Daten über das PowerShell-Modul Join-Object verbinden
Mit dem Community-Modul Join-Object lassen sich in PowerShell verschiedene Datenquellen und -sätze verbinden. In diesem Tutorial wird der Einsatz erläutert.
Data Science ist in aller Munde. Damit Unternehmen aber von künstlicher Intelligenz (KI) profitieren und fortschrittliche Datenanalyseprozesse durchführen können, müssen sie Programmiersprachen mit den Daten selbst verwenden.
Es gibt mehrere beliebte Sprachen, zum Beispiel Python und R. Doch für viele Windows-Benutzer ist PowerShell eine vertrautere Sprache, insbesondere in den letzten zehn Jahren.
Join-Object in PowerShell verwenden
PowerShell passt zwar nicht wirklich in ein Machine Learning Stack, kann aber gut mit Daten umgehen, da es sich mit vielen Datenquellen verbinden lässt, zum Beispiel mit MySQL oder Open Database Connectivity (ODBC). Eine der häufigsten Aufgaben besteht darin, zwei Datensätze auf der Grundlage einer gemeinsamen Eigenschaft miteinander zu verbinden.
PowerShell verfügt über das Community-Modul Join-Object für diese Aufgabe. Mit Join-Object können PowerShell-Benutzer die SQL-ähnliche Erfahrung genießen, zwei separate, nicht miteinander verbundene Objekte zu verbinden.
Installieren von Join-Object
Bevor wir das Cmdlet Join-Object verwenden können, muss man es aus der PowerShell-Galerie herunterladen, um es über das Cmdlet Install-Module installieren zu können:
PS C:\Users\dan> Install-Module -Name Join-Object
Die folgende Codeausgabe zeigt, dass die Installation erfolgreich war:
PS C:\Users\dan> Get-Module -ListAvailable Join-Object
Directory: C:\Users\dan\Documents\PowerShell\Modules
ModuleType Version PreRelease Name PSEdition ExportedCommands
---------- ------- ---------- ---- --------- ----------------
Skript 2.0.2 Join-Object Desk Join-Object
Zwei der am häufigsten ausgeführten PowerShell-Cmdlets sind Get-Process und Get-Service. Get-Process ruft die derzeit auf einem System ausgeführten Prozesse ab, während Get-Service die installierten Dienste abruft. Dies ist zwar nicht immer der Fall, aber manchmal ist der Name eines Dienstes auch der Name eines Prozesses, der diesen Dienst ausführt. Wie kann man dies überprüfen?
Eine Möglichkeit besteht darin, eine Schleife durch jeden Prozess laufen zu lassen, um zu sehen, ob er mit einem Dienstnamen übereinstimmt, und, falls dies der Fall ist, dies zurückzugeben.
Setzen wir zunächst unsere Variablen:
$processes = Get-Process
$services = Get-Service
Wenn wir den Befehl Where-Object verwenden, können wir mit dem Operator --contains prüfen, ob jeder Prozessname im Objekt $services enthalten ist:
PS C:\Users\dan> $processes | Where-Object {$services.Name -contains $_.Name}
Was aber, wenn man für jeden Prozess andere Eigenschaften des passenden Dienstes mitbringen möchte? Das ist machbar, aber nicht ganz einfach. Hier kommt Join-Object ins Spiel.
Mit einer Zeile Code können wir das schnell erledigen:
PS C:\Users\dan> $JoinedObject = Join-Object -Left $processes -Right $services -LeftJoinProperty name -RightJoinProperty name -KeepRightJoinProperty -Type OnlyIfInBoth -Prefix service_
Schauen wir uns diese Zeichenfolge genauer an, um zu verstehen, was diese Parameter in Join-Object bedeuten:
- Wir haben --Left und --Right. Dies sind einfach die Objekte, die wir verbinden wollen, nämlich $processes und $services, wie oben definiert.
- Wir verwenden die Befehle --LeftJoinProperty und --RightJoinProperty. Dies ist die Eigenschaft der beiden Objekte, die wir miteinander verbinden möchten. In diesem Fall haben sie denselben Namen, nämlich name.
- Der nächste Parameter, --KeepRightJoinProperty, schließt die rechte verknüpfte Eigenschaft in die Ausgabe des join-Vorgangs ein. Dies wird im weiteren Verlauf dieses Tutorials demonstriert.
- Der Parameter --Type ist wichtig, da man hier die Art der Verknüpfung angibt, die man durchführen möchte. In diesem Beispiel wird OnlyIfInBoth verwendet, um alle Prozesse und Dienste mit demselben Namen anzuzeigen.
Die anderen Optionen, die direkt aus der PowerShell-Hilfe übernommen wurden, lauten:
-
AllInLeft. Dies ist der Standardparameter, mit dem alle Left-Elemente in der Ausgabe mindestens einmal angezeigt werden, je nachdem, wie viele Elemente auf Right zutreffen.
-
AllInRight. Dies ist ähnlich wie AllInLeft.
- OnlyIfInBoth. Gibt alle Elemente von Left aus, unabhängig davon, wie viele Übereinstimmungen in Right gefunden werden.
-
AllInBoth. Nimmt alle Einträge sowohl Right als auch Left in die Ausgabe auf.
- Der letzte Parameter ist --Prefix. Er wird verwendet, um jeder Eigenschaft von Right in der Verknüpfung eine beliebige Zeichenfolge voranzustellen. In diesem Fall wurde _service verwendet.
Um die Ergebnisse anzuzeigen, verwendet man den Befehl Select-Object.
Datenwissenschaftler betrachten PowerShell nicht oft als potenzielles Tool, aber es kann die Verbindung verschiedener Datenquellen und das Zusammenführen von Datensätzen vereinfachen. Auch außerhalb der Datenwissenschaft werden PowerShell-Benutzer auf Situationen stoßen, in denen sie Daten für Automatisierungsprozesse zusammenführen müssen, und Join-Object ist ein wertvolles Tool für diese Zwecke.