PowerShell XML:切换与如果
PowerShell XML: Switch vs if
通过 PowerShell 使用 XML 文件执行简单的 find/replace。我在尝试替换节点中的文本时出现错误,但仅在使用开关时出现...使用通用 if 语句可以完美运行。
代码这样开始:
$oldString = 'AAAA'
$newString = 'BBBB'
[xml]$xml = Get-Content $myXMLFile
$list = Select-Xml -Xml $xml -XPath '//add'
$list|Foreach-Object {
[string]$key = $_.node.key
[string]$value = $_.node.value
普通的旧 IF 版本可以正常工作...
if($value -eq $oldString)
{
$_.node.value = $newString
}
}|Set-Content $myXMLFile
但是用 switch 语句替换 IF 会引发错误。
switch($value)
{
$oldString{$_.node.value = $newString}
}
}|Set-Content $myXMLFile
Property 'value' cannot be found on this object; make sure it exists and is settable.
+ $oldString{$_.node.value = $newString}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
我有很多节点数据要替换,如果我可以摆脱困境,我宁愿不写一堆 IF。
$_
的上下文在 switch 块内部和外部不同。
开关块内 $_
是 $value
而不是原始节点了。
通过 PowerShell 使用 XML 文件执行简单的 find/replace。我在尝试替换节点中的文本时出现错误,但仅在使用开关时出现...使用通用 if 语句可以完美运行。
代码这样开始:
$oldString = 'AAAA'
$newString = 'BBBB'
[xml]$xml = Get-Content $myXMLFile
$list = Select-Xml -Xml $xml -XPath '//add'
$list|Foreach-Object {
[string]$key = $_.node.key
[string]$value = $_.node.value
普通的旧 IF 版本可以正常工作...
if($value -eq $oldString)
{
$_.node.value = $newString
}
}|Set-Content $myXMLFile
但是用 switch 语句替换 IF 会引发错误。
switch($value)
{
$oldString{$_.node.value = $newString}
}
}|Set-Content $myXMLFile
Property 'value' cannot be found on this object; make sure it exists and is settable.
+ $oldString{$_.node.value = $newString}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
我有很多节点数据要替换,如果我可以摆脱困境,我宁愿不写一堆 IF。
$_
的上下文在 switch 块内部和外部不同。
开关块内 $_
是 $value
而不是原始节点了。