If you haven’t heard of or used PowerToys then this blog post is for you.

Microsoft PowerToys is a set of utilities for power users to tune and streamline their Windows experience for greater productivity. Inspired by the Windows 95 era PowerToys project, this reboot provides power users with ways to squeeze more efficiency out of the Windows 10 shell and customize it for individual workflows.

To get up to speed with PowerToys then check out my YouTube video below.

You can find the source code for PowerToys here: – https://github.com/microsoft/PowerToys

I hope you find PowerToys useful.

Azure Tips n Tricks

I have had a fair bit of time recently and spent most of my time learning the content I wanted to learn, nice to have that time right?

I have been going through the Azure Tips n Tricks website and videos created by Michael Crump, you can follow Michael on Twitter and please also check out his twitch stream which is a lot of fun.

There are currently around 260+ blog posts and videos which cover a number of Azure tips and tricks and I reckon everyone will learn something by checking them out, I have learned a tonne of new things already.

Here are a list of some of my favorites so far: –

Plenty more to go through, but I do recommend everyone has a look at them as you will absolutely learn something new.

Azure DevOps Best Practice Template Project

I wanna show you how you can take an existing Azure DevOps project and use this as a template for any new project within Azure DevOps. So let’s say you create a brand new project within Azure DevOps and set up a default Wiki and add a dashboard etc. (think of your ideal DevOps project setup).

Ok, now that you have this in place you can actually export the entire project – why might you want to do that I hear you ask?

This is so we can effectively clone this best practice project and use, again and again, heck you can even source control the template if you so wish.

So how do you export your best practice website template with you lovely custom process flow, wiki, etc in place? – this is where the following link comes in handy.


From this above link check the part that says Building a new custom template and you’ll see a link that is basically this:-


Log in and then look for the link top right that says Build your own template

Now select the Organization you want to use and select the project you wish to use as the best practice template project.

Ignore the error about query items, seems to be a bug, Click Generate Artifacts and you should now have a zip file containing several JSON files.

So now we have the project template JSON files exported how do we create a new project based on this zip file? – well, unfortunately, you need to use the AzureDevopsDemoGenerator tool again.

Log back into the AzureDevopsGenerator and click on the ‘choose template‘ button as seen below:-

and then click Private and then choose your zip file which is the file you exported.

Now fill in the last screen like the screen below and boom!

You now have a new Azure DevOps project which is based on your best practice project like so.

Please give this a try and let me know your thoughts on how useful this is for ya – enjoy!


What have I been up to since I was furloughed?

So April 2020 has been an interesting month for me personally, the project I was doing at work got paused due to the customer not being able to support remote working, work had nothing in the pipeline for me to do so I got furloughed, wow talk about being kicked in the nuts, but rather than complain, let’s use this opportunity to learn.

Thank you to everyone who has reached out to me, they know who they are and it’s hugely appreciated.

If you know me then you know that I am always learning, always setting myself goals for the months ahead and so I decided to not write blog posts or produce content for the time I’m furloughed and spend it learning. If I had to write down everything I wanted to learn and read about it would turn into a book itself.

So that being said I wanted to learn containers and GitHub Actions as the first 2 port of calls and fit in some extra community work in between that.

I have probably done more community work this month than in the past 3 or 4 combined and it been amazing – being able to work from home and just get on a call with folk wanting to learn something or getting on a call to help someone figure out an issue has been very sweet. Being able to moderate Michael Crump’s Twitch stream has been super cool, twitch is something I think has a very bright future.

Working from home (albeit not actually working) is amazing, its so much more productive than working in an office or out on-site at a customer.

