Skip to content

Instantly share code, notes, and snippets.

View JPRuskin's full-sized avatar

James Ruskin JPRuskin

View GitHub Profile
using namespace Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters
function Invoke-AzVmScript {
<#
.Synopsis
Runs a script block or file on a given Azure VM
.Notes
This takes a surprisingly long time to run, and is a bit flaky. Any output past 4096 characters is not returned.
#requires -Modules Az.Accounts
using namespace Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters
#function Add-JitAccess {
<#
.Synopsis
Adds a JIT exception to VMs in the provided Resource Group
.Notes
Until we have an Az.Accounts version that works with Az.Security, we cannot use the provided cmdlets to maintain JIT. This is a workaround.
.Example
@JPRuskin
JPRuskin / AOC2020.md
Last active December 10, 2020 09:24
Advent of Code 2020

Advent of Code

This gist contains my attempt(s) to solve the Advent of Code 2020 puzzles, in as many ways as I fancy.

@JPRuskin
JPRuskin / Convert-ControlSaveFiles.ps1
Last active August 28, 2020 13:57
A quick script to copy Remedy's Control saves from Epic's save location to Steam.
<#
.Synopsis
Copies save data from the EGS version of Remedy's Control to Steam's save location.
.Description
Old save files appear to be in a file structure similar to:
%LocalAppData%\Remedy\Control\Default-Epic-User\savegame-slot-00\global.chunk
Save files for the Steam version seem to be in the format:
Steam\userdata\<user-id>\870780\remote\savegame-slot-00_global (no extension)
@JPRuskin
JPRuskin / AzureLogContainerCreation.ps1
Created May 29, 2020 08:54
Functions to create immutable containers in Azure, for the purpose of log storage
function Add-AzStorageAccount {
<#
.Synopsis
This function creates a standardised storage account in the ResourceGroupName
.Example
Add-QmAzStorageAccount -ResourceGroupName AUSC1-FRG -Name ausc1frgdiagag3249b -Location "uscentral"
#>
[CmdletBinding()]
param(
@JPRuskin
JPRuskin / AzRestBuildHelper.psd1
Created April 21, 2020 14:40
Quick Azure DevOps REST API build helper stuff
@{
ModuleVersion = '0.1.0'
# Modules that must be imported into the global environment prior to importing this module
RequiredModules = @(
)
# Exports. Populated by Optimize-Module during the build step.
# For best performance, do not use wildcards and do not delete these entry!
@JPRuskin
JPRuskin / ConvertTo-ProductKey.ps1
Last active April 5, 2020 11:51
Should output the Windows product key
function ConvertTo-ProductKey {
[CmdletBinding()]
param(
[byte[]]$Key,
[switch]$Validate
)
end {
$KeyOffset = 52
[char[]]$Chars = "BCDFGHJKMPQRTVWXY2346789"
$KeyOutput = ""
@JPRuskin
JPRuskin / Invoke-ModifiedTests.ps1
Created March 13, 2020 11:58
Gets a list of changed files in a given repository directory and runs tests that match them.
function Invoke-ModifiedTests {
<#
.Synopsis
Gets a list of changed files in a repository, and run every changed test and test matching a changed function/file
.Description
This assumes that each file has a matching .Tests.ps1 file, suited for running with Pester. It also ignores Integration tagged tests.
.Example
Invoke-ModifiedTests -Repository C:\Source\Module
using namespace Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters
function Export-PfxFromAzureKeyVault {
<#
.Synopsis
Exports a PFX file from an Azure KeyVault Certificate
.Example
Export-PfxFromAzureKeyVault -VaultName TestVault -Name TestCert -Password $SecurePW -Path C:\Temp\TestCert.pfx
#>
using namespace Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters
function Invoke-AzVMScript {
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[ResourceGroupCompleter()]
[string]$ResourceGroupName,
[Parameter(Mandatory)]