Ist Powershell im Gegensatz zu anderen "Sprachen" schwer?

5 Antworten

Powershell ist nicht schwerer als andere Sprachen.

In vieler Hinsicht ist Powershell sogar einfacher, da es über eine große Flexibilität hinsichtlich verwendete Parameter verfügt.

Powershell ist es ziemlich egal ob man für Parameternamen die ausführliche Schreibweise oder eine schnell hingeworfene Abkürzung verwendet:

#mal Kackfrech  einen "Spitznamen" für Write-Host erfinden XD und natürlich gleich beim  abkürzen
#Eigentlich sollte es wie folgt lauten: 
#New-Alias -Name wh -Value Write-Host
nal wh write-host
Write-Host 'Ich bin ein '  -ForegroundColor DarkGreen -BackgroundColor White -NoNewline
write-host schlampiger Test -fo yell -back mag -n
wh  ...und es geht weiter
wh 'sch***egal' -b 6
#alias wieder wegmache (Powershell 5 Art)
del alias:wh
wh 'jetzt kommt ne Fehlermeldung, weil  der  Alias "wh" wieder weg ist weg ist'
pause

😅Das soll ja nicht zu schlechtem Programmierstil verleiten. Powershell richtet sich Vordergründig an Administratoren, welche auch mal in der Console zügig ein Paar Befehle eingeben wollen, ohne Weltrekorde im tippen aufzustellen.

Pipelining kann auch Bash, aber Powershell gibt keinen Text weiter sondern Objekte.

tortoise64: ...davon abgesehen ist in der Nische wo man diese Skripts einsetzt OOP gar nicht gefragt

Powershells OOP merkt der Nutzer in der Regel garnicht. Meist halten sich die recht "intelligenten" Objekte von Powershell dezent im Hintergrund.

Wen interessiert schon ein Datum, außer man will eins eingeben oder damit Rechnen... und da ist Powershell extrem Kulant dank cleverer Objekte:

Get-Date '2015/11/25 16:30'
Get-Date '2015/11/25 16:30 gmt'
Get-Date '2015/11/7'
Get-Date '18.März.2011'
Get-Date '18.Mar.2011'
Get-Date '13-7-2019'
Get-Date -Year 2015 -Month 8  -Day 27

Mit Powershell muss man nicht herumzaubern um die verbleibenden die Tage bis Weihnachten heraus zu bekommen: einfach Datum minus Datum. Was kümmern mich Objekte (aber sie sind da)...

$Weihnachten=Get-Date '24.12.22'
$heute=Get-Date
($Weihnachten - $Heute).Days

Powershell steht die gesamte Kraft von .Net zur Verfügung.

eine Uhr durch die man hindurchklicken kann und di immer im Vordergrund ist...

Add-Type -a 'System.Windows.Forms'
$Form = New-Object 'System.Windows.Forms.Form'
$Form.BackColor = '0,0,0' #schwarz
$Form.TransparencyKey = $Form.BackColor #kein Hintergrund
$Form.TopMost = $True
$Form.FormBorderStyle = 0 #Rahmen aus
$Form.Size = '250,90'
$Form.StartPosition = 'manual'
$Form.Location = '30,30' #wo die Uhr  hin soll

$ClockDisplay = New-Object 'System.Windows.Forms.Label'
$ClockDisplay.Font = [System.Drawing.Font]::new("Consolas",32,[System.Drawing.FontStyle]3)
$ClockDisplay.Text = '{0:HH\:mm\:ss}' -f (Get-Date)
$ClockDisplay.AutoSize = $True
$ClockDisplay.ForeColor = '255,0,0'  # ja da ist Powershell  auch  kulant  normalerweise   hieße  es : [System.Drawing.Color]::FromArgb(255,0,0)
$Form.Controls.Add($ClockDisplay)

$Timer1 = New-Object 'System.Windows.Forms.Timer'
$Timer1.Enabled = $True
$Timer1.Interval = 100
$Timer1_Action={
    $ClockDisplay.Text = '{0:HH\:mm\:ss}' -f (Get-Date) 
}
$Timer1.add_Tick($Timer1_Action)

$Null=$Form.ShowDialog()

...Ja das ginge auch mit C#.🙄🥱

...Und man braucht auch nicht unbedingt Visual Studio (NotePad++ reicht vollkommen)

Powershell ist Extrem Mächtig!!! Wer sich etwas Auskennt verfügt über den Zugriff auf die tiefsten Systemfunktionen (das Folgende ist Harmlos, geht schon richtig weit unter die Haut)

suspendProcess.ps1