The following is a list of just a few of the things I’ve accomplished this month, it doesn’t cover the hours, the calls, the number of times I had to change the schedule fo the gav event – would I change what I did if I had the month over – nope!.

  • Global Azure Virtual 2020 – One of the organisers, website creation, speaker sign-ups, chasing people for content, updating the schedule. Also a moderator on the 3 day which was the Live Stream (9 hours).
  • Moderator and participant in Michael Trumps Twitch Streams covering Azure app config, Live Share, GitHub Actions, WSL, and other more general fun topics.
  • Spoke at the Belgium User Group – on Supercharging your Azure Learning as part of the Belgium Community Week
  • Spoke at the Boston User Group – on Supercharging your Azure Learning.
  • Time spent doing Pluralsight this month learning GitHub Actions.
  • Completed Cloudskills course on – Docker Jumpstart.
  • Microsoft Learn learning – 3 modules complete.
  • Microsoft Products Groups (10 PGI’s)
  • Mentoring several people with starting blogs, learning Hugo, exam study guides, and people looking for advice on how to become an MVP.
  • Created a DP-300 Administering Relational Databases on Microsoft Azurestudy guide: – https://gregorsuttie.com/2020/04/19/azure-dp-300-study-guide/
  • Spoke 1-1 with more a number of community people which a probably the best part of being off.

In May I plan to brush up on my SQL and PowerBI skills and looking forward to that, it’s been a few months since I touched either.

Still amazes me just how many great people I have spoken to this past month and it’s been a blast.

COVID-19 – overcoming business challenges with Microsoft Azure

I was recently asked to contribute to Nigel Frank’s Azure industry whitepaper, which collates Covid-19 related advice for businesses and professionals. My insight has been featured alongside that of a number of my fellow Microsoft Azure MVP’s.

The whitepaper covers five particular challenges many are struggling with at this moment: cost saving, data security, remote working, growing at scale, and business continuity. Hopefully, my own and my peers’ advice will go some way to helping those looking for answers at this unprecedented time.

Please do have a read and share with anyone who would benefit from it: https://www.nigelfrank.com/overcoming-business-challenges-with-azure/

Stay safe!

Azure DP-300 Study Guide

The following I will be using to study for the DP-300 exam, now I am no SQL Server expert, far from it, some of these links might not be the best fit for that particular area, use them at your peril! 🙂

If your looking for extra study material or amazing SQL Server Workshops then check this out https://microsoft.github.io/sqlworkshops/

Hopefully this is of some use to people – if you find more accurate links let me know and I’ll update.

Plan and Implement Data Platform Resources (15-20%)

Deploy resources by using manual methods
• deploy database offerings on selected platforms
• configure customized deployment templates
• apply patches and updates for hybrid and IaaS deployment

Recommend an appropriate database offering based on specific requirements

• evaluate requirements for the deployment
• evaluate the functional benefits/impact of possible database offerings
• evaluate the scalability of the possible database offering
• evaluate the HA/DR of the possible database offering
• evaluate the security aspects of the possible database offering

Configure resources for scale and performance

• configure Azure SQL database/elastic pools for scale and performance
• configure Azure SQL managed instances for scale and performance
• configure SQL Server in Azure VMs for scale and performance
• calculate resource requirements
• evaluate database partitioning techniques, such as database sharding

Evaluate a strategy for moving to Azure

• evaluate requirements for the migration
• evaluate offline or online migration strategies
• evaluate requirements for the upgrade
• evaluate offline or online upgrade strategies

Implement a migration or upgrade strategy for moving to Azure

• implement an online migration strategy
• implement an offline migration strategy
• implement an online upgrade strategy
• implement an offline upgrade strategy

Implement a Secure Environment (15-20%)

Configure database authentication by using platform and database tools

• configure Azure AD authentication
• create users from Azure AD identities
• configure security principals

Configure database authorization by using platform and database tools

• configure database and object-level permissions using graphical tools
• apply principle of least privilege for all securables

Implement security for data at rest

• implement Transparent Data Encryption (TDE)
• implement object-level encryption
• implement Dynamic Data Masking
• implement Azure Key Vault and disk encryption for Azure VMs

Implement security for data in transit

• configure SQL DB and database-level firewall rules
• implement Always Encrypted
• configure Azure Data Gateway

Implement compliance controls for sensitive data

• apply a data classification strategy
• configure server and database audits
• implement data change tracking
• perform vulnerability assessment

Monitor and Optimize Operational Resources (15-20%)

Monitor activity and performance

• prepare an operational performance baseline
• determine sources for performance metrics
• interpret performance metrics
• assess database performance by using Azure SQL Database Intelligent
• configure and monitor activity and performance at the infrastructure, server, service, and database levels

Implement performance-related maintenance tasks

• implement index maintenance tasks
• implement statistics maintenance tasks
• configure database auto-tuning
• automate database maintenance tasks
– Azure SQL agent jobs, Azure automation, SQL server agent jobs
• manage storage capacity

Identify performance-related issues

• configure Query Store to collect performance data
• identify sessions that cause blocking
• assess growth/fragmentation of databases and logs
• assess performance-related database configuration parameters
– including AutoClose, AutoShrink, AutoGrowth

Configure resources for optimal performance

• configure storage and infrastructure resources
– optimize IOPS, throughput, and latency
– optimize tempdb performance
– optimize data and log files for performance
• configure server and service account settings for performance
• configure Resource Governor for performance

Configure a user database for optimal performance
• implement database-scoped configuration
• configure compute resources for scaling
• configure Intelligent Query Processing (IQP)

Optimize Query Performance (5-10%)

Review query plans
• determine the appropriate type of execution plan
– live Query Statistics, Actual Execution Plan, Estimated Execution Plan, Showplan
• identify problem areas in execution plans
• extract query plans from the Query Store

Evaluate performance improvements
• determine the appropriate Dynamic Management Views (DMVs) to gather query performance information
• identify performance issues using DMVs
• identify and implement index changes for queries
• recommend query construct modifications based on resource usage
• assess the use of hints for query performance

Review database table and index design
• identify data quality issues with duplication of data
• identify normal form of database
• assess index design for performance
• validate data types defined for columns
• recommend table and index storage including filegroups
• evaluate table partitioning strategy
• evaluate the use of compression for tables and indexes

Perform Automation of Tasks (10-15%)

Create scheduled tasks
• manage schedules for regular maintenance jobs
• configure multi-server automation
• configure notifications for task success/failure/non-completion

Evaluate and implement an alert and notification strategy
• create event notifications based on metrics

• create event notifications for Azure resources

• create alerts for server configuration changes
• create tasks that respond to event notifications

Manage and automate tasks in Azure
• perform automated deployment methods for resources
• automate Backups
• automate performance tuning and patching
• implement policies by using automated evaluation modes

Plan and Implement a High Availability and Disaster Recovery (HADR)
Environment (15-20%)

Recommend an HADR strategy for a data platform solution
• recommend HADR strategy based on RPO/RTO requirements
• evaluate HADR for hybrid deployments
• evaluate Azure-specific HADR solutions
• identify resources for HADR solutions

Test an HADR strategy by using platform, OS and database tools
• test HA by using failover
• test DR by using failover or restore

Perform backup and restore a database by using database tools
• perform a database backup with options
• perform a database restore with options
• perform a database restore to a point in time
• configure long-term backup retention

Configure DR by using platform and database tools
• configure replication
• configure Azure Site Recovery for a database offering

Configure HA using platform, OS and database tools
• create an Availability Group
• integrate a database into an Availability Group
• configure quorum options for a Windows Server Failover Cluster
• configure an Availability Group listener

Perform Administration by Using T-SQL (10-15%)

Examine system health
• evaluate database health using DMVs
• evaluate server health using DMVs
• perform database consistency checks by using DBCC

Monitor database configuration by using T-SQL
• assess proper database autogrowth configuration
• report on database free space
• review database configuration options

Perform backup and restore a database by using T-SQL
• prepare databases for AlwaysOn Availability Groups
• perform transaction log backup
• perform restore of user databases
• perform database backups with options

Manage authentication by using T-SQL
• manage certificates
• manage security principals

