我正在尝试在Windows计算机中检索配置文件的确切大小。
下面是我的代码和O / P
$profiles = Get-ChildItem C:\Users | ?{Test-path C:\Users\$_\NTUSER.DAT} | Select -ExpandProperty Name
foreach($profile in $profiles)
{
$largeprofile = Get-ChildItem C:\Users\$profile -recurse | Measure-Object -Sum length | Select -ExpandProperty Sum
$largeprofile = [math]::Round(($largeprofile/1MB),2) + "MB"
if($largeprofile -lt 20){Continue}
$object = New-Object -TypeName PSObject
$object | Add-Member -MemberType NoteProperty -Name Name -Value $profile
$object | Add-Member -MemberType NoteProperty -Name "Size(MB)" -Value $largeprofile
($object | fl | Out-String).Trim();Write-Output "`n"
}
O / P
名称:admin
大小(MB):34.62
但是,该文件夹的确切大小为181MB,powershell无法读取父文件夹中的所有文件夹和文件,如何获取显示在该文件夹属性中的确切大小。
注意:对于配置文件文件夹o / p以外的其他文件夹,都是正确的。
答案 0 :(得分:0)
递归目录时,必须将参数-Force
添加到Get-ChildItem
。通过文档Get-ChildItem
的-Force
参数:
允许cmdlet获取否则无法访问的项目 由用户,例如隐藏文件或系统文件。
此外,您将要添加-ErrorAction SilentlyContinue
,以免出现Access Denied
错误。这些更改使您的代码如下所示:
$profiles = Get-ChildItem C:\Users | ?{Test-path C:\Users\$_\NTUSER.DAT} | Select -ExpandProperty Name
foreach($profile in $profiles)
{
$largeprofile = Get-ChildItem C:\Users\$profile -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Sum length | Select -ExpandProperty Sum
$largeprofile = [math]::Round(($largeprofile/1MB),2) + "MB"
if($largeprofile -lt 20){Continue}
$object = New-Object -TypeName PSObject
$object | Add-Member -MemberType NoteProperty -Name Name -Value $profile
$object | Add-Member -MemberType NoteProperty -Name "Size(MB)" -Value $largeprofile
($object | fl | Out-String).Trim();Write-Output "`n"
}