cookbooks/fb_powershell/libraries/powershell.rb (86 lines of code) (raw):

# Copyright (c) 2020-present, Facebook, Inc. # All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # module FB module PowerShell def install_pwsh_path_list(node) os = node['os'] case os when 'windows' get_windows_pwsh_paths when 'linux' get_linux_pwsh_paths when 'darwin' get_darwin_pwsh_paths else fail "fb_powershell: not supported on #{os}" end end def get_windows_pwsh_paths core_path = Chef::Util::PathHelper.escape_glob_dir( File.join(ENV['ProgramFiles'], 'PowerShell'), ) paths = Dir.glob(core_path + '/[6789]*') return paths end def get_linux_pwsh_paths # https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux paths = Dir.glob('/opt/microsoft/powershell/[6789]*') return paths end def get_darwin_pwsh_paths # https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-macos paths = Dir.glob('/usr/local/microsoft/powershell/[6789]*') return paths end def get_profile_path(profile, install_path, core) if platform?('windows') if core get_profile_path_windows_core(profile, install_path) else get_profile_path_windows(profile) end else get_profile_path_non_windows(profile, install_path) end end def get_profile_path_windows(profile) case profile when 'AllUsersAllHosts' 'C:/Windows/System32/WindowsPowerShell/v1.0/profile.ps1' when 'AllUsersCurrentHost' 'C:/Windows/System32/WindowsPowerShell/v1.0/Microsoft.PowerShell' + '_profile.ps1' when 'CurrentUserAllHosts' '~/Documents/WindowsPowerShell/profile.ps1' when 'CurrentUserCurrentHost' '~/Documents/WindowsPowerShell/Microsoft.PowerShell_profile.ps1' else fail 'Passed an invalid path' end end def get_profile_path_windows_core(profile, install_path) case profile when 'AllUsersAllHosts' "#{install_path}/profile.ps1" when 'AllUsersCurrentHost' "#{install_path}/Microsoft.PowerShell_profile.ps1" when 'CurrentUserAllHosts' '~/Documents/PowerShell/profile.ps1' when 'CurrentUserCurrentHost' '~/Documents/PowerShell/Microsoft.PowerShell_profile.ps1' else fail 'Passed an invalid path' end end def get_profile_path_non_windows(profile, install_path) case profile when 'AllUsersAllHosts' "#{install_path}/profile.ps1" when 'AllUsersCurrentHost' "#{install_path}/Microsoft.PowerShell_profile.ps1" when 'CurrentUserAllHosts' '~/.config/powershell/powershell/profile.ps1' when 'CurrentUserCurrentHost' '~/.config/powershell/Microsoft.PowerShell_profile.ps1' else fail 'Passed an invalid path' end end end end