使用-gt 1MB不起作用,我的错误在哪里? Powershell脚本

时间:2013-12-16 14:04:35

标签: powershell powershell-v2.0 powershell-v3.0

我只是想构建一个小脚本,它显示文件夹内的所有文件(递归),大于x MB。它以某种方式显示了该文件夹中的所有文件。 我的剧本在这里,有人能找到错误吗?

Param(
  [string]$targetfolder
  [string]$sizeinmb
)

function getfilesbigger 
{
$colItems =  (get-childitem  "$targetfolder" -recurse | where {$_.length -gt $sizeinmbMB } | tee-object -variable allfiles | measure-object -property length -sum)
$allfiles | foreach-object {write-host $_.FullName ("{0:N2}" -f ($_.Length / 1MB)) "MB" -ForegroundColor "green" }
write-host "Collected all files bigger than $sizeinmb MB from folder $targetfolder " -foregroundcolor "darkgreen"
"Number of files: "+ $colItems.count + [Environment]::NewLine + "Size of all files "+"{0:N2}" -f ($colItems.sum / 1MB) + " MB" 
}

getfilesbigger

2 个答案:

答案 0 :(得分:2)

where {$_.length -gt $sizeinmbMB}

$sizeinmbMB$null - 尚未设置。我认为你试图将1传递给函数,然后将MB附加到它的末尾,但字符串连接不会这样。

实际大小传递给函数(不要将其设为“脚本”,将其作为可重用的函数,将其放在某处以备将来使用,如您自己的模块),作为当你调用它时,整数(如果使用1MB,它将自动展开)。

function Get-FilesBigger {
[cmdletbinding()]
Param(
    [ValidateScript({test-path -path $_ -pathtype container})]
    [string]$Path,
    [int]$MinFileSize
)
    $colItems = get-childitem  -path $Path -recurse | where-object {$_.length -gt $MinFileSize } | tee-object -variable allfiles | measure-object -property length -sum;
    $allfiles | foreach-object {write-Verbose $($_.FullName + ("{0:N2}" -f ($_.Length / 1MB)) + "MB") };
    "Collected all files bigger than " + $MinFileSize/1MB + "MB from folder $Path ";
    "Number of files: "+ $colItems.count + [Environment]::NewLine + "Size of all files "+"{0:N2}" -f ($colItems.sum / 1MB) + " MB" ;
}

Get-FilesBigger -Path YOURPATH -MinFileSize 1MB -Verbose;

答案 1 :(得分:1)

你的$ sizeinmbMB应该是$ sizeinmb * 1MB