Skip to content

Instantly share code, notes, and snippets.

View Sam-Martin's full-sized avatar

Sam Martin Sam-Martin

View GitHub Profile
@Sam-Martin
Sam-Martin / generate-ami-hashtable-for-cloudformation.ps1
Created April 19, 2015 11:30
Generate AMI hashtable for cloudformation
# Ensure you amend this value to reflect the AMI you're interested in
$imageType = "Windows_Server-2012-R2_RTM-English-64Bit-Core"
$resultsArchitectureFirst = @{'64'=@();'32'=@()};
$resultsRegionFirst = @{};
# Loop through all regions and find the appropriate image
foreach($region in $(Get-AWSRegion).Region){
@Sam-Martin
Sam-Martin / New-EC2VolumeSnapshotOffsite.psm1
Created April 19, 2015 11:33
Snapshot EBS Volume and copy snapshot to another region
<#
.Synopsis
Creates a snapshot of an EBS volume, copies it to the destination region, then deletes the snapshot (not the volume) in the source region
.DESCRIPTION
You will need to run either Set-AWSCredentials or Initialize-AWSDefaults passing your accesskey and privatekey prior to execution of this cmdlet in order to establish connectivity to AWS.
.NOTES
To set the default AWS credentials for your current Windows user, use:
Initialize-AWSDefaults -AccessKey ***** -SecretKey ***** -Region us-west-2
Naturally you will need to replace the asterisks and region with the values appropriate to your configuration
@Sam-Martin
Sam-Martin / AWS-Check-Users-Without-MFA.ps1
Created April 19, 2015 11:36
PRTG check AWS users without MFA
[CmdletBinding()]
Param(
[parameter(Mandatory=$true)]
[string]$accessKey,
[parameter(Mandatory=$true)]
[string]$secretKey
)
# Grab the current working directory of the script for the purposes of loading the DLL
$scriptWorkingDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
@Sam-Martin
Sam-Martin / Sync ServiceNow to Leankit using PowerShell.md
Last active August 29, 2015 14:20
Sync ServiceNow to Leankit using PowerShell
@Sam-Martin
Sam-Martin / Get-VMClusterContention.ps1
Last active August 29, 2015 14:21
Get VMWare Cluster Contention
foreach($cluster in Get-Cluster){
# Get host memory free
$vmHostObj = $cluster | Get-VMHost
$totalVMHostMemory = [int]$($vmHostObj | measure-object -property MemoryTotalGB -sum).sum;
$totalVMHostMemoryFree = $($vmHostObj | %{$_.MemoryTotalGB - $_.MemoryUsageGB} | measure-object -sum).sum;
$highestHostMemoryTotal = $($vmHostObj | sort-object -property MemoryTotalGB | select -last 1).MemoryTotalGB;
$totalVMHostCPU = [int]$($vmHostObj | measure-object -property CPUTotalMhz -sum).sum;
$totalVMHostCPUFree = $($vmHostObj | %{$_.CPUTotalMhz - $_.CPUUsageMhz} | measure-object -sum).sum;
$highestHostCPUTotal = $($vmHostObj | sort-object -property CPUTotalMhz | select -last 1).CPUTotalMhz;
@Sam-Martin
Sam-Martin / Parse Default IIS log file.ps1
Created May 27, 2015 10:50
Parse default IIS log file in PowerShell
gc "iislogfile.log" | %{
$row = $_.split(' ')
New-Object psobject -Property @{
# date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken OriginalIPAddress
DateCreated = Get-Date ($row[0] + ' ' + $row[1])
"s-ip" = $row[2]
"cs-method" = $row[3]
"cs-uri-stem" = $row[4]
"cs-uri-query" = $row[5]
"s-port" = $row[6]
@Sam-Martin
Sam-Martin / Get-S3FolderLastModified.ps1
Created June 26, 2015 15:14
Get-S3FolderLastModified
function Get-S3FolderLastModified {
param(
[parameter(mandatory=$true)]
[string]$folder,
[parameter(mandatory=$true)]
[string]$bucket,
[parameter(mandatory=$true)]
[string]$region
)
@Sam-Martin
Sam-Martin / Get-AWSBillingEstimate.ps1
Created September 8, 2015 09:03
Get AWS Billing Estimate by PowerShell cmdlets
$Dimension1 = New-Object Amazon.CloudWatch.Model.Dimension
$dimension1.set_Name("Currency")
$dimension1.set_Value("USD")
# Has to be us-east-1 irrespective of what regions you use
$result = Get-CWMetricStatistics -MetricName EstimatedCharges -region us-east-1 -Namespace "AWS/Billing" -StartTime (Get-Date).AddDays(-14) -EndTime (get-date) -Period (60*60*24) -Statistics 'Maximum' -Dimensions @($Dimension1, $Dimension2)
$result.Datapoints | select timestamp,maximum | sort timestamp
@Sam-Martin
Sam-Martin / aws-userdata-new-user-psremoting-enabled.ps1
Created March 8, 2016 14:21
Create standard user and enable PS Remoting in AWS UserData
<powershell>
Enable-PSRemoting -force
Set-Item WSMan:\localhost\MaxTimeoutms 1800000
Set-Item WSMan:\localhost\Service\AllowRemoteAccess $true
Set-Item WSMan:\localhost\Service\Auth\Basic $true
Set-item WSMan:\localhost\Service\AllowUnencrypted $true
$computername = $env:computername # place computername here for remote access
$username = 'AdminAccount1'
$password = 'topSecret@99'
@Sam-Martin
Sam-Martin / QueueTrigger.ps1
Last active April 16, 2016 15:17
An example of how to create a PowerShell based HTTP request based Azure Function
# Get input and output params (as named in our function.json)
$result = $Env:res
$requestPath = $env:req
$executionPath = Split-Path -parent $PSCommandPath
$tempPath = Split-Path -parent $env:req
# Read the input from file and parse it to an object
[Console]::WriteLine("Reading input from $env:req")
$requestObj = get-content $requestPath | out-string | convertfrom-json