Skip to content

Instantly share code, notes, and snippets.

View thedavecarroll's full-sized avatar
🧑‍💻
Clever Status

Dave Carroll thedavecarroll

🧑‍💻
Clever Status
View GitHub Profile
@thedavecarroll
thedavecarroll / 1-Measure-PSCodeLine.ps1
Last active June 24, 2020 14:35
IronScripter Challenge - June 9, 2020 - Building a PowerShell Command Inventory
function Measure-PSCodeLine {
[CmdLetBinding()]
param(
[Parameter(Mandatory,ValueFromPipeline)]
[ValidateScript({Test-Path -Path $_})]
[string]$Path
)
$TotalLines = $CodeLines = 0
$Files = Get-ChildItem -Path $Path -Recurse -Include *.ps1,*.psm1 -File
$Files | Foreach-Object {
@thedavecarroll
thedavecarroll / Part1-ConvertTo-ClassDefinition.ps1
Last active May 30, 2023 13:35
Creating a Class Definition from an Existing Object - Ironscripter Challenge
#Requires -Version 5.1
function ConvertTo-ClassDefinition {
param(
[Parameter(Position = 0, Mandatory, ValueFromPipeline)]
[object]$Object,
[ValidateNotNullOrEmpty()]
[string]$ClassName,
@thedavecarroll
thedavecarroll / PracticeChallenge.ps1
Created February 1, 2021 15:50
Scripting Challenge Meetup
$Splatting = Get-Help about_Splatting
$SortByWordCount = $Splatting -Split('\W+') | Where-Object {$_ -ne 'the'} | Group-Object | Sort-Object -Property Count -Descending
$Splatting | Select-Object Name,
@{l='NumberOfWords';e={$_.ToString() | Measure-Object -Word | Select-Object -ExpandProperty Words}},
@{l='TopWord';e={$SortByWordCount[0].Name}},@{l='TopWordCount';e={$SortByWordCount[0].Count}},
@{l='Top5Words';e={($SortByWordCount.Name | Select-Object -First 5) -join ','}}
@thedavecarroll
thedavecarroll / SearchADDnsRecord.psm1
Last active January 8, 2024 16:09
This simple PowerShell script module uses a custom class and Get-ADObject to search an Active Directory-integrated DNS Zone by name or partial name.
#Requires -Version 5.1
#Requires -Module ActiveDirectory
$script:ADRootDSE = Get-ADRootDSE
class ADDnsNode {
# AD Object Properties
[String]$Name
[String]$CanonicalName
@thedavecarroll
thedavecarroll / 1-Intermediate.ps1
Last active February 16, 2021 00:27
Another PowerShell Math Challenge - IronScripter Challenge - 2021-02-09 (Intermediate Only)
#requires -Version 7
function Get-SumTotal {
[CmdLetBinding()]
param(
[Parameter(Mandatory,Position = 0,ValueFromPipeline)]
[ValidatePattern('^\d{1,10}$', ErrorMessage = '"{0}" does not match only numbers 0-9 with a maximum of 10.')]
#[ValidatePattern('^\d{1,10}$')]
#[ValidateScript({ if ($_ -notmatch '^\d{1,10}$') { throw ('{0}"{1}" does not match only numbers 0-9 with a maximum of 10.' -f [System.Environment]::NewLine,$_) } else { $true }})]
[string]$Value,
@thedavecarroll
thedavecarroll / PSChangeLogTools .psm1
Last active April 1, 2021 04:40
PSChangeLogTools script module which uses local git log, GitHub release, and GitHub issues to generate changelog updates
#Requires -Module PowerShellforGitHub
#Requires -Version 5.1
# GitLog Class
# class definition created by ConvertTo-ClassDefinition at 3/31/2021 9:47:01 PM for object type PSCustomObject
class PSGitLog {
[String]$CommitId
[String]$ShortCommitId
[DateTime]$AuthorDate
@thedavecarroll
thedavecarroll / Invoke-DiceRoll.ps1
Last active April 27, 2021 21:09
Simple Dice Roller, a la D&D
function Invoke-DiceRoll {
[Alias('idr','roll')]
[CmdletBinding()]
param(
[ValidatePattern(
'^(?:[1-9]|0[1-9]|1[0-9]|20)d(4|6|8|12|20|30|100)$',
ErrorMessage='Valid die types are d4,d6,d8,d10,d12,d20,d30,d100 rolled beteen 1 and 20 times. Your input was {0}. Please try again.'
)]
[string]$Roll = '2d6',
[switch]$Total
@thedavecarroll
thedavecarroll / Get-ErrorCategory.ps1
Last active May 29, 2021 12:59
Twitter API Error Mapping
function Get-ErrorCategory {
[CmdletBinding(DefaultParameterSetName = 'APIV1.1')]
param(
[Parameter(Mandatory, ParameterSetName = 'APIV1.1')]
[string]$StatusCode,
[Parameter(Mandatory, ParameterSetName = 'APIV1.1')]
[string]$ErrorCode,
[Parameter(Mandatory, ParameterSetName = 'APIV2')]
[string]$ErrorType
function Split-Array {
[CmdletBinding()]
param (
[Parameter(Mandatory, ValueFromPipeline)]
[String[]] $InputObject
,
[ValidateRange(1, [int]::MaxValue)]
[int] $Size = 10
)
begin { $items = New-Object System.Collections.Generic.List[object] }
@thedavecarroll
thedavecarroll / myboto3_client.py
Last active March 30, 2022 15:24
Python Exception Logger and Boto3 Client
import boto3
from mylogger import logger,log_exception
def create_session(profile_name='default'):
logger.info(f'Creating new boto3 session with profile {profile_name}')
try:
return boto3.session.Session(profile_name=profile_name)
except:
raise Exception( log_exception() )