PowerShell + DevOps Global Summit 2020
Monday, April 27 2020
 

08:00 am

Breakfast
Center Hall A





Tags: Break

Breakfast


09:00 am

Welcome Address
Center Hall B James Petty





Speakers
James Petty

James Petty

CEO, The DevOps Collective


Welcome to the PowerShell + DevOps Global Summit 2020 in Bellevue WA.

09:30 am

You are More Than Just a Scripter
Center Hall B Don Gannon-Jones





Speakers
Don Gannon-Jones

Don Gannon-Jones

Pluralsight


Okay, you’ve conquered the shell, or you’re well on your way. But is that all you are? Of course not. You’re no one-hit wonder, or you shouldn’t be. Join PowerShell author, MVP, speaker, and legend Don Jones for a look at what your career is... and what it can and should be. Before you dive into Summit, let’s develop some ulterior motives to further your career... and your life. Learn the most important skill any tech pro can have, how to think like a business person, and one tiny little thing you can do to help everyone around you. Also, there are two jokes. See you Monday morning.

10:30 am

Break





Break

11:00 am

General Session
Center Hall B Jeffery Snover





Speakers
Jeffery Snover

Jeffery Snover

Microsoft


General Session Given by Microsoft Technical Fellow Jeffery Snover

12:00 pm

Lunch
Center Hall A





Lunch


01:00 pm

How to Succeed on High Performance IT Teams
Center Hall B Mike Pfeiffer





Speakers

High-speed innovation has allowed startups like Amazon, Google, and Netflix to change the world, and new ways of working are influencing the entire IT industry. How do you succeed on a high-performance team in the modern era? What are the technical traits and soft skills required by practitioners in this space? That will be the focus of this talk by Mike Pfeiffer, a twenty-year tech industry veteran who's worked for some of the largest software companies in the world, including Microsoft and Amazon Web Services. This session will be packed with real-world examples and you'll walk away with tips on how to navigate your career and a clear picture of what it takes to be a player on a high-performance IT team.

01:45 pm

Break





Break

02:00 pm

Automating Your Incident Management Process So You Can Get Some Sleep!
401 Bill Hurt






Speakers
Bill Hurt

Bill Hurt

Puppet


Nobody likes dealing with outages. Woken in the middle of the night....informing stakeholders, sending emails, emailing the right people, notifying customers and probably fix the thing & deliver an RCA. What if you had an automated & consistent way of doing it using Azure Functions and PowerShell? How do you make incident management globally scalable across multiple teams, easy to interact with, cost effective and not an obstruction in the process of identifying and fixing issues? Automating it obviously.

Notifying your customers, stakeholders, support teams, starting an incident bridge, sending comms, tracking progress and ensuring all updates are tracked so you can perform an effective RCA at 3am is not a fun time.

Removing constraints from business processes is difficult as this requires collaboration between teams and non-integrated systems but I want to show you how **you** can create an end to end incident management process, something relatable to every organisation, using Azure Functions, tools you already have within your organisation and PowerShell.

I'll show you how this can be achieved so that your teams can follow processes whilst fixing issues and still get a good night sleep.
Git for the Operations PowerShell Scripter
405 Brett Miller






Speakers

I'm not a developer, why should I use git? My whole shop is using git now, but I don't get it. It just makes my workflow harder. We're just a small team. Me and a couple others. Why do I need source control? If any of these sound familiar I think I have some answers for you. Software is still in the process of eating the world, but source control has already eaten devops. Source control is one of the critical technologies that enables most of the devops tools and practices that enable us to move faster. The only problem is that in far too many shops, the ops people are either struggling with the change, or they aren't even trying because they don't see the benefit. But operations is in the title! We should be participating in the revolution! So come see if I can convince you of the benefit and show you a little bit of how you can do it. I'll cover a some of the why, but mostly I'll be doing practical examples and demos to show you how you can stop emailing your scripts around, stop mapping shared drives with your scripts in them, and start letting the tools help you collaborate with your teammates.
Keeping secrets secret: secure Vault for your passwords
406 Kirill Kravtsov






Speakers
Kirill Kravtsov

Kirill Kravtsov

xMatters, Inc.


Protect your environment by storing your passwords securely inside a Hashicorp Vault Server. Issue temporary passwords, use short-term certificates for private keys and store any kind of secrets in an API-powered open-source cross-platform solution. Every time an ad-hoc Powershell script becomes a scheduled job, one faces a dilemma how to securely supply such a job with a proper set of credentials. And it is a big deal: historically, almost any automation in the operations world requires elevated permissions, and thus should be handled with extreme caution.
But the reality is, when it comes to storing such credentials, we all are facing the same set of concerns: 

- How to make it work without exposing the password as plaintext? 
- How to ensure the passwords are rotated without manual intervention?
- How to prevent other people from seeing the password?
- How to ensure that only designated service is using the credentials?

As you may have already guessed, there is a solution to this struggle. Hashicorp Vault is an open-source software product that ticks all the right boxes and ensures secure and safe storage and retrieval of the application secrets, such as passwords and private keys.

Vault supports generating new credentials on demand and can become an issuing CA for your infrastructure. It supports a multitude of authentication protocols, including LDAP and cloud providers. A hefty list of integrations ensures that most popular products are supported out-of-the-box, including:

- Active Directory credentials
- SSH keys
- Database credentials
- Simple Key/Value pairs
- and many more

## Agenda:

- Getting started with Vault Server
- Authentication and authorization
- Creating a first secret engine: Key/Value store
- Requesting credentials using Powershell
- Using temporary credentials
- Rotating passwords
- Vault Agent and a sidecar pattern

Python3 for PowerShell Users
404 Joshua Corrick






Speakers

Python has been rising in popularity year after year according to StackOverflow's developer survey. Being able to understand it and fix it is a necessary skill in heterogeneous environments. This is a crash course in Python3 for windows admins already familiar with PowerShell. Python3 is an object-oriented programming language used for a wide variety of things from traditional programming to Scripting. This tool is used by Linux and Mac users to automate their systems as well as run popular applications. While Python3 and PowerShell are both object-oriented in nature, both have different rules for creating loops, defining variables, discovering methods and properties, importing modules, handling errors, and syntax. By the end of this talk you should have a better idea of how Python and PowerShell differ and their own respective strengths.


