如何从Powershell运行Powershell x86?

时间:2017-06-30 14:26:47

标签: powershell

我读到了这个答案:How to Open Powershell from Powershell

start powershell

这将打开基本的大分辨率PS实例。我如何打开PS(x86)?

7 个答案:

答案 0 :(得分:11)

Start-Process $Env:WINDIR\SysWOW64\WindowsPowerShell\v1.0\powershell.exe

答案 1 :(得分:6)

我建议Caleb's answer。但就个人而言,我在PowerShell profile中有一个函数,它在启动时加载并在运行x86时启动一个新的PowerShell x86 shell,因为这是非常常见的。

Function x86{
    Start-Process $($env:SystemRoot + "\syswow64\WindowsPowerShell\v1.0\powershell.exe")
}

注意:$env:windir$env:SystemRoot在此等效。也许不总是

答案 2 :(得分:1)

为了快速解决问题,我认为此解决方案可以帮助您

start 'C:\Users\(Your-username here)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell\Windows PowerShell (x86).lnk'

请注意,这只是一个快速修复。

以下代码将动态切换Powershell以在64位模式下运行

if ($env:PROCESSOR_ARCHITEW6432 -eq "AMD64") {
    write-warning "Y'arg Matey, we're off to 64-bit land....."
    if ($myInvocation.Line) {
        &"$env:WINDIR\sysnative\windowspowershell\v1.0\powershell.exe" -NonInteractive -NoProfile $myInvocation.Line
    }else{
        &"$env:WINDIR\sysnative\windowspowershell\v1.0\powershell.exe" -NonInteractive -NoProfile -file "$($myInvocation.InvocationName)" $args
    }
exit $lastexitcode
}
 
 
write-host "Main script body"

答案 3 :(得分:1)

您将需要x86 Powershell可执行文件的完整路径。如果从命令提示符(CMD.EXE)启动它,则使用

start "" "%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"

如果您是从PowerShell会话启动它,则使用

start "" "$env:SystemRoot\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"

Start-Process -FilePath "$env:SystemRoot\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"

答案 4 :(得分:1)

当我最后一次运行32位版本的PowerShell时,它是针对某些特定的东西(我没有需要访问的64位DLL版本,参考:View All Certificates On Smart Card)。在这种情况下,我只是使用-RunAs32 New-Job开关将所需代码作为后台作业执行。我最终使用的完整代码可以在引用的问题中找到,但一般概念是:

$RunAs32Bit = {

Do some stuff that requires 32-bit

}

#Run the code in 32bit mode if PowerShell isn't already running in 32bit mode
If($env:PROCESSOR_ARCHITECTURE -ne "x86"){
    Write-Warning "Non-32bit architecture detected, collecting certificate information in separate 32bit process."
    $Job = Start-Job $RunAs32Bit -RunAs32
    $SCStore = $Job | Wait-Job | Receive-Job
}Else{
    $SCStore = $RunAs32Bit.Invoke()
}

答案 5 :(得分:0)

下载PSExec

然后,在PowerShell中运行:PATH_TO_PSEXEC\psexec.exe -i powershell

答案 6 :(得分:0)

下面给出了两种情况下的核心结构,包括参数的传递

import win32gui
import win32api
import win32con

hld = win32gui.FindWindow (None, "UNTITLED") # Returns the handle of the window titled UNTITLED

if hld>0:

    win32gui.SetForegroundWindow(hld)
    win32api.keybd_event(0x46, 0, ) # F