Tags

Howto (51) Free Software (35) Powershell (33) Windows Server (23) AD (16) Hyper-V (16) Exchange (13) Office (13) Group Policy (10) Windows Server 2012 (9) Scripts (7) Symantec BE (5) Windows 8 (5) Cisco (4) TMG (4) Terminal Server (4) Cluster (3) HP (3) RDS (3) UAG (3) Citrix (2) DC (2) DNS (2) IE10 (2) OpenID (2) PKI (2) SCVMM (2) Windows Live (2) iLO (2) Backup (1) DPM (1) Fileserver (1) IE (1) SQL; DPM (1) Security (1) Sharepoint (1) Switch (1) VMWare (1) Veeam (1)

woensdag 4 september 2013

Get-Diskfree

Met onderstaand script kun je de schijfruimte van een computer bekijken die is toegewezen en welke vrij is:
Tevens kun je met een scriptje de LOW DISK SPACE van alle servers bekijken.
 
 
function Get-DiskFree
{
     [CmdletBinding()]
     param
     (
         [Parameter(ValueFromPipeline=$true,
                    ValueFromPipelineByPropertyName=$true)]
         [Alias('hostname')]
         [Alias('cn')]
         [string[]]$ComputerName = $env:COMPUTERNAME,
         [switch]$Format
     )
 
     BEGIN
     {
         function Format-HumanReadable
         {
             param ($size)
             switch ($size)
             {
                 {$_ -ge 1PB}{"{0:#.#'P'}" -f ($size / 1PB); break}
                 {$_ -ge 1TB}{"{0:#.#'T'}" -f ($size / 1TB); break}
                 {$_ -ge 1GB}{"{0:#.#'G'}" -f ($size / 1GB); break}
                 {$_ -ge 1MB}{"{0:#.#'M'}" -f ($size / 1MB); break}
                 {$_ -ge 1KB}{"{0:#'K'}" -f ($size / 1KB); break}
                 default {"{0}" -f ($size) + "B"}
             }
         }
 
         $wmiq = 'SELECT * FROM Win32_LogicalDisk WHERE Size != Null
                 AND DriveType >= 2'
     }
 
     PROCESS
     {
         foreach ($computer in $ComputerName)
         {
             try
             {
                $disks = Get-WmiObject -Query $wmiq `
                          -ComputerName $computer -ErrorAction Stop
 
                 if ($Format)
                 {
                     # Create array for $disk objects and then add each 
                    $diskarray = @()
                     $disks | ForEach-Object { $diskarray += $_ }
 
                     # The output of the computer name allows for 
                    # cleaner separation when querying multiple computers
                    Write-Output "Computer: $computer"
 
                     # Output custom formatted table
                    $diskarray | Format-Table -AutoSize `
                         @{n='Vol';e={$_.DeviceID}},
                         @{n='Size';e={Format-HumanReadable `
                         $_.Size};Align='Right'},
                         @{n='Used';e={Format-HumanReadable `
                         (($_.Size)-($_.FreeSpace))};Align='Right'},
                         @{n='Avail';e={Format-HumanReadable `
                         $_.FreeSpace};Align='Right'},
                         @{n='Use%';e={"{0:#}" -f ((($_.Size)-($_.FreeSpace))`
                         /($_.Size) * 100)};Align='Right'},@{n=' FS '`
                         ;e={$_.FileSystem};Align='Center'},
                         @{n='Type';e={$_.Description};Align='Left'}
                 }
                 else
                 {
                     foreach ($disk in $disks)
                     {
                         # Create property hash table
                        $diskprops = @{'Volume'=$disk.DeviceID;
                                     'Size'=$disk.Size;
                                     'Used'=($disk.Size - $disk.FreeSpace);
                                     'Available'=$disk.FreeSpace;
                                     'FileSystem'=$disk.FileSystem;
                                     'Type'=$disk.Description
                                     'Computer'=$disk.SystemName;}
 
                         # Create custom PS object and apply type
                        $diskobj = New-Object -TypeName PSObject `
                                     -Property $diskprops
                         $diskobj.PSObject.TypeNames.Insert(0,'BN.DiskFree')
 
                         Write-Output $diskobj
                     }
                 }
             }
             catch
             {
                 # Check for common DCOM errors and display "friendly" output
                switch ($_)
                 {
                     { $_.Exception.ErrorCode -eq 0x800706ba } `
                         { $err = 'Unavailable (Host Offline or Firewall)';
                             break; }
                     { $_.CategoryInfo.Reason -eq 'UnauthorizedAccessException' } `
                         { $err = 'Access denied (Check User Permissions)';
                             break; }
                     default { $err = $_.Exception.Message }
                 }
                 Write-Warning "$computer - $err"
             }
         }
     }
 
     END {}
 
 
 
 
PS C:\PSScripts>’localhost’, ‘computer’ | Get-DiskFree -Format
 
 
>>> LOW DISK SPACE <<<
 
> IPMO AD <
 
PS C:\PSScripts>Import-Module ActiveDirectory
 
> MAAK ARRAY <
 
PS C:\PSScripts>$servers = Get-AdComputer -Filter { OperatingSystem -like '*server*' } | select -expand name
 
> BEKIJK ARRAY <
 
PS C:\PSScripts>Write-Output $servers
 
PS C:\PSScripts>Get-DiskFree -cn $servers | ? { ($_.Volume -eq 'C:') -and ($_.Available / $_.Size) -lt .20 } | select comp*
 
 
PS C:\PSScripts>$servers | get-diskfree -Format
 
 
> LEEG ARRAY <
 
PS C:\PSScripts>$servers.Clear()
 
 
 

Geen opmerkingen:

Een reactie posten