Code:
# Shortcuts will be created in $ShortcutRoot for programs found in $ExeRoot (except for $Exclusions)
$ExeRoot="C:\Users\Hali\OneDrive\Programs\"
$ShortcutRoot=$Home + "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\"
$Exclusions = @("gdisk64","nvspbind","StartKiller","UnlockerInject32")
$PoShExeRoot="C:\Users\Hali\OneDrive\Programs\Powershell Scripts\"
$PoShShortcutRoot=$Home + "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Powershell Scripts\"
$PoShExclusions = @("Sleep Mac Transmission","Wake Mac Transmission","WakeTransmission")
$SysinternalsExeRoot="C:\Users\Hali\OneDrive\Programs\SysinternalsSuite\"
$SysinternalsShortcutRoot=$Home + "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\SysinternalsSuite\"
$SysinternalsExclusions = @(
"accesschk","autorunsc","adrestore","Clockres","Contig","CoreInfo","ctrl2cap","diskext","du","efsdump","FindLinks","handle","hex2dec","junction","ldmdump","listdlls",
"livekd","logonsessions","movefile","ntfsinfo","pendmoves","pipelist","procdump","PsExec","psfile","PsGetSid","PsInfo","pskill","pslist","PsLoggedon","psloglist","pspasswd",
"psping","PsService","psshutdown","pssuspend","RegDelNull","regjump","RootkitRevealer","ru","sdelete","sigcheck","streams","strings","sysmon","sync","VolumeID","Whois")
#----------------------------------------------------------------
# Check set-up
#----------------------------------------------------------------
Write-Host "Shortcuts will be created in " -NoNewline; Write-Host $ShortcutRoot -f White
Write-Host "for programs found in " -NoNewline; Write-Host $ExeRoot -NoNewline -f White; Write-Host " and " -NoNewline; Write-Host $SysinternalsExeRoot -f White
$title="Keep folder structure for shortcuts?"
$message="Enter choice"
$choices = @(
@("Yes", "Keep existing structure"),
@("No", "Create Shortcuts in root directory"),
@("Exit","Exit")choices |
%{New-Object System.Management.Automation.Host.ChoiceDescription "&$i`b$($_[0])", $_[1]; $i++})
$result = $host.ui.PromptForChoice($title, $message, $options, 1)
$choice = $choices[$result][0]
Switch ($result)
{ 0 {$Consolidate=$False}
1 {$Consolidate=$True}
2 {exit}
}
#----------------------------------------------------------------
Function Set-Admin
#----------------------------------------------------------------
# Set the Run As Administrator flag
($file) {
if (-not (Test-Path $file)) { Write-Host "File not found " -NoNewline -f red; Write-Host "$file" -f red }
else {
$bytes = [System.IO.File]::ReadAllBytes($file)
$bytes[0x15] = $bytes[0x15] -bor 0x20 #set byte 21 (0x15) bit 6 (0x20) ON (Use –bor to set RunAsAdministrator option and –bxor to unset)
[System.IO.File]::WriteAllBytes($file, $bytes)
Write-Host "Administrator authority granted " -NoNewline -f green; Write-Host "$file" -f White
}
}
)
$options = @($i=0;$#----------------------------------------------------------------
Function Create-Shortcuts
#---------------------------------------------------------------
# Create shortcuts for all non-excluded .exe
($ExeRoot,$ShortcutRoot,$Exclusions,$Consolidate,$Recurse) {
# Get all program objects
if ($Recurse) {$Apps=Get-ChildItem -path $ExeRoot -include @("*.exe","*.ps1") -recurse}
else {$Apps=Get-ChildItem -path "$ExeRoot*" -include @("*.exe","*.ps1")}
Foreach ($App in $Apps) {
$ShortcutName=[io.path]::GetFileNameWithoutExtension($App.FullName)+'.lnk'
$IconPath=(Split-Path $App.FullName -parent)+"\"+[io.path]::GetFileNameWithoutExtension($App.FullName)+'.ico'
if ($consolidate) {
$ShortcutPath=$ShortcutRoot+$ShortcutName
} else {
$ShortcutPath=([io.path]::ChangeExtension($ShortcutRoot + $App.FullName.SubString($ExeRoot.Length), '.lnk'))
}
if (Test-Path $ShortcutPath) { Write-Host "Shortcut exists " -NoNewline -f cyan; Write-Host "$ShortcutPath" -f white }
elseif ($Exclusions -contains $App.BaseName) { Write-Host " excluded " -NoNewline -f red; Write-Host "$App" -f red }
else {
# Create directory if required
$ShortcutDirectory = Split-Path $ShortcutPath -parent
if (-not (Test-Path $ShortcutDirectory )) { New-Item -ItemType Directory -Path $ShortcutDirectory -Force }
# Create Shortcut
$WshShell=New-Object -ComObject WScript.Shell
$Shortcut=$WshShell.CreateShortcut($ShortcutPath)
If([io.path]::GetExtension($App.FullName) -eq '.exe') {
c
} Else {
$Shortcut.TargetPath ='%systemroot%\system32\WindowsPowerShell\v1.0\powershell.exe'
$Shortcut.Arguments = '-ExecutionPolicy Bypass -File "'+$App.FullName+'"'
}
if (Test-Path $IconPath) {$Shortcut.IconLocation = $IconPath}
$Shortcut.WorkingDirectory = Split-Path $App.FullName -parent
$Shortcut.Save()
Write-Host "Shortcut created " -NoNewline -f green; Write-Host $ShortcutPath -f White
# Make Powershell shortcuts run as administrator
If([io.path]::GetExtension($App.FullName) -eq '.ps1') {Set-Admin $ShortcutPath}
}
}
}
Write-Host "EXEs Processed" -f Yellow; Write-Host
#----------------------------------------------------------------
# Sysinternals Programs
#----------------------------------------------------------------
Create-Shortcuts $SysinternalsExeRoot $SysinternalsShortcutRoot $SysinternalsExclusions $True $False
# sync.exe (want to add icon)
$WshShell=New-Object -ComObject WScript.Shell
$Shortcut=$WshShell.CreateShortcut("$SysinternalsShortcutRoot\sync.lnk")
$Shortcut.TargetPath = "$SysinternalsExeRoot\sync.exe"
$Shortcut.WorkingDirectory = "$SysinternalsExeRoot"
$Shortcut.IconLocation = "%SystemRoot%\system32\shell32.dll,217" # (54 accross *4 deep + 1 down = 217 in the dll)
$Shortcut.Save()
Write-Host "Shortcut created " -NoNewline -f green; Write-Host $SysinternalsShortcutRoot"sync.lnk" -f White
# Set various shortcuts to run as Admin
Set-Admin "$SysinternalsShortcutRoot`Autoruns.lnk"
Set-Admin "$SysinternalsShortcutRoot`procexp.lnk"
Set-Admin "$SysinternalsShortcutRoot`Procmon.lnk"
Set-Admin "$SysinternalsShortcutRoot`sync.lnk"
#----------------------------------------------------------------
# Powershell scripts
#----------------------------------------------------------------
Create-Shortcuts $PoShExeRoot $PoShShortcutRoot $PoShExclusions $True $True
#----------------------------------------------------------------
# Other Programs
#----------------------------------------------------------------
# Get Programs in root
Create-Shortcuts $ExeRoot $ShortcutRoot $Exclusions $True $False
# Get programs in sub-directories (except Sysinternals)
$OtherDirs = Get-ChildItem -path $ExeRoot -dir -exclude "SysinternalsSuite","Powershell Scripts"
$SavedShortcutRoot=$ShortcutRoot
$SavedExeRoot=$ExeRoot
Foreach ($OtherDir in $OtherDirs) {
$ExeRoot=$OtherDir.FullName+"\"
if (-not $Consolidate) { $ShortcutRoot=$SavedShortcutRoot+$OtherDir.Name+"\" }
Create-Shortcuts $ExeRoot $ShortcutRoot $Exclusions $Consolidate $True
}
$ShortcutRoot=$SavedShortcutRoot
$ExeRoot=$SavedExeRoot
# Set various shortcuts to run as Admin
Set-Admin "$ShortcutRoot`windirstat.lnk"
Set-Admin "$ShortcutRoot`TreeSizeFree.lnk"
#----------------------------------------------------------------
# Other Shortcuts
#----------------------------------------------------------------
$WshShell = New-Object -ComObject WScript.Shell
$Shortcut=$WshShell.CreateShortcut("$ShortcutRoot\God Mode.lnk")
$Shortcut.TargetPath = $Shortcut.TargetPath = "$env:systemroot\explorer.exe"
$Shortcut.Arguments = "shell:::{ED7BA470-8E54-465E-825C-99712043E01C}"
$Shortcut.Save()
Write-Host "Shortcut created " -NoNewline -f green; Write-Host $ShortcutRoot"God Mode.lnk" -f White
if (-not(Test-Path "$ShortcutRoot\TN5250")) {New-Item -ItemType Directory -Path "$ShortcutRoot\TN5250" -Force}
Copy-Item $ExeRoot\TN5250\PUB1.lnk $ShortcutRoot\TN5250\
Copy-Item $ExeRoot\TN5250\SIASDEV.lnk $ShortcutRoot\TN5250\
Move-Item $ShortcutRoot\TN5250.lnk $ShortcutRoot\TN5250\
#----------------------------------------------------------------
# Rename any odd named
#----------------------------------------------------------------
if (Test-Path "$ShortcutRoot\TFC.lnk") {Rename-Item "$ShortcutRoot\TFC.lnk" "$ShortcutRoot\Temp File Cleaner.lnk"}
if (Test-Path "$ShortcutRoot\Rapr.lnk") {Rename-Item "$ShortcutRoot\Rapr.lnk" "$ShortcutRoot\Driver Store Explorer.lnk"}
Write-Host
Read-Host -Prompt "Press Enter to exit"