$NtFunctions = @(
    '[DllImport("ntdll.dll", SetLastError = true)]    public static extern void NtSuspendProcess(IntPtr processHandle);'
    '[DllImport("ntdll.dll", SetLastError = true)]    public static extern void NtResumeProcess(IntPtr processHandle);'
)
$NtDll = Add-Type -me $NtFunctions -Name Ntdll -pass
$ProcInfo= Start-Process notepad -pass     #starte Notepad
$NtDll::NtSuspendProcess($ProcInfo.Handle) #stope jeglich  Funktion von Notepad (nicht  beenden)
pause  #drücke  Enter um das Notepad wieder funktionieren zu lassen
$NtDll::NtResumeProcess($ProcInfo.Handle)
pause

...und bei allem benötigt man keine "Ware" von 3.Anbietern. Das hat Windows komplett an Bord

Piplining ist eine feine Sache man kippt was in die Leitung und hinten kommt das fertige Ergebnis heraus (am besten garnicht drüber nachdenken, die Objekte und Powershell bekommen das schon irgendwie hin) 😎🥱🤭

  • Wirf alle laufenden Prozesse in die Röhre
  • Ich will die von der Firma mit ungefährem Namen Microsoft
  • Sortiere den Kram nach Name
  • Ich will von de der fülle der Informationen über diese Prozesse nur Name, Produkt und Beschreibung behalten...
  • Bitte als Liste anzeigen
Get-Process | Where-Object {$_.Company -like  '*microsoft*'} | Sort-Object -Property 'Name'| Select-Object -Property Name,Product,Description|Format-List

#kann man auch  hübscher  schreiben
Get-Process |
  Where-Object {$_.Company -like '*microsoft*'} |
  Sort-Object -Property 'Name'|
  Select-Object -Property Name,Product,Description |
  Format-List

Die Meisten machen sich einen riesigen Schädel (wie funktioniert das.. blah und heul)... alles Quatsch, einfach tun. (man muss ja nicht gleich zu Beginn das ganze System zerlegen😅)

Die Namensgebung der Cmdlets ist einprägsam , wenn man nicht gerade Admin-Schlamp-Jargon-Aliase benutzt. An die Vergleichs- und -Bit-Operatoren gewöhnt man sich schnell und welche Sprache könnte bei == auch einer CaseSensitiv-Variation aufwarten Powerschell genügt ein C ... -eq -ceq , -gt -cgt , -match -cmatch . < und > haben andere Funktionen.

Und welche Sprache kann schon sowas?...

$Var1,$Var2,$Rest=1..5
$Var1
$Var2
'nun kommt der Rest'
$Rest

Wenn man Richtig die ganze Trickkiste öffnet ist Powershell Obercool.

...und Powerschell ist ehrlich, pure Script Ich kann mir das Programm anschauen. da ist nichts versteckt, nichts vorcompiliert. einfach text dessen Funktionen ich abschätzen kann.

(Ja die möchten alle ihren Superinnovativen Code schützen und für sich behalten. Keiner darf Meine Großen Geheimnisse entdecken.)

...Käse... es gibt nichts was nicht irgendwer schon Gedacht hat... 7Mrd. Menschen und irgendwo in Brasilien oder in China denkt garantiert jemand genau das gleiche wie ich... es gibt keine geheimen tricks mehr...

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Das Konzept mit den Cmdlets ist am Anfang ziemlich gewöhnungsbedürftig. Vor allem weiß man am Anfang nicht, welche Cmdlets die Daten von anderen Cmdlets über die Pipe empfangen und verarbeiten können. Und an die Vergleichsoperatoren muss man sich auch erst gewöhnen.

Um den Umstieg von Batch zu Powershell ein bisschen einfacher zu haben, gibt es viele Aliase von Funktionen, die unter Batch bekannt sind (dir, cd, md, rmdir, del, echo, cls, copy, move etc.), die zumindest ähnlich zu bedienen sind, wie unter Batch.

Man kann, wie in Batch einfach Programme starten, indem man den Namen eingibt, man kann aber z.B. auch das "Laufwerk" HKLM aufrufen und damit in der Registry navigieren, als wenn man in der Dateistruktur wäre.

Und Powershell ist objektorientiert. Also kann man mit Powershell alles machen, was man auch in C# machen kann (auch wenn es in Powershell teilweise ziemlich umständlich ist).

Powershell ist also aus ziemlich vielen Dingen zusammengewürfelt, aber nicht wirklich schwerer, als andere Sprachen.

Hallo officialcrime,

als schwer würde ich es nicht bezeichnen. PowerShell hat nur einige Eigenheiten und die IDE von Haus ist fürchterlich. Also würde ich da direkt eine andere wie Visual Studio Code empfehlen.

