2

尝试使用 xmlstarlet 修改导出的 windows 任务

示例任务:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2014-02-10T11:57:03</Date>
    <Author>client</Author>
  </RegistrationInfo>
  <Triggers>
    <LogonTrigger>
      <StartBoundary>2014-02-10T11:57:00</StartBoundary>
      <Enabled>true</Enabled>
    </LogonTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>DOMAIN\client</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P7D</ExecutionTimeLimit>
    <Priority>7</Priority>
    <RestartOnFailure>
      <Interval>PT1M</Interval>
      <Count>10</Count>
    </RestartOnFailure>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>"script"</Command>
    </Exec>
  </Actions>
</Task>

我想改变<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries><StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>“假”。

在 winodws 1.5.0 版上使用 XMLStarlet 在我看来这应该可行:

xml ed -u "Task/Settings/DisallowStartIfOnBatteries" -v false sampletask.xml

但它给了我:没有一个 XPath 匹配;要匹配默认命名空间中的节点,请使用 ' ' 作为前缀(参见手册中的第 5.1 节)。例如,使用 / :node 而不是 /node

期待 5.1 下的男人,但我仍然没有变得更聪明:-( 已测试

xml ed -u -N k=http://schemas.microsoft.com/windows/2004/02/mit/task" /k:Task/Settings/DisallowStartIfOnBatteries" -v false IneraLogon.xml

但这给了我

failed to load external entity "k=http://schemas.microsoft.com/windows/2004/02/mit/task"

验证和http://schemas.microsoft.com/windows/2004/02/mit/task看起来已经关闭。

剂量有人对如何继续前进有建议吗?

我应该过去尝试使用 sed for windows 代替吗?

4

1 回答 1

3

您的文件使用您必须在表达式xml中声明和使用的默认命名空间。xpath

用 switch 声明它-N(前缀名称不介意):

-N n="http://schemas.microsoft.com/windows/2004/02/mit/task"

并将其包含在xpath表达式的所有元素中:

-u "n:Task/n:Settings/n:DisallowStartIfOnBatteries"

它得到:

xmlstarlet ed \
  -N n="http://schemas.microsoft.com/windows/2004/02/mit/task" \
  -u "n:Task/n:Settings/n:DisallowStartIfOnBatteries" \
  -v false \
sampletask.xml
于 2014-02-11T11:18:30.817 回答