【问题标题】:Update XML ENTITY with PowerShell (Windows)使用 PowerShell (Windows) 更新 XML ENTITY
【发布时间】:2020-05-13 22:31:01
【问题描述】:

我有一个 PowerShell 脚本,用于查找特定文件和文件夹以及 XML 文件中包含的文件和文件夹 URL(写入 PowerShell 中的变量)。我希望能够在当前用户的目录下查找文件,但是xml文件不能包含动态变量,所以不能只做下面的操作

<URL>C:\Users\$Env:UserName\SomeFile.*</URL>

所以我所做的就是声明一个 XML 实体:

<!DOCTYPE config [
  <!ENTITY user "UserName!">
]>

但是,我不知道如何从 PowerShell 引用这个实体来更新它。所以我不能这样做:

$Config.Config.UserName = $Env:UserName

一旦将 XML 文件写入 PowerShell 变量,是否仍然可以访问实体。 IE。写入这样的变量:

[xml]$Config = Get-Content ./SomeXML_File.xml

更新——这是我正在查看的示例。我想使用 PowerShell 替换“用户名!”与系统的当前用户。所以“&user;”当脚本从 xml 文件中获取数据时,将被读取为当前系统用户。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE config[
  <!ENTITY user "UserName!">
]>
<Configuration>
     <Files>
          <URL>C:\Users\&user;\Desktop\NewFolder</URL>
     </Files>
</Configuration>
'''

【问题讨论】:

  • 以上链接对您有帮助吗?如果不是,那么在使用.SelectNodes 方法时会出现什么错误或问题?
  • 我收到重载定义错误。我将使用我的 xml 文档示例更新我的问题,也许这会有所帮助。
  • 就像实体不存在一样,但实际的文件结构替换了“&user;”使用“用户名!”的声明文本......所以如果我可以更新“用户名!”那么我认为它会起作用....而且我宁愿不使用 get-content -replace() 解决方法。

标签: xml powershell


【解决方案1】:

我知道不应该在 xml 上使用字符串替换,但这似乎是让它工作的唯一方法:

以单个字符串的形式获取 XML 的内容

$xmlText = Get-Content -Path 'D:\SomeFile.xml' -Raw

对于演示,我使用的是 Here-String

$xmlText = @"
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE config[
  <!ENTITY user "UserName!">
]>
<Configuration>
     <Files>
          <URL>C:\Users\&user;\Desktop\NewFolder</URL>
     </Files>
</Configuration>
"@

# create a new Entity tag
$newEntity = '<!ENTITY user "{0}">' -f $env:USERNAME

# replace the current XML Entity with the new one
$xmlText = $xmlText -replace '<!ENTITY[^<>]*>', $newEntity

# load the xml from string to have it resolve the ENTITY username
$xml = [xml]$xmlText

# save the updated XML. Use an absolute path here
$xml.Save("D:\SomeFile.xml")

【讨论】:

  • 谢谢大家,我将不得不放弃这种方法,因为它看起来不像我想做的那样,我想做的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 2012-08-13
  • 2022-01-12
  • 2019-09-26
  • 1970-01-01
相关资源
最近更新 更多