Ansonsten hat PowerShell viel Macht über das Windowssystem an sich und löst im Grunde auch zum größten Teil Batch ab.

LG


tortoise64  25.04.2022, 11:04

Besser gleich auf eine bash wechseln 🤷‍♂️ Wirst sehen das wird kommen

VeryBestAnswers  25.04.2022, 11:09
@tortoise64

PowerShell ist deutlich mächtiger als Bash. PowerShell kann mit Objekten arbeiten und unterstützt sogar OOP mit Vererbung, während du in Bash im Grunde auf Strings und Zahlen beschränkt bist. Und die Syntax von Bash finde ich einfach nur furchtbar.

tortoise64  25.04.2022, 11:11
@VeryBestAnswers

Ja, aber dafür bist du auch auf macOS / Linux lauffähig, davon abgesehen ist in der Nische wo man diese Skripts einsetzt OOP gar nicht gefragt

Allenfalls der Zugriff auf die Windows commandlets ist positiv

Dultus, UserMod Light   25.04.2022, 11:15
@tortoise64

Eine CSV Liste beziehen und auf jedem der Einträge einen Druckertreiber installieren oder weitere Daten von den Rechnern beziehen.

Du kannst PowerShell wie andere Programmiersprachen verwenden. Du kannst sogar in PowerShell Anwendungen mit UIs entwerfen...

VeryBestAnswers  25.04.2022, 11:15
@tortoise64

Wenn Plattformunabhängigkeit wichtig ist, verwende ich lieber sowas wie Python. Ansonsten verwende ich auch meistens Bash, weil ich privat mit Linux arbeite und mir nie die Mühe gemacht habe, PowerShell zu installieren (was durchaus möglich ist!) und ich relativ selten Shell-Skripte schreibe. PowerShell ist aber eigentlich die bessere Sprache.

Es lässt sich PowerShell auf Linux/macOS installieren genauso wie Bash auf Windows. Ich verwende Bash zum Beispiel auf meinem Windows-Rechner für die Arbeit.

Erzesel  25.04.2022, 17:44
@tortoise64
OOP gar nicht gefragt

Wo hast du den Deine Weisheiten her?

Die meisten Objekte bekommt man garnicht mit, außer man wundert sich über die Menge an Daten welche ein simples "Get-Process | fl *" zur verfügung stellt.

Willst Du das tatsächlich mit dem Text-Piping von Bash vergleichen?

Mal im ernst, die meisten Daten brauch man nicht , die weißt sicher was Process.Handle dir nutzen könnte. Aber Leute wie ich spielen auf der Ganzen Klaviatur und nicht nur auf 8 "Tönen"...

Ich filtere mir das aus dem Objekt was ich gerade brauche ... ist doch egal, ob ich 99% der Daten nicht brauche aber bitte lasse man mir die Entscheidung was ich "wegwerfe"..

Mein Rechner hat 6 Kerne bis 4.3GHz und reichlich Speicher was soll mich da um ungebrauchte Daten kümmern...

Besser man Hat als man Hätte... und wie verpackt man am besten große Datenmengen ? Objekte! die haben dann auch Methoden um ihre Daten zu Kommunizieren.

Ne nur ungewohnt aber eigentlich ziemlich Klasse

Hat eine Syntax, die nicht sehr schwer ist.

Hier eine ganz gute und leicht verständliche Beschreibung:

https://www.computerbild.de/artikel/cb-Tipps-Software-PowerShell-Befehle-fuer-Windows-17389893.html


Erzesel  25.04.2022, 22:11

Entweder man ist ein guter Programmierer oder ein guter Schreiberling.

Der Schreiberling, welcher den Computerbild-Artikel verfasst hat ist weder das Eine noch das Andere...🥱

ich habe mich köstlich beim Lesen amüsiert... das meiste ist einfach altbackener Müll , welcher vielleicht mal unter Windows XP funktioniert haben mag.

klingt gut, klappt aber nicht mal mehr unter Win 7. Windows Kann auch mit Adminrechten keine Kernelprozesse abschießen.

Hochpriorisierte Kernelprozesse könne sich nur auf explizite Aufforderung selbst beenden(oder eher nicht), jedoch nicht von außen abgeschossen werden. Bluescreen gibts nur wenn ein solcher Prozess kaputt ist oder die Hardware, welch von einem solchen bedient wird-

Bildzeitung bleib Bildzeitung, auch wenn man Computer davor schreibt...

Beste Tutorials

https://docs.microsoft.com/de-de/powershell/scripting/learn/tutorials/01-discover-powershell?view=powershell-7.2

ganz Toll ist auch Dr.Scripto