Skip to content

Instantly share code, notes, and snippets.

@Hashbrown777
Hashbrown777 / stackoverflow-unsave.js
Last active May 31, 2023 09:46
Unfollow all your questions in a Stack Exchange list
//go to one of your lists, eg https://superuser.com/users/saves/241800
$('.s-block-link.js-unsave').click()
//NO NEED TO USE THIS
(async (links) => {
const request = {
body : 'fkey=' + localStorage['se:fkey'].replace(/,.*$/, ''),
method : 'POST',
@Hashbrown777
Hashbrown777 / merge.ps1
Created May 22, 2023 12:00
take all files in $from and put them in the same place under $to, replacing any matched files
$from = $from | gi
$to = ($to | gi).FullName
$from `
| Get-ChildItem -File -Recurse `
| &{
Begin {
$from = '^' + [Regex]::Escape($from.FullName)
}
Process {
@Hashbrown777
Hashbrown777 / batt50.ps1
Created May 15, 2023 05:00
Discharge laptop to 55% before shutting it down & not using it for a good while
while ((Get-CimInstance Win32_Battery).EstimatedChargeRemaining -gt 55) { sleep 60 } shutdown -s -t 0
//leaves only the unique elements in two sorted arrays
function diff(bob, steve) {
for (let b = 0, s = 0; b < bob.length && s < steve.length; ++b, ++s) {
if (bob[b] < steve[s])
--s;
else if (bob[b] > steve[s])
--b;
else {
bob.splice(b--, 1);
steve.splice(s--, 1);
@Hashbrown777
Hashbrown777 / _punchHoles.ps1
Last active June 22, 2023 17:01
In files identified as containing corrupted blocks punch holes in the valid blocks so they don't take up as much space
$blockSize = 4KB
$buffer=[byte[]]::new($blockSize)
Get-ChildItem -File `
| Sort-Object -Property Length
| %{
"$($_.Name)`t$($_.Length / 1MB -bor 0)MB"
$path = $_.FullName
#useful if your files are patchable eg torrent-sourced
sudo cp --reflink=always $path "${path}_rescued"
@Hashbrown777
Hashbrown777 / datesort.ps1
Created January 16, 2023 17:19
Sorting captures from holidays into folders named by date
$ErrorActionPreference = 'Stop'
$shell = New-Object -ComObject 'Shell.Application'
&{
gci -File `
| ?{
#leave these in the root directory
$_.Name -notmatch '^(IMG_\d{4}.JPG|sort.ps1|Untitled.png)$'
}
@Hashbrown777
Hashbrown777 / dirdiff.ps1
Created January 16, 2023 08:52
Sees if there are any differences between two folder structures and file contents therein using a multithreaded process
#folders you want checked that are found in each root
$paths = 'Pics of cats', 'Pics of dogs'
#roots to compare, must include terminating slash
$roots = '//?/D:/PicsBackup/', '//?/C:/Users/Hashbrown/Desktop/'
#any files that are permitted to differ and wont be checked
$skip = `
'Pics of cats/test.ps1',
'Pics of cats/tabby/download.log'
#periodically the script outputs the last sucessfully checked path.
#upon failure you can start from exactly where you were, skipping all previously checked files
@Hashbrown777
Hashbrown777 / clonepage.js
Last active June 12, 2023 09:06
Clones the selected element in the console into a new window, copying all styles and re-inserting any pseudo elements.
(function ({element, asBody, embedUrls, convertPseudo}) {
let copy = open().document;
copy.open();
copy.write('<!doctype html>\n<html><head></head><body></body></html>');
copy.close();
if (asBody) {
for (const name of element.getAttributeNames())
copy.body.setAttribute(name, element.getAttribute(name));
for (const node of element.children)
@Hashbrown777
Hashbrown777 / ChunkSum.ps1
Created November 23, 2022 17:17
Get multiple checksum hashes on a per-chunk basis from a single file.
<# Similar to a CheckSum, but you receive one for every chunk of a given size in the file as if hashing several files each of that size.
You could use this to assess where in a file it differs from another (say, over a network, where comparing digests is infinitely better than comparing the real byte streams)
-File
Can be a string or file reference (it's passed to Get-Item internally anyway)
-ChunkSize
The size to 'break' the file into to report each hash on.
A chunksize greater or equal to the filesize is equivalent to a normal Get-FileHash call.
This figure does not have to be a multiple of BufferSize (nor vice versa); the streaming is robust.
-BufferSize
The amount, in bytes, to read at a time before passing it on to the hashing algorithm.
@Hashbrown777
Hashbrown777 / wslMount.ps1
Last active December 3, 2023 20:13
Attach one or more physical disks to a wsl instance, using encryption and formatting options `wsl --mount` doesn't support
<# calling the wslMount function will attach one or more physical disks to a wsl instance
-drives
This parameter specifies which disks, and is an array of what Windows calls the Friendly Name.
You can see these by calling `Get-PhysicalDisk`.
-count
The list of friendly names are not necessarily unique (eg if you have multiple of the same model of drive).
Count is required so that you know how many disks have been matched, and will be passed to WSL.
-wsl
The name of the wsl install you want to interact with, defaults to the default wsl instance.
-mount