在保留客户类型的同时,在PSCustomObject的属性中替换“,”

时间:2019-02-17 22:23:00

标签: powershell

我有以下示例代码将所有逗号值(,)替换为句点(。):

$foo = [PSCustomObject]@{
    Num1 = "0.11"
    Num2 = "0,12"
}

Write-Host "Type before:" $foo.GetType().FullName

$foo = $foo -replace(",",".")

Write-Host "Type after:" $foo.GetType().FullName

它产生以下输出:

  

在此之前输入:System.Management.Automation.PSCustomObject

     

在此之后键入:System.String

我想保留PSCustomObject类型,而不要将其转换为字符串。除了:

$foo.Num2.Replace(",",".")

我不希望使用替换语句列出每个属性,因为我的真实代码在该对象中具有许多属性。

1 个答案:

答案 0 :(得分:3)

PowerShell比较运算符(包括替换运算符)将第一个操作数隐式转换为与第二个操作数匹配的类型。在您的情况下,这会将自定义对象转换为自身的字符串表示形式。

要替换对象属性中的某些内容,请执行以下操作:枚举属性并对实际属性(而不是整个对象)执行替换操作。

$foo.PSObject.Properties | ForEach-Object {
    if ($_.Value -is [string]) {
        $_.Value = $_.Value.Replace(',', '.')
    }
}