Class: Pwsh::WindowsPowerShell
- Inherits:
-
Object
- Object
- Pwsh::WindowsPowerShell
- Defined in:
- lib/pwsh/windows_powershell.rb,
lib/pwsh/windows_powershell.rb
Overview
Returns information about the available versions of Windows PowerShell on the node, if any.
Constant Summary collapse
- ACCESS_TYPE =
Shorthand constant to reference the registry key access type
Win32::Registry::KEY_READ | 0x100
- HKLM =
Shorthand constant to reference the local machine hive
Win32::Registry::HKEY_LOCAL_MACHINE
- PS_ONE_REG_PATH =
The path to the original version of the Windows PowerShell Engine’s data in registry
'SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine'
- PS_THREE_REG_PATH =
The path to the newer version of the Windows PowerShell Engine’s data in registry
'SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine'
- REG_KEY =
The name of the registry key for looking up the latest version of Windows PowerShell for a given engine.
'PowerShellVersion'
Class Method Summary collapse
-
.compatible_version? ⇒ Boolean
Return whether or not the latest version of PowerShell available on the machine is compatible with the implementation of the Manager.
-
.powershell_one_version ⇒ String
Returns the latest available version of Windows PowerShell using the older engine as determined by checking the registry.
-
.powershell_three_version ⇒ String
Returns the latest available version of Windows PowerShell as determined by checking the registry.
-
.version ⇒ String
Returns the latest available version of Windows PowerShell on the machine.
Class Method Details
.compatible_version? ⇒ Boolean
Return whether or not the latest version of PowerShell available on the machine is compatible with the implementation of the Manager.
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 |
# File 'lib/pwsh/windows_powershell.rb', line 10 def self.compatible_version? # If this method isn't defined, we're not on Windows! return false if defined?(Pwsh::WindowsPowerShell.version).nil? powershell_version = defined?(Pwsh::WindowsPowerShell.version) ? Pwsh::WindowsPowerShell.version : nil # If we get nil, something's gone wrong and we're not compatible. return false if powershell_version.nil? # PowerShell v1 - definitely not good to go. Really the whole library # may not even work but I digress return false if Gem::Version.new(powershell_version) < Gem::Version.new(2) # PowerShell v3+, we are good to go b/c .NET 4+ # https://msdn.microsoft.com/en-us/powershell/scripting/setup/windows-powershell-system-requirements # Look at Microsoft .NET Framwork Requirements section. return true if Gem::Version.new(powershell_version) >= Gem::Version.new(3) # If we are using PowerShell v2, we need to see what the latest # version of .NET is that we have # https://msdn.microsoft.com/en-us/library/hh925568.aspx value = false if Pwsh::Util.on_windows? require 'win32/registry' begin # At this point in the check, PowerShell is using .NET Framework # 2.x family, so we only need to verify v3.5 key exists. # If we were verifying all compatible types we would look for # any of these keys: v3.5, v4.0, v4 Win32::Registry::HKEY_LOCAL_MACHINE.open('SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', Win32::Registry::KEY_READ | 0x100) do value = true end rescue Win32::Registry::Error value = false end end value end |
.powershell_one_version ⇒ String
Returns the latest available version of Windows PowerShell using the older engine as determined by checking the registry.
79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/pwsh/windows_powershell.rb', line 79 def self.powershell_one_version version = nil begin HKLM.open(PS_ONE_REG_PATH, ACCESS_TYPE) do |reg| version = reg[REG_KEY] end rescue StandardError version = nil end version end |
.powershell_three_version ⇒ String
Returns the latest available version of Windows PowerShell as determined by checking the registry.
95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/pwsh/windows_powershell.rb', line 95 def self.powershell_three_version version = nil begin HKLM.open(PS_THREE_REG_PATH, ACCESS_TYPE) do |reg| version = reg[REG_KEY] end rescue StandardError version = nil end version end |
.version ⇒ String
Returns the latest available version of Windows PowerShell on the machine
71 72 73 |
# File 'lib/pwsh/windows_powershell.rb', line 71 def self.version powershell_three_version || powershell_one_version end |