{"id":8821,"date":"2007-01-09T16:26:00","date_gmt":"2007-01-09T16:26:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/powershell\/2007\/01\/09\/behind-powershell-installer-for-windows-xp-windows-server-2003\/"},"modified":"2019-02-18T13:20:54","modified_gmt":"2019-02-18T20:20:54","slug":"behind-powershell-installer-for-windows-xp-windows-server-2003","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/behind-powershell-installer-for-windows-xp-windows-server-2003\/","title":{"rendered":"Behind PowerShell  Installer (for Windows XP \/ Windows Server 2003):"},"content":{"rendered":"<p class=\"MsoNormal\"><span><font face=\"Calibri\">The information here relates to Windows PowerShell 1.0 installer on downlevel platforms (XP SP2, W2K3 SP1 and above).<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\">The job of installers is to create an environment on a user\u2019s machine, so that the underlying software works seamlessly on the machine. Typically most installation scripts copies some files and sets some registry keys. This appears to be simple on the first hand but it gets little complicated if you bring servicing into picture. Installation script must ensure that the underlying software is serviceable.<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\">Herein I will try to explain what Windows PowerShell installer does behind the scenes. <\/font><\/span><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">Installation Tasks:<\/font><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\">Choose an appropriate Powershell installer depending on the OS platform and language from <\/font><\/span><a href=\"http:\/\/www.microsoft.com\/powershell\"><span><font face=\"Calibri\" color=\"#0000ff\">http:\/\/www.microsoft.com\/powershell<\/font><\/span><\/a><span><font face=\"Calibri\">. The following operations are performed by the installation software:<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font face=\"Calibri\">1.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Check if Powershell can be installed. Installation will fail if any of the following is true:<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">(a)<\/font><span>&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Only an administrator can install PowerShell. So for non-administrator the installation will fail.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">(b)<\/font><span>&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Supported OS. Remember there is a separate installation package for OS Platform + language<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">(c)<\/font><span>&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">PowerShell is already installed<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">(d)<\/font><span>&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">CLR is not installed<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">2.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Give an opportunity to user to see \u201cEnd User License Agreement\u201d. Depending upon circumstances, this will give an opportunity to the user to either go ahead with the installation or cancel the installation task.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">3.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Install Windows PowerShell related files (binaries\/text files) onto user\u2019s machine.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">For list of files installed see <\/font><\/span><a href=\"http:\/\/support.microsoft.com\/?kbid=926139\"><span><font face=\"Calibri\">http:\/\/support.microsoft.com\/?kbid=926139<\/font><\/span><\/a><span><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">All the files will be copied to %windir%\\system32\\WindowsPowerShell\\v1.0 directory.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">Let\u2019s call this PSHOME. All the language neutral files will be copied to PSHOME and language dependent files will be copied to PSHOME\\&lt;lang code&gt; sub-directory. All the help related content + native unmanaged resources are language dependent as these really are unique per language. For example, a German version of Windows PowerShell should show help in German whereas an English version should show in English.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">4.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Add Windows PowerShell specific registry keys.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">PowerShell environment depends on the existence of the following registry key and subkeys.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\PowerShell\\1<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">Let\u2019s go through each of these subkeys:<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">a.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\PowerShell\\1 Install<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">The existence of this key will tell users that PowerShell is installed<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">b.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\PowerShell\\1 PID<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">This key will help our Product Support team to categorize customer calls to a specific product and this key also allows other dependent products to distinguish between different versions of PowerShell ie., RC2 and RTM<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">RC2 PowerShell will set this key information to 89393-100-0001260-00301<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">RTM PowerShell will set this key information to 89383-100-0001260-04309<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">c.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\PowerShell\\1\\&lt;Lang code&gt; Install<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">The existence of this key will let users know what languages the installed powershell supports. For example HKLM\\SOFTWARE\\Microsoft\\PowerShell\\1\\1033, Install = 1 means English version of PowerShell is installed.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">Language codes for other languages:<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">2052 zh-CHS (Chinese-Simplified), 1028 zh-CHT (Chinese-Traditional),1031 de(German),1033 en(English),3082 es(Spanish),1036 fr(French),1040 it(Italian),1041 ja(Japanese),1042 ko(Korean),1046 pt-BR(Portugese-Brazil),1049 ru(Russian)<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">d.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\PowerShell\\1\\PowerShellEngine<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">This key contains information used by PowerShell engine.<span>&nbsp; <\/span>It contains information like PowerShell Version, Application Base and CLR version.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">e.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\PowerShell\\1\\ShellIds\\Microsoft.PowerShell<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">The information under \u201cShellIds\u201d relate to different Custom Shells. The main powershell.exe implements a console host that uses PowerShell engine functionality. The shell ID for this console powershell.exe is \u201cMicrosoft.PowerShell\u201d. The ID is defined inside the custom shell at the build time.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">f.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">HKLM\\SYSTEM\\CurrentControlSet\\Services\\Eventlog\\Windows PowerShell<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">This contains Powershell Eventlog related information.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">g.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Updates\\Windows PowerShell 1.0<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">This contains PowerShell installation related information like \u201cInstalled By\u201d, Date of Installation. All this information typically shows up in Add\/Remove programs. Notice Uninstallation command here.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">h.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Associate.ps1,.ps1xml extensions to text editor (see for entries like HKCR\\.ps1 )<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">i.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Associated .psc1 extension to PowerShell.exe<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">j.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Safeguard .ps1, .ps1xml, .psc1 files so that AssocIsDangerous() returns true<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">(<\/font><\/span><a href=\"http:\/\/msdn.microsoft.com\/library\/default.asp?url=\/library\/en-us\/shellcc\/platform\/shell\/reference\/shlwapi\/registry\/associsdangerous.asp\"><span><font face=\"Calibri\">http:\/\/msdn.microsoft.com\/library\/default.asp?url=\/library\/en-us\/shellcc\/platform\/shell\/reference\/shlwapi\/registry\/associsdangerous.asp<\/font><\/span><\/a><span><font face=\"Calibri\">)<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">k.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Add Powershell cryptography related registry information under<b><\/b><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">HKLM\\Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\ (see for entries with GUID &#8220;603BCC1F-4B59-4E08-B724-D2C6297EF351\u201d)<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">5.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Add Windows PowerShell 1.0 shortcut sub-directory to the directory pointed to by CSIDL_COMMON_PROGRAMS (<\/font><\/span><a href=\"http:\/\/msdn.microsoft.com\/library\/default.asp?url=\/library\/en-us\/shellcc\/platform\/shell\/reference\/enums\/csidl.asp\"><span><font face=\"Calibri\">http:\/\/msdn.microsoft.com\/library\/default.asp?url=\/library\/en-us\/shellcc\/platform\/shell\/reference\/enums\/csidl.asp<\/font><\/span><\/a><span><font face=\"Calibri\">)<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">6.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">GAC+Ngen PowerShell managed binaries.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">Ie., System.Management.Automation.dll, System.Management.Automation.resources.dll,<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">Microsoft.PowerShell.Commands.Management.dll,<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">Microsoft.PowerShell.Commands.Management.resources.dll,<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">Microsoft.PowerShell.Commands.Utility.dll,<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">Microsoft.PowerShell.Commands.Utility.resources.dll,<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">Microsoft.PowerShell.ConsoleHost.dll,<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">Microsoft.PowerShell.ConsoleHost.resources.dll,<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">Microsoft.PowerShell.Security.dll,<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">Microsoft.PowerShell.Security.resources.dll<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">After the installation powershell binaries will be queued with priority 3 in the ngen queue. To ngen them right away use the following command:<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">%windir%\\microsoft.net\\framework\\v2.0.50727\\ngen.exe executeQueuedItems 3<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">[Note: This will execute <b>all<\/b> the items with priority 3.]<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">7.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Add powershell application base path to the PATH environment variable<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">8.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Add .psc1 to PATHEXT variable<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">Uninstallation Tasks:<\/font><\/span><\/b><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font face=\"Calibri\">1.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">PowerShell uninstaller is available under Control Panel-&gt;Add \/ Remove Programs. One has to select \u201cShow Updates\u201d checkbox to see the powershell entry. This is because PowerShell is an Optional Windows Component and is release as an Optional Windows Software Update.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">2.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Uninstallation will fail if the following is true:<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">(a)<\/font><span>&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">CLR is not installed. We check for CLR existence during uninstallation as we have to ungac\/ngen uninstall <span>&nbsp;<\/span>powershell related managed binaries. CLR uninstallation will not clean GAC which might result in servicing related issues.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">3.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Ngen uninstall PowerShell related managed binaries<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">4.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Gac uninstall PowerShell related managed binaries<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">5.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Remove powershell.exe path from PATH environment variable<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">6.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Remove .psc1 from PATHEXT environment variable.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">7.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Uninstall registry keys added by installer<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">8.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Uninstall files from %windir%\\system32\\WindowsPowerShell\\v1.0<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">9.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Remove Shortcut<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><span><font face=\"Calibri\">10.<\/font><span>&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Uninstaller cleans files, so if any product file is in use at the time of uninstallation a user may be prompted to restart. The restart operation can be delayed.<\/font><\/span><\/p>\n<p><span><font face=\"Calibri\"><\/p>\n<p class=\"MsoNormal\"><span>The installer \/ uninstaller support logging with option \/log:&lt;fullpath&gt;. The log file will have information about files (un)installed, gac\/ngen instructions etc.<\/span><\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">Wow64 Additions:<\/font><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\">On a 64-bit machine, Powershell installer will create both 64 bit environment and 32 bit environment i.e, one can use PowerShell engine services both from a 64-bit app and 32-bit app.<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\">On a 64-bit machine the directory %windir%\\system32\\windowspowershell\\v1.0 belongs to 64 bit powershell and %windir%\\syswow64\\WindowsPowerShell\\v1.0 belongs to 32-bit powershell.<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\">Similarly HKLM\\Software\\Microsoft\\PowerShell\\1 contains information related to 64-bit PowerShell and HKLM\\Software\\Wow6432Node\\Microsoft\\PowerShell\\1 contains information related to 32-bit powershell.<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\">All the files and registry keys that I explained above will be made available to the 32 bit app as well following the above logic. Ie., a 64-bit version of PowerShell.exe is under %windir%\\system32\\windowspowershell\\v1.0 and 32-bit version is under %windir%\\syswow64\\WindowsPowerShell\\v1.0<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\">Note: Be careful the OS will automatically redirect calls to System32 to SysWow64 ie., from a cmd.exe(32) window if you say cd %windir%\\system32\\windowspowershell\\ you are actually under syswow64<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\">PowerShell managed binaries will not have these problems as PowerShell managed binaries will be installed to a global (GAC\/Ngen) store and are Processor neutral.<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\"><b><span>MUI Scenarios:<\/span><\/b><span><\/span><\/font><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\">As of Powershell 1.0<span>&nbsp; <\/span>RTM, PowerShell supports 11 languages on downlevel. These are English, German, French, Japanese, Italian, Korean, Russian, Spanish, Portugal (Brazil), Chinese-Simplified, Chinese-Traditional. One can get all these language resources by installing English PowerShell first and then installing PowerShell MUI (KB926141). If you want to install only specific language see KB926140.<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\">Related link: <\/font><\/span><a href=\"http:\/\/support.microsoft.com\/?kbid=926140\"><span><font face=\"Calibri\">http:\/\/support.microsoft.com\/?kbid=926140<\/font><\/span><\/a><span><\/span><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\"><span>Related link:<\/span><font size=\"3\"> <\/font><\/font><a href=\"http:\/\/support.microsoft.com\/?kbid=926141\"><span><font face=\"Calibri\">http:\/\/support.microsoft.com\/?kbid=926141<\/font><\/span><\/a><span><\/span><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">Key Take Aways for Windows XP(SP2) and Windows Server 2003(SP1) :<\/font><\/span><\/b><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font face=\"Calibri\">1.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><a href=\"http:\/\/microsoft.com\/powershell\"><span><font face=\"Calibri\" color=\"#0000ff\">http:\/\/microsoft.com\/powershell<\/font><\/span><\/a><span><font face=\"Calibri\"> has all the information related to Powershell <\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">2.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">PowerShell uninstaller is available under Control Panel-&gt;Add \/ Remove Programs. One has to select \u201cShow Updates\u201d checkbox to see the powershell entry. This is because PowerShell is an Optional Windows Component and is released as an Optional Windows Software Update.<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\">3.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span><font face=\"Calibri\">Applications can programmatically detect PowerShell\u2019s existence by using the following registry key information:<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\PowerShell\\1 Install (== 1)<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">To detect for a particular language use:<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\PowerShell\\1\\&lt;langid&gt; Install (==1)<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\">To detect (major.minor)version of PowerShell<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><font face=\"Calibri\">HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\PowerShell\\1\\PowerShellEngine PowerShellVersion (== 1.0 for 1.0<span>&nbsp; <\/span>RTM)<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><font face=\"Calibri\"><\/font><\/span>&nbsp;<\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><font face=\"Calibri\">Thanks<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><font face=\"Calibri\">Krishna[MSFT]<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><font face=\"Calibri\">Windows PowerShell Development<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><font face=\"Calibri\">This posting is provided &#8220;AS IS&#8221; and confers no rights or warranties.<\/font><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The information here relates to Windows PowerShell 1.0 installer on downlevel platforms (XP SP2, W2K3 SP1 and above). The job of installers is to create an environment on a user\u2019s machine, so that the underlying software works seamlessly on the machine. Typically most installation scripts copies some files and sets some registry keys. This appears [&hellip;]<\/p>\n","protected":false},"author":600,"featured_media":13641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[73,74],"class_list":["post-8821","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell","tag-installation","tag-uninstallation"],"acf":[],"blog_post_summary":"<p>The information here relates to Windows PowerShell 1.0 installer on downlevel platforms (XP SP2, W2K3 SP1 and above). The job of installers is to create an environment on a user\u2019s machine, so that the underlying software works seamlessly on the machine. Typically most installation scripts copies some files and sets some registry keys. This appears [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/8821","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/users\/600"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/comments?post=8821"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/8821\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media\/13641"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media?parent=8821"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=8821"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=8821"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}