Results 1 to 6 of 6

Thread: Script Need to check disk space on remote servers

  1. #1
    Join Date
    Nov 2007
    Posts
    5

    Script Need to check disk space on remote servers

    I know i could always a program to do this but wheres the fun in that?
    so I need a program that will go through a list of servers and then a list of their drives and check to see how much free space is left on those drives, from their if it is anything less then 30GB i need it to send an email to me.
    i am using psexec to access these remote servers and run cmd. then to email myself i am using postie.
    the problem i am having is wrapping that all up in a if-then-else command that will look for the specified free space. It doesnt work right now beacuse for whatever reason it is bring back a true statement when the statement is false because i know the server its checking is more then 30GB free.
    This is what i have so far:

    @echo off

    for /f %%S IN (serverPClist.txt) DO (
    echo Checking drives on Server %%S...
    for /D %%D IN (C D F G H I J K X V E) DO (

    psexec \\%%S cmd /c if exist %%D:\* dir %%D:\ | findstr /c:"bytes" > %temp%\%%S-%%D.txt
    )
    )


    color 0D


    for /f %%S IN (serverPClist.txt) DO (
    echo. & echo.
    echo ********** Displaying output for server %%S... **********

    for /D %%D IN (C D E F G I J K) DO (
    for /f "tokens=1,2,3,4" %%F IN ('if exist %temp%\%%S-%%D.txt type %temp%\%%S-%%D.txt') DO (
    if /i "%%G" == "Dir(s)" echo For the %%D: drive: %%H bytes free space.
    if /i "%%G" == "bytes" echo For the %%D: drive: %%F bytes free space.
    echo.
    )
    )
    echo Done!
    )
    echo Generating HTML...

    REM this part of the script generates an HTML file with all the relevant information
    REM and then launches it using the default browser.

    set FileName="C:\Report.html"
    echo ^<HTML^> > %FileName%
    echo ^<HEAD^> >> %FileName%
    echo ^<TITLE^>Free Space on NRCE Servers^</TITLE^> >> %FileName%
    echo ^</HEAD^> >> %FileName%
    echo ^<BODY^> >> %FileName%
    echo ^<CENTER^>^<FONT SIZE=6 COLOR=BLUE^>Free Hard Drive Space Report^</FONT^>^</CENTER^>^<BR^> >> %FileName%

    for /f %%S IN (serverPClist.txt) DO (
    REM mark the server
    echo ^<FONT SIZE=4^>^<B^>%%S^</B^>^</FONT^>^<BR^> >> %FileName%
    for /D %%D IN (C D E F G I J K) DO (
    for /f "tokens=1,2,3,4" %%F IN ('if exist %temp%\%%S-%%D.txt type %temp%\%%S-%%D.txt') DO (
    REM add a line for the drive and free space
    if /i "%%G" == "Dir(s)" echo ^<FONT SIZE=3^>Free space on ^<B^>%%D:^</B^> drive: ^<B^>^<FONT

    COLOR=GREEN^>%%H^</FONT^>^</B^> bytes free^</FONT^>^<BR^> >> %FileName%
    if /i "%%G" == "bytes" echo ^<FONT SIZE=3^>Free space on ^<B^>%%D:^</B^> drive: ^<B^>^<FONT

    COLOR=GREEN^>%%F^</FONT^>^</B^> bytes free^</FONT^>^<BR^> >> %FileName%
    )
    )
    REM mark some spacing lines into the HTML file
    echo ^<BR^> >> %FileName%
    )

    echo ^</BODY^> >> %FileName%
    echo ^</HTML^> >> %FileName%

    REM launch the HTML file

    set positive=1
    set amount="30,000,000,000"
    if %%f leq %amount% set violation=1
    if %%h leq %amount% set violation=1
    echo %violation%
    if %violation% equ %positive% postie -host:(SMTP SERVER) -to:(MY EMAIL) -from:(NETWORK EMAIL) -s:"Server Report" -msg:"THERE IS A VIOLATION!" -a:"C:\ServerReports\Report.html"
    echo Done!

    If anybody else has anything better plz show me, otherwise i will keep playing around with this coding.
    Last edited by screwuphead; 20-11-2007 at 11:40 PM.

  2. #2
    Jeffery Hicks [MVP] Guest

    Re: Script Need to check disk space on remote servers

    You might find this easier using WMIC (PowerShell would be even easier).

    A command like this will check one computer, myComputer and create a simple
    HTML table with the name, size and freespace.
    C:\Scripts>wmic /node:MyComputer /append:"c:\test\report.html" logicaldisk
    where drivetype=3 get Name,Size,FreeSpace /format:htable.xsl > NULL

    You can easily check a list of computers like this:
    C:\Scripts>wmic /node:@servers.txt /append:"c:\test\report.html" logicaldisk
    where drivetype=3 get Name,Size,FreeSpace /format:htable.xsl > NULL

    This is reporting all fixed logical drives. I thought I'd be able to modify
    the query to also check freespace, but that part isn't working. I'll have
    to see why.

    Here's how easy it is to create the html report in PowerShell:
    PS C:\test> get-wmiobject -computer (get-content servers.txt) -query "Select
    * from win32_logicaldisk where freespace <=
    32212254720 and drivetype=3" | Select SystemName,DeviceID,Size,FreeSpace |
    convertto-html | out-file c:\test\report.html

    It may look complicated but it is one line that goes through a list of
    servers (servers.txt) and uses WMI to find all logical disks with less then
    30GB of free space. Any matches are sent to the HTML report. PowerShell
    only needs to be installed where you run the script. Not necessarily on the
    remote systems. Sending an email through PowerShell is pretty simple as
    well.

  3. #3
    Join Date
    Nov 2007
    Posts
    5
    hmm alright ill give it a try!
    THANKS!

  4. #4
    Dominic Johnson Guest

    Re: Script Need to check disk space on remote servers

    If you are looking for an email notification when a server's disk
    breaches the 30GB free space mark then a permanent event subscription
    in WMI may give you what you need.

    The event subscription consists of a an event filter and an event
    consumer. Events matching the filter criteria are delivered to an
    event consumer for action. The filter and consumer are registered and
    bound in WMI so there isn't a requirement for a continuously running
    script and there should be little or no impact on the CPU usage.

    There is no script to run or list of servers to maintain, the setup is
    generic and the same registration can be applied to all your servers
    (with a minor change depending on the OS). Each server will report
    the threshold breach directly and automatically, via built in email
    notification, as soon as the event is recognised. This can also be
    applied to monitoring criteria other than just disk freespace.

    Probably the simplest way to setup a permanent event subscription is
    to create a Managed Object Format (mof) file that describes the event
    filter and consumer actions (there is a built in SMTP consumer and a
    script consumer).

    The mof file is then compiled into the relevant WMI namespace using
    the mofcomp utility (e.g. mofcomp myfile.mof):

    This is an example of a mof file that sets up an event subscription
    for disks that drop below 30GB of freespace. It polls WMI every 10
    minutes for an event (this interval can be changed) and when a event
    of this type is seem it then sends an email to the configured address.

    // #pragma namespace ("\\\\.\\root\\subscription")
    // for Windows 2000 use #pragma namespace ("\\\\.\\root\\cimv2")

    instance of __EventFilter as $FILTER
    {
    Name = "Disk Space Filter";

    // Windows Server 2003 and Windows XP only
    EventNamespace = "root\\cimv2";

    Query = "SELECT * FROM __InstanceModificationEvent
    WITHIN 10
    WHERE TargetInstance
    ISA \"Win32_LogicalDisk\"
    AND TargetInstance.DriveType = 3
    AND TargetInstance.FreeSpace < 32212254720 ";

    QueryLanguage = "WQL";
    };


    instance of SMTPEventConsumer as $CONSUMER
    {
    Name = "Disk Space";
    ToLine = "my.name@mydomain.com";
    SMTPServer = "mailserver.mydomain.com";
    Subject = "WARNING: Free Space on
    %TargetInstance.SystemName%
    disk %TargetInstance.Name% is below
    30GB";
    Message = " ";
    };

    instance of __FilterToConsumerBinding
    {
    Consumer = $CONSUMER ;
    Filter = $FILTER ;
    };


    Don't be put off if the syntax isn't already familiar to you - it's
    fairly straightforward and loading it into WMI on a remote server is
    no more complicated than running the command:

    mofcomp -n:\\myserver\root\subscription myfile.mof

    There's more information available here:

    http://msdn2.microsoft.com/en-us/library/aa393014.aspx

    You can also create, view, modify and delete filter and consumer
    instances using Event Registration in WMI Administrative Tools:

    http://www.microsoft.com/downloads/d...DisplayLang=en

  5. #5
    drew Guest
    i have three questions;
    Is it possible to include the remote computer name in the query or its
    result ?
    Is it possible to keept the process running by skipping over remote computer
    name in server.txt for which i do not know or do not have adequate
    credentials?
    Is it possible to get SQL Server database and log information (like
    sp_helpfile for example) from wmi, or must i write SQL Server Alerts and push
    them into the Error Log, then retrieve them from there?

    I just found out i have 85 SQL Servers to mind, and this looks like a great
    leg up!

  6. #6
    Join Date
    Jan 2010
    Posts
    1

    Re: Script Need to check disk space on remote servers

    Not sure if you still subscribe to this forum, but I was trying your script below and believe I must be missing something.
    I modified your mof file with modified SMTP changes and saved is as c:\root\diskmonitor.mof

    I tried calling it from a remote machine as:

    mofcomp -n:\\myserver\root\subscription diskmonitor.mof

    Can back with file not found. Could you let me know what I'm missing?

Similar Threads

  1. Replies: 4
    Last Post: 28-01-2011, 06:35 AM
  2. Cannot Remote Desktop to servers Even if in Remote Desktop Users Group
    By Scott Townsend in forum Windows Server Help
    Replies: 5
    Last Post: 20-04-2010, 01:05 AM
  3. Check Disk Space in Linux
    By roumieh2000 in forum Operating Systems
    Replies: 3
    Last Post: 09-11-2009, 03:20 PM
  4. Replies: 1
    Last Post: 16-03-2009, 10:42 PM
  5. script to add multple users to local admin group on servers
    By tdubb in forum Windows Server Help
    Replies: 1
    Last Post: 21-03-2008, 05:16 AM

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Page generated in 1,715,821,413.85852 seconds with 17 queries