Powershell mount point freespace email

Posted on 2009-06-29
Medium Priority
Last Modified: 2012-06-21

*** Environment ***
Windows 2003 AD
Exchange 2007

I have the following code (to follow) that Iam working on, to query my mount points and report back freespace/capacity.

I would like to be able to include some logic to give me also the freespace in %, I.e

Mount Point      freeSpace (GB)       capacity    Percentfree
-----------      --------------                  --------       -------------
M:\                          0.07                    0.10           %x
M:\SG1\Logs\         0.97                   1.00            %x
M:\SG1\Database\ 2.86                   2.90             %x
M:\SG2\Logs\         0.97                   1.00            %x
M:\SG2\Database\ 2.86                   2.90             %x

The PoSh code is:

forEach ($server in (Get-Content allservers.txt)) {
Get-WmiObject Win32_volume -ComputerName $server | where {$_.caption -like "M:\*"} | `
select @{name="Mount Point";expression={$_.caption}},@{name="freeSpace (GB)";e={($_.freespace/1GB).tostring("F02")}},`
@{name="capacity";expression={($_.Capacity/1GB).tostring("F02")}} | ft -autosize | out-file "$server.txt"

This all works fine, as I say I would like to get a % conversion done also (if possible) and then I would like to get this sent by email...

Any pointers appreciated..!

Question by:bryan oakley-wiggins
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2

Author Comment

by:bryan oakley-wiggins
ID: 24735425
I have this to send it via email for now - would really appreciate the % conversion though :-)

forEach ($server in (Get-Content allservers.txt)) {

Get-WmiObject Win32_volume -ComputerName $server | where {$_.caption -like "M:\*"} | `
select @{name="Mount Point";expression={$_.caption}},@{name="freeSpace (GB)";e={($_.freespace/1GB).tostring("F02")}},`
@{name="capacity";expression={($_.Capacity/1GB).tostring("F02")}} | ft -autosize | out-file "$server.txt"

$file = "c:\scripts\testing\server.txt"
$smtpServer = "mailrelay"
$msg = new-object Net.Mail.MailMessage
$att = new-object Net.Mail.Attachment($file)
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$Today = Get-Date
$msg.From = "ServerEngineering@company.int"
$msg.Subject = "$Today Today's VMP check - DO NOT REPLY TEST TEST TEST"
$msg.Body = "$Today The daily VMP check TEST TEST TEST"
$msg.Body = $file
LVL 40

Accepted Solution

Subsun earned 2000 total points
ID: 24735771

Author Closing Comment

by:bryan oakley-wiggins
ID: 31598043
hi Subsun
well, thanks for the pointer - bit of tweaking and it worked for me..!
(Chris-Dent - he's a genius, )
Thanks for that...

For anyone intersted, here's the full code I use:

# this section gets the server from a list
foreach ($server in (Get-Content allservers.txt)) {
Get-WmiObject Win32_Volume -ComputerName $server | where {$_.caption -like "M:\*"} | `

# this section does the formatting and percentage used calculation
  Format-Table `
    @{l="Server";e={$_.server}}, `
    @{l="Drive Letter";e={$_.caption}}, `
    @{l="Free Space on Disk (GB)";e={"{0:n2}" -f ($_.freespace/1gb)}}, `
    @{l="Total Disk Space (GB)";e={"{0:n2}" -f ($_.Capacity/1gb).toString("F02")}}, `
    @{l="Percentage Used";e={ "{0:P2}" -f (1 - ([Int64]$_.FreeSpace / [Int64]$_.Capacity)) }} | Out-File "c:\scripts\testing\MOUNTS1.log"

# this section picks up the file and emails it to addressees listed
$file = "c:\scripts\testing\LOG.log"
$smtpServer = "YourSMTPServer"
$msg = new-object Net.Mail.MailMessage
$att = New-Object Net.Mail.Attachment($file)
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$Today = Get-Date
$msg.From = "user@company.int"
$msg.Subject = "subject here"
$msg.Body = "body contents here"

Featured Post

PowerShell Core for Advanced Linux Administrators

Understand advanced principals around Powershell Core with a focus on the Linux Administrator.  This course covers how to administer numerous environments across multiple platforms including Linux, Azure, AWS, and Google Cloud from a single shell instance.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Auditing domain password hashes is a commonly overlooked but critical requirement to ensuring secure passwords practices are followed. Methods exist to extract hashes directly for a live domain however this article describes a process to extract u…
If you troubleshoot Outlook for clients, you may want to know a bit more about the OST file before doing your next job. IMAP can cause a lot of drama if removed in the accounts without backing up.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
Suggested Courses

770 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