Here is a quick and dirty encrypted notepad for admins who like to keep passwords in Notepad where the organization says you’d better not. I wrote this in PowerShell so my colleagues can easily manage it after I depart. PowerShell should run where some executable binaries might be restricted.
Features
Encrypted Notepad has basic light and dark mode pulled from system setting.
Automatic Key Generation. First run generates and stores the key in your home profile without any intervention.
Note: If you move to a new machine make sure you copy and transfer that key from your old profile to your new profile if you plan to open any note encrypted with that key. This is a win forms app so it’s Windows only unless it works with Wine, and why would you?
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()