我的脚本找到大于x的文件对我和我的powershell 3.0很好。但是在我们的服务器上我们只有PowerShell 2.0而且我无法正常工作。
错误如下:
Bad Argument to Operator '-gt' Could not compare "3841" to "10MB". Error cannot convert "10MB" to type "System.Int64" Error: "Input string was not in a correct format."".
我的脚本在这里,我试图将10MB的值更改为“10”但是我认为它与kb相比。那不是我想要的!有什么想法吗?
Param(
[ValidateScript({test-path -path $_ -pathtype container})]
[string]$targetfolder,
[string]$size
)
function getfilesbigger
{
$colItems = (get-childitem "$targetfolder" -recurse | where {$_.length -gt "$size" } | 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 $size from folder $targetfolder " -foregroundcolor "darkgreen"
"Number of files: "+ $colItems.count + [Environment]::NewLine + "Size of all files "+"{0:N2}" -f ($colItems.sum / 1MB) + " MB"
}
getfilesbigger
答案 0 :(得分:2)
原因是size
已明确定义为字符串:
Param( ...
[string]$size)
因此,Powershell不会像往常一样自动将10mb转换为整数10485760,而是将其用作字符串。对于工作版本,只需像这样使用int,
Param(
[ValidateScript({test-path -path $_ -pathtype container})]
[string]$targetfolder,
[int]$size
)
修改强>
它适用于我的2.0环境。尝试添加.GetType()
电话,看看发生了什么。像这样,
function getfilesbigger
{
$size.gettype()
$colItems = ...
gettype调用的结果应该是
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
你得到了什么?