确定当前的PowerShell进程是否为32

在x64位操作系统平台上运行PowerShell脚本时,如何在脚本中确定脚本运行的PowerShell版本(32位或64位)?

背景
默认情况下,32位和64位版本的PowerShell都安装在64位平台(如Windows Server 2008)上。这可能会导致运行PowerShell脚本时遇到困难,该脚本必须针对特定体系结构(即使用64位对于SharePoint 2010的脚本,为了使用64位库)。

相关问题:

  • 针对PowerShell的x64与x86变异编程的最佳方法是什么? 这个问题涉及针对32位和64位体系结构运行的代码。 我的问题涉及您希望确保脚本仅运行在正确版本上的情况。

  • 如果你的shell在.NET 4.0(PowerShell 3.0)上运行:

    PS> [Environment]::Is64BitProcess
    True
    

    要在您的脚本中确定您使用的是什么版本的PowerShell,可以使用以下帮助函数(礼貌JaredPar对相关问题的回答):

    # Is this a Wow64 powershell host
    function Test-Wow64() {
        return (Test-Win32) -and (test-path env:PROCESSOR_ARCHITEW6432)
    }
    
    # Is this a 64 bit process
    function Test-Win64() {
        return [IntPtr]::size -eq 8
    }
    
    # Is this a 32 bit process
    function Test-Win32() {
        return [IntPtr]::size -eq 4
    }
    

    上述函数利用了System.IntPtr的大小是特定于平台的事实。 它在32位机器上是4个字节,在64位机器上是8个字节。

    请注意,值得注意的是,32位和64位版本的Powershell的位置有点误导。 32位PowerShell位于C:WindowsSysWOW64WindowsPowerShellv1.0powershell.exe ,而64位PowerShell位于C:WindowsSystem32WindowsPowerShellv1.0powershell.exe ,礼貌这篇文章。


    你也可以使用它。 我在PowerShell版本2.0和4.0上进行了测试。

    $Arch = (Get-Process -Id $PID).StartInfo.EnvironmentVariables["PROCESSOR_ARCHITECTURE"];
    if ($Arch -eq 'x86') {
        Write-Host -Object 'Running 32-bit PowerShell';
    }
    elseif ($Arch -eq 'amd64') {
        Write-Host -Object 'Running 64-bit PowerShell';
    }
    

    $Arch的值将是x86amd64

    这样做很酷的事情是,除了本地( $PID )外,您还可以指定不同的进程ID,以确定不同PowerShell进程的体系结构。

    链接地址: http://www.djcxy.com/p/4949.html

    上一篇: Determine if current PowerShell Process is 32

    下一篇: How do you comment out code in PowerShell?