<?xml version="1.0" encoding="UTF-8"?>
<ScriptExport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.kaseya.com/vsa/2008/12/Scripting">
  <Procedure name="Meltdown/Spectre - Vulnerability Check (All Windows Versions)" treePres="3" id="916985430" folderId="767733124535406" treeFullPath="Common Procedures.Security">
    <Body description="">
      <Statement description="Install and run the SpeculationControl module" name="WriteFile" continueOnFail="false">
        <Parameter xsi:type="StringParameter" name="Path" value="#vAgentConfiguration.agentTempDir#\SpeculationControl.psd1"/>
        <Parameter xsi:type="StringParameter" name="ManagedFile" value="VSASharedFiles\Security\SpeculationControl.psd1"/>
        <Parameter xsi:type="BooleanParameter" name="DeleteAfter" value="False"/>
      </Statement>
      <Statement name="WriteFile" continueOnFail="false">
        <Parameter xsi:type="StringParameter" name="Path" value="#vAgentConfiguration.agentTempDir#\SpeculationControl.psm1"/>
        <Parameter xsi:type="StringParameter" name="ManagedFile" value="VSASharedFiles\Security\SpeculationControl.psm1"/>
        <Parameter xsi:type="BooleanParameter" name="DeleteAfter" value="False"/>
      </Statement>
      <If description="">
        <Condition name="Windows 32 or 64 Bit Check">
          <Parameter xsi:type="EnumParameter" name="Condition" value="Exists"/>
        </Condition>
        <Then>
          <Statement name="Execute Powershell Command (64-bit, Run As System)" continueOnFail="false">
            <Parameter xsi:type="StringParameter" name="Parameter1" value=""/>
            <Parameter xsi:type="StringParameter" name="Parameter2" value="Set-ExecutionPolicy RemoteSigned -Scope Currentuser; Import-Module #vAgentConfiguration.agentTempDir#\SpeculationControl.psd1; Get-SpeculationControlSettings | Out-File #vAgentConfiguration.agentTempDir#\meltdown.txt"/>
            <Parameter xsi:type="StringParameter" name="Parameter3" value="False"/>
          </Statement>
          <Statement name="Execute Powershell Command (64-bit, Run As System)" continueOnFail="false" osType="Windows">
            <Parameter xsi:type="StringParameter" name="Parameter1" value=""/>
            <Parameter xsi:type="StringParameter" name="Parameter2" value="('KVA:' + (Get-Content #vAgentConfiguration.agentTempDir#\meltdown.txt | Select-String -Pattern ('KVAShadowRequired              : True','KVAShadowWindowsSupportPresent : True','KVAShadowWindowsSupportEnabled : True','KVAShadowPcidEnabled           : True')).Matches.Count) | Out-File #vAgentConfiguration.agentTempDir#\meltdown.txt -Append"/>
            <Parameter xsi:type="StringParameter" name="Parameter3" value="False"/>
          </Statement>
          <Statement name="Execute Powershell Command (64-bit, Run As System)" continueOnFail="false" osType="Windows">
            <Parameter xsi:type="StringParameter" name="Parameter1" value=""/>
            <Parameter xsi:type="StringParameter" name="Parameter2" value="('BTI:' + (Get-Content #vAgentConfiguration.agentTempDir#\meltdown.txt | Select-String -Pattern ('BTIHardwarePresent             : True','BTIWindowsSupportPresent       : True','BTIWindowsSupportEnabled       : True','BTIDisabledBySystemPolicy      : False','BTIDisabledByNoHardwareSupport : False')).Matches.Count) | Out-File #vAgentConfiguration.agentTempDir#\meltdown.txt -Append"/>
            <Parameter xsi:type="StringParameter" name="Parameter3" value="False"/>
          </Statement>
        </Then>
        <Else>
          <Statement name="Execute Powershell Command (32-bit, Run As System)" continueOnFail="false">
            <Parameter xsi:type="StringParameter" name="Parameter1" value=""/>
            <Parameter xsi:type="StringParameter" name="Parameter2" value="Set-ExecutionPolicy RemoteSigned -Scope Currentuser; Import-Module #vAgentConfiguration.agentTempDir#\SpeculationControl.psd1; Get-SpeculationControlSettings | Out-File #vAgentConfiguration.agentTempDir#\meltdown.txt"/>
            <Parameter xsi:type="StringParameter" name="Parameter3" value="False"/>
          </Statement>
          <Statement name="Execute Powershell Command (32-bit, Run As System)" continueOnFail="false" osType="Windows">
            <Parameter xsi:type="StringParameter" name="Parameter1" value=""/>
            <Parameter xsi:type="StringParameter" name="Parameter2" value="('KVA:' + (Get-Content #vAgentConfiguration.agentTempDir#\meltdown.txt | Select-String -Pattern ('KVAShadowRequired              : True','KVAShadowWindowsSupportPresent : True','KVAShadowWindowsSupportEnabled : True','KVAShadowPcidEnabled           : True')).Matches.Count) | Out-File #vAgentConfiguration.agentTempDir#\meltdown.txt -Append"/>
            <Parameter xsi:type="StringParameter" name="Parameter3" value="False"/>
          </Statement>
          <Statement name="Execute Powershell Command (32-bit, Run As System)" continueOnFail="false" osType="Windows">
            <Parameter xsi:type="StringParameter" name="Parameter1" value=""/>
            <Parameter xsi:type="StringParameter" name="Parameter2" value="('BTI:' + (Get-Content #vAgentConfiguration.agentTempDir#\meltdown.txt | Select-String -Pattern ('BTIHardwarePresent             : True','BTIWindowsSupportPresent       : True','BTIWindowsSupportEnabled       : True','BTIDisabledBySystemPolicy      : False','BTIDisabledByNoHardwareSupport : False')).Matches.Count) | Out-File #vAgentConfiguration.agentTempDir#\meltdown.txt -Append"/>
            <Parameter xsi:type="StringParameter" name="Parameter3" value="False"/>
          </Statement>
        </Else>
      </If>
      <Statement description="Upload file and get Variable from Powershell" name="GetFile" continueOnFail="false">
        <Parameter xsi:type="StringParameter" name="RemoteFileName" value="#vAgentConfiguration.agentTempDir#\meltdown.txt"/>
        <Parameter xsi:type="StringParameter" name="KServerFileName" value="meltdown.txt"/>
        <Parameter xsi:type="EnumParameter" name="Action" value="OverwriteNoAlert"/>
      </Statement>
      <Statement name="GetVariable" continueOnFail="false">
        <Parameter xsi:type="EnumParameter" name="VariableType" value="FileContent"/>
        <Parameter xsi:type="StringParameter" name="SourceContent" value="#vAgentConfiguration.agentTempDir#\meltdown.txt"/>
        <Parameter xsi:type="StringParameter" name="VariableName" value="meltdown"/>
      </Statement>
      <Statement description="Update Log" name="WriteScriptLogEntry" continueOnFail="false">
        <Parameter xsi:type="StringParameter" name="Comment" value="#meltdown#"/>
      </Statement>
      <Statement description="Cleanup" name="DeleteFile" continueOnFail="false" osType="Windows">
        <Parameter xsi:type="StringParameter" name="Path" value="#vAgentConfiguration.agentTempDir#\meltdown.txt"/>
      </Statement>
      <Statement name="DeleteFile" continueOnFail="false">
        <Parameter xsi:type="StringParameter" name="Path" value="#vAgentConfiguration.agentTempDir#\SpeculationControl.psd1"/>
      </Statement>
      <Statement name="DeleteFile" continueOnFail="false">
        <Parameter xsi:type="StringParameter" name="Path" value="#vAgentConfiguration.agentTempDir#\SpeculationControl.psm1"/>
      </Statement>
      <If description="Update Custom Field &quot;Meltdown&quot;">
        <Condition name="CheckVariable">
          <Parameter xsi:type="StringParameter" name="VariableName" value="#meltdown#"/>
          <Parameter xsi:type="EnumParameter" name="Condition" value="Contains"/>
          <Parameter xsi:type="StringParameter" name="Value" value="KVA:4"/>
        </Condition>
        <Then>
          <Statement name="UpdateSystemInfo" continueOnFail="false">
            <Parameter xsi:type="StringParameter" name="ColumnName" value="OS Patched for Meltdown"/>
            <Parameter xsi:type="StringParameter" name="Value" value="yes"/>
          </Statement>
        </Then>
        <Else>
          <Statement name="UpdateSystemInfo" continueOnFail="false">
            <Parameter xsi:type="StringParameter" name="ColumnName" value="OS Patched for Meltdown"/>
            <Parameter xsi:type="StringParameter" name="Value" value="no"/>
          </Statement>
        </Else>
      </If>
      <If description="">
        <Condition name="CheckVariable">
          <Parameter xsi:type="StringParameter" name="VariableName" value="#meltdown#"/>
          <Parameter xsi:type="EnumParameter" name="Condition" value="Contains"/>
          <Parameter xsi:type="StringParameter" name="Value" value="BTI:5"/>
        </Condition>
        <Then>
          <Statement name="UpdateSystemInfo" continueOnFail="false">
            <Parameter xsi:type="StringParameter" name="ColumnName" value="Hardware Patched for Meltdown"/>
            <Parameter xsi:type="StringParameter" name="Value" value="yes"/>
          </Statement>
        </Then>
        <Else>
          <Statement name="UpdateSystemInfo" continueOnFail="false">
            <Parameter xsi:type="StringParameter" name="ColumnName" value="Hardware Patched for Meltdown"/>
            <Parameter xsi:type="StringParameter" name="Value" value="no"/>
          </Statement>
        </Else>
      </If>
    </Body>
  </Procedure>
</ScriptExport>