2015-02-24 57 views
1

我想一個字符串轉換爲2的小數位值將字符串轉換爲數字在PowerShell中

我有一個具有一行代碼是

(get-mailboxdatabase xxx -status).databasesize 

這將返回大小的東西的腳本像 1.008 GB(1,082,195,968字節)

我希望能夠將其轉換爲數字(1.008),並且無法解決如何執行此操作。

我知道ToGB(),但只有在從EMS運行腳本時纔有效。

我需要能夠在Powershell中運行腳本,而不是EMS,因爲腳本執行其他操作。

如何將該值轉換爲數字?

TIA

安迪

回答

1

如果您使用隱式遠程處理(這聽起來像你),這將是一個[字符串],所以你需要使用字符串的方法。

'1.008 GB (1,082,195,968 bytes)' -replace '^([0-9.]+).+','$1' 
1.008 
+0

完美地工作,非常感謝,我花了大部分時間來尋找。是否有一個網站解釋了在更換之後正在進行的工作? – 2015-02-24 16:17:02

+0

試試'help about_comparison_Operators'和'help about_Regular_Expressions'。 – 2015-02-24 18:49:30

+0

我怎麼能改變這個,所以它顯示字節值(1,082,195,968字節)作爲一個數字(1082195968) – 2015-02-25 08:37:56

0

試試這個:

$val= (get-mailboxdatabase xxx -status).databasesize 
[decimal]([regex]::Match($val, '(^.+)GB')).groups[1].value 
1

這是很容易的,只是做一個演員和擁有1GB劃分。

PS C:\> [int]"1082195968"/1GB 
1,00787353515625 

enter image description here

或者在你的情況

([int](get-mailboxdatabase xxx -status).databasesize)/1GB 
1

可以數字轉換成使用標準的.NET Framework類型和轉換不同的號碼類型。例如:

> $var = [decimal]::Parse("1.008") 
> $var.GetType().Name 
Decimal 

提取從輸入字符串的只是部分,是一個單獨的問題,而且很難從你的問題這是給你的麻煩告訴。要得到這個數字,你可以使用類似這樣的東西:

$input = (get-mailboxdatabase xxx -status).databasesize 
$strSize = $input.Split(' ')[0] 

或者你可以使用正則表達式。這一切都取決於你的大小是多麼可變。