Powershell coole Idee für kleine Übung?

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.


:

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

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