Public/Get-BuildEnvironmentDetail.ps1
1 2 3 4 5 6 7 8 9 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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
function Get-BuildEnvironmentDetail { <# .SYNOPSIS Get the details on the build environment .FUNCTIONALITY CI/CD .DESCRIPTION Get the details on the build environment. You might use this to debug a build, particularly in environments not under your control. .PARAMETER Detail Which build environment details to collect. Defaults to * Valid choices: 'OperatingSystem' Subset of win32_operatingsystem 'PSVersionTable' Variable 'ModulesLoaded' Get-Module 'ModulesAvailable' Get-Module -ListAvailable 'PSModulePath' ENV: 'Path' ENV: 'Variables' Get-Variable 'Software' Get-InstalledSoftware 'Hotfixes' Get-Hotfix 'Location' Get-Location 'PackageProvider' Get-PackageProvider 'PackageSource' Get-PackageSource .PARAMETER KillKittens If specified, apply formatting to the output (bad) and sent some of it to the host (worse) .EXAMPLE Get-BuildEnvironmentDetail .LINK https://github.com/RamblingCookieMonster/BuildHelpers .LINK about_BuildHelpers #> [cmdletbinding()] [OutputType( [String], [Hashtable])] param( [validateset('*', 'OperatingSystem', 'PSVersionTable', 'ModulesLoaded', 'ModulesAvailable', 'PSModulePath', 'Path', 'Variables', 'Software', 'Hotfixes', 'Location', 'PackageProvider', 'PackageSource')] [string[]]$Detail = '*', [switch]$KillKittens ) if($Detail -contains '*') { $Detail = 'OperatingSystem', 'PSVersionTable', 'ModulesLoaded', 'ModulesAvailable', 'PSModulePath', 'Path', 'Variables', 'Software', 'Hotfixes', 'Location', 'PackageProvider', 'PackageSource' } $Details = @{} switch ($Detail) { 'PSVersionTable' { $Details.set_item($_, $PSVersionTable)} 'PSModulePath' { $Details.set_item($_, ($ENV:PSModulePath -split ';'))} 'ModulesLoaded' { $Details.set_item($_, ( Get-Module | Select-Object Name, Version, Path | Sort-Object Name )) } 'ModulesAvailable' { $Details.set_item($_, ( Get-Module -ListAvailable | Select-Object Name, Version, Path | Sort-Object Name )) } 'Path' { $Details.set_item($_, ( $ENV:Path -split ';'))} 'Variables' { $Details.set_item($_, ( Get-Variable | Select-Object Name, Value ))} 'Software' { $Details.set_item($_, ( Get-InstalledSoftware | Select-Object DisplayName, Publisher, Version, Hive, Arch))} 'Hotfixes' { $Details.set_item($_, ( Get-Hotfix ))} 'OperatingSystem' { $Details.set_item($_, ( Get-CimInstance -classname win32_operatingsystem | Select-Object Caption, Version ))} 'Location' { $Details.set_item($_, ( Get-Location ).Path )} 'PackageProvider' { $Details.set_item($_, $( if(Get-Module PackageManagement -ListAvailable) { Get-PackageProvider | Select-Object Name, Version } ))} 'PackageSource' { $Details.set_item($_, $( if(Get-Module PackageManagement -ListAvailable) { Get-PackageSource | Select-Object Name, ProviderName, Location } ))} } if($KillKittens) { $lines = '----------------------------------------------------------------------' foreach($Key in $Details.Keys) { "`n$lines`n$Key`n`n" $Details.get_item($key) | Out-Host } } else { $Details } } |