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 |
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()] 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 Name, Version, Path | Sort Name )) } 'ModulesAvailable' { $Details.set_item($_, ( Get-Module -ListAvailable | Select Name, Version, Path | Sort Name )) } 'Path' { $Details.set_item($_, ( $ENV:Path -split ';'))} 'Variables' { $Details.set_item($_, ( Get-Variable | Select Name, Value ))} 'Software' { $Details.set_item($_, ( Get-InstalledSoftware | Select DisplayName, Publisher, Version, Hive, Arch))} 'Hotfixes' { $Details.set_item($_, ( Get-Hotfix ))} 'OperatingSystem' { $Details.set_item($_, ( Get-WMIObject win32_operatingsystem | Select Caption, Version ))} 'Location' { $Details.set_item($_, ( Get-Location ).Path )} 'PackageProvider' { $Details.set_item($_, $( if(Get-Module PackageManagement -ListAvailable) { Get-PackageProvider | Select Name, Version } ))} 'PackageSource' { $Details.set_item($_, $( if(Get-Module PackageManagement -ListAvailable) { Get-PackageSource | Select 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 } } |