Manage authorization by using T-SQL
• configure permissions for users to access database objects
• configure permissions by using custom roles

Good luck with the Exam!

European Cloud Conference

The European Cloud Conference will take place on October 27-29, 2020 in Nice, France and is Europe’s leading Independent Microsoft Azure Conference.

Book your tickets for this amazing Azure conference and make sure to sign up for the mailing list so you don’t miss out on any news.

The conference will be Europe’s first annual conference dedicated exclusively to Microsoft Azure.

So who should attend? – If you’re a technology leader or have an interest across any area within Azure this is the go-to event for you. If your a Developer, work in Operations, Infrastructure or DevOps, manager, security expert or even at C-Level management then this is the conference you need to attend in 2020.

8 Full day Expert Azure Tutorials have been announced

Azure Security Best Practices

Mustafa Toroman, MVP, MCT
Authority Partners, Bosnia And Herzegovina

Top 3 Highlights of Attending your this Tutorial:

  • Learn about Identity in cloud
  • Network security
  • Data protection

Level: 400
Topic: Security
Category: IT Pro

Kubernetes on Azure

Vishwas Lele, MVP, Microsoft Regional Director
Ais, United States

Top 3 Highlights of Attending this European Cloud Conference 2020 Tutorial:

  • Learn about Key Kubernetes Concepts
  • Deep dive into AKS
  • Learn how AKS integrates with other Azure services

Level: 400
Topic: Azure Migrations
Category: Developers

Azure Messaging – From 0 to 100 in One Day

Sean Feldman, MVP
Particular Software, Canada

Top 3 Highlights of Attending this European Cloud Conference 2020 Tutorial:

  • Balanced tutorial between theory and hands on exercises
  • Practical Azure messaging knowledge distilled in one day
  • Learn from an Azure Messaging expert and MVP

Level: 400
Topic: Messaging
Category: Developers

Azure Virtual Machines 101

Vladimir Stefanovic,
Superadmins, Serbia

Aleksandar Nikolic, MVP
M.O.3.A.K. IT Consulting, Serbia

Top 3 Highlights of Attending this European Cloud Conference 2020 Tutorial:

  • Azure VM Deep Dive
  • Azure VMSS Deep Dive
  • Designing VMs Architecture

Level: 300
Topic: Cloud Compute
Category: IT Pro

Low-Code Cloud App Development and App Modernization

Paul Swider, AZURE MVP
Realactivity, LLC, United States

Top 3 Highlights of Attending this Tutorial:

  • Learn the value of low-code when migrating business apps to Azure
  • See how Power Apps can be used as part of an Azure App Modernization strategy
  • End to end demos of integration with Azure Services.

Level: 300
Topic: Cloud Compute
Category: Developers

A Day of Customer Identity Implementation with Azure Active Directory B2C

John Garland, MVP, MCT
Wintellect, United States

Top 3 Highlights of Attending this European Cloud Conference 2020 Tutorial:

  • Learn how to use Azure AD B2C to provide secure authentication for your application
  • Go beyond the basics and see how you can customize Azure AD B2C to match both your identity needs as well as your brand
  • Learn how to use Custom Policies in Azure AD B2C to enable advanced identity experiences

Level: 300
Topic: Identity & Access
Category: Developers

Getting Gremlins to Improve Your Data

Chad Green, MVP
Scholarrx, United States

Top 3 Highlights of Attending this European Cloud Conference 2020 Tutorial:

  • Understand the basics of graph databases
  • Get hands-on experience setting up, configuring, and optimizing a graph database
  • Get hands-on experience working with graph databases in your applications

Level: 300
Topic: AI
Category: Developers

Monitoring Solutions in Azure

Loftysoft, Sweden

Level: 300
Topic: Azure Management
Category: Developers & IT Professionals

Book your place now to attend.

You can find out more information about the venue and also make sure to check out the faqs.

GitHub Actions Error -refusing to allow an OAuth App to create or update workflow

