Solved

script for CPU usage,Memory usage and Free disk sapce

Posted on 2014-01-07
16
4,796 Views
Last Modified: 2016-05-15
Hi,
     I am trying to send some information to management. Can you help in getting information for CPU usage, Memory used and free disk space and number of user logged in. Powershell script will be ideal. We have win2k, win2k3 servers in our domain and need this info for all 4K servers in 2 domains.


Thanks
 Ajay
0
Comment
Question by:aspathak
  • 7
  • 5
  • 2
  • +1
16 Comments
 
LVL 6

Expert Comment

by:xeroxzerox
ID: 39764481
0
 
LVL 1

Author Comment

by:aspathak
ID: 39764498
The combined script is not working. need script which can export the data to csv or xls.

Thanks
0
 
LVL 6

Expert Comment

by:xeroxzerox
ID: 39764596
Echo "Free HDD Space"
fsutil volume diskfree C:\ > c:\status.xls
systeminfo |find "Available Physical Memory" >> c:\status.xls
systeminfo |find "Virtual Memory: In Use:" >> c:\status.xls
typeperf "\Processor(_Total)\% Processor Time" -sc 1 >> c:\status.xls

make a file extension in .bat.If the output is ok for you then we need to some modification in it.
0
 
LVL 1

Author Comment

by:aspathak
ID: 39764612
Total # of free bytes        : 709492736
Total # of bytes             : 42949668864
Total # of avail free bytes  : 709492736
Available Physical Memory: 1,908 MB

I am getting this output. Need to have CPU usage and the total memory with other drive ( Free space and total disk space)info..

Thanks a lot for giving some idea.
0
 
LVL 40

Expert Comment

by:Subsun
ID: 39764627
Try this code… You can input the server in a text file (C:\Server.txt), if the CPU, Memory & Total Free space shown empty then it means the server is not reachable..

GC C:\Server.txt | % {
$Comp = $_
If (Test-Connection $Comp -Quiet){
$Mem = GWMI -Class win32_operatingsystem -computername $COMP
	New-Object PSObject -Property @{
	Server = $Comp
	"CPU usage" = "$((GWMI -ComputerName $COMP win32_processor | Measure-Object -property LoadPercentage -Average).Average) %"
	"Memory usage" = "$("{0:N2}" -f ((($Mem.TotalVisibleMemorySize - $Mem.FreePhysicalMemory)*100)/ $Mem.TotalVisibleMemorySize)) %"
	"Total FreeSpace" = "$("{0:N2}" -f ((Get-WmiObject -Class win32_Volume -ComputerName $COMP -Filter "DriveType = '3'" | Measure-Object -property FreeSpace -Sum).Sum /1GB)) GB"
	}
 }
 Else{
 "" | Select @{N="Server";E={$Comp}},"CPU usage","Memory usage","Total FreeSpace"
 }
}| Select Server,"CPU usage","Memory usage","Total FreeSpace" |
Export-Csv C:\report.csv -nti

Open in new window

0
 
LVL 1

Author Comment

by:aspathak
ID: 39767197
Hi Subsun,
                Thanks for this. Can we incorportae logged in users in this script.
                This will give me the full solution.
0
 
LVL 40

Expert Comment

by:Subsun
ID: 39767392
Here is the updated code.. let me know if you have any questions..
GC C:\Server.txt | % {
$Comp = $_
If (Test-Connection $Comp -Quiet){
$Luser = (Get-WmiObject -class win32_process -Filter "Name='Explorer.exe'" -ComputerName $Comp | % {$_.GetOwner().User} | Sort-Object -Unique) -join ","
$Mem = GWMI -Class win32_operatingsystem -computername $COMP
	New-Object PSObject -Property @{
	Server = $Comp
	"CPU usage" = "$((GWMI -ComputerName $COMP win32_processor | Measure-Object -property LoadPercentage -Average).Average) %"
	"Memory usage" = "$("{0:N2}" -f ((($Mem.TotalVisibleMemorySize - $Mem.FreePhysicalMemory)*100)/ $Mem.TotalVisibleMemorySize)) %"
	"Total FreeSpace" = "$("{0:N2}" -f ((Get-WmiObject -Class win32_Volume -ComputerName $COMP -Filter "DriveType = '3'" | Measure-Object -property FreeSpace -Sum).Sum /1GB)) GB"
	"logged Users" = $Luser
	}
 }
 Else{
 "" | Select @{N="Server";E={$Comp}},"CPU usage","Memory usage","Total FreeSpace","logged Users"
 }
}| Select Server,"CPU usage","Memory usage","Total FreeSpace","logged Users" |
Export-Csv C:\report.csv -nti

Open in new window

0
 
LVL 1

Author Comment

by:aspathak
ID: 39767487
Hi Subsun,
                Thanks. My requirement is to have to have the last logged in user with time stamp so that we can get idea about the server usage.
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 40

Expert Comment

by:Subsun
ID: 39767898
It's a rather complex task to get last logged in user.. However you can try with the
Get-LastLogon function from the Microsoft Script Center...

You can copy the functin from following link
http://gallery.technet.microsoft.com/scriptcenter/Get-LastLogon-Determining-283f98ae

