Skip to content

Instantly share code, notes, and snippets.

@zett42
zett42 / BuildShowArgsExe.ps1
Created April 16, 2025 10:32
Simple PowerShell script to build a C# console application that prints all arguments
# Builds a C# console application that prints all arguments (requires Windows PowerShell 5.1)
Add-Type -OutputType ConsoleApplication -OutputAssembly ShowArgs.exe -TypeDefinition @'
using System;
namespace MyApp
{
class Program
{
static int Main( string[] args )
@zett42
zett42 / ConsoleControlHandlerDemo.ps1
Last active March 19, 2025 12:24
PowerShell Console Control Handler Demo (using script block)
$ErrorActionPreference = 'Stop'
# Compile the cmdlet and import it as a module
Add-Type -TypeDefinition (Get-Content $PSScriptRoot\PSConsoleCtrlHandler.cs -Raw) -PassThru | Import-Module -Assembly { $_.Assembly }
# Add the handler
Add-ConsoleCtrlHandler {
param( [ConsoleCtrlEvent] $ctrlType )
$logPath = (New-Item $env:temp\_MyPS\console.log -Force).Fullname
@zett42
zett42 / PowerShellConsoleCtrlHandlerDemo.ps1
Created March 18, 2025 18:54
PowerShell Console Control Handler Demo (SetConsoleCtrlHandler)
Add-Type -TypeDefinition @'
using System;
using System.IO;
using System.Runtime.InteropServices;
public class ConsoleHelper {
[DllImport("Kernel32")]
private static extern bool SetConsoleCtrlHandler(HandlerRoutine handler, bool add);
private delegate bool HandlerRoutine(int ctrlType);
@zett42
zett42 / Bundle Snippet.wxs
Last active October 10, 2024 10:19
Customize a Wix v5 theme with automatic localization
<BootstrapperApplication>
<bal:WixStandardBootstrapperApplication
Theme="rtfLargeLicense"
ThemeFile="Theme.xml"
LicenseFile="1033\License.rtf"
LocalizationFile="1033\thm.wxl"
LogoFile="logo.png"
ShowVersion="yes"
/>
@zett42
zett42 / FalloutHackerMinigame.ps1
Last active July 16, 2023 08:54
Guess the password - minigame inspired by Fallout
<#
.SYNOPSIS
A PowerShell game inspired by the Fallout hacking minigame.
.DESCRIPTION
This is a PowerShell game inspired by the Fallout hacking minigame.
The game is played by guessing the password of a computer terminal.
The player has a limited number of attempts to guess the password.
After each guess, the game will display the number of correct letters.
The player can use this information to narrow down the list of possible passwords.
The game has multiple difficulty levels. The higher the level, the longer the passwords to guess become.
@zett42
zett42 / WatchWindowOpened.ps1
Last active June 19, 2023 16:08
Listen to WindowOpenedEvent using UI automation in PowerShell with inline C#
# Windows PowerShell (5.1) script
# Watch top-level window creation and log window name, process ID and process name.
Add-Type -ReferencedAssemblies UIAutomationClient, UIAutomationTypes -TypeDef @'
using System;
using System.Windows.Automation;
public class WindowWatcher
{
public static void Watch()
@zett42
zett42 / Set-ChaptersToVideo.ps1
Last active March 10, 2023 11:59
Add chapters to a video file
<#
.SYNOPSIS
Sets chapters to a video file using a timestamp file.
.DESCRIPTION
This function sets chapters to a video file using a timestamp file. The output file will have the same format and codec as the input file,
but with the chapters metadata added.
.PARAMETER Path
The path of the input video file.
@zett42
zett42 / Split-AudioTracks.ps1
Last active March 8, 2023 18:17
Split an audio or video file into multiple audio files based on a time stamp file
<#
.SYNOPSIS
Split an audio or video file into multiple audio files based on a time stamp file.
.DESCRIPTION
This script uses FFmpeg to extract parts of an audio or video file into separate audio files based on the time stamps in the time stamp file.
The function also supports creating a playlist (m3u8) for the extracted audio tracks.
.PARAMETER Path
The path to the input audio or video file.
@zett42
zett42 / SelfElevate.ps1
Last active January 9, 2025 19:18
Self-Elevate PowerShell script
# PowerShell demo to self-elevate a script
# - Makes sure parameters are properly forwarded to the elevated script (preserving argument types and spaces in string arguments).
# - Passes the current directory to elevated script.
param(
[string] $Foo,
[int] $Bar
)
# Self-elevate the script if required
if (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
@zett42
zett42 / Get-RegStringsWithEmbeddedNull.ps1
Last active November 17, 2022 16:35
List registry string values that unexpectedly contain embedded null characters
<#
.SYNOPSIS
List registry string values that unexpectedly contain embedded null characters.
.DESCRIPTION
Enumerates the given registry key recursively, outputting information about all registry string values (REG_SZ and REG_EXPAND_SZ)
that unexpectedly contain embedded null characters.
.PARAMETER Hive
The registry hive.