我使用2个自定义函数来获取文件的估计文件传输时间。函数#1获取文件的文件大小,然后将该文件大小传递给函数#2,它通过将文件大小除以传输速度来获得文件传输总时间。
问题是 - 函数#1返回[String]:即。 12 GB,232.13 MB。 15 KB等...
函数#2期望[Double]作为参数数据类型。
这给了我一个价值转换错误:
无法转换价值" 4.13GB"输入" System.Double"。错误:"输入 字符串的格式不正确。"
令人困惑的部分是,如果我直接从命令行调用函数#2 - 我可以输入4.13GB并执行计算。你甚至可以用Powershell命令做简单的数学运算:即。 4.13GB / 3,它将返回结果。
以下是我的脚本示例:
$filesize = Get-FileSize ('myfile.txt') # This outputs "4.13GB"
$transfertime = Get-Transfertime -Size $filesize -Speed 5.5mb -Overhead 10
Powershell中的文件大小似乎是双倍的。如何将$ filesize变量转换为DOUBLE,以便函数#2接受值?
答案 0 :(得分:1)
'2.5kb'
与2.5kb
不同'2*3'
与2*3
不同。
您可以在PowerShell Language Specification.
如果要在将字符串转换为double之前评估乘数,请将其作为scriptblock传递给第二个函数:
$sc = [scriptblock]::Create('2.5kb')
。
这种方法的优点是正在解析字符串,因此您可以确保第二个函数可以将其调用:
[double]($sc.Invoke()[0])
。
如果您尝试将错误的字符串转换为scriptblock,则会收到错误消息:
[scriptblock]::Create('2.5 kb')
。