core/modules/monkeymsal/monkeymsal.psm1
param( [parameter(Position=0,Mandatory=$false)][Object[]]$ForceDesktop ) Set-StrictMode -Version Latest if ($PSVersionTable.PSVersion.Major -lt 6.0) { switch ($([System.Environment]::OSVersion.Platform)) { 'Win32NT' { New-Variable -Option Constant -Name IsWindows -Value $True -ErrorAction SilentlyContinue New-Variable -Option Constant -Name IsLinux -Value $false -ErrorAction SilentlyContinue New-Variable -Option Constant -Name IsMacOs -Value $false -ErrorAction SilentlyContinue } } } $Script:IsLinuxEnvironment = (Get-Variable -Name "IsLinux" -ErrorAction Ignore) -and $IsLinux $Script:IsMacOSEnvironment = (Get-Variable -Name "IsMacOS" -ErrorAction Ignore) -and $IsMacOS $Script:IsWindowsEnvironment = !$IsLinuxEnvironment -and !$IsMacOSEnvironment Function Get-CoreLib(){ try{ $MsalLibPath = ("{0}{1}lib{2}netcore" -f $PSScriptRoot,[System.IO.Path]::DirectorySeparatorChar,[System.IO.Path]::DirectorySeparatorChar) $files = [System.IO.Directory]::EnumerateFiles($MsalLibPath,"*.dll","AllDirectories") if($null -ne $files){ foreach ($file in $files) { $Assemblies.Add($file) } } return $true } catch{ return $false } } Function Get-DeskLibForCore(){ try{ $MsalLibPath = ("{0}{1}lib{2}desktop" -f $PSScriptRoot,[System.IO.Path]::DirectorySeparatorChar,[System.IO.Path]::DirectorySeparatorChar) $files = [System.IO.Directory]::EnumerateFiles($MsalLibPath,"*.dll","AllDirectories") #Remove diagnostic source $files = @($files).Where({$_ -notlike '*System.Diagnostics.DiagnosticSource*'}) #Load .net core path $MsalLibPath = ("{0}{1}lib{2}netcore" -f $PSScriptRoot,[System.IO.Path]::DirectorySeparatorChar,[System.IO.Path]::DirectorySeparatorChar) $ds = [System.IO.Directory]::EnumerateFiles($MsalLibPath,"*System.Diagnostics.DiagnosticSource.dll","AllDirectories") $files+=$ds if($null -ne $files){ foreach ($file in $files) { $Assemblies.Add($file) } } return $true } catch{ return $false } } Function Get-DesktopLib(){ try{ $MsalLibPath = ("{0}{1}lib{2}desktop" -f $PSScriptRoot,[System.IO.Path]::DirectorySeparatorChar,[System.IO.Path]::DirectorySeparatorChar) $files = [System.IO.Directory]::EnumerateFiles($MsalLibPath,"*.dll","AllDirectories") if($null -ne $files){ foreach ($file in $files) { $Assemblies.Add($file) } } return $true } catch{ return $false } } Function Install-MsalLibrary(){ try{ $params = @{ LiteralPath = $Assemblies; IgnoreWarnings = $true; WarningVariable = "warnVar"; WarningAction = "SilentlyContinue" } Add-Type @params | Out-Null if ($PSVersionTable.PSVersion -ge [version]'6.0') { $Assemblies.Add('System.Console.dll') } if (-not ([System.Management.Automation.PSTypeName]'DeviceCodeHelper').Type){ $cs_path = ("{0}/helpers/devicecode.cs" -f $PSScriptRoot) $exists = [System.IO.File]::Exists($cs_path) if($exists){ $params = @{ LiteralPath = $cs_path; ReferencedAssemblies = $Assemblies; IgnoreWarnings = $true; WarningVariable = "warnVar"; WarningAction = "SilentlyContinue" } Add-Type @params } else{ Write-Verbose "Unable to load [DeviceCodeHelper]" } } } Catch{ Write-Error $_ throw ("Unable to load MSAL library") } } $Assemblies = [System.Collections.Generic.List[string]]::new() $LocalizedDataParams = @{ BindingVariable = 'messages'; BaseDirectory = "{0}/{1}" -f $PSScriptRoot, "Localized"; } #Import localized data Import-LocalizedData @LocalizedDataParams; $listofFiles = [System.IO.Directory]::EnumerateFiles(("{0}" -f $PSScriptRoot),"*.ps1","AllDirectories") $all_files = $listofFiles.Where({($_ -like "*public*") -or ($_ -like "*private*")}) $content = $all_files.ForEach({ [System.IO.File]::ReadAllText($_, [Text.Encoding]::UTF8) + [Environment]::NewLine }) #Set-Content -Path $tmpFile -Value $content . ([scriptblock]::Create($content)) $osInfo = Get-OsInfo if($null -ne $osInfo){ if($osInfo.IsUserInteractive -eq $false){ Write-Verbose ($script:messages.OSVersionMessage -f "Headless", "Core") $AssembliesExists = Get-CoreLib if($AssembliesExists){ Install-MsalLibrary } } ElseIf ($PSVersionTable.PSEdition -eq 'Desktop'){ Write-Verbose ($script:messages.OSVersionMessage -f "Windows", "Desktop") $AssembliesExists = Get-DesktopLib if($AssembliesExists){ Install-MsalLibrary } } ElseIf (($PSVersionTable.PSEdition -eq 'Core') -and $Script:IsLinuxEnvironment){ Write-Verbose ($script:messages.OSVersionMessage -f "Unix", "Core") $AssembliesExists = Get-CoreLib if($AssembliesExists){ Install-MsalLibrary } } ElseIf (($PSVersionTable.PSEdition -eq 'Core') -and $Script:IsWindowsEnvironment){ if($ForceDesktop){ $AssembliesExists = Get-DeskLibForCore if($AssembliesExists){ Install-MsalLibrary } } else{ Write-Verbose ($script:messages.OSVersionMessage -f "Windows", "Core") $AssembliesExists = Get-CoreLib if($AssembliesExists){ Install-MsalLibrary } } } Else{ Write-Warning -Message 'Unable to determine if OS is Windows or Linux. Loading MSAL Core' $AssembliesExists = Get-CoreLib if($AssembliesExists){ Install-MsalLibrary } } } Else{ Write-Warning -Message 'Unable to determine if OS is Windows or Linux. Loading MSAL Core' $AssembliesExists = Get-CoreLib if($AssembliesExists){ Install-MsalLibrary } } |