Powershell coole Idee für kleine Übung?
Hallo. Ich muss für meinen Vortrag so eine kleine Powershell-Übung für die Klasse erstellen. Der letzte hat gezeigt für man die WLAN-Profile ausliest und dann das Passwort eines WLAN's und der Lehrer fand das gut. Hat jemand eine Idee was ich nehmen könnte? So in eine ähnliche Richtung...
3 Antworten
Hmm... die WLAN Profile und Passwörter auslesen (vermutlich über netsh) sind eigentlich kein "echtes" Powershell. Man kann das zwar in Powershell machen, aber da wird nur das Programm "C:\Windows\System32\netsh.exe" aufgerufen. Das würde also genauso auch in der alten Windows-Eingabeaufforderung gehen.
Dasselbe gilt übrigens auch für "ipconfig".
Eine Idee, die ich hab ist z.B. viele Dateien in einem Ordner automatisch umzubenennen. Das Skript hier nimmt sich z.B. alle jpg-Bilder im Ordner "Dieser PC > Bilder" und benennt sie um in "Bild_1.jpg", "Bild_2.jpg" etc.
Ich hab extra drauf geachtet, auch wirklich die Powershell-Befehle zu benutzen. Viele Befehle, die ein Äquivalent in der alten Eingabeaufforderung haben, lassen sich auch mit dem alten Befehl aufrufen. Z.B. "Set-Location" geht auch mit "cd" oder "Get-Childitem" ist das Gleiche, wie "dir".
Set-Location $env:USERPROFILE\Pictures
$number = 0
Get-ChildItem | Where-Object {$_.Extension -eq ".jpg"} | ForEach-Object {$number += 1; Rename-Item $_ -NewName "Bild_$number.jpg"}
Schau doch einfach mal unter:
...da gibts (teilweise) recht praktische Lösungen zu diversen Problemen...und auch einige sehr "neckische" Sachen:
Wie Batch-Powershellhybride (Weil die Rechtsklickerei zum starten recht nervig sein kann):
Oder Scherze:
letztens wollte jemand eine "Feierabenduhr"
habe es aus Langeweile etwas ausgebaut:
$StartTime = Get-Date
$StartDuration = New-TimeSpan -Hours 0 -Minutes 10 -Sec 0 #zur Demo nur 10 Minuten zählen
$EndTime = $StartTime + $StartDuration
$StartTime.ToString("HH:mm:ss")
$EndTime.ToString("HH:mm:ss")
function UpdateDuration() {
$Now = Get-Date
$ElapsedTime = New-TimeSpan -Start $StartTime -End $Now
$PercentElapsed = $ElapsedTime.Ticks * 100 / $StartDuration.Ticks
if ($PercentElapsed -ge 100) {$PercentElapsed=100}
return [pscustomobject] @{
RemainingTime = New-TimeSpan -Start $Now -End $EndTime
ElapsedTime = $ElapsedTime
PercentElapsed = $PercentElapsed
}
}
function Alert(){
#mache Krach... (Macht in dieser Demo nichts)
}
Add-Type -a 'System.Windows.Forms'
#ein paar TypeMacros
#$DPoint = [System.Drawing.Point]
#$DSize = [System.Drawing.Size]
#$DColor = [System.Drawing.Color]
#$DColorTranslator = [System.Drawing.ColorTranslator]
#schreibfaul... in einer Zeile erledigen
'Point','Size','Color','Font','ColorTranslator'|%{iex ('$D{0}=[System.Drawing.{0}]' -f $_)}
$Form = New-Object 'System.Windows.Forms.Form'
$Form.Text = "End of Work Clock"
$Form.BackColor = $DColor::FromArgb(0xFF000040) # same like $DColTrans::FromHtml('#000000') !!!while 32bit input Transparencypart must ff
$Form.TopMost = $True
$Form.Size = $DSize::new(600,200)
$Form.FormBorderStyle = 1 #https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.formborderstyle?view=windowsdesktop-6.0#felder
if (!$Form.FormBorderStyle){$Form.ClientSize = $Form.Size} #bei FramelesWindow Clientbereich ist 8px zu klein falsch? anpassen...
write-host $Form.ClientSize
$ClockDisplay = New-Object 'System.Windows.Forms.Label'
$Form.Controls.Add($ClockDisplay)
$ClockDisplay.Text = 'Clock: {0:HH\:mm\:ss\.ff}' -f (Get-Date)
$ClockDisplay.Font = $DFont::new("Consolas",32,[System.Drawing.FontStyle] 7) #https://docs.microsoft.com/de-de/dotnet/api/system.drawing.fontstyle?view=dotnet-plat-ext-6.0#felder
#$ClockDisplay.Font.Style = 0 geht nicht schreibgeschützte Eigenschaften!!!
#$ClockDisplay.Font.Size = 40
$ClockDisplay.Location = $DPoint::new(30,10)
$ClockDisplay.AutoSize = $True
$ClockDisplay.ForeColor = $DColorTranslator::FromHtml("#ff0000")
#write-host $ClockDisplay.size
$DurationDisplay = New-Object 'System.Windows.Forms.Label'
$Form.Controls.Add($DurationDisplay)
$DurationDisplay.Text = 'Remaining Time: {0:hh\:mm\:ss} Elapsed: {1,7:f3}%' -f $StartDuration,0
$DurationDisplay.Font = [System.Drawing.Font]::new("Consolas",16)
$DurationDisplay.AutoSize = $True
$DurationDisplay.Location = $DPoint::new(30,70)
$DurationDisplay.ForeColor = $DColorTranslator::FromHtml("#00ff00")
write-host $DurationDisplay.size
$ProgressBar = New-Object System.Windows.Forms.ProgressBar
$Form.Controls.Add($ProgressBar)
$ProgressBar.Location = $DPoint::new(0, 120)
$ProgressBar.Size = $DSize::new($Form.ClientSize.Width,20)
$ProgressBar.Size.Height = 20
$ProgressBar.Style = 1 #https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.progressbarstyle?view=windowsdesktop-6.0#fields
$ProgressBar.Value = 0
$ProgressBar.ForeColor = $DColorTranslator::FromHtml("#00FF00")
$Timer1 = New-Object 'System.Windows.Forms.Timer'
$Timer1.Enabled = $True
$Timer1.Interval = 33 #30 FPS
$Timer1_Action={
$ClockDisplay.Text = 'Clock: {0:HH\:mm\:ss\.ff}' -f (Get-Date)
}
$Timer1.add_Tick($Timer1_Action)
$Timer2 = New-Object 'System.Windows.Forms.Timer'
$Timer2.Enabled = 1
$Timer2.Interval = 100
$Timer2_Action={
$Duration = UpdateDuration
$ProgressBar.Value = $Duration.PercentElapsed
$DurationDisplay.Text = 'Remaining Time: {0:hh\:mm\:ss} Elapsed: {1,7:f3}%' -f $Duration.RemainingTime, $Duration.PercentElapsed
#write-host $Duration
if ($Duration.PercentElapsed -eq 100){
$Timer2.Enabled = $False
$DurationDisplay.ForeColor = $DColor::FromArgb(0xff0090f0)
$ProgressBar.ForeColor = $DColorTranslator::FromHtml("#0090f0")
Alert
}
}
$Timer2.add_Tick($Timer2_Action)
$Null=$Form.ShowDialog()
$Form.Dispose()
...auch Forms sind per Powershell anwendbar.
:
Hallo,
Du kannst in der Powershell mit ipconfig die aktuelle Ip-adresse deines Rechners auslesen lassen
Windows-IP-Konfiguration
Ethernet-Adapter Ethernet:
Verbindungsspezifisches DNS-Suffix: fritz.box
IPv6-Adresse. . . . . . . . . . . : fd00::8dfb:e2cf:b894:d2c3
Temporäre IPv6-Adresse. . . . . . : fd00::c181:dfd1:43e:eb96
Verbindungslokale IPv6-Adresse . : fe80::8dfb:e2cf:b894:d2c3%16
IPv4-Adresse . . . . . . . . . . : 192.168.178.20
Subnetzmaske . . . . . . . . . . : 255.255.255.0
Standardgateway . . . . . . . . . : 192.168.178.1
und mit ping avm.de die Dauer bis zur Verbindung mit dem AVM Server in Millisekunden anzeigen lassen ping avm.de
Ping wird ausgeführt für avm.de [212.42.244.122] mit 32 Bytes Daten:
Antwort von 212.42.244.122: Bytes=32 Zeit=30ms TTL=48
Antwort von 212.42.244.122: Bytes=32 Zeit=30ms TTL=48
Antwort von 212.42.244.122: Bytes=32 Zeit=30ms TTL=48
Antwort von 212.42.244.122: Bytes=32 Zeit=30ms TTL=48
Ping-Statistik für 212.42.244.122:
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 30ms, Maximum = 30ms, Mittelwert = 30ms
LG
Harry