Script to get the free space in differents hard disk units

Hi guys,

I need your help. I am not able to achive it by myself, I am trying but I am having troubles.

I need to run a script to get the size of a unit and the avilable free space. The same for all units in that server.  I would like to create an .xls with the output

Example:  
server: server01

c:   20 gb   10 gb free
d:  30 gb    20 gb free
...
and so for all units


I would like to use WSH and WMI but it is not friendly for me as I would like. I am working hard to learn but I need now.

Could anyone help me?
projectjaAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

fundacionrtsAdministrador de SistemasCommented:
This script [Powershell] returns CSV file with DeviceID, Size and FreeSize of all local hard drives

Get-WMIObject Win32_LogicalDisk -Filter "DriveType=3" | Select-Object DeviceID,FreeSpace,Size | Export-Csv ./localhdd.csv
projectjaAuthor Commented:
Hi,

Thanks for the reply, It is interesting.

Please, let me explain better.

I would need a powershell such as:

- It will be launch from  my workstation or server of my domain providing administrattors credential in other domains to be able to execute command there.
- The goal is to get:
* To get information about differents hard disk units on target server; total space in disk and free space available. (could have c,d,e,...) units. There is not a rule.
* Export that information to excel, creating the file iin the pc where the scrilpt is being launching (source pc in which I am launching the script). The name of the file is the same that the IP adress of the server where we are connecting to get information.
* In a specific folder on the target server check for files which are  contained into a specific folder and are two weeks old, the goal is delete them (are logs files). report the action in a logs indicating amount of deleted files and the size disk.

Please, I need the help of an expert, It is very important for me to be able to finish this task.


*
fundacionrtsAdministrador de SistemasCommented:
## This scripts generate 2 output files
## remoteip.csv - CSV file that includes all logical drivers of a computer with free space and total size
## remoteip.log - Log file that includes all files remove from remote folder that have more than 15 days (last write access)

#
# Constants
#

#$pathoutputfiles ALWAYS ends with \
$pathoutputfiles = "c:\path\to\output\files\"

#
# Read parameters
#

Write-Host "Enter remote computer IP (Format: xxx.xxx.xxx.xxx) ..."
$remoteip = Read-Host
Write-Host "Enter credentials for remote computer connection (Format: domain\username)..."
$credential = Get-Credential
Write-Host "Enter remote folder to scan (Format: \\server\path\) ..."
$remotefolder = Read-Host

#
# Get Hard Disk stats
#

Get-WMIObject Win32_LogicalDisk -Filter "DriveType=3" | Select-Object DeviceID,FreeSpace,Size | Export-Csv "$pathoutputfiles$remoteip.csv"

#
# Scan remote logs files
#
$stream = [System.IO.StreamWriter] "$pathoutputfiles$remoteip.log"
$files = Get-ChildItem -Path "$remotefolder" | Where-Object {$_.LastWriteTime -le [System.DateTime]::Now.AddDays(-15)}
foreach ($file in $files) {
    if ($File -ne $NULL) {
            Write-Host "Deleting File $File"
            $stream.WriteLine("Deleting File $File")
            Remove-Item $File.FullName | Out-Null
      }
}
$stream.close()
Creating Active Directory Users from a Text File

If your organization has a need to mass-create AD user accounts, watch this video to see how its done without the need for scripting or other unnecessary complexities.

projectjaAuthor Commented:
Sorry for the dalay.

I have been working, but I happily saw your reply.
It is very intesting. Now, I am working to prepare it.
With regard to the .XLS file, I would like to add the day date so I have modified in this way:

#==================================r======
#==========================================
$fechadeHoy = [System.DateTime]::Now

$day=$fechadehoy.day.ToString()
$month = $fechadehoy.month.ToString()
$year= $fechadehoy.year.Tostring()


$stream = [System.IO.StreamWriter] "$pathoutputfiles$remoteip$day$month$year.log"

Issues:

- I get "month" = 3,  I want "03"

Any advice?
fundacionrtsAdministrador de SistemasCommented:
$day=$fechadehoy.ToString("dd")
$month = $fechadehoy.ToString("MM")
$year= $fechadehoy.Tostring("yyyy")

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
projectjaAuthor Commented:
Thank you very much. Is has been very useful
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Windows Server 2008

From novice to tech pro — start learning today.