Skip to content

Instantly share code, notes, and snippets.

@lzlrd
Last active September 8, 2025 14:31
Show Gist options
  • Select an option

  • Save lzlrd/f4b0e10c1f5c4777ee676abe052b2efb to your computer and use it in GitHub Desktop.

Select an option

Save lzlrd/f4b0e10c1f5c4777ee676abe052b2efb to your computer and use it in GitHub Desktop.
Windows Scripts
#Requires -RunAsAdministrator
<#
.SYNOPSIS
Enables Message Signaled Interrupts (MSI) for all applicable PCI devices.
.DESCRIPTION
This script navigates the Windows Registry to locate the interrupt management
settings for all enumerated PCI devices. It then sets the 'MSISupported' DWORD
value to 1 for each device, which enables MSI mode. This can potentially
improve interrupt handling and system performance for certain hardware.
If a device has an 'Interrupt Management' key but is missing the required
'MessageSignaledInterruptProperties' subkey, this script will create it.
This script must be run with administrator privileges to modify
HKEY_LOCAL_MACHINE.
.NOTES
Author: Gemini
Version: 1.1
#>
function Enable-MsiModeForAllPciDevices {
[CmdletBinding(SupportsShouldProcess = $true)]
param()
Write-Host "Starting the process to enable MSI mode for all PCI devices..." -ForegroundColor Yellow
# Define the base path and target keys/properties.
$basePath = "HKLM:\SYSTEM\CurrentControlSet\Enum\PCI"
$interruptMgmtSubkey = "Device Parameters\Interrupt Management"
$msiPropsSubkey = "MessageSignaledInterruptProperties"
$propertyName = "MSISupported"
$propertyValue = 1
Try {
# Get all vendor subkeys under the main PCI key.
$vendorKeys = Get-ChildItem -Path $basePath -ErrorAction Stop | Select-Object -ExpandProperty PSPath
If ($null -Eq $vendorKeys) {
Write-Warning "No PCI vendor keys found under '$basePath'."
Return
}
# Iterate through each vendor and device key to find the target properties.
ForEach ($vendorKey in $vendorKeys) {
$deviceKeys = Get-ChildItem -Path $vendorKey -ErrorAction SilentlyContinue | Select-Object -ExpandProperty PSPath
ForEach ($deviceKey in $deviceKeys) {
$interruptMgmtPath = Join-Path -Path $deviceKey -ChildPath $interruptMgmtSubkey
# Check if the 'Interrupt Management' key exists. This is a prerequisite.
If (Test-Path -Path $interruptMgmtPath) {
$msiPath = Join-Path -Path $interruptMgmtPath -ChildPath $msiPropsSubkey
# If the MSI properties subkey does not exist, create it.
If (-Not (Test-Path -Path $msiPath)) {
If ($PSCmdlet.ShouldProcess($msiPath, "Creating missing registry key...")) {
Try {
New-Item -Path $msiPath -Force -ErrorAction Stop | Out-Null
Write-Host "Created key: $msiPath" -ForegroundColor Green
}
Catch {
Write-Error "Failed to create key at '$msiPath'. Error: $_"
# Skip to the next device if key creation fails.
Continue
}
}
}
# Only proceed if the key exists (handles -WhatIf where the key isn't actually created).
If (Test-Path -Path $msiPath) {
Try {
$currentValue = (Get-ItemProperty -Path $msiPath -Name $propertyName -ErrorAction SilentlyContinue).$propertyName
If ($currentValue -Eq $propertyValue) {
Write-Host "[SKIPPED] '$propertyName' is already set to '$propertyValue' at $msiPath" -ForegroundColor Gray
}
Else {
If ($PSCmdlet.ShouldProcess($msiPath, "Set '$propertyName' to '$propertyValue'")) {
Set-ItemProperty -Path $msiPath -Name $propertyName -Value $propertyValue -Type DWord -Force -ErrorAction Stop
Write-Host "Set '$propertyName' to '$propertyValue' at $msiPath" -ForegroundColor Green
}
}
}
Catch {
Write-Error "Failed to set property at '$msiPath'. Error: $_"
}
}
}
}
}
Write-Host "Script finished." -ForegroundColor Yellow
Write-Host "A system reboot is recommended for all changes to take effect."
}
Catch {
Write-Error "An error occurred while accessing the base PCI path '$basePath'. Please ensure you are running this script as an Administrator. Error: $_"
}
}
# --- Execution ---
# The script can be run with a -WhatIf parameter to see what changes would be made without actually making them.
# From PowerShell, run: .\Enable-MSI-Mode.ps1 -WhatIf
#
# To execute the changes for real, run the script without any parameters:
# From PowerShell, run: .\Enable-MSI-Mode.ps1
if ($args -Contains '-WhatIf') {
# If -WhatIf is passed as a script argument, call the function with -WhatIf.
Enable-MsiModeForAllPciDevices -WhatIf
}
else {
# Otherwise, run the function normally.
Enable-MsiModeForAllPciDevices
}
#Requires -RunAsAdministrator
<#
.SYNOPSIS
Patches the 32-bit and 64-bit Nvidia NvFBC libraries.
.DESCRIPTION
This script checks the file contents of the Nvidia Frame Buffer Capture (NvFBC)
libraries against known patch data (stored as Base64 strings). If a library
does not match the patched version, it backs up the original library (by
renaming it with a trailing underscore) and writes the new patched version.
This script must be run with administrator privileges to modify files in
the System32 and SysWOW64 directories.
.NOTES
Author: Diab Neiroukh
Version: 1.1
#>
function Invoke-NvFBCPatch {
[CmdletBinding(SupportsShouldProcess = $true)]
param()
# Array containing patch data: [Base64String, FilePath, BackupFilePath, Architecture].
$patchArr = @()
$patchArr += , @('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4DwAAM48AACWPAAAojwAAAAAAAA5AkdldEVudmlyb25tZW50VmFyaWFibGVXAMsAQ3JlYXRlRmlsZVcAIwVTZXRGaWxlUG9pbnRlckV4AACGAENsb3NlSGFuZGxlAHMEUmVhZEZpbGUAAMQDTG9hZExpYnJhcnlXAACuAkdldFByb2NBZGRyZXNzAAD0AkdldFRlbXBGaWxlTmFtZVcAABIGV3JpdGVGaWxlAEtFUk5FTDMyLmRsbAAAEABfX0N4eEZyYW1lSGFuZGxlcjMAACUAX19zdGRfdHlwZV9pbmZvX2Rlc3Ryb3lfbGlzdAAASABtZW1zZXQAADUAX2V4Y2VwdF9oYW5kbGVyNF9jb21tb24AIQBfX3N0ZF9leGNlcHRpb25fY29weQAAIgBfX3N0ZF9leGNlcHRpb25fZGVzdHJveQABAF9DeHhUaHJvd0V4Y2VwdGlvbgAAVkNSVU5USU1FMTQwLmRsbAAAOABfaW5pdHRlcm0AOQBfaW5pdHRlcm1fZQAIAF9jYWxsbmV3aAAZAG1hbGxvYwAAGABmcmVlAABBAF9zZWhfZmlsdGVyX2RsbAAZAF9jb25maWd1cmVfbmFycm93X2FyZ3YAADUAX2luaXRpYWxpemVfbmFycm93X2Vudmlyb25tZW50AAA2AF9pbml0aWFsaXplX29uZXhpdF90YWJsZQAAJABfZXhlY3V0ZV9vbmV4aXRfdGFibGUAFwBfY2V4aXQAAGFwaS1tcy13aW4tY3J0LXJ1bnRpbWUtbDEtMS0wLmRsbABhcGktbXMtd2luLWNydC1oZWFwLWwxLTEtMC5kbGwAAK0FVW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyAABtBVNldFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAXAkdldEN1cnJlbnRQcm9jZXNzAIwFVGVybWluYXRlUHJvY2VzcwAAhgNJc1Byb2Nlc3NvckZlYXR1cmVQcmVzZW50AE0EUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIAGAJHZXRDdXJyZW50UHJvY2Vzc0lkABwCR2V0Q3VycmVudFRocmVhZElkAADpAkdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lAGMDSW5pdGlhbGl6ZVNMaXN0SGVhZAB/A0lzRGVidWdnZXJQcmVzZW50AAAAAAAAAAAA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', "$env:WINDIR\SysWOW64\NvFBC.dll", "$env:WINDIR\SysWOW64\NvFBC_.dll", "32-bit")
$patchArr += , @('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AAAhAF9fc3RkX2V4Y2VwdGlvbl9jb3B5AAAiAF9fc3RkX2V4Y2VwdGlvbl9kZXN0cm95AAEAX0N4eFRocm93RXhjZXB0aW9uAABWQ1JVTlRJTUUxNDBfMS5kbGwAAFZDUlVOVElNRTE0MC5kbGwAADYAX2luaXR0ZXJtADcAX2luaXR0ZXJtX2UACABfY2FsbG5ld2gAGQBtYWxsb2MAABgAZnJlZQAAPwBfc2VoX2ZpbHRlcl9kbGwAGABfY29uZmlndXJlX25hcnJvd19hcmd2AAAzAF9pbml0aWFsaXplX25hcnJvd19lbnZpcm9ubWVudAAANABfaW5pdGlhbGl6ZV9vbmV4aXRfdGFibGUAACIAX2V4ZWN1dGVfb25leGl0X3RhYmxlABYAX2NleGl0AABhcGktbXMtd2luLWNydC1ydW50aW1lLWwxLTEtMC5kbGwAYXBpLW1zLXdpbi1jcnQtaGVhcC1sMS0xLTAuZGxsAADTBFJ0bENhcHR1cmVDb250ZXh0ANoEUnRsTG9va3VwRnVuY3Rpb25FbnRyeQAA4QRSdGxWaXJ0dWFsVW53aW5kAAC8BVVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAewVTZXRVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIAHQJHZXRDdXJyZW50UHJvY2VzcwCaBVRlcm1pbmF0ZVByb2Nlc3MAAIkDSXNQcm9jZXNzb3JGZWF0dXJlUHJlc2VudABQBFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyAB4CR2V0Q3VycmVudFByb2Nlc3NJZAAiAkdldEN1cnJlbnRUaHJlYWRJZAAA8AJHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZQBsA0luaXRpYWxpemVTTGlzdEhlYWQAggNJc0RlYnVnZ2VyUHJlc2VudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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', "$env:WINDIR\System32\NvFBC64.dll", "$env:WINDIR\System32\NvFBC64_.dll", "64-bit")
Try {
ForEach ($item in $patchArr) {
$base64String = $item[0]
$filePath = $item[1]
$backupPath = $item[2]
$arch = $item[3]
Write-Host "Starting the process to patch the NvFBC libraries..." -ForegroundColor Yellow
If (-Not(Test-Path $filePath)) {
Write-Warning "Library not found at '$filePath'. Skipping."
Continue
}
If ([Convert]::ToBase64String((Get-Content -Path $filePath -Encoding Byte)) -Ne $base64String) {
If ($PSCmdlet.ShouldProcess($filePath, "Patching the $arch library...")) {
Try {
# Since the script requires admin, we can perform the actions directly.
Move-Item -Path $filePath -Destination $backupPath -Force -ErrorAction Stop
[IO.File]::WriteAllBytes($filePath, [Convert]::FromBase64String($base64String))
Write-Host "The NvFBC library ($arch) was patched." -ForegroundColor Green
}
Catch {
Write-Error "Failed to patch '$filePath'. Error: $_"
}
}
}
Else {
Write-Host "[SKIPPED] The patch has already been applied to the $arch library at '$filePath'." -ForegroundColor Gray
}
}
Write-Host "Script finished." -ForegroundColor Yellow
Write-Host "A system reboot is recommended for all changes to take effect."
}
Catch {
Write-Error "An unexpected error occurred while patching the NvFBC libraries. Error: $_"
}
}
# --- Execution ---
# The script can be run with a -WhatIf parameter to see what changes would be made without actually making them.
# From PowerShell, run: .\Script1.ps1 -WhatIf
#
# To execute the changes for real, run the script without any parameters:
# From PowerShell, run: .\Script1.ps1
If ($args -Contains '-WhatIf') {
# If -WhatIf is passed as a script argument, call the function with -WhatIf.
Invoke-NvFBCPatch -WhatIf
}
Else {
# Otherwise, run the function normally.
Invoke-NvFBCPatch
}
<#
.SYNOPSIS
Creates and manages symbolic links for a central binary directory.
.DESCRIPTION
This script automates the process of creating a flat directory of symbolic
links that point to various executable and library files scattered across
subdirectories. It first removes any existing symlinks in the target directory
to ensure a clean slate. It then finds all .exe, .dll, and .cmd files in
the immediate subfolders (and their 'bin' subfolders) and creates symlinks
for them. It also creates a set of specific, predefined symlinks.
.NOTES
Author: Diab Neiroukh
Version: 1.1
#>
function Update-BinSymlinks {
[CmdletBinding(SupportsShouldProcess = $true)]
param()
Write-Host "Starting the process to update binary symlinks..." -ForegroundColor Yellow
# The central directory where symlinks will be created.
$binDir = "$env:HOMEDRIVE$env:HOMEPATH\Binaries"
# Remove all existing symlinks in the target directory.
$existingSymlinks = Get-ChildItem -Path $binDir -File | Where-Object { $_.LinkType -Eq "SymbolicLink" }
ForEach ($symlink in $existingSymlinks) {
If ($PSCmdlet.ShouldProcess($symlink.FullName, "Removing existing symlink...")) {
Try {
Remove-Item -Path $symlink.FullName -Force
Write-Host "Removed symlink: $($symlink.Name)."
}
Catch {
Write-Error "Failed to remove symlink $($symlink.Name): $_."
}
}
}
Write-Host "Finished removing $($existingSymlinks.Count) existing symlinks."
# Find all target files to be linked.
Write-Host "Searching for files to link..."
$filesToLink = @()
# Define extensions with a leading dot for accurate matching against the .Extension property.
$extensions = @(".exe", ".dll", ".cmd")
# Find files in direct subfolders (1 level deep).
$filesToLink += Get-ChildItem -Path $binDir -Directory | Get-ChildItem -File -Recurse -Depth 0 | Where-Object { $extensions -Contains $_.Extension }
# Find files within a 'bin' subfolder inside the direct subfolders.
$filesToLink += Get-ChildItem -Path $binDir -Directory | Get-ChildItem -Filter "bin" -Directory -ErrorAction SilentlyContinue | Get-ChildItem -File | Where-Object { $extensions -Contains $_.Extension }
# Create symlinks for each discovered file.
ForEach ($file in $filesToLink) {
$destPath = Join-Path -Path $binDir -ChildPath $file.Name
If (Test-Path $destPath) {
# Only show the warning if not running in -WhatIf mode.
If (-Not $PSBoundParameters.ContainsKey('WhatIf')) {
Write-Warning "[SKIPPED] A file or link named '$($file.Name)' already exists." -ForegroundColor Gray
}
Continue
}
If ($PSCmdlet.ShouldProcess($destPath, "Creating symlink to $($file.FullName)...")) {
Try {
New-Item -ItemType SymbolicLink -Path $destPath -Target $file.FullName | Out-Null
Write-Host "Created symlink: $($file.Name) -> $($file.FullName)." -ForegroundColor Green
}
Catch {
Write-Error "Failed to create symlink for $($file.Name): $_."
}
}
}
# Create additional specific symlinks.
$additionalSymlinks = @{
"upnpc.exe" = "upnpc-shared.exe"
"SeaChest_Lite.exe" = "SeaChest_Lite_windows_x86_64.exe"
"nano.exe" = "..\AppData\Local\Microsoft\WinGet\Links\nano.exe"
}
ForEach ($file in $additionalSymlinks.GetEnumerator()) {
$filePath = Join-Path -Path $binDir -ChildPath $file.Key
$destPath = Join-Path -Path $binDir -ChildPath $file.Value
If (-Not (Test-Path $destPath)) {
Write-Warning "[SKIPPED] Target file does not exist: $destPath." -ForegroundColor Gray
Continue
}
If ($PSCmdlet.ShouldProcess($filePath, "Creating specific symlink to $($file.Value)...")) {
Try {
New-Item -ItemType SymbolicLink -Path $filePath -Target $destPath -Force | Out-Null
Write-Host "Created symlink: $($file.Key) -> $($file.Value)." -ForegroundColor Green
}
Catch {
Write-Error "Failed to create specific symlink for $($file.Key): $_"
}
}
}
# Add symlink to the Update Binaries script.
$updateScriptPath = "$env:HOMEDRIVE$env:HOMEPATH\Scripts\Update Binaries.ps1"
$updateScriptDest = Join-Path -Path $binDir -ChildPath "Update Binaries.ps1"
If (Test-Path $updateScriptPath) {
If ($PSCmdlet.ShouldProcess($updateScriptDest, "Creating symlink to update script...")) {
Try {
New-Item -ItemType SymbolicLink -Path $updateScriptDest -Target $updateScriptPath -Force | Out-Null
Write-Host "Created symlink: Update Binaries.ps1 -> $updateScriptPath." -ForegroundColor Green
}
Catch {
Write-Error "Failed to create symlink for Update Binaries.ps1: $_."
}
}
}
Else {
Write-Warning "[SKIPPED] Target script does not exist: $updateScriptPath." -ForegroundColor Gray
}
Write-Host "Script finished." -ForegroundColor Yellow
}
# --- Execution ---
# The script can be run with a -WhatIf parameter to see what changes would be made without actually making them.
# From PowerShell, run: .\Script2.ps1 -WhatIf
#
# To execute the changes for real, run the script without any parameters:
# From PowerShell, run: .\Script2.ps1
If ($args -Contains '-WhatIf') {
# If -WhatIf is passed as a script argument, call the function with -WhatIf.
Update-BinSymlinks -WhatIf
}
Else {
# Otherwise, run the function normally.
Update-BinSymlinks
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment