Public/Find-MSIdentityAssembly.ps1
|
function Find-MSIdentityAssembly { <# .SYNOPSIS Show a list of all files in the current location that have 'Microsoft Identity' in their product name. .DESCRIPTION Check all installed PowerShell locations for DLL files that have 'Microsoft Identity' in their file's Productname attribute. (Can optionally check other locations.) .EXAMPLE Find-MSIdentityAssembly Find all Microsoft Identity-related DLLs within installed PowerShell module locations. .EXAMPLE Find-MSIdentityAssembly | Format-Table InternalName, @{Label = 'ProductVersion'; Expression = { $_.ProductVersionRaw } }, @{Label = 'Module'; Expression = { $($_.FileName -replace '^.*Modules[\\/]([^\\/]+)([\\/].*)?', '$1') }} Find all Microsoft Identity-related DLLs within installed PowerShell module locations. Shows the name of the module that the DLL is included in. .NOTES To do: add informational output if no libraries are found. Example Output: InternalName ProductVersion Module ------------ -------------- ------ Microsoft.Identity.Abstractions.dll 9.5.0.0 DLLPickle Microsoft.IdentityModel.Abstractions.dll 0.0.0.0 Az.Accounts Microsoft.IdentityModel.JsonWebTokens.dll 8.6.0.0 ExchangeOnlineManagement Microsoft.IdentityModel.Logging.dll 8.6.0.0 ExchangeOnlineManagement Microsoft.IdentityModel.Protocols.dll 8.6.1.0 WinTuner Microsoft.IdentityModel.Protocols.OpenIdConnect.dll 8.6.1.0 WinTuner Microsoft.IdentityModel.Tokens.dll 8.6.0.0 ExchangeOnlineManagement Microsoft.IdentityModel.Validators.dll 8.6.1.0 WinTuner System.IdentityModel.Tokens.Jwt.dll 8.6.0.0 ExchangeOnlineManagement #> [CmdletBinding()] param ( # Locations to search for Microsoft Identity-related DLLs. [ValidateScript({ Test-Path -Path $_ -PathType Container })] [string[]]$Path = @($env:PSModulePath -split ';'), # Support the PassThru common parameter. [switch] $PassThru ) $MicrosoftIdentityFile = @(Get-ChildItem -Path $Path -Filter '*.dll' -Recurse | Select-Object -ExpandProperty VersionInfo -ErrorAction SilentlyContinue | Where-Object { $_.ProductName -match 'Microsoft Identity' }) $NewestMicrosoftIdentityFile = $MicrosoftIdentityFile | Group-Object -Property OriginalFilename | ForEach-Object { $_.Group | Sort-Object -Property Version -Descending | Select-Object -First 1 } if ($PSBoundParameters.ContainsKey('PassThru')) { $NewestMicrosoftIdentityFile | Format-Table InternalName, @{Label = 'ProductVersion'; Expression = { $_.ProductVersionRaw } }, @{Label = 'Module'; Expression = { $($_.FileName -replace '^.*Modules[\\/]([^\\/]+)([\\/].*)?', '$1') } }, FileDescription | Out-Host } $NewestMicrosoftIdentityFile } |