Во-первых, Set-ExecutionPolicy Unrestriced
используется для каждого пользователя, а базис на битность (32-бит отличается от 64-битного).
Во-вторых, вы можете переопределить политику выполнения из команды line.
psxmlgen = subprocess.Popen([r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe',
'-ExecutionPolicy',
'Unrestricted',
'./buildxml.ps1',
arg1, arg2, arg3], cwd=os.getcwd())
result = psxmlgen.wait()
По-видимому, вы можете получить доступ к 64-битной PowerShell из 32-разрядной PowerShell с помощью этого пути (спасибо @eryksun в комментариях):
powershell64 = os.path.join(os.environ['SystemRoot'],
'SysNative' if platform.architecture()[0] == '32bit' else 'System32',
'WindowsPowerShell', 'v1.0', 'powershell.exe')