Skip to content

Instantly share code, notes, and snippets.

View santisq's full-sized avatar

Santiago Squarzon santisq

View GitHub Profile
@santisq
santisq / nonblockingform.ps1
Created June 5, 2024 21:03
easiest example i could think of using a runspace
using namespace System.Management.Automation.Runspaces
using namespace System.Windows.Forms
using namespace System.Drawing
Add-Type -AssemblyName System.Windows.Forms, System.Drawing
$form = [Form]@{ StartPosition = [FormStartPosition]::CenterScreen }
$iss = [initialsessionstate]::CreateDefault2()
$iss.Variables.Add([SessionStateVariableEntry]::new('form', $form, ''))
$PrintWindowCode = @'
using System;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Drawing.Imaging;
public class ScreenCapture
{
[DllImport("user32.dll")]
public static extern bool GetWindowRect(IntPtr hWnd, out Rect lpRect);
$map = @{
color = 'red'
person = @{
firstname = 'Bob'
lastname = 'Smith'
}
gender = 'his'
}
$template = @'
$func = Invoke-RestMethod https://gist.githubusercontent.com/santisq/bd3d1d47c89f030be1b4e57b92baaddd/raw/73952eceb82cd31b8cb9f2fd04e2a3ef3c428110/Measure-Expression.ps1
. ([scriptblock]::Create($func))
time -TestCount 5 -OutputAllTests @{
'TestUpdateTypeData' = {
class TestUpdateTypeData {
hidden [int] $_x
hidden [int] $_y
TestUpdateTypeData([int] $x, [int] $y) {
Import-Module ActiveDirectory
$func = Invoke-RestMethod https://gist.githubusercontent.com/santisq/bd3d1d47c89f030be1b4e57b92baaddd/raw/73952eceb82cd31b8cb9f2fd04e2a3ef3c428110/Measure-Expression.ps1
. ([scriptblock]::Create($func))
$adsi = {
$searcher = [adsisearcher]::new(
'(&(objectClass=user)(objectCategory=person))',
[string[]] @(
'DistinguishedName'
'userAccountControl'
@santisq
santisq / appreport.ps1
Last active May 22, 2024 16:59
App Registrations with Secret or Certificate Expiration Date GT 100 Days
class AppRegistration {
[string] $DisplayName
[guid] $AppId
[guid] $Id
$CreatedDateTime
AppRegistration([hashtable] $app) {
$this.DisplayName = $app['DisplayName']
$this.AppId = $app['AppId']
$this.Id = $app['Id']
@santisq
santisq / method1.ps1
Last active May 13, 2024 02:21
bind default values to `$PSBoundParameters`
& {
[CmdletBinding(DefaultParameterSetName = 'A')]
param(
[Parameter(ParameterSetName = 'A')]
$ParamA = 'A',
[Parameter(ParameterSetName = 'B')]
$ParamB = 'B',
[Parameter(Mandatory)]
$ParamBoth
)
class JwtAssertion {
[System.Security.Cryptography.X509Certificates.X509Certificate2] $Certificate
hidden [System.Text.Encoding] $encoding = [System.Text.Encoding]::UTF8
hidden [hashtable] $claims = @{
# exp: 5-10 minutes after nbf at most
exp = [System.DateTimeOffset]::UtcNow.AddMinutes(5).ToUnixTimeSeconds()
# jti: a GUID, unique identifier for the request
jti = [guid]::NewGuid().ToString()
$stream = [System.IO.MemoryStream]::new([System.Text.Encoding]::UTF8.GetBytes(@'
[
{
"DomainName": "example1.com",
"DomainNetBIOSName": "EXAMPLE1",
"IDRanges": [
{ "RangeStart": 2000, "RangeEnd": 2999, "Attribute": "uidNumber", "AccountType": "Computer" },
{ "RangeStart": 3000, "RangeEnd": 3999, "Attribute": "uidNumber", "AccountType": "MSA" },
{ "RangeStart": 4000, "RangeEnd": 4999, "Attribute": "gidNumber", "AccountType": "Group" },
{ "RangeStart": 5000, "RangeEnd": 5999, "Attribute": "uidNumber", "AccountType": "AdmAccount", "IDGeneration": { "Type": "Calculation", "RefDomain": null } },
@santisq
santisq / managementGroupReport.ps1
Last active March 12, 2024 18:47
Script to report on Tenant Management Groups using Resource Manager API, KQL and PowerShell
$subIdContext = @{
Stage = 'xxxxx-xxxxx-xxxxx-xxxx'
Prod = 'xxxxx-xxxxx-xxxxx-xxxx'
}
if ($connected.Count -ne 2) {
$connected = @(
Connect-AzAccount -Subscription $subIdContext['Prod'] -SkipContextPopulation
Connect-MgGraph
)