PowerShellGUI Tools – Disk,Memory and Process – Modules

I’ve created a script which gives details of Disk, Memory and Process and its represented graphically.

Here, the scripts are enclosed in module. At its simplest, a module is just a PowerShell script, contained in a file with a .PSM1 extension

A module is some chunk of code that you can import into PowerShell. Once imported, any cmdlets, scripts, or providers can be accessed.

Installation of a module is now very simple. download and save the file c:\PowerShellGUI.psm1

This PowerShellGUI module consists of

  1. Get-DiskSpaceGUI
  2. Get-MemoryGUI
  3. Get-ProcessGUI

Now we just need to import our module. The Scope is limited to session. If you want to load automatically then you need to create Profile (http://technet.microsoft.com/en-us/library/ff461033.aspx)

You can save the file in a default module path that can be identified using environmental variable.

PS:\>$ENV:PSMODULEPATH

There are many ways to load a module. The preferred way is to create folder and save the Module in that folder

To import and loading a module as follows.

  1. Download the module code
  2. Create a folder PowerShellGUI (Same name as that of a Module name) file at any of the below location %windir%\System32\WindowsPowerShell\v1.0\Modules OR %UserProfile%\Documents\WindowsPowerShell\Modules (preferred)
  3. Save the PowerShellGUI.psm1 %UserProfile%\Documents\WindowsPowerShell\Modules\PowerShellGUI\ (preferred)
  4. Import-Module PowershellGUI
  5. This will import the module and functions into powershell
    • Get-Module  -ListAvailable

    This will list down all available modules in powershell

    • Get-Command -Module PowerShellGUI
  6. Once you are done with step 1, 2 and 3 open a powershell window and run below commands.
  7. PS:\>Import-Module -Name PowershellGUI
  8.  This will import the module and functions into powershell
  9. PS:\>Get-Module  -ListAvailable
  10.  This will list down all available modules in powershell
  11. Get-Command -Module PowerShellGUI
OR

Save the module  to C:\PowershellGUI.psm1

  1. PS:\> Import-Module -Name C:\PowerShellGUI.psm1
  2.  PS:\>Get-Module PowerShellGUI

Download the code PowerShellGUI.PSM1 from the URL

 

PS:\>Get-Command -Module PowershellGUI

Ouptut:-

Remove Module:-

PS:\> Remove-Module -Name PowershellGUI

Copy and paste the below content in C:\PowerShellGUI.psm1

#########################################################################################################

Function Get-DiskSpaceGUI
{
#========================================================================
# Generated On: 01/31/2014
# Generated By: Prashanth Jayaram
# Version     : 1.1
# Change Desc : Tab Index fix and column names are changed, Form Size correction , Accept default machine name
#========================================================================

function OnApplicationLoad {

if([Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms.DataVisualization”) -eq $null)
{
#Microsoft Chart Controls are not installed
[void][reflection.assembly]::Load(“System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][System.Windows.Forms.MessageBox]::Show(“Microsoft Chart Controls for Microsoft .NET 3.5 Framework is required”,”Microsoft Chart Controls Required”)
#Open the URL
[System.Diagnostics.Process]::Start(“http://www.microsoft.com/downloads/en/details.aspx?familyid=130F7986-BF49-4FE5-9CA8-910AE6EA442C&displaylang=en”);
return $false
}

return $true #return true for success or false for failure
}

function OnApplicationExit {
#Note: This function is not called in Projects
#Note: This function runs after the form is closed
#TODO: Add custom code to clean up and unload snapins when the application exits

$script:ExitCode = 0 #Set the exit code for the Packager
}

#endregion Application Functions

#———————————————-
# Generated Form Function
#———————————————-
function Call-SystemInformation_pff {

#———————————————-
#region Import the Assemblies
#———————————————-
[void][reflection.assembly]::Load(“System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][reflection.assembly]::Load(“System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][reflection.assembly]::Load(“System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][reflection.assembly]::Load(“System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”)
[void][reflection.assembly]::Load(“mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][reflection.assembly]::Load(“System.Windows.Forms.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”)
#endregion Import Assemblies

#———————————————-
#region Generated Form Objects
#———————————————-
[System.Windows.Forms.Application]::EnableVisualStyles()
$formDiskSpacePieChart = New-Object System.Windows.Forms.Form
$dataGrid1 = New-Object System.Windows.Forms.DataGrid
$chart1 = New-Object System.Windows.Forms.DataVisualization.Charting.Chart
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
$btnRefresh = New-Object System.Windows.Forms.Button
$btngetdata=New-Object System.Windows.Forms.Button
$rtbPerfData = New-Object System.Windows.Forms.RichTextBox
$lblServicePack = New-Object System.Windows.Forms.Label
$lblDBName= New-Object System.Windows.Forms.Label
$lblOS = New-Object System.Windows.Forms.Label
$statusBar1 = New-Object System.Windows.Forms.StatusBar
$btnClose = New-Object System.Windows.Forms.Button
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
$txtComputerName = New-Object System.Windows.Forms.TextBox
$dataGrid1 = New-Object System.Windows.Forms.DataGrid

function Load-Chart
{
Param( #$XPoints, $YPoints, $XTitle, $YTitle, $Title, $ChartStyle)
[Parameter(Position=1,Mandatory=$true)]
[System.Windows.Forms.DataVisualization.Charting.Chart]$ChartControl
,
[Parameter(Position=2,Mandatory=$true)]
$XPoints
,
[Parameter(Position=3,Mandatory=$true)]
$YPoints
,
[Parameter(Position=4,Mandatory=$false)]
[string]$XTitle
,
[Parameter(Position=5,Mandatory=$false)]
[string]$YTitle
,
[Parameter(Position=6,Mandatory=$false)]
[string]$Title
,
[Parameter(Position=7,Mandatory=$false)]
[System.Windows.Forms.DataVisualization.Charting.SeriesChartType]$ChartType
,
[Parameter(Position=8,Mandatory=$false)]
$SeriesIndex = 0
,
[Parameter(Position=9,Mandatory=$false)]
$TitleIndex = 0,
[switch]$Append)

$ChartAreaIndex = 0
if($Append)
{
$name = “ChartArea ” + ($ChartControl.ChartAreas.Count + 1).ToString();
$ChartArea = $ChartControl.ChartAreas.Add($name)
$ChartAreaIndex = $ChartControl.ChartAreas.Count – 1

$name = “Series ” + ($ChartControl.Series.Count + 1).ToString();
$Series = $ChartControl.Series.Add($name)
$SeriesIndex = $ChartControl.Series.Count – 1

$Series.ChartArea = $ChartArea.Name

if($Title)
{
$name = “Title ” + ($ChartControl.Titles.Count + 1).ToString();
$TitleObj = $ChartControl.Titles.Add($name)
$TitleIndex = $ChartControl.Titles.Count – 1
$TitleObj.DockedToChartArea = $ChartArea.Name
$TitleObj.IsDockedInsideChartArea = $false
}
}
else
{
if($ChartControl.ChartAreas.Count -eq  0)
{
$name = “ChartArea ” + ($ChartControl.ChartAreas.Count + 1).ToString();
[void]$ChartControl.ChartAreas.Add($name)
$ChartAreaIndex = $ChartControl.ChartAreas.Count – 1
}

if($ChartControl.Series.Count -eq 0)
{
$name = “Series ” + ($ChartControl.Series.Count + 1).ToString();
$Series = $ChartControl.Series.Add($name)
$SeriesIndex = $ChartControl.Series.Count – 1
$Series.ChartArea = $ChartControl.ChartAreas[0].Name
}
}

$Series = $ChartControl.Series[$SeriesIndex]
$ChartArea = $ChartControl.ChartAreas[$Series.ChartArea]

$Series.Points.Clear()

if($Title)
{
if($ChartControl.Titles.Count -eq 0)
{
$name = “Title ” + ($ChartControl.Titles.Count + 1).ToString();
[void]$ChartControl.Titles.Add($name)
$TitleIndex = $ChartControl.Titles.Count – 1
$TitleObj.DockedToChartArea = $ChartArea.Name
$TitleObj.IsDockedInsideChartArea = $false
}

$ChartControl.Titles[$TitleIndex].Text = $Title
}

if($ChartType)
{
$Series.ChartType = $ChartType
}

if($XTitle)
{
$ChartArea.AxisX.Title = $XTitle
}

if($YTitle)
{
$ChartArea.AxisY.Title = $YTitle
}

if($XPoints -isnot [Array] -or $XPoints -isnot [System.Collections.IEnumerable])
{
$array = New-Object System.Collections.ArrayList
$array.Add($XPoints)
$XPoints = $array
}

if($YPoints -isnot [Array] -or $YPoints -isnot [System.Collections.IEnumerable])
{
$array = New-Object System.Collections.ArrayList
$array.Add($YPoints)
$YPoints = $array
}

$Series.Points.DataBindXY($XPoints, $YPoints)

}

function Clear-Chart
{
Param (
[Parameter(Position=1,Mandatory=$true)]
[System.Windows.Forms.DataVisualization.Charting.Chart]$ChartControl
,
[Parameter(Position=2, Mandatory=$false)]
[Switch]$LeaveSingleChart
)

$count = 0
if($LeaveSingleChart)
{
$count = 1
}

while($ChartControl.Series.Count -gt $count)
{
$ChartControl.Series.RemoveAt($ChartControl.Series.Count – 1)
}

while($ChartControl.ChartAreas.Count -gt $count)
{
$ChartControl.ChartAreas.RemoveAt($ChartControl.ChartAreas.Count – 1)
}

while($ChartControl.Titles.Count -gt $count)
{
$ChartControl.Titles.RemoveAt($ChartControl.Titles.Count – 1)
}

if($ChartControl.Series.Count -gt 0)
{
$ChartControl.Series[0].Points.Clear()
}
}
#endregion

<#
$FormEvent_Load={
#TODO: Initialize Form Controls here
Load-PieChart
}
#>

function Load-PieChart
{
param(
[string[]]$servers = “$ENV:COMPUTERNAME”
)
foreach ($server in $servers) {
#Get Disk space using WMI and make sure it is an array
$Disks = @(Get-WMIObject -Namespace “root\cimv2” -class Win32_LogicalDisk -Impersonation 3 -ComputerName $server -filter “DriveType=3” )

#Remove all the current charts
Clear-Chart $chart1

#Loop through each drive
foreach($disk in $Disks)
{
$UsedSpace =(($disk.size – $disk.freespace)/1gb)
$FreeSpace = ($disk.freespace/1gb)

#Load a Chart for each Drive
Load-Chart $chart1 -XPoints (“Used ({0:N1} GB)” -f $UsedSpace), (“Free Space ({0:N1} GB)” -f $FreeSpace) -YPoints $UsedSpace, $FreeSpace -ChartType “Bar” -Title (“Volume: {0} ({1:N1} GB)” -f $disk.deviceID, ($disk.size/1gb) ) -Append
}

#Set Custom Style
foreach ($Series in $chart1.Series)
{
$Series.CustomProperties = “PieDrawingStyle=Concave”
}
}
}

function Get-DiskDetails
{
param(
[string[]]$ComputerName = $env:COMPUTERNAME
)
$Object =@()
$array = New-Object System.Collections.ArrayList
foreach ($Computer in $ComputerName) {
if(Test-Connection -ComputerName $Computer -Count 1 -ea 0) {
Write-Verbose “$Computer online”
$D=Get-WmiObject win32_logicalDisk -ComputerName $Computer  |where {$_.DriveType -eq 3}|select-object DeviceID, VolumeName,FreeSpace,Size
foreach($disk in $D)
{
$TotalSize = $Disk.Size /1Gb -as [int]
$InUseSize = ($Disk.Size /1Gb -as [int]) – ($Disk.Freespace / 1Gb -as [int])
$FreeSpaceGB = $Disk.Freespace / 1Gb -as [int]
$FreeSpacePer = ((($Disk.Freespace /1Gb -as [float]) / ($Disk.Size / 1Gb -as [float]))*100) -as [int]

$Object += New-Object PSObject -Property @{
Name= $Computer;
Drive= $Disk.DeviceID;
Label=$Disk.VolumeName;
SizeGB=$TotalSize;
UseGB=$InUseSize;
FreeGB=$FreeSpaceGB;
‘% Free’ =$FreeSpacePer;
}
}
}
}

$array.AddRange($Object)
$dataGrid1.DataSource = $array

}

$GetData={
if ($txtComputerName.text -eq ”)
{
$txtComputerName.text =$env:COMPUTERNAME
}
$statusBar1.text=”Getting Disk Space Details Data..please wait”
if(Test-Connection -ComputerName $txtComputerName.text -Count 1 -ea 0) {
$data=Get-DiskDetails -ComputerName $txtComputerName.text | Out-String
Load-PieChart -servers $txtComputerName.text
}
else
{
[Windows.Forms.MessageBox]::Show(“Not able connect to the server”, [Windows.Forms.MessageBoxIcon]::Information)
}
#$rtbPerfData.text=$data.Trim()
$errorActionPreference=”Continue”
$statusBar1.Text=”Ready”

}

$Close={
$formDiskSpacePieChart.close()

}
# –End User Generated Script–
#———————————————-
# Generated Events
#———————————————-

$Form_StateCorrection_Load=
{
#Correct the initial state of the form to prevent the .Net maximized form issue
$formDiskSpacePieChart.WindowState = $InitialFormWindowState
}

#———————————————-
#region Generated Form Code
#———————————————-
#
# formDiskSpacePieChart
#
$formDiskSpacePieChart.Controls.Add($buttonSave)
$formDiskSpacePieChart.Controls.Add($chart1)
$formDiskSpacePieChart.ClientSize = New-Object System.Drawing.Size(513,540)
$formDiskSpacePieChart.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$formDiskSpacePieChart.MinimumSize = New-Object System.Drawing.Size(300,300)
$formDiskSpacePieChart.Name = “formDiskSpacePieChart”
$formDiskSpacePieChart.Text = “Disk Space Pie Chart”
$formDiskSpacePieChart.Controls.Add($btnRefresh)
$formDiskSpacePieChart.Controls.Add($lblServicePack)
$formDiskSpacePieChart.Controls.Add($lblOS)
$formDiskSpacePieChart.Controls.Add($lblDBName)
$formDiskSpacePieChart.Controls.Add($statusBar1)
$formDiskSpacePieChart.Controls.Add($btnClose)
$formDiskSpacePieChart.Controls.Add($txtComputerName)
$formDiskSpacePieChart.ClientSize = New-Object System.Drawing.Size(630,600)
$formDiskSpacePieChart.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$formDiskSpacePieChart.Name = “form1”
$formDiskSpacePieChart.Text = “Disk Space Usage Information”
$formDiskSpacePieChart.add_Load($PopulateList)
$formDiskSpacePieChart.add_Load($FormEvent_Load)

$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 600
$System_Drawing_Size.Height = 125
$dataGrid1.Size = $System_Drawing_Size
$dataGrid1.DataBindings.DefaultDataSourceUpdateMode = 0
$dataGrid1.HeaderForeColor = [System.Drawing.Color]::FromArgb(255,0,0,0)
$dataGrid1.Name = “dataGrid1”
$dataGrid1.DataMember = “”
$dataGrid1.TabIndex = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X =13
$System_Drawing_Point.Y = 62
$dataGrid1.Location = $System_Drawing_Point

$formDiskSpacePieChart.Controls.Add($dataGrid1)
$dataGrid1.CaptionText=’Disk Details’

#
# btnRefresh
#
$btnRefresh.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$btnRefresh.Enabled = $TRUE
$btnRefresh.Location = New-Object System.Drawing.Point(230,35)
$btnRefresh.Name = “btnRefresh”
$btnRefresh.Size = New-Object System.Drawing.Size(95,20)
$btnRefresh.TabIndex = 2
$btnRefresh.Text = “GetDiskSpace”
$btnRefresh.UseVisualStyleBackColor = $True
$btnRefresh.add_Click($GetData)
#
#

# btnClose
#

$btnClose.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$btngetdata.Enabled = $TRUE
$btnClose.Location = New-Object System.Drawing.Point(373,35)
$btnClose.Name = “btnClose”
$btnClose.Size = New-Object System.Drawing.Size(95,20)
$btnClose.TabIndex = 3
$btnClose.Text = “Close”
$btnClose.UseVisualStyleBackColor = $True
$btnClose.add_Click($Close)
#

# lblDBName
#
$lblDBName.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$lblDBName.Font = New-Object System.Drawing.Font(“Lucida Console”,8.25,1,3,1)
$lblDBName.Location = New-Object System.Drawing.Point(13,10)
$lblDBName.Name = “lblDBName”
$lblDBName.Size = New-Object System.Drawing.Size(178,23)
$lblDBName.TabIndex = 0
$lblDBName.Text = “Enter Server Name ”
$lblDBName.Visible = $TRUE
#

#$txtComputerName.text
#txtComputerName
$txtComputerName.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$txtComputerName.Location = New-Object System.Drawing.Point(13, 35)
$txtComputerName.Name = “txtComputerName”
$txtComputerName.TabIndex = 1
$txtComputerName.Size = New-Object System.Drawing.Size(200,70)
$txtComputerName.visible=$TRUE
#
# lblServicePack
#
$lblServicePack.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$lblServicePack.Font = New-Object System.Drawing.Font(“Lucida Console”,8.25,1,3,1)
$lblServicePack.Location = New-Object System.Drawing.Point(13,100)
$lblServicePack.Name = “lblServicePack”
$lblServicePack.Size = New-Object System.Drawing.Size(278,23)
$lblServicePack.TabIndex = 0
$lblServicePack.Text = “ServicePack”
$lblServicePack.Visible = $False
#
# lblOS
#
$lblOS.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$lblOS.Font = New-Object System.Drawing.Font(“Lucida Console”,8.25,1,3,1)
$lblOS.Location = New-Object System.Drawing.Point(12,77)
$lblOS.Name = “lblOS”
$lblOS.Size = New-Object System.Drawing.Size(278,23)
$lblOS.TabIndex = 2
$lblOS.Text = “Service Information”
$lblOS.Visible = $False
#
# statusBar1
#
$statusBar1.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$statusBar1.Location = New-Object System.Drawing.Point(0,365)
$statusBar1.Name = “statusBar1”
$statusBar1.Size = New-Object System.Drawing.Size(390,22)
$statusBar1.TabIndex = 5
$statusBar1.Text = “statusBar1”

#
# chart1
#
$chart1.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right
$chart1.BackGradientStyle = [System.Windows.Forms.DataVisualization.Charting.GradientStyle]::TopBottom
$System_Windows_Forms_DataVisualization_Charting_ChartArea_1 = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea
$System_Windows_Forms_DataVisualization_Charting_ChartArea_1.Area3DStyle.Enable3D = $True
$System_Windows_Forms_DataVisualization_Charting_ChartArea_1.AxisX.Title = “Disk”
$System_Windows_Forms_DataVisualization_Charting_ChartArea_1.AxisY.Title = “Disk Space (MB)”
$System_Windows_Forms_DataVisualization_Charting_ChartArea_1.Name = “ChartArea1”

[void]$chart1.ChartAreas.Add($System_Windows_Forms_DataVisualization_Charting_ChartArea_1)
$chart1.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$chart1.Location = New-Object System.Drawing.Point(13,200)
$chart1.Name = “chart1”
$System_Windows_Forms_DataVisualization_Charting_Series_2 = New-Object System.Windows.Forms.DataVisualization.Charting.Series
$System_Windows_Forms_DataVisualization_Charting_Series_2.ChartArea = “ChartArea1”
$System_Windows_Forms_DataVisualization_Charting_Series_2.ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Pie
$System_Windows_Forms_DataVisualization_Charting_Series_2.CustomProperties = “DrawingStyle=Cylinder, PieDrawingStyle=Concave”
$System_Windows_Forms_DataVisualization_Charting_Series_2.IsVisibleInLegend = $False
$System_Windows_Forms_DataVisualization_Charting_Series_2.Legend = “Legend1”
$System_Windows_Forms_DataVisualization_Charting_Series_2.Name = “Disk Space”

[void]$chart1.Series.Add($System_Windows_Forms_DataVisualization_Charting_Series_2)
$chart1.Size = New-Object System.Drawing.Size(600,350)
$chart1.TabIndex = 0
$chart1.Text = “chart1”
$System_Windows_Forms_DataVisualization_Charting_Title_3 = New-Object System.Windows.Forms.DataVisualization.Charting.Title
$System_Windows_Forms_DataVisualization_Charting_Title_3.Alignment = [System.Drawing.ContentAlignment]::TopCenter
$System_Windows_Forms_DataVisualization_Charting_Title_3.DockedToChartArea = “ChartArea1”
$System_Windows_Forms_DataVisualization_Charting_Title_3.IsDockedInsideChartArea = $False
$System_Windows_Forms_DataVisualization_Charting_Title_3.Name = “Title1”
$System_Windows_Forms_DataVisualization_Charting_Title_3.Text = “Disk Space”

[void]$chart1.Titles.Add($System_Windows_Forms_DataVisualization_Charting_Title_3)
#

#Save the initial state of the form
$InitialFormWindowState = $formDiskSpacePieChart.WindowState
#Init the OnLoad event to correct the initial state of the form
$formDiskSpacePieChart.add_Load($Form_StateCorrection_Load)
#Show the Form
return $formDiskSpacePieChart.ShowDialog()

} #End Function

if(OnApplicationLoad -eq $true)
{
#Create the form
#Call-SystemInformation_pff | Out-Null
#Call-Disk_Space_Chart_pff | Out-Null
Call-SystemInformation_pff | Out-Null
#Perform cleanup
OnApplicationExit
}
}
Function Get-MemoryGUI
{
function OnApplicationLoad {

if([Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms.DataVisualization”) -eq $null)
{
#Microsoft Chart Controls are not installed
[void][reflection.assembly]::Load(“System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][System.Windows.Forms.MessageBox]::Show(“Microsoft Chart Controls for Microsoft .NET 3.5 Framework is required”,”Microsoft Chart Controls Required”)
#Open the URL
[System.Diagnostics.Process]::Start(“http://www.microsoft.com/downloads/en/details.aspx?familyid=130F7986-BF49-4FE5-9CA8-910AE6EA442C&displaylang=en&#8221;);
return $false
}

return $true #return true for success or false for failure
}

function OnApplicationExit {
$script:ExitCode = 0 #Set the exit code for the Packager
}

#endregion Application Functions

#———————————————-
# Generated Form Function
#———————————————-
function Call-SystemInformation_pff {

#———————————————-
#region Import the Assemblies
#———————————————-
[void][reflection.assembly]::Load(“System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][reflection.assembly]::Load(“System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][reflection.assembly]::Load(“System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][reflection.assembly]::Load(“System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”)
[void][reflection.assembly]::Load(“mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][reflection.assembly]::Load(“System.Windows.Forms.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”)
#endregion Import Assemblies

#———————————————-
#region Generated Form Objects
#———————————————-
[System.Windows.Forms.Application]::EnableVisualStyles()
$formMemoryPieChart = New-Object System.Windows.Forms.Form
$dataGrid1 = New-Object System.Windows.Forms.DataGrid
$chart1 = New-Object System.Windows.Forms.DataVisualization.Charting.Chart
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
$btnRefresh = New-Object System.Windows.Forms.Button
$btngetdata=New-Object System.Windows.Forms.Button
$rtbPerfData = New-Object System.Windows.Forms.RichTextBox
$lblServicePack = New-Object System.Windows.Forms.Label
$lblDBName= New-Object System.Windows.Forms.Label
$lblOS = New-Object System.Windows.Forms.Label
$statusBar1 = New-Object System.Windows.Forms.StatusBar
$btnClose = New-Object System.Windows.Forms.Button
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
$txtComputerName = New-Object System.Windows.Forms.TextBox
$dataGrid1 = New-Object System.Windows.Forms.DataGrid

function Load-Chart
{
Param( #$XPoints, $YPoints, $XTitle, $YTitle, $Title, $ChartStyle)
[Parameter(Position=1,Mandatory=$true)]
[System.Windows.Forms.DataVisualization.Charting.Chart]$ChartControl
,
[Parameter(Position=2,Mandatory=$true)]
$XPoints
,
[Parameter(Position=3,Mandatory=$true)]
$YPoints
,
[Parameter(Position=4,Mandatory=$false)]
[string]$XTitle
,
[Parameter(Position=5,Mandatory=$false)]
[string]$YTitle
,
[Parameter(Position=6,Mandatory=$false)]
[string]$Title
,
[Parameter(Position=7,Mandatory=$false)]
[System.Windows.Forms.DataVisualization.Charting.SeriesChartType]$ChartType
,
[Parameter(Position=8,Mandatory=$false)]
$SeriesIndex = 0
,
[Parameter(Position=9,Mandatory=$false)]
$TitleIndex = 0,
[switch]$Append)

$ChartAreaIndex = 0
if($Append)
{
$name = “ChartArea ” + ($ChartControl.ChartAreas.Count + 1).ToString();
$ChartArea = $ChartControl.ChartAreas.Add($name)
$ChartAreaIndex = $ChartControl.ChartAreas.Count – 1

$name = “Series ” + ($ChartControl.Series.Count + 1).ToString();
$Series = $ChartControl.Series.Add($name)
$SeriesIndex = $ChartControl.Series.Count – 1

$Series.ChartArea = $ChartArea.Name

if($Title)
{
$name = “Title ” + ($ChartControl.Titles.Count + 1).ToString();
$TitleObj = $ChartControl.Titles.Add($name)
$TitleIndex = $ChartControl.Titles.Count – 1
$TitleObj.DockedToChartArea = $ChartArea.Name
$TitleObj.IsDockedInsideChartArea = $false
}
}
else
{
if($ChartControl.ChartAreas.Count -eq  0)
{
$name = “ChartArea ” + ($ChartControl.ChartAreas.Count + 1).ToString();
[void]$ChartControl.ChartAreas.Add($name)
$ChartAreaIndex = $ChartControl.ChartAreas.Count – 1
}

if($ChartControl.Series.Count -eq 0)
{
$name = “Series ” + ($ChartControl.Series.Count + 1).ToString();
$Series = $ChartControl.Series.Add($name)
$SeriesIndex = $ChartControl.Series.Count – 1
$Series.ChartArea = $ChartControl.ChartAreas[0].Name
}
}

$Series = $ChartControl.Series[$SeriesIndex]
$ChartArea = $ChartControl.ChartAreas[$Series.ChartArea]

$Series.Points.Clear()

if($Title)
{
if($ChartControl.Titles.Count -eq 0)
{
$name = “Title ” + ($ChartControl.Titles.Count + 1).ToString();
[void]$ChartControl.Titles.Add($name)
$TitleIndex = $ChartControl.Titles.Count – 1
$TitleObj.DockedToChartArea = $ChartArea.Name
$TitleObj.IsDockedInsideChartArea = $false
}

$ChartControl.Titles[$TitleIndex].Text = $Title
}

if($ChartType)
{
$Series.ChartType = $ChartType
}

if($XTitle)
{
$ChartArea.AxisX.Title = $XTitle
}

if($YTitle)
{
$ChartArea.AxisY.Title = $YTitle
}

if($XPoints -isnot [Array] -or $XPoints -isnot [System.Collections.IEnumerable])
{
$array = New-Object System.Collections.ArrayList
$array.Add($XPoints)
$XPoints = $array
}

if($YPoints -isnot [Array] -or $YPoints -isnot [System.Collections.IEnumerable])
{
$array = New-Object System.Collections.ArrayList
$array.Add($YPoints)
$YPoints = $array
}

$Series.Points.DataBindXY($XPoints, $YPoints)

}

function Clear-Chart
{
Param (
[Parameter(Position=1,Mandatory=$true)]
[System.Windows.Forms.DataVisualization.Charting.Chart]$ChartControl
,
[Parameter(Position=2, Mandatory=$false)]
[Switch]$LeaveSingleChart
)

$count = 0
if($LeaveSingleChart)
{
$count = 1
}

while($ChartControl.Series.Count -gt $count)
{
$ChartControl.Series.RemoveAt($ChartControl.Series.Count – 1)
}

while($ChartControl.ChartAreas.Count -gt $count)
{
$ChartControl.ChartAreas.RemoveAt($ChartControl.ChartAreas.Count – 1)
}

while($ChartControl.Titles.Count -gt $count)
{
$ChartControl.Titles.RemoveAt($ChartControl.Titles.Count – 1)
}

if($ChartControl.Series.Count -gt 0)
{
$ChartControl.Series[0].Points.Clear()
}
}
#endregion

<#
$FormEvent_Load={
#TODO: Initialize Form Controls here
Load-PieChart
}
#>

function Load-PieChart
{
param(
[string[]]$servers = “$ENV:COMPUTERNAME”
)
foreach ($server in $servers) {
#Get Disk space using WMI and make sure it is an array
$Memory = @(Get-WmiObject -Class Win32_OperatingSystem -computername $servers | Select-Object Name, TotalVisibleMemorySize, FreePhysicalMemory,TotalVirtualMemorySize,FreeVirtualMemory,FreeSpaceInPagingFiles,NumberofProcesses,NumberOfUsers )

#Remove all the current charts
Clear-Chart $chart1

#Loop through each drive
foreach($m in $Memory)
{
$TotalRAM = $m.TotalVisibleMemorySize/1MB
$FreeRAM = $m.FreePhysicalMemory/1MB
$TotalVirtualMemorySize=[Math]::Round($m.TotalVirtualMemorySize/1MB, 3)
$FreeVirtualMemory=[Math]::Round($m.FreeVirtualMemory/1MB, 3)

#Load a Chart for each Drive
Load-Chart $chart1 -XPoints (“Physical Total RAM ({0:N1} GB)” -f $TotalRAM), (“Physical Free RAM ({0:N1} GB)” -f $FreeRAM) -YPoints $TotalRAM, $FreeRAM -ChartType “Bar” -Title (“Physical Memory Chart”) -Append
Load-Chart $chart1 -XPoints (“Virtual Total RAM ({0:N1} GB)” -f $TotalVirtualMemorySize), (“Virtual Free RAM ({0:N1} GB)” -f $FreeVirtualMemory) -YPoints $TotalVirtualMemorySize, $FreeVirtualMemory -ChartType “Bar” -Title (” Virtual Memory Chart”) -Append

}

#Set Custom Style
foreach ($Series in $chart1.Series)
{
$Series.CustomProperties = “PieDrawingStyle=Concave”
}
}
}

function Get-OSMemory
{
param(
[string]$Computer = “$ENV:COMPUTERNAME”
)
$script:Object =@()
$script:array = New-Object System.Collections.ArrayList
$Object =@()

if(Test-Connection -ComputerName $Computer -Count 1 -ea 0) {
$SystemInfo = Get-WmiObject -Class Win32_OperatingSystem -computername $Computer | Select-Object Name, TotalVisibleMemorySize, FreePhysicalMemory,TotalVirtualMemorySize,FreeVirtualMemory,FreeSpaceInPagingFiles,NumberofProcesses,NumberOfUsers
$TotalRAM = $SystemInfo.TotalVisibleMemorySize/1MB
$FreeRAM = $SystemInfo.FreePhysicalMemory/1MB
$UsedRAM = $TotalRAM – $FreeRAM
$RAMPercentFree = ($FreeRAM / $TotalRAM) * 100
$TotalRAM = [Math]::Round($TotalRAM, 2)
$FreeRAM = [Math]::Round($FreeRAM, 2)
$UsedRAM = [Math]::Round($UsedRAM, 2)
$RAMPercentFree = [Math]::Round($RAMPercentFree, 2)
$TotalVirtualMemorySize=[Math]::Round($SystemInfo.TotalVirtualMemorySize/1MB, 3)
$FreeVirtualMemory=[Math]::Round($SystemInfo.FreeVirtualMemory/1MB, 3)
$FreeSpaceInPagingFiles=[Math]::Round($SystemInfo.FreeSpaceInPagingFiles/1MB, 3)
$NP=$SystemInfo.NumberofProcesses
$NU=$SystemInfo.NumberOfUsers

$Object += New-Object PSObject -Property @{
ComputerName = $Computer.ToUpper();
#Architecture = $architecture;
#OperatingSystem = $OS;
TotalRAMGB = $TotalRAM;
FreeRAMGB = $FreeRAM;
UsedRAMGB = $UsedRAM;
FreeRAMPercentage =$RAMPercentFree;
TotalVMSizeGB=$TotalVirtualMemorySize;
FreeVMGB=$FreeVirtualMemory;
FreeSpaceInPageFileGB=$FreeSpaceInPagingFiles;
NoOfProcesses=$NP;
NoOfUsers=$NU
}
}

$array.AddRange($Object)
$dataGrid1.DataSource = $array

}

$GetData={
$statusBar1.text=”Getting Memory Details Data..please wait”
if ($txtComputerName.text -eq ”)
{
$txtComputerName.text=$ENV:COMPUTERNAME
}
if(Test-Connection -ComputerName $txtComputerName.text -Count 1 -ea 0) {
$data=Get-OSMemory -Computer $txtComputerName.text | Out-String
Load-PieChart -servers $txtComputerName.text
}
else
{
[Windows.Forms.MessageBox]::Show(“Unable to connect to the server!!”)
}

$errorActionPreference=”Continue”
$statusBar1.Text=”Ready”

}

$Close={
$formMemoryPieChart.close()

}
# –End User Generated Script–
#———————————————-
# Generated Events
#———————————————-

$Form_StateCorrection_Load=
{
#Correct the initial state of the form to prevent the .Net maximized form issue
$formMemoryPieChart.WindowState = $InitialFormWindowState
}

#———————————————-
#region Generated Form Code
#———————————————-
#
# formMemoryPieChart
#
$formMemoryPieChart.Controls.Add($buttonSave)
$formMemoryPieChart.Controls.Add($chart1)
$formMemoryPieChart.ClientSize = New-Object System.Drawing.Size(575,575)
$formMemoryPieChart.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$formMemoryPieChart.MinimumSize = New-Object System.Drawing.Size(300,300)
$formMemoryPieChart.Name = “formMemoryPieChart”
$formMemoryPieChart.Text = “Disk Space Pie Chart”
$formMemoryPieChart.Controls.Add($btnRefresh)
$formMemoryPieChart.Controls.Add($lblServicePack)
$formMemoryPieChart.Controls.Add($lblOS)
$formMemoryPieChart.Controls.Add($lblDBName)
$formMemoryPieChart.Controls.Add($statusBar1)
$formMemoryPieChart.Controls.Add($btnClose)
$formMemoryPieChart.Controls.Add($txtComputerName)
$formMemoryPieChart.ClientSize = New-Object System.Drawing.Size(850,600)
$formMemoryPieChart.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$formMemoryPieChart.Name = “form1”
$formMemoryPieChart.Text = “Physical and Virtual Memory Usage Information”
$formMemoryPieChart.add_Load($PopulateList)
$formMemoryPieChart.add_Load($FormEvent_Load)

$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 825
$System_Drawing_Size.Height = 100
$dataGrid1.Size = $System_Drawing_Size
$dataGrid1.DataBindings.DefaultDataSourceUpdateMode = 0
$dataGrid1.HeaderForeColor = [System.Drawing.Color]::FromArgb(255,0,0,0)
$dataGrid1.Name = “dataGrid1”
$dataGrid1.DataMember = “”
$dataGrid1.TabIndex = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X =13
$System_Drawing_Point.Y = 62
$dataGrid1.Location = $System_Drawing_Point

$formMemoryPieChart.Controls.Add($dataGrid1)
$dataGrid1.CaptionText=’Physical and Virtual Memory Usage Information’

#
# btnRefresh
#
$btnRefresh.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$btnRefresh.Enabled = $TRUE
$btnRefresh.Location = New-Object System.Drawing.Point(230,35)
$btnRefresh.Name = “btnRefresh”
$btnRefresh.Size = New-Object System.Drawing.Size(95,20)
$btnRefresh.TabIndex = 2
$btnRefresh.Text = “GetMemory”
$btnRefresh.UseVisualStyleBackColor = $True
$btnRefresh.add_Click($GetData)
#
#

# btnClose
#

$btnClose.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$btngetdata.Enabled = $TRUE
$btnClose.Location = New-Object System.Drawing.Point(373,35)
$btnClose.Name = “btnClose”
$btnClose.Size = New-Object System.Drawing.Size(95,20)
$btnClose.TabIndex = 3
$btnClose.Text = “Close”
$btnClose.UseVisualStyleBackColor = $True
$btnClose.add_Click($Close)
#

# lblDBName
#
$lblDBName.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$lblDBName.Font = New-Object System.Drawing.Font(“Lucida Console”,8.25,1,3,1)
$lblDBName.Location = New-Object System.Drawing.Point(13,10)
$lblDBName.Name = “lblDBName”
$lblDBName.Size = New-Object System.Drawing.Size(178,23)
$lblDBName.TabIndex = 0
$lblDBName.Text = “Enter Server Name ”
$lblDBName.Visible = $TRUE
#

#$txtComputerName.text
#txtComputerName
$txtComputerName.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$txtComputerName.Location = New-Object System.Drawing.Point(13, 35)
$txtComputerName.Name = “txtComputerName”
$txtComputerName.TabIndex = 1
$txtComputerName.Size = New-Object System.Drawing.Size(200,70)
$txtComputerName.visible=$TRUE
#
# lblServicePack
#
$lblServicePack.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$lblServicePack.Font = New-Object System.Drawing.Font(“Lucida Console”,8.25,1,3,1)
$lblServicePack.Location = New-Object System.Drawing.Point(13,100)
$lblServicePack.Name = “lblServicePack”
$lblServicePack.Size = New-Object System.Drawing.Size(278,23)
# $lblServicePack.TabIndex = 0
$lblServicePack.Text = “ServicePack”
$lblServicePack.Visible = $False
#
# lblOS
#
$lblOS.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$lblOS.Font = New-Object System.Drawing.Font(“Lucida Console”,8.25,1,3,1)
$lblOS.Location = New-Object System.Drawing.Point(12,77)
$lblOS.Name = “lblOS”
$lblOS.Size = New-Object System.Drawing.Size(278,23)
#    $lblOS.TabIndex = 2
$lblOS.Text = “Service Information”
$lblOS.Visible = $False
#
# statusBar1
#
$statusBar1.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$statusBar1.Location = New-Object System.Drawing.Point(0,365)
$statusBar1.Name = “statusBar1”
$statusBar1.Size = New-Object System.Drawing.Size(390,22)
$statusBar1.TabIndex = 5
$statusBar1.Text = “statusBar1”

#
# chart1
#
$chart1.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right
$chart1.BackGradientStyle = [System.Windows.Forms.DataVisualization.Charting.GradientStyle]::TopBottom
$System_Windows_Forms_DataVisualization_Charting_ChartArea_1 = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea
$System_Windows_Forms_DataVisualization_Charting_ChartArea_1.Area3DStyle.Enable3D = $True
$System_Windows_Forms_DataVisualization_Charting_ChartArea_1.AxisX.Title = “Disk”
$System_Windows_Forms_DataVisualization_Charting_ChartArea_1.AxisY.Title = “Disk Space (MB)”
$System_Windows_Forms_DataVisualization_Charting_ChartArea_1.Name = “ChartArea1”

[void]$chart1.ChartAreas.Add($System_Windows_Forms_DataVisualization_Charting_ChartArea_1)
$chart1.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$chart1.Location = New-Object System.Drawing.Point(13,200)
$chart1.Name = “chart1”
$System_Windows_Forms_DataVisualization_Charting_Series_2 = New-Object System.Windows.Forms.DataVisualization.Charting.Series
$System_Windows_Forms_DataVisualization_Charting_Series_2.ChartArea = “ChartArea1”
$System_Windows_Forms_DataVisualization_Charting_Series_2.ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Pie
$System_Windows_Forms_DataVisualization_Charting_Series_2.CustomProperties = “DrawingStyle=Cylinder, PieDrawingStyle=Concave”
$System_Windows_Forms_DataVisualization_Charting_Series_2.IsVisibleInLegend = $False
$System_Windows_Forms_DataVisualization_Charting_Series_2.Legend = “Legend1”
$System_Windows_Forms_DataVisualization_Charting_Series_2.Name = “Memory Area”

[void]$chart1.Series.Add($System_Windows_Forms_DataVisualization_Charting_Series_2)
$chart1.Size = New-Object System.Drawing.Size(825,350)
$chart1.TabIndex = 0
$chart1.Text = “chart1”
$System_Windows_Forms_DataVisualization_Charting_Title_3 = New-Object System.Windows.Forms.DataVisualization.Charting.Title
$System_Windows_Forms_DataVisualization_Charting_Title_3.Alignment = [System.Drawing.ContentAlignment]::TopCenter
$System_Windows_Forms_DataVisualization_Charting_Title_3.DockedToChartArea = “ChartArea1”
$System_Windows_Forms_DataVisualization_Charting_Title_3.IsDockedInsideChartArea = $False
$System_Windows_Forms_DataVisualization_Charting_Title_3.Name = “Title1”
$System_Windows_Forms_DataVisualization_Charting_Title_3.Text = “Memory Area”

[void]$chart1.Titles.Add($System_Windows_Forms_DataVisualization_Charting_Title_3)
#

#Save the initial state of the form
$InitialFormWindowState = $formMemoryPieChart.WindowState
#Init the OnLoad event to correct the initial state of the form
$formMemoryPieChart.add_Load($Form_StateCorrection_Load)
#Show the Form
return $formMemoryPieChart.ShowDialog()

} #End Function

#Call OnApplicationLoad to initialize
if(OnApplicationLoad -eq $true)
{
#Create the form
Call-SystemInformation_pff | Out-Null
#Perform cleanup
OnApplicationExit
}
}

function Get-ProcessGUI
{
#========================================================================
# Generated On: 02/07/2014
# Generated By: Prashanth Jayaram
# Version     : 1.1
# Description : TOP 10 Process – Memory consumption Report – 3D Graph
#========================================================================

function OnApplicationLoad {

if([Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms.DataVisualization”) -eq $null)
{
#Microsoft Chart Controls are not installed
[void][reflection.assembly]::Load(“System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][System.Windows.Forms.MessageBox]::Show(“Microsoft Chart Controls for Microsoft .NET 3.5 Framework is required”,”Microsoft Chart Controls Required”)
#Open the URL
[System.Diagnostics.Process]::Start(“http://www.microsoft.com/downloads/en/details.aspx?familyid=130F7986-BF49-4FE5-9CA8-910AE6EA442C&displaylang=en&#8221;);
return $false
}

return $true #return true for success or false for failure
}

function OnApplicationExit {
#Note: This function is not called in Projects
#Note: This function runs after the form is closed
#TODO: Add custom code to clean up and unload snapins when the application exits

$script:ExitCode = 0 #Set the exit code for the Packager
}

#endregion Application Functions

#———————————————-
# Generated Form Function
#———————————————-
function Call-SystemInformation_pff {

#———————————————-
#region Import the Assemblies
#———————————————-
[void][reflection.assembly]::Load(“System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][reflection.assembly]::Load(“System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][reflection.assembly]::Load(“System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][reflection.assembly]::Load(“System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”)
[void][reflection.assembly]::Load(“mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”)
[void][reflection.assembly]::Load(“System.Windows.Forms.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”)
#endregion Import Assemblies

#———————————————-
#region Generated Form Objects
#———————————————-
[System.Windows.Forms.Application]::EnableVisualStyles()
$formProcessPieChart = New-Object System.Windows.Forms.Form
$dataGrid1 = New-Object System.Windows.Forms.DataGrid
$chart = New-Object System.Windows.Forms.DataVisualization.Charting.Chart
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
$btnRefresh = New-Object System.Windows.Forms.Button
$btnClear = New-Object System.Windows.Forms.Button
$btngetdata=New-Object System.Windows.Forms.Button
$rtbPerfData = New-Object System.Windows.Forms.RichTextBox
$lblServicePack = New-Object System.Windows.Forms.Label
$lblDBName= New-Object System.Windows.Forms.Label
$lblOS = New-Object System.Windows.Forms.Label
$statusBar1 = New-Object System.Windows.Forms.StatusBar
$btnClose = New-Object System.Windows.Forms.Button
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
$txtComputerName = New-Object System.Windows.Forms.TextBox
$dataGrid1 = New-Object System.Windows.Forms.DataGrid

function Load-Chart
{
Param( #$XPoints, $YPoints, $XTitle, $YTitle, $Title, $ChartStyle)
[Parameter(Position=1,Mandatory=$true)]
[System.Windows.Forms.DataVisualization.Charting.Chart]$ChartControl
,
[Parameter(Position=2,Mandatory=$true)]
$XPoints
,
[Parameter(Position=3,Mandatory=$true)]
$YPoints
,
[Parameter(Position=4,Mandatory=$false)]
[string]$XTitle
,
[Parameter(Position=5,Mandatory=$false)]
[string]$YTitle
,
[Parameter(Position=6,Mandatory=$false)]
[string]$Title
,
[Parameter(Position=7,Mandatory=$false)]
[System.Windows.Forms.DataVisualization.Charting.SeriesChartType]$ChartType
,
[Parameter(Position=8,Mandatory=$false)]
$SeriesIndex = 0
,
[Parameter(Position=9,Mandatory=$false)]
$TitleIndex = 0,
[switch]$Append)

$ChartAreaIndex = 0
if($Append)
{
$name = “ChartArea ” + ($ChartControl.ChartAreas.Count + 1).ToString();
$ChartArea = $ChartControl.ChartAreas.Add($name)
$ChartAreaIndex = $ChartControl.ChartAreas.Count – 1

$name = “Series ” + ($ChartControl.Series.Count + 1).ToString();
$Series = $ChartControl.Series.Add($name)
$SeriesIndex = $ChartControl.Series.Count – 1

$Series.ChartArea = $ChartArea.Name

if($Title)
{
$name = “Title ” + ($ChartControl.Titles.Count + 1).ToString();
$TitleObj = $ChartControl.Titles.Add($name)
$TitleIndex = $ChartControl.Titles.Count – 1
$TitleObj.DockedToChartArea = $ChartArea.Name
$TitleObj.IsDockedInsideChartArea = $false
}
}
else
{
if($ChartControl.ChartAreas.Count -eq  0)
{
$name = “ChartArea ” + ($ChartControl.ChartAreas.Count + 1).ToString();
[void]$ChartControl.ChartAreas.Add($name)
$ChartAreaIndex = $ChartControl.ChartAreas.Count – 1
}

if($ChartControl.Series.Count -eq 0)
{
$name = “Series ” + ($ChartControl.Series.Count + 1).ToString();
$Series = $ChartControl.Series.Add($name)
$SeriesIndex = $ChartControl.Series.Count – 1
$Series.ChartArea = $ChartControl.ChartAreas[0].Name
}
}

$Series = $ChartControl.Series[$SeriesIndex]
$ChartArea = $ChartControl.ChartAreas[$Series.ChartArea]

$Series.Points.Clear()

if($Title)
{
if($ChartControl.Titles.Count -eq 0)
{
$name = “Title ” + ($ChartControl.Titles.Count + 1).ToString();
[void]$ChartControl.Titles.Add($name)
$TitleIndex = $ChartControl.Titles.Count – 1
$TitleObj.DockedToChartArea = $ChartArea.Name
$TitleObj.IsDockedInsideChartArea = $false
}

$ChartControl.Titles[$TitleIndex].Text = $Title
}

if($ChartType)
{
$Series.ChartType = $ChartType
}

if($XTitle)
{
$ChartArea.AxisX.Title = $XTitle
}

if($YTitle)
{
$ChartArea.AxisY.Title = $YTitle
}

if($XPoints -isnot [Array] -or $XPoints -isnot [System.Collections.IEnumerable])
{
$array = New-Object System.Collections.ArrayList
$array.Add($XPoints)
$XPoints = $array
}

if($YPoints -isnot [Array] -or $YPoints -isnot [System.Collections.IEnumerable])
{
$array = New-Object System.Collections.ArrayList
$array.Add($YPoints)
$YPoints = $array
}

$Series.Points.DataBindXY($XPoints, $YPoints)

}

function Clear-Chart
{
Param (
[Parameter(Position=1,Mandatory=$true)]
[System.Windows.Forms.DataVisualization.Charting.Chart]$ChartControl
,
[Parameter(Position=2, Mandatory=$false)]
[Switch]$LeaveSingleChart
)

$count = 0
if($LeaveSingleChart)
{
$count = 1
}

while($ChartControl.Series.Count -gt $count)
{
$ChartControl.Series.RemoveAt($ChartControl.Series.Count – 1)
}

while($ChartControl.ChartAreas.Count -gt $count)
{
$ChartControl.ChartAreas.RemoveAt($ChartControl.ChartAreas.Count – 1)
}

while($ChartControl.Titles.Count -gt $count)
{
$ChartControl.Titles.RemoveAt($ChartControl.Titles.Count – 1)
}

if($ChartControl.Series.Count -gt 0)
{
$ChartControl.Series[0].Points.Clear()
}
}
#endregion

<#
$FormEvent_Load={
#TODO: Initialize Form Controls here
Load-PieChart
}
#>

Function  Load-PieChart {
Param([string]$computername)
$Chart.ChartAreas.Add($ChartArea)

$process = [System.Diagnostics.Process]

$Processes = $process::GetProcesses($computername)|Sort-Object WS -Descending|select Handles,
@{Label=”NPM(K)”;Expression={[int]($_.NPM/1024)}}, `
@{Label=”PM(K)”;Expression={[int]($_.PM/1024)}}, `
@{Label=”WS”;Expression={[int]($_.WS/1024)}}, `
@{Label=”VM(M)”;Expression={[int]($_.VM/1MB)}}, `
Id, ProcessName, MachineName -first 9

$ProcNames = @(foreach($Proc in $Processes){$Proc.ProcessName+ “_”+$Proc.ID})
$WS = @(foreach($Proc in $Processes){$Proc.WS/1KB})

$Chart.Series.Add(“Data”)
$Chart.Series[“Data”].Points.DataBindXY($ProcNames, $WS)

$ChartArea.AxisX.Title = “Process”
$ChartArea.AxisY.Title = “Working Set (KB)”

# Find point with max/min values and change their colour
$maxValuePoint = $Chart.Series[“Data”].Points.FindMaxByValue()
$maxValuePoint.Color = [System.Drawing.Color]::Red

$minValuePoint = $Chart.Series[“Data”].Points.FindMinByValue()
$minValuePoint.Color = [System.Drawing.Color]::Green

# make bars into 3d cylinders
#$Chart.Series[“Data”][“DrawingStyle”] = “Cylinder”
$chartArea.Area3DStyle = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea3DStyle  -Property @{Enable3D=$true; IsRightAngleAxes=$false; Rotation=10; Inclination=10;}

# display the chart on a form
$Chart.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right -bor
[System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left

}

Function Get-ProcPerf {
Param([string]$computername)
$Object =@()
$array = New-Object System.Collections.ArrayList
# load the appropriate assemblies
# add data to chart
$process = [System.Diagnostics.Process]
#$process::GetProcesses($server)

$prc=$process::GetProcesses($computername)|Sort-Object WS -Descending|select Handles, `
@{Label=”NPM”;Expression={[int]($_.NPM/1024)}}, `
@{Label=”PM”;Expression={[int]($_.PM/1MB)}}, `
@{Label=”WS”;Expression={[int]($_.WS/1MB)}}, `
@{Label=”VM”;Expression={[int]($_.VM/1MB)}}, `
Id, ProcessName, MachineName -first 9

$Object =@()

foreach ($p in $prc)
{
$Object += New-Object PSObject -Property @{
Handles = $p.Handles;
NPM = $P.NPM;
PM = $P.PM;
WoringSet = $P.WS;
VM= $P.VM;
ID=$P.Id;
Name=$P.ProcessName;
SrvName=$P.MachineName

}
}

$column1 = @{expression=”MachineName”; width=20; label=”MachineName”; alignment=”left”}
$column2 = @{expression=”Handles”; width=10; label=”Handles”; alignment=”left”}
$column3 = @{expression=”NPM”; width=10; label=”NPM(K)”; alignment=”left”}
$column4 = @{expression=”PM”; width=10; label=”PM(K)”; alignment=”left”}
$column5 = @{expression=”WS”; width=10; label=”WS(K)”; alignment=”left”}
$column6 = @{expression=”VM”; width=10; label=”VM(MB)”; alignment=”left”}
$column7 = @{expression=”id”; width=10; label=”ProcessID”; alignment=”left”}
$column8 = @{expression=”Name”; width=15; label=”ProcessName”; alignment=”left”}

“#”*80
“Process Information”
“Generated $(get-date)”
“Generated from $(gc env:computername)”
“#”*80

#$Object
$Object |Format-Table  $column1,$column2,$column3,$column4,$column5,$column6,$column7,$column8

$array.AddRange($Object)
$dataGrid1.DataSource = $array

}

function Clear-Chart
{
Param (
[Parameter(Position=1,Mandatory=$true)]
[System.Windows.Forms.DataVisualization.Charting.Chart]$ChartControl
,
[Parameter(Position=2, Mandatory=$false)]
[Switch]$LeaveSingleChart
)

$count = 0
if($LeaveSingleChart)
{
$count = 1
}

while($ChartControl.Series.Count -gt $count)
{
$ChartControl.Series.RemoveAt($ChartControl.Series.Count – 1)
}

while($ChartControl.ChartAreas.Count -gt $count)
{
$ChartControl.ChartAreas.RemoveAt($ChartControl.ChartAreas.Count – 1)
}

while($ChartControl.Titles.Count -gt $count)
{
$ChartControl.Titles.RemoveAt($ChartControl.Titles.Count – 1)
}

if($ChartControl.Series.Count -gt 0)
{
$ChartControl.Series[0].Points.Clear()
}
}

$cleardata={
Clear-Chart $chart

}

$GetData={
Clear-Chart $chart

if ($txtComputerName.text -eq ”)
{
$txtComputerName.text =$env:COMPUTERNAME
}
$statusBar1.text=”Getting Process information ..please wait”
if(Test-Connection -ComputerName $txtComputerName.text -Count 1 -ea 0) {
$data=Get-ProcPerf -ComputerName $txtComputerName.text | Out-String

Load-PieChart -computername $txtComputerName.text

}
else
{
[Windows.Forms.MessageBox]::Show(“Not able connect to the server”, [Windows.Forms.MessageBoxIcon]::Information)
}
#$rtbPerfData.text=$data.Trim()
$errorActionPreference=”Continue”
$statusBar1.Text=”Ready”

}

$Close={
$formProcessPieChart.close()

}
# –End User Generated Script–
#———————————————-
# Generated Events
#———————————————-

$Form_StateCorrection_Load=
{
#Correct the initial state of the form to prevent the .Net maximized form issue
$formProcessPieChart.WindowState = $InitialFormWindowState
}

#———————————————-
#region Generated Form Code
#———————————————-
#
# formProcessPieChart
#
$formProcessPieChart.Controls.Add($buttonSave)
$formProcessPieChart.Controls.Add($chart)
$formProcessPieChart.ClientSize = New-Object System.Drawing.Size(513,640)
$formProcessPieChart.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$formProcessPieChart.MinimumSize = New-Object System.Drawing.Size(300,300)
$formProcessPieChart.Name = “formProcessPieChart”
$formProcessPieChart.Text = “Disk Space Pie Chart”
$formProcessPieChart.Controls.Add($btnRefresh)
$formProcessPieChart.Controls.Add($lblServicePack)
$formProcessPieChart.Controls.Add($lblOS)
$formProcessPieChart.Controls.Add($lblDBName)
$formProcessPieChart.Controls.Add($statusBar1)
$formProcessPieChart.Controls.Add($btnClose)
$formProcessPieChart.Controls.Add($txtComputerName)
$formProcessPieChart.ClientSize = New-Object System.Drawing.Size(630,630)
$formProcessPieChart.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$formProcessPieChart.Name = “form1”
$formProcessPieChart.Text = “Process Information”
$formProcessPieChart.add_Load($PopulateList)
$formProcessPieChart.add_Load($FormEvent_Load)

$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 600
$System_Drawing_Size.Height = 225
$dataGrid1.Size = $System_Drawing_Size
$dataGrid1.DataBindings.DefaultDataSourceUpdateMode = 0
$dataGrid1.HeaderForeColor = [System.Drawing.Color]::FromArgb(255,0,0,0)
$dataGrid1.Name = “dataGrid1”
$dataGrid1.DataMember = “”
$dataGrid1.TabIndex = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X =13
$System_Drawing_Point.Y = 62
$dataGrid1.Location = $System_Drawing_Point

$formProcessPieChart.Controls.Add($dataGrid1)
$dataGrid1.CaptionText=’Process Details’

#
# btnRefresh
#
$btnRefresh.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$btnRefresh.Enabled = $TRUE
$btnRefresh.Location = New-Object System.Drawing.Point(230,35)
$btnRefresh.Name = “btnRefresh”
$btnRefresh.Size = New-Object System.Drawing.Size(95,20)
$btnRefresh.TabIndex = 2
$btnRefresh.Text = “GetProcess”
$btnRefresh.UseVisualStyleBackColor = $True
$btnRefresh.add_Click($GetData)
#
#

$btnClose.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$btngetdata.Enabled = $TRUE
$btnClose.Location = New-Object System.Drawing.Point(328,35)
$btnClose.Name = “btnClose”
$btnClose.Size = New-Object System.Drawing.Size(95,20)
$btnClose.TabIndex = 3
$btnClose.Text = “Close”
$btnClose.UseVisualStyleBackColor = $True
$btnClose.add_Click($Close)
#

# lblDBName
#
$lblDBName.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$lblDBName.Font = New-Object System.Drawing.Font(“Lucida Console”,8.25,1,3,1)
$lblDBName.Location = New-Object System.Drawing.Point(13,10)
$lblDBName.Name = “lblDBName”
$lblDBName.Size = New-Object System.Drawing.Size(178,23)
$lblDBName.TabIndex = 0
$lblDBName.Text = “Enter Server Name ”
$lblDBName.Visible = $TRUE
#

#$txtComputerName.text
#txtComputerName
$txtComputerName.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$txtComputerName.Location = New-Object System.Drawing.Point(13, 35)
$txtComputerName.Name = “txtComputerName”
$txtComputerName.TabIndex = 1
$txtComputerName.Size = New-Object System.Drawing.Size(200,70)
$txtComputerName.visible=$TRUE
#
# lblServicePack
#
$lblServicePack.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$lblServicePack.Font = New-Object System.Drawing.Font(“Lucida Console”,8.25,1,3,1)
$lblServicePack.Location = New-Object System.Drawing.Point(13,100)
$lblServicePack.Name = “lblServicePack”
$lblServicePack.Size = New-Object System.Drawing.Size(278,23)
$lblServicePack.TabIndex = 0
$lblServicePack.Text = “ServicePack”
$lblServicePack.Visible = $False
#
# lblOS
#
$lblOS.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$lblOS.Font = New-Object System.Drawing.Font(“Lucida Console”,8.25,1,3,1)
$lblOS.Location = New-Object System.Drawing.Point(12,77)
$lblOS.Name = “lblOS”
$lblOS.Size = New-Object System.Drawing.Size(278,23)
$lblOS.TabIndex = 2
$lblOS.Text = “Service Information”
$lblOS.Visible = $False
#
# statusBar1
#
$statusBar1.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
$statusBar1.Location = New-Object System.Drawing.Point(0,365)
$statusBar1.Name = “statusBar1”
$statusBar1.Size = New-Object System.Drawing.Size(390,22)
$statusBar1.TabIndex = 5
$statusBar1.Text = “statusBar1”

$Chart.Width = 600
$Chart.Height = 300
$Chart.Left = 10
$Chart.Top = 300
$ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea

#Save the initial state of the form
$InitialFormWindowState = $formProcessPieChart.WindowState
#Init the OnLoad event to correct the initial state of the form
$formProcessPieChart.add_Load($Form_StateCorrection_Load)
#Show the Form
return $formProcessPieChart.ShowDialog()

} #End Function

if(OnApplicationLoad -eq $true)
{
#Create the form
#Call-SystemInformation_pff | Out-Null
#Call-Disk_Space_Chart_pff | Out-Null
Call-SystemInformation_pff | Out-Null
#Perform cleanup
OnApplicationExit
}
}

############################################################################################################

Reference:-

http://gallery.technet.microsoft.com/PowerShell-Disk-Space-cf5568f4
http://gallery.technet.microsoft.com/PowerShell-Memory-Details-b881196b
http://gallery.technet.microsoft.com/Top-10-Process-Listing-d638b0f1

The code is tested in all version of Powershell 2.0 onwards. You need to have .Net framework 3.0 or 3.5 as its pre-requisites for 3D Graph Display.

About Prashanth Jayaram

DB Technologist, Author, Blogger, Service Delivery Manager at CTS, Automation Expert, Technet WIKI Ninja, MVB and Powershell Geek My Profile: https://social.technet.microsoft.com/profile/prashanth jayaram/ http://www.sqlshack.com/author/prashanth/ http://codingsight.com/author/prashanthjayaram/ https://www.red-gate.com/simple-talk/author/prashanthjayaram/ http://www.sqlservercentral.com/blogs/powersql-by-prashanth-jayaram/ Connect Me: Twitter @prashantjayaram GMAIL powershellsql@gmail.com The articles are published in: http://www.ssas-info.com/analysis-services-articles/ http://db-pub.com/ http://www.sswug.org/sswugresearch/community/
This entry was posted in PowerShell and tagged , , , , , , , . Bookmark the permalink.

Leave a comment