This talk with walk through:
* Overview of Python 2 and 3 (and why we focus on version 3)
* Setting up your working environment
* Installing Python3 and Pip3 and common issues
* Objects in Python3
* Built-in Functions
* Using modules
* Constructs for writing Functions or Scripts


02:45 pm

Break





Break

03:15 pm

Managing Modules in an Internal Repository
406 Kevin Marquette






Speakers
Kevin Marquette

Kevin Marquette

PowerShellExplained.com


Have you ever wanted to use an internal Repository for your modules? Let me show you why you would want to do that, how to get started, and what you should automate. It's both much easier and much harder than you expected. Setting up and publishing to an internal repository is much easier than most people expect. In this talk, I plan on covering why it's a good idea to use an internal repository to distribute modules. I will show how to publish modules to both a file share and a local NuGet instance. The demo will show the user how to manually publish the module with the idea that it should be part of a CI/CD pipeline. We will address the idea of re-hosting public modules from the PSGallery as a way to gate them into your organization. We will also show how to bootstrap other systems to use the internal repository.
ReverseDSC: Extract DSC Configuration from Existing Environments
401 Nik Charlebois






Speakers

I can extract the DSC configuration of your existing environments and replicate them in the Cloud within less then 10 clicks. ReverseDSC lets you extract configurations out of existing environment, saving time and reducing the learning curve for people getting started with DSC. In an attempt to reduce the effort and learning curve to get started with DSC, ReverseDSC let's you extract DSC configurations out of existing environments. This session will show you how to use ReverseDSC to extract your configurations to replicate them in the cloud, and how to extend the tool by writing your own ReverseDSC Orchestrators.
Straight A's - Authentication and Authorization for REST APIs
405 Jeremy Murrah






Speakers

REST and PowerShell go great together, but before you can get to all that wonderful structured data you need to authenticate. How you authenticate can vary wildly between products, and often isn't as simple as passing a credential object. Come find out about some of the more common authentication methods used by REST APIs, and how to get past them to what you're really after. In this session you'll learn about how to interact with basic authentication, API keys, JSON Web Tokens (JWT), and OAUTH personal and application tokens.
Why PowerShell Notebooks are Changing Everything
404 Aaron Nelson






Speakers
Aaron Nelson

Aaron Nelson

Microsoft


Why are Jupyter Notebooks everywhere and why are people running them automatically? Can they run code in every language? Why on earth did the SQL Server Tools team create PowerShell Notebooks, not the PowerShell team? Answers to these questions and many more will be covered during this session.

Jupyter Notebooks are great for training. They allow you mix code and explanations together in one document. They are also great for documentation. They can show you how to configure things and how to verify the end result. But what if we could do more than that? Onboarding someone takes a lot of time. What if when you hired a someone, you could hand them an interactive notebook with everything for getting started? Everything they need to install. Everywhere they need to get their code. A list of servers they need to connect to. Everything.

Jupyter notebooks are now being used for more than just training and simple documentation. Some patterns you may not have heard of yet: Troubleshooting Guides, Workflow Steps, Collaboration, & Operationalization.

This session will cover some examples for environment setup, collaboration, troubleshooting, and operationalization scenarios. Before this session is over, you’ll probably be starting to build Notebooks to use in your own environment ?


04:15 pm

Advanced Development with PowerCLI
405 Brian Bunke






Speakers

What can you do to make life easier as a developer working with VMware PowerCLI? Test code without a lab? Fix older practices highlighted by your editor? Mock vSphere inventory objects? Well...yes! Checking the PowerCLI code you write requires VMware infrastructure. That infrastructure isn't free, and it can vary wildly across installations. As a result, each test (automated or manual) costs precious time and money.

This session will attack the problem from three different angles:

- Run integration tests against a vCenter simulator inside a Docker container, mocking common vSphere APIs
- Extend PSScriptAnalyzer with custom PowerCLI rules, catching outdated practices before the next code commit
- Generate mock vSphere objects to help unit test your strongly-typed parameters

You’ll leave with multiple solutions to help improve the consistent quality of your PowerCLI code.
Creating Healthy Open-Source Communities
406 Joel Sallow






Speakers

Open sourcing a project is really only the very first step. In order to create a great community in & around your project, you need to be mindful of the human aspect. This talk aims to shed some light on what is often more implicit than explicit, the unspoken "rules" of building a healthy community. A successful open source project is about a _lot_ more than just some great ideas and effective code.
A one-person or one-team project can really only be taken so far.
There's a limit to how much a single person or even a single team can do, after all!
In order for a project to go from good to great, just like anything else, it needs a community of people behind it.

In this talk, I'll be covering:

- What's important for creating a welcoming open-source repo (atmosphere, documentation, testing, CI/CD).
- Examples of great contributing processes from stellar repos.
- Some great examples of community interaction & what can come of them.
- How good or bad handling of community submissions can impact a repository over time.
- Some pointers on how to set up your open source repo to help people contribute.
- Ways to avoid miscommunications and work effectively with strangers on the Internet.
- Things to do your best to avoid as a repo owner.
- How to encourage folks to contribute to your repo & help them get started.
Easy Peasy Cross-platform Configuration Management with PowerShell
401 Trevor Sullivan






Speakers
Trevor Sullivan

Trevor Sullivan

Mphasis Stelligent


Microsoft has developed a new open source module for PowerShell called Requirements. This module provides an abstract mechanism to test for conditions, and automatically remediate them. Think of it like DSC, only cross-platform, and much more generic. It's also designed to run locally. We'll explore the Requirements module and some of the use cases it can be applied to, surrounding systems compliance. For example, you could use it to install software packages via the Homebrew package manager, modify PList configuration files, or perform cleanup tasks. On Windows, you could automate software package installations with Scoop, update registry entries. Due to the generic nature of Requirements, you can even use it to perform automated testing of infrastructure of platform resources running on a cloud provider, such as Microsoft Azure, Amazon Web Services (AWS), or Google Cloud Platform (GCP).
WSL while you work: Writing cross-platform PowerShell on the same platform
404 Chris Blackden






Speakers
Chris Blackden

