【问题标题】:Echo raw XML into file with PowerShell - Quotes being removed使用 PowerShell 将原始 XML 回显到文件中 - 引号被删除
【发布时间】:2014-10-11 12:02:30
【问题描述】:

我正在尝试使用以下命令通过 powershell 创建 Windows 计划任务 (XML) 文件:

$userName = $ENV:USERNAME
$compName = $ENV:COMPUTERNAME

echo "<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2014-10-09T14:28:16</Date>
    <Author>$userName</Author>
  </RegistrationInfo>
  <Triggers>


    <TimeTrigger>
      <Repetition>
        <Interval>PT2M</Interval>
        <StopAtDurationEnd>false</StopAtDurationEnd>
      </Repetition>
      <StartBoundary>2014-10-09T14:28:00</StartBoundary>
      <Enabled>true</Enabled>
    </TimeTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>$compName\$userName</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>false</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>true</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\Windows\System32\WScript.exe</Command>
      <Arguments>//Nologo //B C:\Microsoft\Windows\Desktop\Initialize.vbs</Arguments>
    </Exec>
  </Actions>
</Task>" >> dog.xml 

但是输出文件丢失了所有的引号,如下所示:

    <?xml version=
1.0 encoding=UTF-16?>
<Task version=1.2 xmlns=http://schemas.microsoft.com/windows/2004/02/mit/task>
  <RegistrationInfo>
    <Date>2014-10-09T14:28:16</Date>
    <Author>Xaptoxa</Author>
  </RegistrationInfo>
  <Triggers>
    <TimeTrigger>
      <Repetition>
        <Interval>PT2M</Interval>
        <StopAtDurationEnd>false</StopAtDurationEnd>
      </Repetition>
      <StartBoundary>2014-10-09T14:28:00</StartBoundary>
      <Enabled>true</Enabled>
    </TimeTrigger>
  </Triggers>
  <Principals>
    <Principal id=Author>
      <UserId>GIBSON\Xaptoxa</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>false</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>true</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context=Author>
    <Exec>
      <Command>C:\Windows\System32\WScript.exe</Command>
      <Arguments>//Nologo //B C:\Microsoft\Windows\Desktop\Initialize.vbs</Arguments>
    </Exec>
  </Actions>
</Task>

我也尝试过使用单引号进行嵌套,但这会导致变量失败。除了嵌套,我还尝试了各种 Powershell 技术,例如 Out-File CmdLet 等。

【问题讨论】:

    标签: windows powershell system-administration


    【解决方案1】:

    您可以改用此处的字符串。这对我有用(为了节省空间而删除了部分 XML):

    $userName = $ENV:USERNAME
    $compName = $ENV:COMPUTERNAME
    
    echo @"
    <?xml version="1.0" encoding="UTF-16"?>
    <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
      <RegistrationInfo>
        <Date>2014-10-09T14:28:16</Date>
        <Author>$userName</Author>
      </RegistrationInfo>
      <Triggers>
      ...
      <Actions Context="Author">
        <Exec>
          <Command>C:\Windows\System32\WScript.exe</Command>
          <Arguments>//Nologo //B C:\Microsoft\Windows\Desktop\Initialize.vbs</Arguments>
        </Exec>
      </Actions>
    </Task>
    "@ >> dog.xml 
    

    【讨论】:

      【解决方案2】:

      或者,您可以转义所有引号,以便正确传递它们。 Control +H - 在记事本中全部替换,或者使用正则表达式 -replace '"','`"' 在每个引号前添加一个反引号。

      echo "<?xml version=`"1.0`" encoding=`"UTF-16`"?>
      <Task version=`"1.2`" xmlns=`"http://schemas.microsoft.com/windows/2004/02/mit/task`">
        <RegistrationInfo>
          <Date>2014-10-09T14:28:16</Date>
          <Author>$userName</Author>
        </RegistrationInfo>
        <Triggers>
      
      
          <TimeTrigger>
            <Repetition>
              <Interval>PT2M</Interval>
              <StopAtDurationEnd>false</StopAtDurationEnd>
            </Repetition>
            <StartBoundary>2014-10-09T14:28:00</StartBoundary>
            <Enabled>true</Enabled>
          </TimeTrigger>
        </Triggers>
        <Principals>
          <Principal id=`"Author`">
            <UserId>$compName\$userName</UserId>
            <LogonType>InteractiveToken</LogonType>
            <RunLevel>LeastPrivilege</RunLevel>
          </Principal>
        </Principals>
        <Settings>
          <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
          <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
          <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
          <AllowHardTerminate>true</AllowHardTerminate>
          <StartWhenAvailable>false</StartWhenAvailable>
          <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
          <IdleSettings>
            <StopOnIdleEnd>false</StopOnIdleEnd>
            <RestartOnIdle>false</RestartOnIdle>
          </IdleSettings>
          <AllowStartOnDemand>true</AllowStartOnDemand>
          <Enabled>true</Enabled>
          <Hidden>false</Hidden>
          <RunOnlyIfIdle>false</RunOnlyIfIdle>
          <WakeToRun>true</WakeToRun>
          <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
          <Priority>7</Priority>
        </Settings>
        <Actions Context=`"Author`">
          <Exec>
            <Command>C:\Windows\System32\WScript.exe</Command>
            <Arguments>//Nologo //B C:\Microsoft\Windows\Desktop\Initialize.vbs</Arguments>
          </Exec>
        </Actions>
      </Task>" >> c:\dog.xml 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-18
        • 1970-01-01
        • 2010-11-11
        • 2021-03-17
        • 1970-01-01
        • 1970-01-01
        • 2018-06-25
        • 2020-06-25
        相关资源
        最近更新 更多