Powershell Aufgabe?
Ich habe in der Schule das Fach Powershell und wir haben auf nächste Woche Hausaufgaben. Ich stecke leider bei der Letzen Aufgabe fest kann mir jemand helfen?
Herzlichen Dank im Voraus!
2 Antworten
Feststellen der Sichtbarkeit eines Prozesses anhand von MainWindowTitle ist natürlich völliger Schwachsinn , da es auch Fenster ohne Titel gibt und und diese nicht in der liste angezeigt würden! (Demo für eine solche Anwendung am Ende dieses Posts)
Du kannst natürlich nichts dafür, das die Autoren von Lehrmaterialien keine Ahnung haben. Deinem Lehrer darfst Du meine Meinung ruhigen Gewissens übermitteln!
Wrong_demo.ps1
function Get-Visibleprocess {
param([boolean] $ShowGrid = $False) #Defaultwert, wen kein Parameter angegeben wird
$processes = Get-Process | where{$_.MainWindowTitle} | Select-Object -Property Id, ProcessName, Path
if( $ShowGrid ){
#in der Grid selektierte Items Zurückgeben (OK) ...sionst macht das Ding keinen Sinn
$processes | Out-GridView -PassThru
}
else { $processes }
}
Get-Visibleprocess -ShowGrid $True |ft
pause
Richtig wäre es auf ein FensterHandle ungleich 0 zu filtern (unsichtbare Prozesse haben immer ein HWnd = 0)
better_Demo.ps1
function Get-Visibleprocess {
param([boolean] $ShowGrid = $False)
#ich bin mal so frei den nichtvorhandenen Titel mit anzuzeigen
$processes = Get-Process | where{$_.MainWindowHandle -ne 0} | Select-Object -Property Id, ProcessName, Path, MainWindowTitle
if( $ShowGrid ){
#in der Grid selektierte Items Zurückgeben (OK) ...sionst macht das Ding keinen Sinn
$processes | Out-GridView -PassThru
}
else { $processes }
}
Get-Visibleprocess -ShowGrid $True |ft
pause
Screenclock.ps1 (eine durchsichtige Uhr ohne sichtbaren Rahmen und Titel)
using namespace System.Windows.Forms
using namespace System.Drawing
$user32=Add-Type -m '[DllImport("user32.dll")] public static extern void ShowWindow(IntPtr hWnd, int nCmdShow);' -Name myAPI -passthru
$hwnd=(gps -id $PID).MainWindowHandle
$user32::ShowWindow($hwnd, 0)
Add-Type -a 'System.Windows.Forms'
$Form = New-Object 'Form'
$Form.BackColor = '0,0,0'
$Form.TransparencyKey = $Form.BackColor
$Form.TopMost = $True
$Form.FormBorderStyle = 0
$Form.Size = '250,90'
$Form.StartPosition = 'manual'
$Form.Location = '30,30'
$ClockDisplay = New-Object 'Label'
$ClockDisplay.Font = [Font]::new("Consolas",32,[FontStyle]3)
$ClockDisplay.Text = '{0:HH\:mm\:ss}' -f (Get-Date)
$ClockDisplay.AutoSize = $True
$ClockDisplay.ForeColor = '255,0,0'
$Form.Controls.Add($ClockDisplay)
$Timer1 = New-Object '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()
Function get-visibleprocess {
param([boolean] $ShowGrid)
$temp =get-process | where{$_MainWindowTitle} | select-object -property id, processname, path
If($ShowGrid){
$temp | out-gridview
} else {$temp}
}
Es ist hilfreich immer nur einzelne Teilprobleme zu googlen
Danke dir viel mal! hat mir sehr fest geholfen! Wünsche dir einen schönen tag!