设置执行脚本的权限: 以管理员身份打开PowerShell
,执行以下命令。
# RemoteSigned允许本地创建的脚本运行,但是远程下载的脚本必须由信任的发布者签名。
Set-ExecutionPolicy RemoteSigned
脚本: 在Windows系统下,使用cmd命令或者脚本查询磁盘占用情况,类似与Linux系统中使用du -h -d 1
命令。
# $Error数组在PowerShell会话期间会一直累积,因此如果在多次运行命令后希望清除错误历史记录,可以使用$Error.Clear()
$Error.Clear()
# 定义一个总容量大小参数
$totalSize = 0
# 获取当前目录下的子文件夹(-ErrorAction SilentlyContinue参数排除没有权限的文件夹)
$folders = Get-ChildItem -Directory -ErrorAction SilentlyContinue
# 定义一个数组
$resultArray = @()
# 循环遍历子文件夹
foreach ($folder in $folders) {
# 获取子文件夹全名称(绝对路径)
$folderPath = $folder.FullName
# 排除指定的子文件夹
#if ($folderPath -eq 'C:\Windows') {
# continue # 跳过当前循环,不处理这个文件夹
#}
# 遍历子文件夹并统计大小
$folderSize = (Get-ChildItem -Recurse $folderPath -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum
# 转换为MB格式
$folderSizeInMB = $folderSize / 1MB
# 计算总容量大小
$totalSize += $folderSize
# 定义每一个子文件对象并将遍历的结果进行赋值
$resultObject = [PSCustomObject]@{
'Folder' = $folderPath
# 定义文件大小Size属性,赋值时保留两位小数
'Size' = "{0:F2}" -f $folderSizeInMB + ' MB'
}
# 循环将每一个对象添加到数组中
$resultArray += $resultObject
}
# 定义一个总容量大小对象并将遍历的结果进行赋值
$totalSizeInMBObject = [PSCustomObject]@{
'Folder' = "Total Size"
'Size' = "{0:F2}" -f ($totalSize / 1MB) + ' MB'
}
# 将总容量大小添加到数组对象中
$resultArray += $totalSizeInMBObject
# $Error变量包含了在PowerShell会话期间发生的所有错误的数组
if ($Error) {
foreach ($err in $Error) {
# 输出没有访问权限的文件目录
Write-Host "Error occurred: $($err.Exception.Message)"
}
}
# 使用Format-Table定义格式,Folder列左对齐,Size列右对齐
$resultArray | Format-Table -Property @{Label='Folder'; Expression={$_.Folder}; Alignment='left'},
@{Label='Size'; Expression={$_.Size}; Alignment='right'} -AutoSize
执行脚本: 文件名后缀.ps1
# 当前路径下执行
./test.ps1
# 绝对路径执行
& "D:\test.ps1"