-
Notifications
You must be signed in to change notification settings - Fork 3
/
Get_SizeOnDisk.ps1
95 lines (83 loc) · 3.02 KB
/
Get_SizeOnDisk.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
param (
[string]$OD_Path,
[switch]$Files_Size
)
Function Format_Size
{
param(
$size
)
If($size -eq $null){$FormatedSize = "0"}
ElseIf( $size -lt 1KB ){$FormatedSize = "$("{0:N2}" -f $size) B"}
ElseIf( $size -lt 1MB ){$FormatedSize = "$("{0:N2}" -f ($size / 1KB)) KB"}
ElseIf( $size -lt 1GB ){$FormatedSize = "$("{0:N2}" -f ($size / 1MB)) MB"}
ElseIf( $size -lt 1TB ){$FormatedSize = "$("{0:N2}" -f ($size / 1GB)) GB"}
ElseIf( $size -lt 1PB ){$FormatedSize = "$("{0:N2}" -f ($size / 1TB)) TB"}
return $FormatedSize
}
add-type -type @"
using System;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.IO;
namespace Disk
{
public class Size
{
[DllImport("kernel32.dll")]
static extern uint GetCompressedFileSizeW([In, MarshalAs(UnmanagedType.LPWStr)] string lpFileName,
out uint lpFileSizeHigh);
public static ulong SizeOnDisk(string filename)
{
uint High_Order;
uint Low_Order;
ulong GetSize;
FileInfo CurrentFile = new FileInfo(filename);
Low_Order = GetCompressedFileSizeW(CurrentFile.FullName, out High_Order);
int GetError = Marshal.GetLastWin32Error();
if (High_Order == 0 && Low_Order == 0xFFFFFFFF && GetError != 0)
{
throw new Win32Exception(GetError);
}
else
{
GetSize = ((ulong)High_Order << 32) + Low_Order;
return GetSize;
}
}
}
}
"@
$Get_All_Files = Get-ChildItem $OD_Path -recurse -ea silentlycontinue | Where-Object {! $_.PSIsContainer}
$OD_Files_Array = @()
ForEach($File in $Get_All_Files)
{
If((test-path $File.FullName))
{
$SizeOnDisk = [Disk.Size]::SizeOnDisk($File.FullName)
If($Files_Size)
{
$OD_Obj = New-Object PSObject
Add-Member -InputObject $OD_Obj -MemberType NoteProperty -Name "File name" -Value $File.Name
Add-Member -InputObject $OD_Obj -MemberType NoteProperty -Name "Path" -Value $File.DirectoryName
Add-Member -InputObject $OD_Obj -MemberType NoteProperty -Name "Size" -Value $File.Length
Add-Member -InputObject $OD_Obj -MemberType NoteProperty -Name "Size on Disk" -Value $SizeOnDisk
$OD_Files_Array += $OD_Obj
}
$total_disk_size += $SizeOnDisk
$total_size += $File.Length
}
}
$Formated_FullSize = Format_Size -size $total_size
$Formated_SizeOnDisk = Format_Size -size $total_disk_size
"OneDrive usage size ($Formated_FullSize) - OneDrive usage on disk size ($Formated_SizeOnDisk)"
$OD_Obj2 = New-Object PSObject
Add-Member -InputObject $OD_Obj2 -MemberType NoteProperty -Name "File name" -Value " OneDrive resume"
Add-Member -InputObject $OD_Obj2 -MemberType NoteProperty -Name "Path" -Value $OD_Path
Add-Member -InputObject $OD_Obj2 -MemberType NoteProperty -Name "Size" -Value $Formated_FullSize
Add-Member -InputObject $OD_Obj2 -MemberType NoteProperty -Name "Size on disk" -Value $Formated_SizeOnDisk
$OD_Files_Array += $OD_Obj2
If($Files_Size)
{
$OD_Files_Array | out-gridview
}