2017-01-23 15 views
2

2つのカスタム関数を使用して、ファイルの推定ファイル転送時間を取得しています。関数#1はファイルのファイルサイズを取得し、そのファイルサイズを関数#2に渡します。関数#2は、ファイルサイズを転送速度で割った合計ファイル転送時間を取得します。Powershellでファイルサイズ(文字列)をdoubleに変換するには?

問題は次のとおりです。 - 関数1は[String]を返します。 12 GB、232.13 MB 15KBなど...

ファンクション#2では、パラメータデータ型として[Double]が必要です。

これは私に値変換エラーを与える:一部を混乱

Cannot convert value "4.13GB" to type "System.Double". Error: "Input string was not in a correct format."

は、私はコマンドラインから直接ファンクション#2を呼び出した場合ということです - 私は4.13ギガバイトで入力することができ、それは計算を実行します。あなたはPowershellコマンドから簡単な数学を行うことさえできます。 4.13GB/3になり、結果が返されます。ここで

は私のスクリプトのサンプルです:PowerShellで

$filesize = Get-FileSize ('myfile.txt') # This outputs "4.13GB" 
$transfertime = Get-Transfertime -Size $filesize -Speed 5.5mb -Overhead 10 

ファイルサイズDOUBLEのようです。関数#2が値を受け入れるように、$ filesize変数をDOUBLEに変換するにはどうすればよいですか?

+0

こんにちは、 '([double] 4.13GB + 0).GetType()。Name'は' double'を返します。 – sodawillow

+0

4.13GBをSTRINGにすると、([double] "4.13GB" + 0).GetType()。名前 – tresstylez

+5

Invoke-Expression: '(iex" 4.13GB ")。gettype()' – wOxxOm

答えて

1

'2.5kb'は、2.5kbとは異なります。同じ方法'2*3'は、2*3とは異なります。 $sc = [scriptblock]::Create('2.5kb'): あなたは、乗算器が倍増する文字列をキャストする前に評価されるようにしたい場合は、第二の機能へのスクリプトブロックとして渡しPowerShell Language Specification.

で数値乗算器について読むことができます。 この方法の利点は、文字列が解析されているため、2番目の関数がそれをエボリューションできることを確認できます: [double]($sc.Invoke()[0])。 不正な文字列をscriptblockに変換しようとすると、エラー: [scriptblock]::Create('2.5 kb')が表示されます。

関連する問題