2016-05-31 83 views
0

我想獲取文件夾內的文件數量和文件夾數量以及總大小。在某種程度上,我已經實現了這一目標,但是當我試圖檢查數以百萬計的文件夾/文件時,它們的大小可能在1 TB左右,因此陷入困境可能會陷入無窮無盡的困境。PowerShell腳本來驗證/比較兩臺服務器的文件夾和文件

另外我想比較兩個位置的大小和文件/文件夾的數量,並獲得輸出作爲bollen值。 - true如果大小和數字匹配,false如果不符合。

下面的腳本是我試過的。有人可以幫我解決這個問題。

$hostnames = Get-Content C:\server.txt 
$directory = "D$\logs" 

foreach ($hostname in $hostnames){ 

    $Folderitems = (Get-ChildItem -Path "\\$hostname\$directory" -Directory -Recurse -Force).Count 
    $FileItems = Get-ChildItem -path "\\$hostname\$directory" -recurse 
    $Measurement = $FileItems | Measure-Object -property length -sum 
    $colitems = $FileItems | measure-Object -property length -sum 
    "$hostname,$directory;{0:N2}" -f ($colitems.sum/1024MB) + "GB;" + $Measurement.count + " files;" + $items +"Folders;" 
} 

回答

0

的性能改進會調用Get-ChildItem cmdlet的只有一次,並用它使用Where-Object cmdlet來過濾文件夾:

$FileItems = Get-ChildItem -path "\\$hostname\$directory" -recurse 
$Folderitems = $FileItems | Where-Object PsIsContainer 

也計算長度的兩倍,去掉其中的一個:

$Measurement = $FileItems | Measure-Object -property length -sum 
$colitems = $FileItems | measure-Object -property length -sum 

Also i want to compare the two location size and number of files/folder and get output as bollen value.

這兩個位置你想比較?你迭代的主機名的列表,並不會存儲任何值...

編輯您的評論:

Regarding the comparison part i want to compare the size and number of files from server1 to server2 for location d$\website. Its just like same we do right click on folder and see the files and size.

目前,您在檢索項D$\logs,不D$\website你可能必須改變這個?!。爲了比較結果,你必須先存儲它們。我會推薦PSCustomObjectsarray。該結構看起來像這樣(示例輸出):

Server   Sum Count 
------   --- ----- 
YourServer1 88575206 386 
YourServer2 88575206 386 

這裏的腳本:

foreach ($hostname in $hostnames){ 

    $FileItems = Get-ChildItem -path "\\$hostname\$directory" -recurse 

    $Folderitems = $FileItems | Where-Object PsIsContainer 
    $Measurement = $FileItems | Measure-Object -property length -sum 

    $serverFileMeasurements += [PSCustomObject]@{ 
     Server = $hostname 
     Sum = $Measurement.Sum 
     Count = $Measurement.Count 
    } 
} 

# assuming there are only two servers: 
if ($serverFileMeasurements[0].Count -eq $serverFileMeasurements[1].Count -and 
    $serverFileMeasurements[0].Sum -eq $serverFileMeasurements[1].Sum) 
{ 
    Write-Host $true 
} 
else 
{ 
    Write-Host $false 
} 
+0

感謝上述建議,我會盡量讓你知道。關於比較部分,我想比較從server1到server2的位置d $ \ website的文件大小和數量。它就像我們做的一樣,右鍵單擊文件夾並查看文件和大小。 – Abhishek

+0

感謝但似乎錯誤: - 方法調用失敗,因爲[System.Management.Automation.PSObject]不包含 名爲'op_Addition'的方法。此外,由於我的文件夾之一是在NAS驅動器上,這是非常巨大的,所以腳本卡在那個位置。 – Abhishek

+0

你可能會採用代碼,因爲這個代碼無一例外地運行? –