2013-10-23 79 views
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 
} 
} 

回答

3

PowerShell的Write-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

+0

非常感謝,但這似乎並不奏效 - $ j在它僅僅是一個不斷增加的百分比值之前沒有任何作用? – PnP

+0

您必須在開始之前將'$ j'初始化爲0,並且您不需要再使用'$ i'(或者如果需要,您可以用'$ j'與'$ i'交換,但是您只需要一個計數器變量,而不是兩個)。 – qJake

+0

是的,我已經將$ j設置爲0並且結果相同。事實上,酒吧一直保持在0%的水平。 – PnP