Skip to content Skip to sidebar Skip to footer

What the programmatic difference of Powershell x86 vs x64?

There are a number of explanations as to why people think you should use Powershell (PS) x86 vs x64 typically stuff like larger address space, blah de blah, but there is never mention of  real programmatic issues.

The #1 reason to use the Powershell x86 vs x64 is to get the access the proper Windows Registry hive either x86 or x64. So if you are have x86 OS, use PS x86 on x64 OS use x64.
[1]


Let's take for example getting the Windows Install date from the registry with this path
HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion we are going to get the Installdate value from here.

This is run on Windows x32 failed

  1  2  
  Windows Registry Install Date using Powershell (32 bit)  Wednesday, December 31, 1969 7:00:00 PM  

This is run on Windows x64 worked

  1  2  
  Windows Registry Install Date using Powershell (64 bit)  Tuesday, February 16, 2010 1:09:20 AM  

This is the Powershell for the above, from line 90 and after

    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   45   46   47   48   49   50   51   52   53   54   55   56   57   58   59   60   61   62   63   64   65   66   67   68   69   70   71   72   73   74   75   76   77   78   79   80   81   82   83   84   85   86   87   88   89   90   91   92   93   94   95   96   97   98   99  100  101  102  103  104  105  106  
  #requires -version 2.0    # -----------------------------------------------------------------------------  # Script: Get-PowershellInfo+Architecture.ps1  # Version: 1.2017.04.13  # Author: Mark Pahulje  # URL   : metadataconsulting.ca  # Date: 13-Apr-2017  # Keywords: Powershell Architecture, PS Info  # Comments:  #  # "Those who forget to script are doomed to repeat their work."  #  #  ****************************************************************  #  * DO NOT USE IN A PRODUCTION ENVIRONMENT UNTIL YOU HAVE TESTED *  #  * THOROUGHLY IN A LAB ENVIRONMENT. USE AT YOUR OWN RISK.  IF   *  #  * YOU DO NOT UNDERSTAND WHAT THIS SCRIPT DOES OR HOW IT WORKS, *  #  * DO NOT USE IT OUTSIDE OF A SECURE, TEST SETTING.             *  #  ****************************************************************  # -----------------------------------------------------------------------------     Function Get-PowershellInfo+Architecture {     <#  .SYNOPSIS  Write out an improved pseudo psversiontable of PS Version, CLR & Build version, and Architecture (32 or 64 bit)  .DESCRIPTION  Write out an improved pseudo psversiontable of PS Version, CLR & Build version, and Architecture (32 or 64 bit)  .MUNCHIES   This script also shows a test for Windows Install Date using Registry, to prove that if this runs on (32 or 64 bit) it will    fail on unsupport CPU Architecture Types  .EXAMPLE  PS C:\> Get-PowershellInfo+Architecture      Name            : Version  ----            : -------  PS Version      : 3.0  PS Architecture : 32 bit  CLR Version     : 4.0.30319.42000  Build Version   : 6.2.9200.16481    Return registry usage information for the local host.    .NOTES  NAME        :  Get-PowershellInfo+Architecture  VERSION     :  1.2017.04.13    LAST UPDATED:  13-Apr-2017  AUTHOR      :  Mark Pahulje  .LINK  http://metadataconsulting.blogspot.ca/2017/04/How-to-get-the-most-accurate-Windows-Install-Date-time-zone-adjusted.html  .LINK  Get-WindowsInstallDateTMZAdjusted  .INPUTS  String  .OUTPUTS  A formatted table  #>    #Function Start   process {    cls  $psinfo = $psversiontable    if ([intPtr]::size -eq 4){      $xarch = "32 bit"  }    if ([intPtr]::size -eq 8){      $xarch = "64 bit"  }    $psinfo | Select-Object -Property @{Name="Name";Expression={"Version"}},      @{Name="----";Expression={"-------"}},      @{Name="PS Version";Expression={$_.PSVersion}},      @{Name="PS Architecture";Expression={$xarch}},       @{Name="CLR Version ";Expression={ $_.CLRVersion }},      @{Name="Build Version ";Expression={ $_.BuildVersion }}  }            }    Get-PowershellInfo+Architecture      #What's the diff between running cmds in x86 and x64 Powershell?     #this will fail on the unsupported processor type  #This script also shows a test for Windows Install Date using Registry, to prove that if this runs on (32 or 64 bit) it will   #fail on unsupport CPU Architecture Types    $psinfo = $psversiontable    if ([intPtr]::size -eq 4){      $xarch = "32 bit"  }    if ([intPtr]::size -eq 8){      $xarch = "64 bit"  }      $windowsinstalldate = [TimeZone]::CurrentTimeZone.ToLocalTime([DateTime]'1.1.1970').AddSeconds(      (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').InstallDate       )    write-host ""  write-host "Windows Registry Install Date using Powershell ($xarch)"  $windowsinstalldate.DateTime  

References

  1. ^ x86 or x64 (msdn.microsoft.com)
Source: feedproxy.google.com