Tags van Technorati: Powershell,eventlog,reader,Get-Eventlog,use
Microsoft form with powershell
So here i am back with another handy script for the IT administrator.
Question: are you, like me, fed up with the tedious way Microsoft event log
are to be retrieved and viewed? then i might have a (PowerShell) solution for
you!
In this script i have taken some AD PowerShell plugin functions and combined
it with a few .Net forms. (thanks to a post on
Microsoft TechNet_ furthermore i added Get-Eventlog Cmdlet to
derive any eventlog content from any machine you can access in one script. the
script fetches only the first n (asked in the script “how many lines”) recent
Errors or failures.
# this script reads eventlog from any Computer you can access
# Script
build by Bas Huygen February 2013
# the MS forms procedures are from
Microsoft: http://technet.microsoft.com/en-us/library/ff730941.aspx
$ErrorActionPreference
= "SilentlyContinue"
Do{
# Procedure 1: Get all AD computers and make a selection by filtering
it
Clear-Host
$compfilter = Read-Host("please make a selection of
computers, this can be one name or a range by the use of *
(wildcards)")
If($compfilter -eq ""){$compfilter = "*"}
$allcomps =
Get-ADComputer -filter * |Select-Object Name |Sort-Object name |where {$_.name
-like "$compfilter"}
# Procedure 2: Select a computer in a form
[void]
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void]
[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$objForm2 = New-Object System.Windows.Forms.Form
$objForm2.Text = "Select
a Computer"
$objForm2.Size = New-Object System.Drawing.Size(300,200)
$objForm2.StartPosition = "CenterScreen"
$objForm2.KeyPreview = $True
$objForm2.Add_KeyDown({if ($_.KeyCode -eq
"Enter")
{$x=$objListBoxcmp.SelectedItem;$objForm2.Close()}})
$objForm2.Add_KeyDown({if
($_.KeyCode -eq "Escape")
{$objForm2.Close()}})
$OKButton2 = New-Object System.Windows.Forms.Button
$OKButton2.Location =
New-Object System.Drawing.Size(75,120)
$OKButton2.Size = New-Object
System.Drawing.Size(75,23)
$OKButton2.Text =
"OK"
$OKButton2.Add_Click({$x=$objListBoxcmp.SelectedItem;$objForm2.Close()})
$objForm2.Controls.Add($OKButton2)
$CancelButton2 = New-Object
System.Windows.Forms.Button
$CancelButton2.Location = New-Object
System.Drawing.Size(150,120)
$CancelButton2.Size = New-Object
System.Drawing.Size(75,23)
$CancelButton2.Text =
"Cancel"
$CancelButton2.Add_Click({$objForm2.Close()})
$objForm2.Controls.Add($CancelButton2)
$objLabel2 = New-Object System.Windows.Forms.Label
$objLabel2.Location =
New-Object System.Drawing.Size(10,20)
$objLabel2.Size = New-Object
System.Drawing.Size(280,20)
$objLabel2.Text = "Please select a
computer:"
$objForm2.Controls.Add($objLabel2)
$objListBoxcmp = New-Object System.Windows.Forms.ListBox
$objListBoxcmp.Location = New-Object System.Drawing.Size(10,40)
$objListBoxcmp.Size = New-Object System.Drawing.Size(260,20)
$objListBoxcmp.Height = 80
# loop through all compyters filtered out of the AD in procedure 1
ForEach
($c in $allcomps){[void] $objListBoxcmp.Items.Add($c.name)}
$objForm2.Controls.Add($objListBoxcmp)
$objForm2.Topmost = $True
$objForm2.Add_Shown({$objForm2.Activate()})
[void]
$objForm2.ShowDialog()
$trgHost = $objListBoxcmp.Text
# Procedure 3: Select an Eventlog Source in a form
#[void]
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#[void]
[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "Select
an Eventlog Source"
$objForm.Size = New-Object System.Drawing.Size(300,200)
$objForm.StartPosition = "CenterScreen"
$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq
"Enter")
{$x=$objListBox.SelectedItem;$objForm.Close()}})
$objForm.Add_KeyDown({if
($_.KeyCode -eq "Escape")
{$objForm.Close()}})
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location =
New-Object System.Drawing.Size(75,120)
$OKButton.Size = New-Object
System.Drawing.Size(75,23)
$OKButton.Text =
"OK"
$OKButton.Add_Click({$x=$objListBox.SelectedItem;$objForm.Close()})
$objForm.Controls.Add($OKButton)
$CancelButton = New-Object
System.Windows.Forms.Button
$CancelButton.Location = New-Object
System.Drawing.Size(150,120)
$CancelButton.Size = New-Object
System.Drawing.Size(75,23)
$CancelButton.Text =
"Cancel"
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location =
New-Object System.Drawing.Size(10,20)
$objLabel.Size = New-Object
System.Drawing.Size(280,20)
$objLabel.Text = "Please select an Eventlog
source:"
$objForm.Controls.Add($objLabel)
$objListBox = New-Object System.Windows.Forms.ListBox
$objListBox.Location = New-Object System.Drawing.Size(10,40)
$objListBox.Size = New-Object System.Drawing.Size(260,20)
$objListBox.Height = 80
[void] $objListBox.Items.Add("System")
[void]
$objListBox.Items.Add("Application")
[void]
$objListBox.Items.Add("Security")
$objForm.Controls.Add($objListBox)
$objForm.Topmost = $True
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
$evtLog = $objListBox.Text
$howmany = Read-host ("How many lines should i
fetch? (blank fetches 25 lines)")
If ($howmany -eq ""){$howmany =
25}
If($evtLog -eq "Security"){$errtype = "failureaudit"} else{ $errtype =
"error"}
# now get the eventlog from the selection
Get-EventLog
-ComputerName $trgHost $evtLog -Newest $howmany -EntryType
$errtype
Get-EventLog -ComputerName $trgHost $evtLog -Newest $howmany
-EntryType $errtype | group-object -property source -noelement |
sort-object
-property count -descending
$erID = Read-Host("Zoom in to a specific event? (give IDnumber)")
If($erID
-eq ""){}else{Get-EventLog -ComputerName $trgHost $evtLog -Newest $howmany
-EntryType $errtype |?{$_.Index -like $erID} |select Message}
$again =
Read-Host("Start again? (y)")
}while($again -eq "y" -or $again -eq "Y")
its output will like something like this:
Have fun, comments are welcome and till next time!
Labels
Powershell
(18)
MDT
(9)
Active Directory
(7)
MDT 2012
(5)
Microsoft Deployment Toolkit
(5)
PSexec
(5)
Primal Forms
(4)
Wake on LAN
(4)
Zerotouch deployment without SCCM
(4)
MDT Database Object Property
(3)
MDTDB powershell module
(3)
MDX
(3)
Michael Niehaus MDTDB module
(3)
PXE
(3)
MDT Property values
(2)
PowerShell array
(2)
Start LiteTouch deployment remote
(2)
System Center Config Manager 2012
(2)
Use PowerShell to start MDTdeployment remote
(2)
WOL
(2)
Cluster network name resource 'Cluster Name' failed registration of one or more associated DNS name(s) for the following reason
(1)
EventID 1196
(1)
Hyper-V 2012
(1)
Microsoft-Windows-Failover-clustering
(1)
W32Time
(1)
Windows time
(1)
custom drive configuration in MDT
(1)
failover cluster
(1)
time synchronization in AD
(1)
understanding MDT deployments. LiteTouch deplyment
(1)
use PowerShell to wake up machine
(1)
Wednesday, February 20, 2013
A handy EventLog Reader with Powershell
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment