在Powershell中将字符串转换为数字

converting string to number in powershell

我正在尝试将字符串转换为小数点后两位的值

我有一个脚本,其中有一行代码是

(get-mailboxdatabase xxx -status).databasesize

这个returns大小差不多 1.008 GB(1,082,195,968 字节)

我希望能够将其转换为数字 (1.008),但不知道该怎么做。

我知道 ToGB(),但只有当 运行从 EMS 获取脚本时才有效。

我需要能够 运行 Powershell 中的脚本,而不是 EMS,因为脚本会做其他事情。

如何将值转换为数字?

TIA

安迪

如果您正在使用隐式远程处理(听起来像您在使用),那将是一个 [字符串],因此您需要使用字符串方法。

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

试试这个:

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

这个很简单,做一个cast,除以1GB就可以了。

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

或者你的情况

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

您可以使用标准 .NET 框架类型和转换将数字转换为各种数字类型。例如:

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

仅从输入中提取字符串的那部分是一个单独的问题,很难从您的问题中判断出是哪部分给您带来了麻烦。要仅获取数字,您可以使用如下内容:

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

或者您可以使用正则表达式。这完全取决于您的尺码的可变性。