I have been working with VS Code and learning GitHub Actions recently and was working through a great Pluralsight course on the subject which can be found here -> https://www.pluralsight.com/courses/building-custom-github-actions

Now I had been working away and pushing code quite the thing when I came towards the very end of the course and I got this error: –

! [remote rejected] master -> master (refusing to allow an OAuth App to create or update workflow `.github/workflows/build.yml` without `workflow` scope)error: failed to push some refs to ‘https://github.com/gsuttie/auto-release-draft.git’

I was stumped for some time until I came across the answer here https://github.com/gitextensions/gitextensions/issues/4916#issuecomment-557509451 by Mike-E-wins

To fix this I regenerated a Personal Access Token from within GitHub and then went into Credential Manager within Windows and reset the password to the new personal access token and bingo – I can now push the code once more.

Big thanks for Mike adding the solution as I had tried a number of things without success.

Moving an Azure DevOps repo to use Github Actions instead

In this blog post, I am going to take an existing web application that resides in Azure DevOps and port it to build and deploy within GitHub and use GitHub Actions to build and deploy the same site to GitHub.

Here you can see I have a website in Visual Studio which is currently pointing at a repository inside Azure Devops.

And here is what it looks like inside Visual Studio 2019 with the connection to Azure DevOps.

Now I am going to remove the connection from the Azure DevOps repo by clicking on remove like so:-

When I click on remove, this removes the connection from the code to the Azure DevOps repository. Then I go to the Sync area and it now asks me where do I want to push the code to.

This time I choose to Publish to GitHub.

Give the new repository a name (for within GitHub) and press Publish

This will push the code to a new GitHub repository called AzureGlobalBootCamp2020 which you can now see below.

Now we need to create a GitHub Action so that the code is built and pushed to Azure (like it was from within Azure DevOps previously).

From within your new GitHub repo click on Actions at the top.

I then chose Setup a new workflow yourself

This will take you to a screen and create a main.yaml file.

name: Deploy ASP.NET Core app to Azure Web App

      - master
      - '*'
# For help, go to https://github.com/Azure/Actions
# 1. Set up the following secrets in your repository:
# 2. Change these variables for your configuration:
  AZURE_WEBAPP_NAME: AzureGlobalBootCamp2020     # set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: '.'                 # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '3.1.100'                      # set this to the dot net version to use

    runs-on: ubuntu-latest

      # Checkout the repo
      - uses: actions/checkout@master
      # Setup .NET Core SDK
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v1
          dotnet-version: ${{ env.DOTNET_VERSION }} 
      # Run dotnet build and publish
      - name: dotnet build and publish
        run: |
          dotnet build --configuration Release
          dotnet publish -c Release -o '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' 
      # Deploy to Azure Web apps
      - name: 'Run Azure webapp deploy action using publish profile credentials'
        uses: azure/webapps-deploy@v2
          app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
          publish-profile: ${{ secrets.azureWebAppPublishProfile  }} # Define secret variable in repository settings as per action documentation
          package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'

# For more samples to get started with GitHub Action workflows to deploy to Azure, refer to https://github.com/Azure/actions-workflow-samples

I then pasted this into the main.yaml file and changed the following:-

AZURE_WEBAPP_NAME: AzureGlobalBootCamp2020
publish-profile: ${{ secrets.azureWebAppPublishProfile }}

The last entry above publish-profile requires you to create a new secret in GitHub under Settings -> Secrets and call it azureWebAppPublishProfile and you need to paste in the publishing profile from your Azure Web App

The above screen shows me in the Azure Portal and I’ve clicked into my Azure App Service and when I click on Get Publish Profile it downloads the content of the Publish profile which I paste into the new Secret with GitHub.

And with that we are done, GitHub will kick off the GitHub Action and built and deploy my web app changes when I publish any change to GitHub right into Azure for me.

To read more on using GitHub Actions with .Net you can read more on GitHub here -> https://github.com/actions/setup-dotnet

