Hostwinds Tutorials
Suchergebnisse für:
Inhaltsverzeichnis
Stichworte: Cloud Servers, Dedicated Server
PowerShell ist eine plattformübergreifende Lösung, die üblicherweise zur Automatisierung der Verwaltung von Computersystemen verwendet wird, kann jedoch auch für die allgemeine Codierung verwendet werden.PowerShell besteht aus einer Befehlszeilenschale, einer Skriptsprache und einem Konfigurationsmanagement-Framework.PowerShell läuft unter Windows, Linux und den MacOS -Betriebssystemen.Aufgrund grundlegender Unterschiede in den Betriebssystemen machen einige PowerShell -Befehle (CMDLets) keinen Sinn.Zum Beispiel die PowerShell Get-Acl CMDLet ist für Linux -Systeme nicht anwendbar, da das Linux -Dateisystem keine NTFS -Zugriffskontrolllisten (ACLS) verwendet.Um eine Liste der verfügbaren Linux PowerShell -CMDlets anzuzeigen Get-Command.
Unter Linux kann die Ausgabe eines Befehls in einen anderen Befehl geleitet werden.Zum Beispiel:
ls | sort -r | more
Dieses umgekehrte sortiert den Inhalt des aktuellen Verzeichnisses und paginiert die Liste (falls erforderlich).Das heißt, der Datenstromausgang der Datenstromausgabe der ls Befehl wird an die gelobt Sortieren Befehl, dessen Datenstromausgabe dann an die gelobt wird Mehr Befehl.Das PowerShell -Analogon ist wie folgt:
Get-ChildItem | Sort-Object -Descending | Out-Host -Paging
Was wirft die Frage auf, warum Sie PowerShell über die native Version verwenden möchten?Ein Hauptgrund ist, dass Objekte und nicht einfache Datenströme zwischen PowerShell -CMDlets gelobt werden.Beispielsweise müssen nicht Text analysiert werden, um Informationen aus einem anderen Ausgabestrom zu extrahieren.Und weil PowerShell -Objekte im Allgemeinen eine Vielzahl von Eigenschaften haben, die mit ihnen verbunden sind, können Sie relativ leicht einige ziemlich mächtige Dinge tun.Sagen Sie zum Beispiel, Sie möchten den PID des Cron -Dienstes finden.Ein erster Versuch könnte wie folgt sein:
ps -aux | grep cron
Dies führt zu einer Ausgabe ähnlich wie folgt:
root 1041 0.0 0.1 126384 1584 ? Ss 22:25 0:00 /usr/sbin/crond -n
root 3519 0.0 0.0 123360 728 ? Ss 23:01 0:00 /usr/sbin/anacron -s
root 4089 0.0 0.0 112808 976 pts/1 R+ 23:09 0:00 grep --color=auto cron
Die Cron PID scheint 1041 zu sein, obwohl es schwer zu erkennen ist, ohne die Tischüberschriften zu sehen.Angenommen, dies ist der Fall, müssen wir in der ersten Zeile auf die zweite Spalte zugreifen.Der erste Schritt könnte darin bestehen, übermäßige Weißespace zu reduzieren:
ps -aux | grep cron | tr -s ' '
Dies ergibt:
root 1041 0.0 0.1 126384 1584 ? Ss 22:25 0:00 /usr/sbin/crond -n
root 3519 0.0 0.0 123360 728 ? Ss 23:01 0:00 /usr/sbin/anacron -s
root 4167 0.0 0.0 112808 972 pts/1 R+ 23:11 0:00 grep --color=auto cron
Jetzt können wir die zweite Spalte mit isolieren Schnitt:
ps -aux | grep cron | tr -s ' ' | cut -d ' ' -f 2
Was produziert:
1041
3519
4274
Schließlich können wir wie folgt die erste Zeile schnappen, um das gewünschte Ergebnis zu erzielen, nämlich 1041:
ps -aux | grep cron | tr -s ' ' | cut -d ' ' -f 2 | head -1
Mit der Tatsache, dass PowerShell CMDLets eher Objekte als Datenströme ausgeben, ist die PowerShell -Version des oben genannten einfach:
(Get-Process -Name crond).Id
In diesem Fall, Get -Process -name Crond Gibt ein Objekt zurück, das den Cron -Prozess darstellt.Dieses Objekt hat eine Reihe nützlicher Eigenschaften, von denen eine die Prozess -ID (oder PID) ist.Um auf eine Eigenschaft eines PowerShell -Objekts zuzugreifen, können Sie es in Klammern einwickeln und dann wie gezeigt Standard "Punkt" -Notation verwenden.
Um PowerShell auf Ihrem Lieblingsgeschmack von Linux zu installieren Installieren von PowerShell unter Linux.Wenn Ihre Linux -Verteilung nicht aufgeführt ist Alternative Möglichkeiten zur Installation von PowerShell unter Linux.
Beispielsweise installieren die folgenden vier Befehle die neueste Version von PowerShell zu CentOS 7:
# Optionally update all software packages:
sudo yum -y update
# Register the Microsoft repository:
curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo
# Install PowerShell:
sudo yum -y install powershell
# Start PowerShell:
pwsh
Wie zu sehen ist, ist die Installation von PowerShell unkompliziert.
Eine Schlüsseltechnik besteht darin, zu bestimmen, welche Eigenschaften ein PowerShell -Objekt tatsächlich hat.Dies kann leicht mit dem erreicht werden Karten cmdlet.Um beispielsweise die Eigenschaften eines PowerShell -Prozessobjekts zu bestimmen, können Sie verwenden:
Get-Process | Get-Member -Force
Dies zeigt, dass es eine gibt Weg Eigenschaft für Prozessobjekte.Daher können wir es verwenden, um die Top 10 Prozesse in Bezug auf die CPU -Verwendung wie folgt aufzulisten:
Get-Process | Sort-Object -Property CPU | Select-Object -Property Name, Path, CPU -Last 10
Dies erzeugt eine ähnliche Ausgabe wie folgt:
Name Path CPU
---- ---- ---
xfwm4 /usr/bin/xfwm4 1.95
systemd /usr/lib/systemd/systemd 3.63
rngd /usr/sbin/rngd 7.39
xfce4-terminal /usr/bin/xfce4-terminal 9.35
xrdp /usr/sbin/xrdp 22.05
ksoftirqd/0 26.21
pwsh /opt/microsoft/powershell/7/pwsh 27.37
rcu_sched 45.44
Xvnc /usr/bin/Xvnc 59.27
NetworkManager /usr/sbin/NetworkManager 955.19
Obwohl wir nützlich sind, möchten wir vielleicht eine Gesamtsystemnutzungsmetrik berechnen.Ein erster Schnitt könnte darin bestehen, einfach die Werte für nicht ausgestattetes Speicher (NPM), Seitenspeicher (PM), Working Set (WS) und CPU zu summieren.Das heißt, wir definieren unsere Gesamtnutzungsmetrik wie folgt:
Gesamtrang = NPM + PM + WS + CPU.
In PowerShell kann dies wie folgt erreicht werden:
Get-Process | Select-Object -Property @{Label = 'OverallUsage'; Expression = {$_.NPM + $_.PM + $_.WS + $_.CPU}}
Das @{} Die Hash -Tabelle (d. H. Schlüssel-/Wertpaare) ermöglicht es uns, eine Eigenschaft genannt zu definieren Gesamtauslagerung Wessen Definition ist der oben gezeigte Ausdruck.In diesem Ausdruck, $_ repräsentiert ein Pipeline -Objekt.In diesem Fall ein individuelles Prozessobjekt, das Get-Process Rückgabe (einer pro laufender Linux -Prozess).Wir summieren dann die vier Eigenschaften.Dies führt in den folgenden (ersten Zeilen):
OverallUsage
------------
520192
815104.03
794624
1093632
4902912.01
3330048.37
Jetzt können wir diese beiden Konzepte wie folgt kombinieren:
Get-Process | Select-Object -Property Name, Path, @{Label = 'OverallUsage'; Expression = {$_.NPM + $_.PM + $_.WS + $_.CPU}} | Sort-Object -Property OverallUsage -Bottom 10
Dies erzeugt eine Top 10 Gesamtnutzungstabelle, ähnlich wie folgt:
Name Path OverallUsage
---- ---- ------------
Thunar /usr/bin/thunar 14073856.2
xfce4-power-manager /usr/bin/xfce4-power-manager 15970304.3
xfce4-panel /usr/bin/xfce4-panel 16195584.9
xfdesktop /usr/bin/xfdesktop 17588224.59
tuned /usr/bin/python2.7 18898945.66
yum-cron /usr/bin/python2.7 22335488.2
xfce4-terminal /usr/bin/xfce4-terminal 23642123.4
xrdp /usr/sbin/xrdp 26570776.34
Xvnc /usr/bin/Xvnc 82710598.14
pwsh /opt/microsoft/powershell/7/pwsh 298852382.66
Und wenn Sie es vorziehen, abgerundete Nutzungswerte anzuzeigen, können Sie verwenden:
Get-Process | Select-Object -Property Name, Path, @{Label = 'OverallUsage'; Expression = {[Math]::Round($_.NPM + $_.PM + $_.WS + $_.CPU)}} | Sort-Object -Property OverallUsage -Bottom 10
Das [Math] :: Round () Funktion wird verwendet, um die einzelnen Beträge auf ihre nächsten ganzen Werte zu runden.
Es gibt viele Szenarien, in denen Standard -Linux -Befehle sinnvoller sind als PowerShell -CMDLets, und in mehreren Fällen umgekehrt, aber besonders ansprechend ist, dass Sie beide Paradigmen zusammen verwenden können.Betrachten Sie als einfaches Beispiel:
Get-Process | Select-Object -Property Name, Path, Responding, Id | grep cron
Dies produziert:
anacron /usr/sbin/anacron True 3018
crond /usr/sbin/crond True 1033
yum-cron /usr/bin/python2.7 True 4760
Die dritte Spalte gibt an, ob der Prozess reagiert oder nicht.
Wie Sie sehen können, bieten PowerShell und die Kombination von PowerShell mit Linux -Befehlen ausreichend Möglichkeiten, verschiedene Probleme und Aufgaben zu lösen und zu vereinfachen.
Geschrieben von Karlito Bonnevie / April 26, 2022