2016-05-31 3 views
0

フォルダー内のファイル数とフォルダー数を合計サイズとともに取得しようとしています。ある程度、私はその目標を達成しましたが、何百万ものフォルダやファイルをチェックしようとしていて、サイズが約1 TBになることがありました。2台のサーバーのフォルダーとファイルを検証/比較するPowerShellスクリプト

また、2つの場所のサイズとファイル/フォルダの数を比較し、出力をbollen値として取得したいとします。 - trueサイズと数字が一致する場合は、false

下のスクリプトは私が試したものです。ある人がこの要件を私に助けてくれますか?あなたはまた、二回長さを計算

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

、これらのいずれかを削除します。

$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コマンドレットを呼び出すとWhere-Objectコマンドレットを使用してフォルダをフィルタリングするためにそれを使用することです:どの2箇所あなた

$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.

比較したいですか?あなたはおそらくD$\websiteD$\logsのためのアイテムをいない取得され、現在

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.

:あなたは...あなたのコメントへ

編集をホスト名のリストを反復処理され、任意の値を格納しませんこれを変えなければなりませんか!結果を比較するには、まずそれらを保存する必要があります。私はarrayPSCustomObjectsをお勧めします。

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

私は試してみて、あなたが知っているだろう上記の提案をありがとう構造は、この(サンプル出力)のように見えます。比較部分については、私は場所d $ \ websiteのserver1からserver2までのファイルのサイズと数を比較したいと思います。そのように私たちはフォルダを右クリックし、ファイルとサイズを表示します。 – Abhishek

+0

ありがとうございます。 - [System.Management.Automation.PSObject]に というメソッドが含まれていないため、メソッドの呼び出しに失敗しました。 'op_Addition'という名前のメソッドです。また、私のフォルダの1つがNASドライブ上にあるので、スクリプトがその位置に止まってしまいます。 – Abhishek

+0

これは例外なく実行されるため、おそらくコードを採用していますか? –

関連する問題