Chris Blackden

The Children's Hospital of Philadelphia


Linux is extremely common in any organization that practices devops, but most client devices run Windows. WSL is a great tool for engineers who need to work with Linux, but can't run 2 different machines. This talk will look at best practices to work on Linux and Windows using PowerShell. A few years ago, Jeffery Snover talked about what he called a 'Cross-Stack' engineer. This is someone who could work across not only different languages and tools, but architectures as well. That's where the Windows Subsystem for Linux comes in.

WSL is one of the most useful features to come out of Microsoft in the last few years. It has a lot of tricks and features that are extremely useful to users, but not as well-known or used as they should be, such as running commands across Windows and Linux, using separate distributions for feature testing, and exporting the state of a WSL distro. 

PowerShell has run from Windows since day one, but since 2015 it’s also run on Linux systems. Now that Windows and Linux can run side by side using WSL, and they can each run PowerShell, how can we use it to make our lives easier?

In this talk, I’m going to cover using WSL and how we can use it and PowerShell effectively, including topics like:
- Writing cross-platform PowerShell code
- WSL best practices
- Exporting and versioning WSL distributions 
- Passing WSL bash to PowerShell and back

This talk will include some intermediate PowerShell concepts and some basic Windows and Linux concepts, and is intended for anyone who wants to learn better ways to use, interact with or manage Linux.


05:00 pm

Welcome Reception
Center Hall A






Welcome Reception & Meet the team

 
Tuesday, April 28 2020
 

08:00 am

Breakfast
Center Hall A





Breakfast


09:00 am

Gaining 20/20 vision during an incident with PowerShell
405 David O'Brien






Speakers

It's no secret that incident response is a results-driven field. We'll dive into how PowerShell can be used for incident response, including multiple frameworks that I developed. Walking away, you will be prepared to gain vital information in your network, using the capability you already have! There will come a point where every organization will likely be compromised. To be able to identify it before or as it is happening, most acquire technology to help identify any malicious behavior but that technology comes with a price tag that not every organization can afford. With most organization's having Windows systems as the majority, there are other built-in options. This talk revolves around the use of PowerShell and supporting aspects as a suitable option for an incident response solution for endpoints in your environment, to include shortfalls of the language.
PowerShell based APIs - on kubernetes! Just do it!
406 Fernando Tomlinson






Speakers
Fernando Tomlinson

Fernando Tomlinson

Department of Defense


Containers are SO. HOT. RIGHT. NOW! Right? Are you keen to deploy some cool APIs for your colleagues or customers but all you can find is tutorials for python or nodeJS? This here will be the session for you! Everybody wants APIs nowadays. Everybody wants containers nowadays. However, there seems to be a lack of focus on providing real APIs on containers with PowerShell.
Python this. NodeJS that. There are ways to achieve modern applications with PowerShell as well and in this session we will build an API from the ground up to the point where attendees will be able to use it live during the session.

In this fast-paced, demo-filled session we will go from 0 to a fully working, public API running on Azure Kubernetes Services written in PowerShell.

Be prepared for **a lot of code** and cool demos building a modern PowerShell based web API on cloud services like Azure CosmosDB and kubernetes.
True to DevOps all of this is deployed via an Azure DevOps pipeline with Infrastructure as Code using Pulumi open source.
PowerShell Debugging: From Zero to Hero
404 Kirk Munro






Speakers
Kirk Munro

Kirk Munro

Kamtanix, Ltd


The PowerShell Debugger is very powerful. Knowing how to use it effectively is essential to saving your organization time and money, while saving yourself a headache or two. This session will take you from zero to hero so that you can maximize the efficiency of your PowerShell debugging experiences. You will learn:
1. "Soft" debugging skills that reduce or eliminate the need to work with a PowerShell debugger when it's not necessary.
2. "Hard" debugging skills that will help you get the most value for the least effort when working with the PowerShell debugger, including demos of all of the debugger improvements that have been going into PowerShell 7 and later releases.
3. Best practices and tips and tricks that increase reliability and efficiency when writing and debugging PowerShell scripts and modules. This includes what you should do to make PowerShell debugging easier for you, and what you should do to make PowerShell debugging easier for users of your scripts or modules.
The DSC project blueprint or how to start a DSC project the right way
401 Raimund Andree






Speakers
Raimund Andree

Raimund Andree

Microsoft


The Microsoft's Release Pipeline Model whitepaper describes a new era of how IT systems should be managed nowadays. One of the tools is DSC but there are other required if you want to fully leverage DSC and make a PoC or implementation a success. This session summarizes the learning of 3 hard years. The documentation available around DSC quite often drives people into the wrong direction. At the very beginning things go quite well but if the requirements are getting more complex, they realize that configuration management, monitoring and reporting do not scale. Hashtables are not designed to store hundreds of computer configuration items, roles, location, etc. In the wild you see DSC often used as a replacement for scripting but without applying the principles and patters discussed in the [The Release Pipeline Model Whitepaper](https://aka.ms/trpm). This session tells the story about a community open source project that has grown over two years to something like a blueprint for new DSC projects in pull mode. It explains how DSC works in a DevOps world. Not only DSC is part of the story but also [Datum](https://github.com/gaelcolas/Datum), Azure DevOps, JEA and SQL reporting for DSC. If this is too much for starts, the Configuration management and build part of the project is also applicable for DSC push scenarios and does not require anything but a Windows machine. If you are planning to introduce DSC in your environment or enhance an existing implementation, attend this session to learn about best practices learned in the field and be able to describe and realize an infrastructure release pipeline.

11:00 am

Automating Web Testing with Selenium and PowerShell
405 Adam Driscoll






Speakers
Adam Driscoll

Adam Driscoll

Ironman Software, LLC


In this session we will look at how to use Selenium and PowerShell to automate the testing of websites. You will learn how to find elements within a page, invoke clicks and send keys and validate the output. Finally, we will integrate the Selenium scripts into a Pester test suite in a CI pipeline. This session will take advantage of the Selenium PowerShell module to demonstrate how to perform browser automation via PowerShell. We will look at how to use the browser tools to identify elements within a page and then find those elements using cmdlets provided by the module. We will look at some tips and tricks on how to make it easier to find elements, ensure they exist and interact with them. Near the end of the session we will take our browser automation scripts and integrate them into a Pester test suite that we will hook up to Azure DevOps (if the internet behaves).

I'll be using Universal Dashboard as a method of creating a website on the fly.
Building PowerShell Tools for Non-Admins
404 Friedrich Weinmann






Learn how to turn your existing PowerShell scripts into web based tools for your Help Desk and Tier 1 support teams. In a few minutes, you'll empower them to resolve issues faster without needing admin rights and begin the path to better organizing your automation tool box.
Controlling the Flow - A PowerShell Guide to building Dikes
406 Jay Adams






Speakers
Jay Adams

Jay Adams

Noxigen LLC


As we write code, as code develops we move from one decision point to another. The more decisions we need to make, the more code paths proliferate, until we are faced by a veritable delta of options, drowning our code in complexity. Let's drain this swamp and bring some Control to our Flow of Code. This session covers:

- Basic Flow Control Patterns

- Outsourcing common patterns

- Anti-Patterns: Common errors and their costs

- Optimizing Code readability

- Demo Implementation: Implementing an Opt-In model for throwing exceptions without impacting code complexity

12:00 pm

Lunch
Center Hall A





Lunch


01:00 pm

General Session
Center Hall B






Keynote Address

02:00 pm

Lightning Demos





Lightning Demos

 
Wednesday, April 29 2020
 

08:00 am

Breakfast
Center Hall A





Breakfast


09:00 am

Bio Lab: Dissecting a Live PowerShell Attack
405 Ashley McGlone






Speakers

Abstract is in Description field. PowerShell post-exploitation toolkits are prolific! How do you track down PowerShell-based phishing attacks and downloaded malware? How do you know if they are being used inside your enterprise? In this hands on lab you will launch a PowerShell attack and learn how to catch it using out-of-the-box Windows features like transcription, module logging, script block logging, and other fingerprints. Not sure what people do on your servers when they remote in with JEA? Come find out how to track them. Not only that, we'll do it on Windows, MacOS, and Linux! This lab was so popular last year that we have expanded it with new attack vectors and more customer field stories you need to know before implementing at scale. Leave with free techniques you can use today. PS - Bring your laptop.
Identify, Simplify, Automate-ify - The Three Tenants of creating a Serverless IT Self Service Portal
401 Michael Zanatta






Speakers
Michael Zanatta

Michael Zanatta

Insync Technology


“Identify, Simplify, Automate”

“Can I have access to?”, “I need this mailbox.”, “I need this software installed.”, “Can you please setup this new person?”, “David has left.”

These are common requests that IT Service Desks deal with every day. Wouldn’t it be cooler so that these requests could be automated? Well, it can!

To automate we need to focus on preparing your organization (“Identify” and “Simplify”) and infrastructure for automation. 


Once completed, we can effectively start “Automate’ing”.


In this session, we will be using these three tenants to create a successful "serverless" IT Service Desk Portal that is built correctly from the ground up. 


This portal will be combining different Microsoft technologies (Azure Functions, Automation Hybrid Runbook Workers, Teams, APIM, sprinkled with some JavaScript, HTML, CSS, PowerShell & C#) to automate Service Desk functions.

In this session will cover:

- “Identify”


1. Identifying your business goals.

2. Identifying the Infrastructure and Roles.

3. Identifying the Challenges.


- “Simplify”

1. Simplify Active Directory for RBAC.
2. Simplify your File Servers.
3. Simplify Exchange / Office 365.
4. Preparing Hybrid Runbook Workers.

5. Simplify the Existing Processes.

- Intermission (5 mins)

- “Automate"

1. Reviewing the Solution.
2. (Discussion) How can we take this further?



Inside Kubernetes - An Architectural Deep Dive!
406 Anthony Nocentino






Speakers
Anthony Nocentino

Anthony Nocentino

Centino Systems


In this session we will introduce Kubernetes, we will deep dive into cluster architecture and higher-level abstractions such as Services, Controllers, and Deployments and how they can be used to ensure the desired state of an application deployed in Kubernetes. In this session we will introduce Kubernetes, we’ll deep dive into each component and its responsibility in a cluster. We will also look at and demonstrate higher-level abstractions such as Services, Controllers, Deployments and Jobs and how they can be used to ensure the desired state of an application deployed in Kubernetes. By the end of this session, you will understand what’s needed to put your applications in production in a Kubernetes cluster

Session Objectives: Understand Kubernetes cluster architecture Understand Services, Controllers, and Deployments Designing Production-Ready Kubernetes Clusters Learn to run PowerShell in Kubernetes Jobs.
Master PowerShell Essentials with PSKoans
404 Joel Sallow, Thomas Rayner






Speakers

Are you the only PowerShell scripter on your team? Or are you just getting started? No matter what your application is, the PSKoans module is an excellent teaching system that will get you, or a classroom of students up and running in no time, along a rewarding learning journey. Mastery comes from a thorough understanding and ability to effectively apply the basics, and such an understanding can only come from continually applying the available tools in order to solve problems. PSKoans provides a guided framework around which you can base one-on-one or group lessons. The module is available on the PSGallery, so students can participate in class discussions and collaborative learning, as well as complete portions on their own time as homework.

One of Thomas’ initial primary responsibilities on the ops-centric team he works on, was to lead the way towards a proper DevOps and automation culture. That started with learning how to write and use PowerShell. Thomas used the PSKoans learning system in a classroom environment with tremendous success and engagement, to help get his teammates up to speed. In this session, you’ll learn everything you need to know so you can do the same.

PSKoans is also very effective as a self-teaching tool; it allows you to try solutions and can give you immediate feedback on exactly what the result was, and what you need to look at changing. You can even add your own assertions to test yourself on the way to learning a particular lesson and verify your own assumptions as you work towards a solution. Every failed attempt is a step on the road to mastery, and each step on the road gives you something new to learn, or a new way to apply something you’re already familiar with.

## Summary

Some of the main points that will be covered are:

- History of “koans”, concept, and purpose
- Getting started with PSKoans
- Fun with PSKoans (Demos!)
- Teaching with PSKoans
- Contributing to PSKoans
- Koans & Katas for other Languages

11:00 am

Invoke-RestMethod for Fun and Profit
406 Joshua McKinnon







Do you keep hearing everyone talk about REST APIs but you're not sure where to start? Let's have fun exploring them together with PowerShell's Invoke-RestMethod and learn how easy to use and powerful they can be! ### Intro - REST API Basics

First we'll cover the basics - how to use a basic REST API with Invoke-RestMethod. This will cover the initial parameters for Invoke-RestMethod, and basic building blocks we'll work with, including:

- HTTP Method Types
- Authentication and Headers
- JSON
- Reading API Docs

### Digging Deeper

I'll cover some features of Invoke-RestMethod that make it more convenient to use than some other languages / tools. We'll also cover:

- Potential Stumbling Blocks
- Differences in Windows PowerShell 5.1 and PowerShell Core

### Demos and Examples

I'll walk through and demo usage of some real-world REST APIs you'll be able to leverage afterward, with sample code for everything I cover.

### Summary

I'll end with some potential places you might be able to leverage Invoke-RestMethod in scripts you already have today, as well as some more advanced elements to add in once you begin writing scripts with Invoke-RestMethod.

NOTE: This session is targeted at those who either haven't used a REST API before or are new to using Invoke-RestMethod.
Invoke-WatchDog - Visualizing AD security posture with BloodHound & Universal Dashboards
404 Walter Legowski






Speakers

Securing Active Directory is Hard. Communicating it to management is even harder... Using PowerShell, we will extract new AD security metrics out of BloodHound and build some security Dashboard on top of it with Universal Dashboards. What if I told you your domain admin is not who you think it is... Securing Active Directory is Hard. Communicating it to management is even harder...
Using PowerShell, we will extract new AD security metrics out of BloodHound and build some security Dashboard on top of it with Universal Dashboards.
What if I told you your domain admin is not who you think it is...
Panel Discussion: Maintaining Open-Source PowerShell Projects
405 Brandon Olin






Speakers
Brandon Olin

Brandon Olin

Stack Overflow


Ever wonder what does it take to maintain open-source PowerShell projects? Come hear from members of the community in a live panel discussion! Learn about their experiences, process, tips, and yes, maybe even some gripes :) Bring all your burning questions. You don't want to miss it! This will be a live panel discussion featuring members of the community who actively maintain open-source PowerShell projects. We will be discussing what it takes to effectively maintain projects, what each member's process is, how much time they spend, any tips they have for people looking to be more active on GitHub, etc. Time will be allowed for questions from the audience. This should be a lively discussion!

12:00 pm

Lunch
Center Hall A





Lunch


01:00 pm

Declarative DevOps Microframeworks
405 Chris Kuech






Speakers
Chris Kuech

Chris Kuech

Microsoft


Declarative DevOps Microframeworks is a holistic pattern for writing scalable DevOps codebases in PowerShell. We will first discuss core motivating DevOps/PowerShell programming concepts like declarative and functional programming, then implement a few practical Declarative DevOps Microframeworks. Declarative DevOps Microframeworks is a pattern for implementing maintainable and robust DevOps codebases in PowerShell. The pattern leverages the unique capabilities of idiomatic PowerShell to more easily tackle some of the greatest challenges in DevOps applications.

In the first half of the presentation, we will explore the core concepts that enable us to write maintainable PowerShell: Functional Programming in PowerShell and writing portable modules with clearn separation of concerns; as well as the DevOps concepts that motivate our declarative microframework pattern: Conway's Law and popular declarative DevOps tools.

In the second half, we will apply these concepts to implement our own Declarative DevOps Microframeworks. We will walk through designing an implementing a practical Declarative DevOps Microframeworks
* A **Declarative Configuration Management** microframework for optimally storing and easily querying complicated configurations spanning varying flighting rings, compliance zones, and cloud regions (datacenters), and clusters.
* A **Declarative Idempotency** microframework ([`Requirements`](https://github.com/microsoft/Requirements)) for applying the declarative Windows DSC programming paradigm to cross-platform PowerShell Core scripts.
* A **Declarative Work-Item Management** microframework for managing your work items in Azure Boards as declarative `# TODO` comments in your code.

Adapted from the series [Declarative DevOps Microframeworks](https://medium.com/@cjkuech/declarative-devops-microframeworks-9908c8d05332?source=friends_link&sk=4e361c6020912fb160e626994a6e5184).

Defeat Versioning Hell with PSScriptAnalyzer
406 Jaap Brasser






Speakers
Jaap Brasser

Jaap Brasser

Jaap Brasser


With the release of PowerShell 7, we got our 3rd iteration of PowerShell after PowerShell Core and Windows PowerShell. With all the choices of versions of PowerShell and different operating systems it has become increasingly harder to know what will work on which operating system. With the release of PowerShell 7, we got our 3rd iteration of PowerShell after PowerShell Core and Windows PowerShell. With all the choices of versions of PowerShell and different operating systems it has become increasingly harder to know what will work on which operating system.

This is where PSScriptAnalyzer in combination CrossCompatibility with come into play. Anyone using VS Code is most likely familiar with PSScriptAnalyzer as it provides the squiggly lines whenever we do not follow proper scripting standards.

In this session we will dive in deeper, and share my personal best practices, how we can create our own compatibility profiles, and how can we generate reports based on these profiles. After that we will take a deeper look at the steps we can take to integrate this into our CI/CD workflows or bots to help us identify compatibility issues in our code.

In this session you will walk away with a more confidence that your code will work on any OS and any PowerShell version!
Windows NTFS and registry ACL explained and managed
404 Raimund Andree






Speakers
Raimund Andree

Raimund Andree

Microsoft


Is editing file or registry permission still uncomfortable? Does it always work or do you get errors when trying? How does inheritance work and how to view it in PowerShell? What are Windows Privileges and how to use them to work around the ACL / security? What is a security descriptor or SDDL? Have you ever been removed from the ACL of a directory on a file server or been asked to restore permissions that somehow got screwed up? Pretty much unchanged since Windows NT4 there are still some mysteries to uncover around Windows Security. Managing permissions on NTFS volumes and the Windows Registry has gotten much easier thanks to PowerShell but some principals behind terms like security descriptor, DACL, SACL, inheritance are still quite unknown. This session covers the basics of how Windows controls access to many resources and how you can manage and report on these access lists with PowerShell. It also explains the term “privilegeâ€ù (something that you see in the output of whoami.exe) and how you can make use of privileges to manage your resources much smoother in Windows PowerShell or PowerShell 6. You will learn how to access literally any file, regardless of how the ACL is defined, and how to manage, migrate, backup and restore permissions with very short and simple PowerShell statements.

This session also talks about module design and when it is a good idea to switch from PowerShell to C#. The source code of the [NTFSSecurity](https://github.com/raandree/NTFSSecurity) is examined

02:00 pm

Run your scripts like Speedy Gonzales (or Usain Bolt)
401 Robert Simons






Speakers

Ever had a script that did its job - but took FOREVER? A WannaCry vulnerability scan going through 1429 subnets - in 17 HOURS! How about reducing that to 20 minutes? Stop thinking serially and start thinking about doing things in parallel! Learn how to use parallelism in PowerShell! We will look at jobs, run spaces and the new (or is it old) parallelism introduced in PowerShell 7.
Using decompilation and PowerShell with reflection to automate the (seemingly) impossible
404 Paul Shamus






Speakers

Have you ever run into a roadblock trying to automate some process and thought, wow this is something even PowerShell can’t solve? Me too. I’ll show you how I decompiled a Windows Form-based application and then used PowerShell with reflection to automate the seemingly impossible. PowerShell is one of the best automation utilities to have in your toolbox. But there are some problems that PowerShell alone can't solve - take, for example, the BizTalk ESB Toolkit, a Windows Forms-based application with no command-line options. How do you automate applying the configuration settings _without_ UI automation? Enter decompilation.

This session will cover how I peeled away the layers of the BizTalk ESB Toolkit using JustDecompile, and used PowerShell with reflection to create a single script that will apply the configuration settings - even via PSRemoting!
Building Free Serverless Backends with Google Apps Script & Google Sheets
405 Nate Ferrell






Speakers
Nate Ferrell

Nate Ferrell

SCRT HQ


Looking for a free solution to build a simple, serverless backend quickly? You can Google that (no, really)! This talk will cover creating a free REST API using Google Apps Script, along with leveraging Google Sheets as a simple database, message queue and logging solution and caveats involved.

Did you know that you can create simple, serverless backends with a free Gmail account? Combining Google Apps Script and Google Sheets opens up some free and fun opportunities to do just that! Building a REST API should be something that you can build and test against without worrying about shutting a server down or cleaning up resources after you are done using them for the day.

During this session, we will cover:

  • Setting up a simple REST API with Google Apps Script
  • Adding a Google Sheet as a message queue, flat database, and logging solution
  • Caveats to this approach that may contradict usability

03:15 pm

Azure Functions with PowerShell: Lessons from the field
401 Ryan Coates






Speakers

The great thing about participating in private and public previews? sometimes there just isn't any documentation for this stuff! Join me as I share some of the lessons learned, pitfalls and considerations to better arm you in your serverless journey Azure Functions with PowerShell: Lessons from the field
I had the privilege of participating in the PowerShell worker 2.0 private previews and have been building Azure functions with PowerShell for over a year

During that time we had to deal with missing our outdated documentation, undefined guidelines and best practices, bugs and undocumented features

Join me as I share some of the lessons learned during my adoption and deployment of numerous microservices built upon Azure Functions PowerShell worker

Things we will cover
* Function app file layout
* Testing considerations
* Pipeline automation
* Integration with other services
* Practices that worked
* Hiccups and problems to look out for
PowerShell an Auditor's Friend
404 Sunny Jamwal






Speakers
Sunny Jamwal

Sunny Jamwal

GoSecure


Imagine if you are auditing an environment containing hundreds of servers. You have the reports showing everything looks good but as they say "Trust but Verify". Verifying manually would require long hours and infinite supply of caffeine. Presenting PowerShell, one cmdlet to rule them all. PowerShell has come a long way from being a "blue version of command line" to a cross platform tool available for both linux and MacOS. PowerShell has been gaining popularity among system admins for their daily operations. PowerShell can be a very powerful tool for system auditors. Traditional audit process involve auditing one system at a time for verification. PowerShell provides the capability to audit large number of systems in a holistic manner. This talks walk you through the process of automating PCI DSS assessments using PowerShell. The author challenged the traditional methods employed to manually verify and collect evidence for PCI DSS assessment and took upon himself to develop an automated framework to execute test cases as they map to various PCI DSS assessments. This automated framework helped reduce the time to verify PCI DSS requirement and evidence collection. Some typical test cases which were part of this automated framework are:

1. Anti-Virus unit test
2. Listening Ports Unit Test
3. Windows Update Unit Test
4. File integrity monitoring Unit Test
5. Installed program Unit Test
6. User account review unit test
7. Application white listing unit test
8. GPO unit test
Writing your first Ansible PowerShell module
405 Paul Ou Yang






Speakers
Paul Ou Yang

Paul Ou Yang

Micron Technology, Inc.


You have learned how to write functions and modules for administering your machines directly, but if you use a tool such as Ansible - how do you write a function to give you added functionality not contained in the built-in modules or in galaxy? If you are using Ansible, last year it was talked about how to setup and use Ansible for Windows administration. One of the things not covered in depth was how to write a PowerShell module from scratch for use by Ansible as well as some of the gotchas associated with these modules. I plan on taking everyone through the basics of writing their first PowerShell module for Ansible showing some of the gotchas along the way that were learned through experience - such as credential delegation issues with kerberos, returning better error messages, returning more information for use to troubleshoot, and other lessons learned between now and the time fo the conference.

04:15 pm

Assert: Write fewer Pester tests to cover more code
404 Jakub Jares






Speakers
Jakub Jares

Jakub Jares

CN Group


Assert module is a module with advanced assertions for Pester. It’s main feature is Assert-Equivalent assertion that compares complete objects recursively and prints a detailed report of what is different. This brings many advantages that allow you to write more comprehensive, more maintainable tests with less effort. It is also great for infrastructure and environment testing where you deal with complex objects all the time.

In this talk I will demo the module, show the challenges I faced developing it and the lessons I learned.
Don't Be Scared of Paranormal Data!
406 Susan Campbell






Speakers
Susan Campbell

Susan Campbell

Gwinnett County Public Schools


Have you ever gotten that scary spreadsheet from another department? You know - the one filled with extra spaces, all caps, spelling conflicts and more? Don't be scared - normalize it! This session focuses on what to do with dirty data - how to automatically scrub data files with PowerShell so they're nice and clean for the next function. For example, HR has given you a CSV export to update Active Directory office location, but the file contains multiple spellings for the same location - St. Cloud vs. st cloud vs. Saint Cloud. Learn how to handle these anomalies and standardize them to one clean, unified spelling to maintain consistency across Active Directory. Standardized fields can help with group automation, GPOs and more. By the end of the session, attendees should have a good grasp on how to create a script to normalize data, with several real-world examples and code to clean them.
Writing Your First Visual Studio Code Extension
401 Thomas Rayner






Speakers
Thomas Rayner

Thomas Rayner

Microsoft


VS Code with the PowerShell extension is the de facto standard editor for PowerShell. One of the best things about VS Code is how customizable it is. Anybody can create themes and extensions for Code, and in this demo-heavy session, you'll learn how you can join the fun, too! Whether you want to deploy a small extension to help your team stay productive, you have an amazing idea for an extension that the public will celebrate for years, or you want to contribute to the PowerShell extension, in this session you'll learn the skills and tools you need to get going. We're going to write a VS Code extension starting from scratch, examining the different resources in place to help you along your journey as we go.

 
Thursday, April 30 2020
 

08:00 am

Breakfast
Center Hall A





Breakfast


09:00 am

Capturing data to Docker SQL instances
406 Michael Teske






Speakers
Michael Teske

Michael Teske

Pluralsight


We'll takes your output to the next level by sending your data to your own SQL instance. Whether it's inventory or whatever your lead wants you to gather, sending your data to a functioning SQL instance will save you in the long run. We'll create a basic tool that does just that saving you time & $ This session focus' on moving admins away from capturing their data to CSV files or even simple text files...never to be found again. This could be a first step for a sysadmin getting comfortable with SQL while slowly graduating to the DBATools module for next level control. Leveraging a Docker SQL container, we'll walk through the process of converting those standard "get-pcinfo.ps1" scripts to send data to their own SQL instance using PowerShell and creating some nice reporting using SQL Server Reporting Services.
CM Smackdown: Battle of the Configuration Managers
405 Adil Leghari






Speakers
Adil Leghari

Adil Leghari

Chocolatey Software


The Configuration Management race has been heating up over the past few years, with three contenders in particular battling for dominance: Chef, Puppet, and Ansible. But which one is currently the best solution for you? Come to this talk and find out! As more and more organizations adopt a DevOps methodology, the importance of selecting a Configuration Management tool becomes paramount. Three CM juggernauts that have separated themselves for the pack are Chef, Puppet, and Ansible. Each tool brings its own flavour of deployment, state maintenance, and idempotence. But which tool is right for your organization? As with most things, this depends largely on your individual environment and use case. This talk will give an overview of all three tools, and highlight the advantages and things to watch out for with each approach.
Sharing is Caring: Building High Quality Open Source PowerShell Modules with CI/CD
401 Brandon Olin






Speakers
Brandon Olin

Brandon Olin

Stack Overflow


You've seen them, installed them, and used them. They are a critical part of your tool chain. I'm talking about open source PowerShell modules. Learn what it takes to design them, test them, and release them into the wild. Join the open source community today. The world needs you. PowerShell is an essential tool in an IT pro's tool belt. With the PowerShell Gallery gaining traction, and Microsoft releasing great open source projects (including PowerShell itself), knowing how to design and release your own high-quality open source PowerShell modules is becoming a critical skill to master to stay relevant in an ever-changing landscape. This talk will go over the following topics:

* Common module design patterns that facilitate collaboration
* Project scaffolding that encourages contributions from the community
* How to wire up your project to Azure Pipelines for CI/CD
* The basics of using GitHub and what it means to be a project maintainer

10:00 am

A Visitor Comes To Town
404 Mathias Jessen






Speakers
Mathias Jessen

Mathias Jessen

Booking.com B.V.


Ever wondered how PowerShell analyses and executes the ASTs produced by the parser? Let's dive in! The PowerShell AST supports tree traversal using something called a "Visitor", two types of which are declared and heavily used in the PowerShell language engine itself. But what is a "Visitor" in the context of object-oriented programming, and how can we leverage them for analysis and transformation of our code? This talk will introduce the loosely defined "Visitor Pattern" in general, look at how it's applied by the PowerShell compiler and touch on how we can leverage this pattern in PowerShell itself!
Identifying and Abusing Alternative Signed PowerShell Host Processes
406 Matt Graeber






Speakers
Matt Graeber

Matt Graeber

SpecterOps


PowerShell isn't just powershell.exe. Many attackers know this and they will seek out alternative, Microsoft-signed PowerShell host processes that defenders are otherwise unaware of. This talk will establish a methodology for identifying, abusing, and defending against alternative PS host processes. Stealthy attackers know better than to run powershell.exe with a suspicious encoded command at the command line. Considering the wealth of security controls available in PowerShell now, attackers choosing to use PowerShell need to employ all the tools in their arsenal to effectively evade detection. One evasive technique is to identify Microsoft-signed PowerShell host processes that defenders are extremely unlikely to be aware of. This talk will establish a methodology for finding and identifying code injection opportunities in signed PowerShell host processes. The talk will conclude with practical detection strategies.
Navigate the Microsoft Graph API with PowerShell
405 Bradley Wyatt






Speakers

Learn how to leverage PowerShell to interact and work in the with Microsoft Graph REST API. The Microsoft Graph API is the gateway to data and intelligence in Microsoft 365 and offers a single endpoint that provides access to Exchange, Teams, SharePoint, AzureAD, Outlook and more.

In this talk we will learn how to leverage PowerShell to connect to and work in REST API’s. Using PowerShell’s Invoke-RestMethod we can interact with directly with the GRAPH API.

Learn how to:

  • Manage Microsoft Teams including posting messages
  • Manage Azure Active Directory
  • Parse users e-mail and send messages
  • Get users calendar events
  • Upload data to SharePoint
  • Whole lot more
Using External .NET SDKs with PowerShell
401 Nate Ferrell






Speakers
Nate Ferrell

Nate Ferrell

SCRT HQ


Using external .NET SDKs from NuGet or elsewhere can provide some big benefits when working in PowerShell, as well as introduce some new pain points. This session covers tips, tricks, and how to avoid some of the "gotchas" while working with .NET from PowerShell. When you are approaching new problems with PowerShell, it can be commonplace to find answers that cover how to solve it in C#/.NET, but not necessarily PowerShell. You may be trying to improve file enumeration and start to see references to AlphaFS or writing an automation process for a hosted service who doesn't have a very intuitive REST API, but does offer a .NET SDK. If you are not coming from a typical software development background, some of the references and troubleshooting methods can seem incredibly foreign.

This session will focus on:

* Why leveraging available .NET SDKs can offer immediate benefits to your tasks at hand
* Finding packages you need on NuGet as well as resolving package dependencies
* Adding external assemblies to your PowerShell session safely
* Demystifying OverloadDefinitions
* Common headaches from working PowerShell code with .NET SDKs and how to avoid them

10:45 am

Break





Break

11:00 am

Practically Regexing: A demo of demos
401 Anthony Howell






Speakers
Anthony Howell

Anthony Howell

Howell IT, TechSnips


If you haven't mastered regex yet, I'm sure that it is one of the things on your bucket list. If not for its usefulness, for being able to proudly exclaim: 'I understand!' after carefully examining a character vomit. To fully grasp how effective regex can be, strap in for a full demo of examples. Regex is used for string matching, thats cool, so what? PowerShell is object oriented, who needs to worry about how strings are formatted?

Maybe you work in Active Directory, ever need to parse DNs or other identifiers? What about SQL and parsing connection strings? Or what if you are an application administrator and you need to parse some logs, yep, there is a regex for everyone!

Now this isn't an introduction to regex (for that I would recommend checking out Mark Minasi's talk from 2018), this is a talk full of explained and practical regex examples designed to not only make your life as a PowerShell scripter easier, but to also give you the motivation to learn more.
SQL Availability Group Failover
404 William White






Speakers

I've been involved in writing an AG failover process that encapsulates a significant amount of business logic on top of the base TSQL exercise. This process is instrumented via influx, logged to ELK and Slack and available for execution in Rundeck. I would like to talk about this effort. This session will touch on many aspects of the PowerShell module that I contribute to and maintain with a focus on how we have leveraged POSH to build enterprise workflows that are instrumented, logged (in a distributed way), parallelized and available for one touch execution via Rundeck.
We started with some strong foundations and have been able to build some very cool processes which are now leveraged to move MSSQL databases instances between geographically dispersed data centers; both onprem and cloud.

12:00 pm

Lunch
Center Hall A





Lunch


01:00 pm

Advanced proxy function to create custom CSV
404 Tim Curwick






Speakers
Tim Curwick

Tim Curwick

MN PowerShell Automation Group; RBA Consulting


Proxy functions can modify the functionality and output of a base function, not just customize input. When a you need functionality that an existing command almost works for, you don't always have to reinvent the wheel. Often you can use a proxy function to tweak the behavior of the command just the way you need it. Most examples out there only modify input parameters, but we can do much more, and do so more simply than the auto-generated proxy function code does it. We'll walk through a function for creating custom CSV destined for a non-Microsoft system, leveraging a proxied ConvertTo-CSV to do the heavy lifting.
Automating SQL Code Tests
405 Paul DeArment






Speakers
Paul DeArment

Paul DeArment

Advocate Aurora Healthcare, Milwaukee Powershell User Group Founder


Manually testing your SQL code with different database versions is time consuming and often neglected. This is where automation comes in. Using Azure VMs, Azure DevOps, Pester and PowerShell, test environments can be easily created and destroyed when new database versions are released. This session will help you automate the testing and ensure that your SQL code will run efficiently in any database version.

Demos planned include:

- Using Azure PowerShell to create SQL VMs
- Working with PowerShell to deploy SQL scripts
- Testing SQL execution with Pester
- Orchestrating the tasks with Azure DevOps pipelines

The demos are focused in SQL Server but the scripts can be customized for other databases such as Oracle, MySQL and PostgreSQL
Sharing Back: Participating in the PowerShell Community
401 Rob Pleau






Speakers

You're proficient with PowerShell and DevOps concepts, now you want to give back to the community that helped you become the success you are today. Starting a blog and participating in open source projects is so easy, we'll do it live in this session! Shake off that impostor syndrome today! Learn how to share back to the community that helped you become the success you are today. Shake that impostor syndrome off and start sharing your knowledge back, you have a lot to contribute! If you're not sure where to start, in this session you'll learn the following...

* Starting a blog isn't as daunting as you think, it's so easy we'll do it live in this session using Github Pages and Jekyll. The best part too, it's free, it only costs you the time to setup and write articles.
* Participating in community projects varies, we'll look at some examples on Github and see what a Pull Request experience looks like.
* There are so many places to help others just starting. We'll visit some of these (reddit's /r/powershell, powershell.org forums, etc.) and see how easy it is to just jump into a thread and start helping.
* In your travels you'll get good and bad feedback, we'll see some instances in my travels and how good or bad, they were all opportunities to learn something.

You'll leave this session armed with the knowledge on how to start sharing back, you'll also find that the more you share, the more you also learn! You'll learn that even if you answer the occasional post, or answer a question here and there you'll help more than you know, and even learn some new things in the process!
What is new in Pester 5?
406 Jakub Jares






Speakers
Jakub Jares

Jakub Jares

CN Group


Pester 5 brings multiple new features, many fixes and also some significant breaking changes. In this talk I will demo the most significant improvements to the framework, point out differences from version 4 and give a quick guide to migrating to the new framework version.

02:00 pm

iron Scripter
Center Hall A






Iron Scripter Challenge
Scripting Challenge
Center Hall B






For those who are looking for a challenge but do not like the group coding atmosphere of Iron Scripter