Feel free to comment below if this is useful or if you have any feedback etc.

Hosting your blog on Github Pages using Hugo

If you want to create a new blog / or want to host your blog site then it’s worth taking a look at Hugo.

Hugo is a free static site generator.

You can install Hugo by following these steps from the docs: –

Once installed you can run your content locally first which means you create content and see the change with a live reload – instant feedback on your changes which means you can create content to your liking rapidly.

The content is created using markdown and if you’re looking for a nice tool to help with markdown I was recommended to take a look at stackedit.io https://stackedit.io/app#, but tools like Visual Studio Code offer this also.

I am going to assume that you have installed Hugo and have some content.

To run the website locally type hugo server

This normally shows you a screen like so:-

We can see the url to use (highlighted in red) so grab this url http://localhost:1313/ and paste it into your favourite browser and there you can see your new creation. (Keep updating the content and testing it out until your happy with all of the content.)

If your planning on hosting your site using GitHub Pages then you need to make a small change to the config of your Hugo site, locate the config.toml file within the root and add in the following line just before the [params] section (normally line 8 maybe 9)

publishDir = “docs”

For the cloudfamily.info project which we host on GitHub Pages our config.toml file looks like this

This file and all our code for reference can be found at https://github.com/CloudFamily/CloudFamily/


Before we added the change to the config.toml the code would be compiled into the newly created public folder,

If your planning to host your Hugo site on Azure then come back for part 2 and I’ll show you how to host your new blog using Hugo on Azure.

I’m going to assume if you’ve gotten this far Hugo has perhaps sparked some interest, or you’re looking into moving to use GitHub Pages.

Create a new repository in GitHub and upload all of your content from the root (including the docs folder, p.s. assuming you’re still pushing to GitHub Pages).

To activate GitHub Pages with the new repository you need to go to the Settings section within your new repository and make the same change as in the image below. (change the source drop-down to point to the /docs folder)

Once you have completed that step, you need to go back to the root of your repository within GitHub and look for the environments link like the image below: –

This is where the GitHub Pages are compiled and built essentially, click on this link and you’ll see the latest code being built like so: –

And once that passes, click on View deployment to see your new site in action.

Note: –

You may notice that there are some issues with the look of the site, there are 2 things to check in order to resolve.

Potential Issue 1

First, add your website URL from the browser into the top line of the config.toml file like so (changing out username and repository name for either the URL or your website name if you have a custom domain name).

baseURL = “https://<username&gt;.github.io/<repository name>/

So for the https://cloudfamily.info/ website our top line in the config.toml file looks like this:-

baseURL = “https://cloudfamily.info&#8221;

Once you make this change, go back to the command prompt or PowerShell and run the command from the root folder Hugo

This recompiles your changes, then cd into the docs folder and do the following:-

  • git add.
  • git commit -a -m “updating config.toml file”
  • git push -u origin master

Potential Issue 2

Depending on what theme you chose, you may have to add it in as a submodule, an example of this is if you chose the minimal theme then you have to run the following command from the root folder of your repo:-

$ git submodule add https://github.com/calintat/minimal.git themes/minimal
$ git submodule init
$ git submodule update

Once you make this change, go back to the command prompt or PowerShell and run the command from the root folder Hugo

This recompiles your changes, then cd into the docs folder and do the following:-

  • git add.
  • git commit -a -m “updating config.toml file”
  • git push -u origin master

That should be you up and running, just remember the following if you make changes and want them to be compiled and ran on your GitHub Pages: –

Go to the root folder within the command prompt or PowerShell

  • Type Hugo to compile
  • Change dir into the Docs folder and then
  • git add.
  • git commit -a -m “updating config.toml file”
  • git push -u origin master

Note – many thanks to people who have pointed me in the direction of Netlify and other tools, I’ll look at Netlify next and the next post will cover hosting a Hugo site in Azure.

Please get in touch if you have issues with Hugo.