我正在尝试获取文件夹中的文件数和文件夹数以及总大小。在某种程度上,我已经实现了这个目标,但是当我尝试检查数百万个文件夹/文件时,它们的大小可能在1 TB左右,但它的卡住可能会陷入无限的困境。
另外,我想比较两个位置大小和文件/文件夹的数量,并将输出作为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 :(得分: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
另外我想比较两个位置的大小和数量 文件/文件夹,并以bollen值的形式输出。
您要比较哪两个地点?您正在迭代主机名列表,并且不存储任何值...
编辑您的评论:
关于比较部分,我想比较它的大小和数量 从server1到server2的文件,用于位置d $ \ website。它就像 同样我们右键单击文件夹并查看文件和大小。
目前,您正在检索D$\logs
的项目,而不是D$\website
您可能需要更改此内容?!要比较结果,您必须先存储它们。我建议使用array
PSCustomObjects
。结构看起来像这样(样本输出):
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
}