使用PowerShell将原始XML回传到文件中 - 删除引号

时间:2014-10-11 12:02:31

标签: windows powershell system-administration

我正在尝试通过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等。

2 个答案:

答案 0 :(得分:1)

您可以使用here字符串代替。这对我有用(为节省空间而删除了部分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 

答案 1 :(得分:0)

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

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