У меня есть функция foo
, которую я хочу передать Argumentlist в следующем формате:
foo -ArgumentList "a=1", "b=hello", "c=15.00"
Мне нужно знать, является ли значение после каждого =
int
, string
или double (float)
.
Вот мой код:
Function foo {
Param(
[ValidateScript({ $_ -match ".*=.*" })]
[string[]]$ArgumentList
)
foreach ($Par in $ArgumentList) {
$Split = $Par -split "="
$ParamName = $Split[0]
$ParamValue = $Split[1]
if ($ParamValue -is [string]) {
"2049" + $ParamName + $ParamValue
}
elseif ($ParamValue -is [int]) {
"2050" + $ParamName + $ParamValue
}
elseif ($ParamValue -is [double]) {
"2051" + $ParamName + $ParamValue
}
else {
Write-Host "Not a string, int or float."
}
}
}
Однако значение всегда является строкой, что имеет смысл, поскольку оно читается из строки.
Можно ли как-нибудь привести его к правильному типу?
Я знаю, что мог бы сделать что-то подобное, однако это ненадежно, поскольку, например, 1
может быть всем
PS C:\Users\s> "1" -as [int]
1
PS C:\Users\s> "1" -as [double]
1
PS C:\Users\s> "1" -as [string]
1