# encoding: ascii # api: powershell # title: load order # description: Original post found [here](https://github.com/gregzakh/alt-ps/blob/master/tools/Show-LoadOrder.ps1) # version: 0.1 # author: greg zakharov # license: CC0 # x-poshcode-id: 6723 # x-archived: 2017-02-11T03:20:40 # x-published: 2017-02-07T13:07:00 # # <# .SYNOPSIS Analogue of Sysinternals LoadOrd tool. .NOTES Author: greg zakharov #> $root = 'HKLM:\SYSTEM\CurrentControlSet\Control' $type, $list = (Get-ItemProperty "$($root)\ServiceGroupOrder").List, ( Get-ItemProperty "$($root -replace 'control\Z', 'services')\*" | Where-Object { [Int32]$_.Start -lt 3 } ) $s1, $s2, $s3 = @(), @(), @() foreach ($t in $type) { if (( $obj = $list | Where-Object { $_.Group -eq $t } ) -eq $null) { continue } $obj = if ($obj -is [Array]) { $rk = Get-Item "$($root)\GroupOrderList" $val, $arr = $rk.GetValue($t), @() if ($val) { for ($i = 0; $i -lt $val.Length; $i += 3) { $arr += [BitConverter]::ToUInt16($val[$i..($i + 3)], 0) $i++ } $arr = $arr[1..($arr.Length - 1)] foreach ($a in $arr) { $obj | Where-Object { [UInt16]$_.Tag -eq $a } } } $rk.Dispose() } else { $obj } foreach ($o in $obj) { switch ($o.Start) { 0 { $s1 += $o } 1 { $s2 += $o } 2 { $s3 += $o } } } } $s1 + $s2 + $s3 | Select-Object @{N='Start value';E={ switch ($_.Start) { 0 {'Boot'}; 1 {'System'}; 2 {'Automatic'} } }}, @{N='Group name';E={$_.Group}}, Tag, @{ N='Service/Device';E={$_.PSChildName} }, @{N='Display name';E={$_.DisplayName}}, @{ N='Image path';E={$_.ImagePath} } | Out-GridView -Title LoadOrd