Skip to content

Instantly share code, notes, and snippets.

@stuartleeks
stuartleeks / AzureHelpers.ps1
Created November 25, 2015 13:47
A set of functions/cmdlets to simplify working with the Azure PowerShell cmdlets
<#
# Helper function for other cmdlets
#>
function ParseOperationDuration($durationString){
# expected behaviour (should put in tests)
#(ParseOperationDuration "PT21.501S").ToString() # Timespan: 21.501 seconds
#(ParseOperationDuration "PT5M21.501S").ToString() # Timespan: 5 minutes 21.501 seconds
#(ParseOperationDuration "PT1H5M21.501S").ToString() # Timespan: 1 hour 5 minutes 21.501 seconds
#(ParseOperationDuration "PT 21.501S").ToString() # throws exception for unhandled format
@stuartleeks
stuartleeks / SetStorageCorsOptions
Created November 13, 2015 10:54
Command to set the CORS options for a storage account using Azure xplat CLI
# replace account name, key and cors rules
# ... and yes, I've regenerated my key since pasting ;-)
azure storage cors set --account-name slsas --account-key fkc8U4c86RotjO/VHg4jNKVUO+OsmkVvK+a800zhAcB6HQTVCFLRaiIAvJ9UaciFNmpgGHkod5731WGpw3+k7Q== --blob --cors '[{"AllowedMethods":["GET","OPTIONS","PUT"],"AllowedOrigins":["https://corsstoragetest.azurewebsites.net"],"AllowedHeaders":["Accept","Accept-Encoding","Accept-Language","Access-Control-Request-Headers","Access-Control-Request-Method","Cache-Control","Connection","Content-Type","DNT","Host","Origin","Pragma","Referer","User-Agent","x-ms-blob-content-type","x-ms-blob-type"],"ExposedHeaders":[],"MaxAgeInSeconds":60}]'
@stuartleeks
stuartleeks / GetDeploymentOperationSummary.ps1
Created November 13, 2015 10:00
ARM deployment operations - PowerShell, CLI
param($resourceGroupName)
# note that this requires jq: https://stedolan.github.io/jq/download/
$deploymentName=$(azure group deployment list $resourceGroupName --json | jq "[.[] | {name:.name, timestamp: .properties.timestamp } ] | sort_by(.timestamp) | reverse | .[0].name" --raw-output)
azure group deployment operation list --resource-group $resourceGroupName --name $deploymentName --json | jq '[.[] | .properties | { provisioningState : .provisioningState, timestamp: .timestamp, resourceType:.targetResource.resourceType,resourceName:.targetResource.resourceName}] | sort_by(.timestamp)'
@stuartleeks
stuartleeks / GetDeploymentOperationFailures.sh
Last active November 26, 2015 14:17
ARM deployment operations - bash, CLI
#!/bin/bash
# Pass the resource group name as the 1st parameter to this script
# Pass the number of deployments to skip as the 2nd parameter (optional)
resourceGroupName=$1
if [ "x$2" = "x" ]; then deploymentsToSkip=0; else deploymentsToSkip=$2; fi
# Get the name of the last deployment
deploymentName=$(azure group deployment list $resourceGroupName --json | jq "[.[] | {name:.name, timestamp: .properties.timestamp } ] | sort_by(.timestamp) | reverse | .[$deploymentsToSkip].name" --raw-output)
# Get failed operations for the last deployment
@stuartleeks
stuartleeks / GetDeploymentErrors.ps1
Created November 11, 2015 14:04
ARM deployment operation utils
# gets information for non-succeeded deployment operations for the last deployment for the resource group specified in $resourceGroupName
Get-AzureResourceGroupDeployment -ResourceGroupName $resourceGroupName | sort -Descending -Property Timestamp | select -First 1 | Get-AzureResourceGroupDeploymentOperation | ?{ $_.Properties.ProvisioningState -ne "Succeeded" } | select -ExpandProperty Properties | ConvertTo-Json
@stuartleeks
stuartleeks / ConvertFromDocker.ps1
Last active October 31, 2019 18:52
ConvertFrom-Docker
function PascalName($name){
$parts = $name.Split(" ")
for($i = 0 ; $i -lt $parts.Length ; $i++){
$parts[$i] = [char]::ToUpper($parts[$i][0]) + $parts[$i].SubString(1).ToLower();
}
$parts -join ""
}
function GetHeaderBreak($headerRow, $startPoint=0){
$i = $startPoint
while( $i + 1 -lt $headerRow.Length)
@stuartleeks
stuartleeks / AzureRmAuth.ps1
Created November 5, 2015 21:01
Hack to get AccessToken for ARM from current PowerShell context
# Working on 1.0.0 preview of Azure PowerShell cmdlets
function GetAccessToken(){
$psContext = Get-AzureRmContext
$context = [Microsoft.Azure.Common.Authentication.Models.AzureContext] $psContext
$account = $context.Account
$environment= $context.Environment
$tenant = $context.Tenant
$authFactory = [Microsoft.Azure.Common.Authentication.AzureSession]::AuthenticationFactory
@stuartleeks
stuartleeks / CustomConfigurationManager.cs
Last active October 13, 2016 12:23
CustomConfigurationManager - pre ASP.NET 5 helper for working with environment variables for app settings
using System;
using System.Configuration;
public static class CustomConfigurationManager
{
private static CustomAppSettings _appSettings = new CustomAppSettings();
public static CustomAppSettings AppSettings { get { return _appSettings; } }
}
public class CustomAppSettings
{
@stuartleeks
stuartleeks / dockerps.ps1
Last active August 29, 2015 14:25
PowerShell-friendly docker ps parsing
function PascalName($name){
$parts = $name.Split(" ")
for($i = 0 ; $i -lt $parts.Length ; $i++){
$parts[$i] = [char]::ToUpper($parts[$i][0]) + $parts[$i].SubString(1).ToLower();
}
$parts -join ""
}
function GetColumnInfo($headerRow, $propertyNames){
$lastIndex = 0
$lastName = $null
@stuartleeks
stuartleeks / Find-InPath.ps1
Created July 2, 2015 14:06
Find-InPath.ps1 - simple PowerShell Script to find files in the PATH
[CmdletBinding()]
param (
[string] $filename
)
$matches = $env:Path.Split(';') | %{ join-path $_ $filename} | ?{ test-path $_ }
if ($matches.Length -eq 0){
"No matches found"
} else {