Here is the updated code with Get-LastLogon function..
GC C:\Server.txt | % {
$Comp = $_
If (Test-Connection $Comp -Quiet){
$Luser = Get-LastLogon $Comp
$Mem = GWMI -Class win32_operatingsystem -computername $COMP
	New-Object PSObject -Property @{
	Server = $Comp
	"CPU usage" = "$((GWMI -ComputerName $COMP win32_processor | Measure-Object -property LoadPercentage -Average).Average) %"
	"Memory usage" = "$("{0:N2}" -f ((($Mem.TotalVisibleMemorySize - $Mem.FreePhysicalMemory)*100)/ $Mem.TotalVisibleMemorySize)) %"
	"Total FreeSpace" = "$("{0:N2}" -f ((Get-WmiObject -Class win32_Volume -ComputerName $COMP -Filter "DriveType = '3'" | Measure-Object -property FreeSpace -Sum).Sum /1GB)) GB"
	"logged Users" = $Luser.User
	Time = $Luser.Time
	}
 }
 Else{
 "" | Select @{N="Server";E={$Comp}},"CPU usage","Memory usage","Total FreeSpace","logged Users",Time
 }
}| Select Server,"CPU usage","Memory usage","Total FreeSpace","logged Users",Time |
Export-Csv C:\report.csv -nti

Open in new window

let me know if you have any questions..
0
 
LVL 1

Author Comment

by:aspathak
ID: 39775828
Hi Subsun,
               Greats Thaks, But this script is giving total free space on the server. I need free space info. for only C Drive.

Also the script is stopping if the server is in hung state but is pinging.

I am using this script.

GC C:\Server.txt | % {
$Comp = $_
If (Test-Connection $Comp -Quiet){
$Luser = (Get-WmiObject -class win32_process -Filter "Name='Explorer.exe'" -ComputerName $Comp | % {$_.GetOwner().User} | Sort-Object -Unique) -join ","
$Mem = GWMI -Class win32_operatingsystem -computername $COMP
      New-Object PSObject -Property @{
      Server = $Comp
      "CPU usage" = "$((GWMI -ComputerName $COMP win32_processor | Measure-Object -property LoadPercentage -Average).Average) %"
      "Memory usage" = "$("{0:N2}" -f ((($Mem.TotalVisibleMemorySize - $Mem.FreePhysicalMemory)*100)/ $Mem.TotalVisibleMemorySize)) %"
      "Total FreeSpace" = "$("{0:N2}" -f ((Get-WmiObject -Class win32_Volume -ComputerName $COMP -Filter "DriveType = '3'" | Measure-Object -property FreeSpace -Sum).Sum /1GB)) GB"
      "logged Users" = $Luser
      }
 }
 Else{
 "" | Select @{N="Server";E={$Comp}},"CPU usage","Memory usage","Total FreeSpace","logged Users"
 }
}| Select Server,"CPU usage","Memory usage","Total FreeSpace","logged Users" |
Export-Csv C:\report.csv -nti
0
 
LVL 40

Expert Comment

by:Subsun
ID: 39776032
Change line 10 to following to get the C Drive free space..
"Total FreeSpace" = "$("{0:N2}" -f ((Get-WmiObject -Class win32_Volume -ComputerName $COMP -Filter "DriveLetter='C:'").FreeSpace /1GB)) GB"

Open in new window


Also the script is stopping if the server is in hung state but is pinging.
Is it giving error? or the script itself is not responding?

If it gives error and stop for a server, then try by adding following error action preference as a first line of your code and see if it helps..

$ErrorActionPreference = "SilentlyContinue"
0
 
LVL 1

Author Comment

by:aspathak
ID: 39776173
Is it giving error? or the script itself is not responding?


the script itself is not responding . Iam checking for C drive free space now..
0
 
LVL 1

Author Comment

by:aspathak
ID: 39784562
Hi Subsun,
                 Script is giving the required information.  Can we get the time and date for the script in the same sheet means when this script was run..

Thanks
0
 
LVL 40

Accepted Solution

by:
Subsun earned 500 total points
ID: 39784643
Replace the report file name with "C:\report$(Get-Date -F dd_MM_yyy_hhmm).csv"
Export-Csv "C:\report$(Get-Date -F dd_MM_yyy_hhmm).csv" -nti 

Open in new window

0
 

Expert Comment

by:Skipper_128
ID: 41595757
Hello,

How Come I tried your code and it's not giving me a result?
0
 

Expert Comment

by:Skipper_128
ID: 41595779
Hello Subsun,

I've tried your script above, and it does not show me any result.
0

Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

Preface Having the need * to contact many different companies with different infrastructures * do remote maintenance in their network required us to implement a more flexible routing solution. As RAS, PPTP, L2TP and VPN Client connections are no…
Hallo! I guess almost every Windows Administrator must have got stumped with this question "Where does WINDOWS store a users cached credentials? Every user who had once logged onto a Server/Desktop while it was connected to the domain could sti…
In this video, we discuss why the need for additional vertical screen space has become more important in recent years, namely, due to the transition in the marketplace of 4x3 computer screens to 16x9 and 16x10 screens (so-called widescreen format). …
With the advent of Windows 10, Microsoft is pushing a Get Windows 10 icon into the notification area (system tray) of qualifying computers. There are many reasons for wanting to remove this icon. This two-part Experts Exchange video Micro Tutorial s…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now