我有以下示例代码将所有逗号值(,)替换为句点(。):
$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(",",".")
我不希望使用替换语句列出每个属性,因为我的真实代码在该对象中具有许多属性。
答案 0 :(得分:3)
PowerShell比较运算符(包括替换运算符)将第一个操作数隐式转换为与第二个操作数匹配的类型。在您的情况下,这会将自定义对象转换为自身的字符串表示形式。
要替换对象属性中的某些内容,请执行以下操作:枚举属性并对实际属性(而不是整个对象)执行替换操作。
$foo.PSObject.Properties | ForEach-Object {
if ($_.Value -is [string]) {
$_.Value = $_.Value.Replace(',', '.')
}
}