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