XMLstarlet и управление задачами Windows

Попытка использовать 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> на "false".

используя XMLStarlet на winodws версии 1.5.0 И, на мой взгляд, это должно работать:

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 для окон?


person WebFooL    schedule 11.02.2014    source источник


Ответы (1)


В вашем xml файле используется пространство имен по умолчанию, которое вы должны объявить и использовать в xpath выражениях.

Объявите его с помощью переключателя -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
person Birei    schedule 11.02.2014
comment
Спасибо! Похоже, работает, но мне нужно передать его в новый .xml, но с этим я могу жить! - person WebFooL; 11.02.2014
comment
Вы можете использовать опцию -L или --inplace для изменения исходного файла. - person npostavs; 12.02.2014