如何将PowerShell脚本中固定路径替换为CSV用户列表输入?
批量计算CSV用户列表对应的目录大小
首先确保你的CSV文件格式符合需求,以下分两种常见场景给出解决方案:
场景1:CSV仅包含用户名(路径格式固定为F:\Local_Users\<用户名>)
假设你的CSV文件(比如users.csv)内容如下:
Username HRosehill JDoe SMith
对应的PowerShell脚本:
# 导入CSV文件 $users = Import-Csv -Path "C:\your\csv\path\users.csv" # 遍历每个用户,计算对应目录大小 foreach ($user in $users) { # 拼接用户目录路径 $userPath = "F:\Local_Users\$($user.Username)" # 执行大小计算并关联用户信息 Get-ChildItem -Path $userPath -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum | Select-Object @{Name="用户名";Expression={$user.Username}}, @{Name="目录路径";Expression={$userPath}}, @{Name="大小(GB)";Expression={"{0:N2}" -f ($_.Sum/1gb)}} }
场景2:CSV直接包含完整目录路径
如果CSV里已经存储了每个用户的完整目录路径(比如user_paths.csv):
UserPath F:\Local_Users\HRosehill D:\Users\JDoe E:\Home\SMith
对应的简化脚本:
# 导入CSV文件 $userPaths = Import-Csv -Path "C:\your\csv\path\user_paths.csv" # 遍历每个路径计算大小 foreach ($item in $userPaths) { Get-ChildItem -Path $item.UserPath -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum | Select-Object @{Name="目录路径";Expression={$item.UserPath}}, @{Name="大小(GB)";Expression={"{0:N2}" -f ($_.Sum/1gb)}} }
额外优化:将结果导出为CSV
如果需要把所有计算结果保存到新的CSV文件,可按以下方式修改(以场景1为例):
$results = foreach ($user in $users) { $userPath = "F:\Local_Users\$($user.Username)" Get-ChildItem -Path $userPath -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum | Select-Object @{Name="用户名";Expression={$user.Username}}, @{Name="目录路径";Expression={$userPath}}, @{Name="大小(GB)";Expression={"{0:N2}" -f ($_.Sum/1gb)}} } # 导出结果到指定CSV文件 $results | Export-Csv -Path "C:\your\output\path\user_dir_sizes.csv" -NoTypeInformation -Encoding UTF8
注意事项
- 确保CSV文件的列名和脚本中引用的名称完全一致(比如
Username或UserPath) - 若需排查目录不存在等异常,可将
-ErrorAction SilentlyContinue改为-ErrorAction Stop,并添加try/catch块处理错误 - 计算大目录时耗时较长,建议先测试单个用户路径验证逻辑
内容的提问来源于stack exchange,提问作者Simon Eastwood
相关产品推荐
相关产品推荐

