我有以下示例代码,用句点(。)替换所有逗号值(,):
$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
输入after:System.String
我想保留PSCustomObject
类型,而不是将其转换为字符串。关于如何实现这一目标的任何想法除了:
$foo.Num2.Replace(",",".")
我不想使用替换语句列出每个属性,因为我的实际代码在此对象中具有许多属性。
PowerShell比较运算符(包括替换运算符)将第一个操作数隐式转换为与第二个操作数匹配的类型。在您的情况下,将自定义对象转换为自身的字符串表示形式。
要替换对象属性中的某些内容:枚举属性并对实际属性执行替换操作,而不是对象作为整体执行。
$foo.PSObject.Properties | ForEach-Object {
if ($_.Value -is [string]) {
$_.Value = $_.Value.Replace(',', '.')
}
}