0

NTFS 監査スクリプトがあり、基本的な進行状況バーを追加したいと考えています。現時点で$i = 100は、最大%を示すために、通常のように呼び出す関数があります。経由でフォルダーを実行します

Get-ChildItem -Path $pathToFolders -Recurse -Force | ?{ $_.PSIsContainer } | % {$counter++}

フォルダーの総数を取得するには、$iその数値で割って % の増分を取得し、フォルダーを評価するたびに進行状況バーを増やす必要があります。問題は、スクリプトが完了するまでにプログレス バーが約 40 ~ 50% しか埋まらないことですか? 完全に明らかな何かが欠けていますか?

私のコードを見てください(最初に注意$j = 0してください):

# Main 
ForEach ($Folder in $Folders){
    $ACLs = Get-ACL $Folder.FullName | % { $_.Access  }
    ForEach ($ACL in $ACLs){
        $OutInfo = $Folder.Fullname + "," + $ACL.IdentityReference  + "," + $ACL.AccessControlType + "," + $ACL.FileSystemRights + "," + $ACL.IsInherited + "," + $ACL.InheritanceFlags + "," + $ACL.PropagationFlags
        Add-Content -Value $OutInfo -Path $outputCSV
    }
    Write-Progress -Activity "Auditing NTFS Permissions in ${$pathToFolders}..." -Status 'Progress ->' -PercentComplete $j
    $j = $j + $i
}
}
4

1 に答える 1

3

PowershellWrite-Progressは、進行状況を示すために 0 から 100 までの数字を取ります。ここでコーディングしたのは 0 から 100 までの数値ですが、この数値は処理されたフォルダーの数 (5、50、または 2000 の可能性があります) を表し、パーセンテージではありません。

おそらく行う必要があるのは次のとおりです。

foreach ($Folder in $Folders)
{
    $ACLs = Get-ACL $Folder.FullName | % { $_.Access }
    foreach ($ACL in $ACLs)
    {
        $OutInfo = $Folder.Fullname + "," + $ACL.IdentityReference  + "," + $ACL.AccessControlType + "," + $ACL.FileSystemRights + "," + $ACL.IsInherited + "," + $ACL.InheritanceFlags + "," + $ACL.PropagationFlags
        Add-Content -Value $OutInfo -Path $outputCSV
    }
    Write-Progress -Activity "Auditing NTFS Permissions in ${$pathToFolders}..." -Status 'Progress ->' -PercentComplete (([int]($j / $Folders.Count)) * 100)
    $j++
}

特にこの部分:

-PercentComplete ([int](($j / $Folders.Count) * 100))

$jループするたびにインクリメントすると仮定すると、パーセンテージが正しく計算されます。

于 2013-10-23T21:23:39.250 に答える