Hostwinds Tutorials
Zoekresultaten voor:
Inhoudsopgave
Trefwoorden: Cloud Servers, Dedicated Server
PowerShell is een platformonafhankelijke oplossing die vaak wordt gebruikt voor het automatiseren van het beheer van computersystemen, maar kan ook worden gebruikt voor algemene codering.PowerShell bestaat uit een opdrachtregelschelp, een scripttaal en een configuratiebeheerkader.PowerShell draait op Windows, Linux en de MacOS -besturingssystemen.Vanwege fundamentele verschillen in besturingssystemen hebben sommige PowerShell -commando's (CMDlets genoemd) niet logisch.Bijvoorbeeld de PowerShell GET-ACL CMDlet is niet van toepassing op Linux -systemen, omdat het Linux -bestandssysteem geen NTFS -toegangscontrolelijsten (ACL's) gebruikt.Om een lijst met de beschikbare Linux PowerShell -cmdlets te bekijken, run Opdracht.
In Linux kan de uitvoer van de ene opdracht in een ander opdracht worden geleid.Bijvoorbeeld:
ls | sort -r | more
Dit omgekeerd sorteert de inhoud van de huidige map en pagineert de lijst (indien nodig).Dat wil zeggen de gegevensstroomuitvoer van de ls commando wordt naar de soort commando waarvan de gegevensstroomuitvoer vervolgens naar de meer opdracht.De PowerShell -analoog hiervan is als volgt:
Get-ChildItem | Sort-Object -Descending | Out-Host -Paging
Wat de vraag oproept, waarom zou je PowerShell over de native versie willen gebruiken?Een belangrijke reden is dat objecten, en niet eenvoudige gegevensstromen, worden geleid tussen PowerShell -cmdlets.Het is bijvoorbeeld niet nodig om tekst te parseren om informatie uit een andere uitvoerstroom te extraheren.En omdat PowerShell -objecten over het algemeen een overvloed aan eigenschappen hebben die ermee verbonden zijn, kunt u relatief gemakkelijk een aantal redelijk krachtige dingen doen.Stel bijvoorbeeld dat u de PID van de Cron -service wilt vinden.Een eerste poging kan als volgt zijn:
ps -aux | grep cron
Dit resulteert in uitvoer vergelijkbaar met het volgende:
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
De Cron PID lijkt 1041 te zijn, hoewel het moeilijk te zeggen is zonder de tafelkoppen te zien.Ervan uitgaande dat dit het geval is, moeten we toegang krijgen tot de tweede kolom in de eerste regel.De eerste stap kan zijn om overmatige witruimte te verminderen:
ps -aux | grep cron | tr -s ' '
Dit levert:
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
Nu kunnen we de tweede kolom met snee:
ps -aux | grep cron | tr -s ' ' | cut -d ' ' -f 2
Die produceert:
1041
3519
4274
Ten slotte kunnen we de eerste regel als volgt pakken om het gewenste resultaat te krijgen, namelijk 1041:
ps -aux | grep cron | tr -s ' ' | cut -d ' ' -f 2 | head -1
Met behulp van het feit dat PowerShell CMDlets objecten uitvoert in plaats van gegevensstromen, is de PowerShell -versie van het bovenstaande eenvoudig:
(Get-Process -Name crond).Id
In dit geval, Get -process -name crond Retourneert een object dat het Cron -proces vertegenwoordigt.Dit object heeft een reeks nuttige eigenschappen, waarvan er één de proces -ID (of PID) is.Om toegang te krijgen tot een eigenschap van een PowerShell -object, kunt u deze tussen haakjes inpakken en vervolgens standaard "dot" -notatie gebruiken, zoals weergegeven.
Raadpleeg PowerShell op uw favoriete smaak van Linux PowerShell installeren op Linux.Als uw Linux -verdeling niet wordt vermeld, overweeg dan Alternatieve manieren om PowerShell op Linux te installeren.
Als voorbeeld installeren de volgende vier opdrachten de nieuwste versie van PowerShell op 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
Zoals te zien is, is het installeren van PowerShell eenvoudig.
Een belangrijke techniek is bepalen welke eigenschappen een PowerShell -object eigenlijk heeft.Dit kan gemakkelijk worden bereikt met de Bid cmdlet.Om bijvoorbeeld de eigenschappen van een PowerShell -procesobject te bepalen, kunt u:
Get-Process | Get-Member -Force
Dit onthult dat er een Pad eigenschap voor procesobjecten.We kunnen het dus gebruiken om de top 10 -processen te vermelden, met betrekking tot CPU -gebruik, als volgt:
Get-Process | Sort-Object -Property CPU | Select-Object -Property Name, Path, CPU -Last 10
Dit produceert output vergelijkbaar met het volgende:
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
Hoewel nuttig, willen we misschien een algemene systeemgebruiksmetriek berekenen.Een eerste snit kan zijn om eenvoudig het niet-gepresenteerde geheugen (NPM), paginamemory (PM), Working Set (WS) en CPU-gebruikswaarden te tellen.Dat wil zeggen, we definiëren onze algemene gebruiksmetriek als volgt:
Overallusage = npm + PM + WS + CPU.
In Powershell kan dit als volgt worden bereikt:
Get-Process | Select-Object -Property @{Label = 'OverallUsage'; Expression = {$_.NPM + $_.PM + $_.WS + $_.CPU}}
De @{} Hash -tabel (d.w.z. sleutel/waardeparen) stelt ons in staat om een eigenschap te definiëren Overallusage waarvan de definitie de hierboven getoonde uitdrukking is.In deze uitdrukking, $_ vertegenwoordigt een pijplijnobject.In dit geval een individueel procesobject dat Opslagplaats Retourneert (één per Linux -proces).Vervolgens vatten we de vier eigenschappen.Dit resulteert in het volgende (eerste paar regels):
OverallUsage
------------
520192
815104.03
794624
1093632
4902912.01
3330048.37
Nu kunnen we deze twee concepten als volgt combineren:
Get-Process | Select-Object -Property Name, Path, @{Label = 'OverallUsage'; Expression = {$_.NPM + $_.PM + $_.WS + $_.CPU}} | Sort-Object -Property OverallUsage -Bottom 10
Dit produceert een top 10 algemeen gebruikstabel, vergelijkbaar met het volgende:
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
En als u liever afgeronde gebruikswaarden weergeeft, kunt u gebruiken:
Get-Process | Select-Object -Property Name, Path, @{Label = 'OverallUsage'; Expression = {[Math]::Round($_.NPM + $_.PM + $_.WS + $_.CPU)}} | Sort-Object -Property OverallUsage -Bottom 10
De [Math] :: Round () Functie wordt gebruikt om de individuele bedragen af te ronden naar hun dichtstbijzijnde hele waarden.
Er zijn tal van scenario's waarbij standaard Linux -opdrachten logischer zijn dan PowerShell -cmdlets, en in een aantal gevallen, andersom, maar wat bijzonder aantrekkelijk is, is dat je beide paradigma's samen kunt gebruiken.Als een eenvoudig voorbeeld, overweeg:
Get-Process | Select-Object -Property Name, Path, Responding, Id | grep cron
Dit produceert:
anacron /usr/sbin/anacron True 3018
crond /usr/sbin/crond True 1033
yum-cron /usr/bin/python2.7 True 4760
De derde kolom geeft aan of het proces al dan niet reageert.
Zoals u kunt zien, bieden PowerShell en de combinatie van PowerShell met Linux -opdrachten voldoende gelegenheid om verschillende problemen en taken op te lossen en te vereenvoudigen.
Geschreven door Karlito Bonnevie / april 26, 2022