Skip to content

Instantly share code, notes, and snippets.

@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 February 9, 2023 13:23
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.
@zett42
zett42 / _JoinPerfTestHelper.psm1
Last active September 4, 2022 19:48
Test performance of various ways to join arrays of objects on a given property in PowerShell
class MyObject1 {
[string] $Name
[int] $Foo
}
class MyObject2 {
[string] $Name
[int] $Bar
}
@zett42
zett42 / GetSteppablePipeline_Demo.ps1
Created August 24, 2022 07:46
PowerShell GetSteppablePipeline
function Write-Log {
param(
[Parameter(ValueFromPipeline, Mandatory)]
[object] $InputObject,
[parameter(Mandatory)]
[string] $Path,
[parameter()]
[switch] $PassThru
@zett42
zett42 / CustomDslParser.cs
Last active May 28, 2022 21:22
Example for a custom DSL parser in C# using ReadOnlySpan<char>
/* Copyright 2022 zett42
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
(the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
@zett42
zett42 / Benchmark_IndexOfFirstNonWhitespaceChar.cs
Last active May 26, 2022 19:36
Benchmark methods for getting index of first non-whitespace character in C#
using System;
using System.Linq;
using BenchmarkDotNet.Running;
using BenchmarkDotNet.Attributes;
using System.Text.RegularExpressions;
namespace Benchmark_IndexOfFirstNonWhitespaceChar {
class Program {
static void Main( string[] args ) {