我正在使用PowerShell更新XML文件中的一些值。该XML文件是导出的计划任务定义,我正在尝试更新Command节点的值,我想要更改要执行的程序路径的某些部分,并且我正在使用以下代码:
1-|[xml]$taskXmlDefinition = Get-Content -Path $pathXmlTaskDefinition
2-|$oldCommand = $taskXmlDefinition.Task.Actions.Exec.Command
3-|$programName = Split-Path -Leaf -Path $oldCommand
4-|$newCommand = Join-Path $newPath $programName
5-|$taskXmlDefinition.GetElementsByTagName("Command")[0].'#text' = $newCommand
6-|$newTaskXmlFilepath = (Join-Path $newPath $name)
7-|$taskXmlDefinition.Save($newTaskXmlFilepath)
使用那段代码时,我遇到了这个错误:
![enter image description here](https://istack.dev59.com/j7h1Z.webp)
5-|$taskXmlDefinition.GetElementsByTagName("Command")[0].'#text' = $newCommand.ToString()
或者
5-|[string]($taskXmlDefinition.GetElementsByTagName("Command")[0].'#text') = $newCommand
但是,我知道如果我询问($newCommand).GetType()
的结果将会是System.String
,并且不需要添加.ToString()
。
我将第5行改为以下代码:
5-|$taskXmlDefinition.GetElementsByTagName("Command")[0].InnerText = $newCommand
现在它正常工作。我不理解需要将转换为字符串显式化的差异或发生了什么。
有人能解释一下这些情况的区别吗?
$oldCommand
变量时那样直接访问命令字段呢? - Maximilian Burszley($taskXmlDefinition.GetElementsByTagName("Command")[0].'#text').GetType()
返回什么? - lit