For admins who like to keep passwords in Notepad I made a simple encrypted notepad in PowerShell. It can be run where actual executables sometimes can’t. Has basic light and dark mode from system setting and stores the key in your home profile without any intervention. If you move to a new machine make sure you copy and transfer that key if you plan to open any note encrypted with that key. This is a winforms app so it’s Windows only unless it works with Wine.
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
<#
C. Nichols
Aug. 28, 2025
Simple PowerShell encrypted notes utility.
#>
$darkModeEnabled = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize").AppsUseLightTheme -eq 0
function Get-key() {
$KeyPath = "C:\Users\$env:USERNAME\Documents\$env:USERNAME.bin"
if (Test-Path -Path $KeyPath) {
$Key = Get-Content $KeyPath
} else {
$EncryptionKeyBytes = New-Object Byte[] 32
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($EncryptionKeyBytes)
$EncryptionKeyBytes | Out-File $KeyPath
[void][System.Windows.Forms.MessageBox]::Show("Secret key created in Documents as $($env:USERNAME).bin!")
}
return $key
}
function encrypted_save() {
PARAM ($p, $s, $k)
$secureString = $s | ConvertTo-SecureString -AsPlainText -Force
$encryptedData = $secureString | ConvertFrom-SecureString -Key $k
$encryptedData | Set-Content -Path $p
}
function encrypted_open() {
PARAM ($p, $k)
$encryptedData = Get-Content -Path $p
$secureString = $encryptedData | ConvertTo-SecureString -Key $k
$plainText = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto(
[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)
)
$textArea.Text = $plainText
}
function OnClick_saveToolStripMenuItem($Sender,$e){
$saveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
$saveFileDialog.InitialDirectory = [Environment]::CurrentDirectory
$saveFileDialog.Filter = 'BIN (*.bin)|*.bin|TEXT (*.txt)|*.txt|All (*.*)|*.*'
if ($saveFileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
$p = $saveFileDialog.FileName
$k = Get-key
encrypted_save -s $textArea.Text -k $k -p $p
}
}
function OnClick_openToolStripMenuItem($Sender,$e){
$openFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$openFileDialog.InitialDirectory = [Environment]::CurrentDirectory
$openFileDialog.Filter = 'BIN (*.bin)|*.bin|PlainText (*.txt)|*.txt|ALL (*.*)|*.*'
if ($openFileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
$p = $openFileDialog.FileName
$k = Get-key
$t = encrypted_open -k $k -p $p
}
}
# Load external assemblies
[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void][Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$Menu = new-object System.Windows.Forms.MenuStrip
$fileToolStripMenuItem = new-object System.Windows.Forms.ToolStripMenuItem
$newToolStripMenuItem = new-object System.Windows.Forms.ToolStripMenuItem
$openToolStripMenuItem = new-object System.Windows.Forms.ToolStripMenuItem
$saveToolStripMenuItem = new-object System.Windows.Forms.ToolStripMenuItem
$closeToolStripMenuItem = new-object System.Windows.Forms.ToolStripMenuItem
$quitToolStripMenuItem = new-object System.Windows.Forms.ToolStripMenuItem
#
# menu
#
$Menu.Items.AddRange(@(
$fileToolStripMenuItem))
$Menu.Location = new-object System.Drawing.Point(0, 0)
$Menu.Name = "Menu"
$Menu.Size = new-object System.Drawing.Size(354, 24)
$Menu.TabIndex = 0
$Menu.Text = "menuBar"
#
# fileToolStripMenuItem
#
$fileToolStripMenuItem.DropDownItems.AddRange(@(
$newToolStripMenuItem
$openToolStripMenuItem,
$saveToolStripMenuItem,
$closeToolStripMenuItem,
$quitToolStripMenuItem))
$fileToolStripMenuItem.Name = "fileToolStripMenuItem"
$fileToolStripMenuItem.Size = new-object System.Drawing.Size(35, 20)
$fileToolStripMenuItem.Text = "&File"
#
# openToolStripMenuItem
#
$openToolStripMenuItem.Name = "openToolStripMenuItem"
$openToolStripMenuItem.Size = new-object System.Drawing.Size(152, 22)
$openToolStripMenuItem.Text = "&Open"
$openToolStripMenuItem.Add_Click( { OnClick_openToolStripMenuItem $openToolStripMenuItem $EventArgs} )
#
# saveToolStripMenuItem
#
$saveToolStripMenuItem.Name = "saveToolStripMenuItem"
$saveToolStripMenuItem.Size = new-object System.Drawing.Size(152, 22)
$saveToolStripMenuItem.Text = "&Save"
$saveToolStripMenuItem.Add_Click( { OnClick_saveToolStripMenuItem $saveToolStripMenuItem $EventArgs} )
#
# closeToolStripMenuItem
#
$closeToolStripMenuItem.Name = "closeToolStripMenuItem"
$closeToolStripMenuItem.Size = new-object System.Drawing.Size(152, 22)
$closeToolStripMenuItem.Text = "&Close"
$closeToolStripMenuItem.Add_Click( { OnClick_closeToolStripMenuItem $closeToolStripMenuItem $EventArgs} )
function OnClick_closeToolStripMenuItem($Sender,$e){
$textArea.Clear()
}
#
# newToolStripMenuItem
#
$newToolStripMenuItem.Name = "newToolStripMenuItem"
$newToolStripMenuItem.Size = new-object System.Drawing.Size(152, 22)
$newToolStripMenuItem.Text = "&New"
$newToolStripMenuItem.Add_Click( { OnClick_newToolStripMenuItem $newToolStripMenuItem $EventArgs} )
function OnClick_newToolStripMenuItem($Sender,$e){
$textArea.Clear()
}
#
# quitToolStripMenuItem
#
$quitToolStripMenuItem.Name = "quitToolStripMenuItem"
$quitToolStripMenuItem.Size = new-object System.Drawing.Size(152, 22)
$quitToolStripMenuItem.Text = "&Quit"
$quitToolStripMenuItem.Add_Click( { OnClick_quitToolStripMenuItem $quitToolStripMenuItem $EventArgs} )
function OnClick_quitToolStripMenuItem($Sender,$e){
$form.Close()
}
#
# Create form
#
$form = New-Object System.Windows.Forms.Form
$form.Text = "Noteslab"
$form.Size = New-Object System.Drawing.Size(800, 500)
$form.StartPosition = 'CenterScreen'
$form.BackColor = [System.Drawing.Color]::FromArgb(30, 30, 30) # Dark background
$form.ForeColor = [System.Drawing.Color]::White # Light text
#
# Create a TextBox
#
$textArea = New-Object System.Windows.Forms.TextBox
$textArea.Font = New-Object System.Drawing.Font("Microsoft Sans Serif", 14)
$textArea.Multiline = $true
$textArea.ScrollBars = "Vertical"
$textArea.Size = New-Object System.Drawing.Size(765, 425)
$textArea.Location = New-Object System.Drawing.Point(10, 10)
$textArea.Dock = "Fill"
#
# Set basic system theme
#
if ($darkModeEnabled -eq $true) {
#$form.BackColor = [System.Drawing.Color]::FromArgb(38,38,38)
#$form.ForeColor = [System.Drawing.Color]::White;
$menu.BackColor = [System.Drawing.Color]::DarkGray
$menu.ForeColor = [System.Drawing.Color]::Black
$textArea.BackColor = [System.Drawing.Color]::FromArgb(38,38,38)
$textArea.ForeColor = [System.Drawing.Color]::White
$textArea.BorderStyle = [System.Windows.Forms.BorderStyle]::None
}
#
# Add the TextBox to the form
#
$form.Controls.Add($textArea)
#
# Add menu
#
$form.Controls.Add($Menu)
$form.MainMenuStrip = $Menu
function OnFormClosing_MenuForm($Sender,$e){
# Allow closing
($_).Cancel= $False
}
$form.Add_FormClosing( { OnFormClosing_MenuForm $form $EventArgs} )
$form.Add_Shown({$form.Activate()})
#
# Show the form
#
#[void]$form.ShowDialog()
[System.Windows.Forms.Application]::Run($form)
$form.Dispose()