State of the Shell with Joey and Jeffrey Snover
In August 2020, GitHub added support for PowerShell within GitHub Composite Actions for all of their runners, including Ubuntu, Mac OS, and Windows. GitHub Actions allow you to create reusable actions using shell scripts and even mix multiple shell languages in the same action. You probably have a lot of shell scripts to automate many tasks, now you can easily turn them into action and reuse them for different workflows.
This Action-packed presentation will show you how fun and useful this new GitHub feature can be. Combined with Docker containers, the possibilities are endless.
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 principles 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 is examined
Get on the cutting edge by implementing infrastructure as code for your SQL Server environment. Using PowerShell Desired State Configuration (DSC) we’ll look at how to take a newly built Windows Server and get it ready for prime time while discussing the benefits associated with infrastructure as code.
* Setup Pre-Requisites
* Install SQL Server
* Configure SQL Server
* Make SQL Server Application Ready
Unlike PowerPoint, PowerShell can be a great tool to aid you both in managing Power Automate flows, but also by offering additional functionality that can greatly increase the possibilities of a flow or even simplify existing Flows. The potential is near endless and Jaap will lead you through some of the options that should be top of mind to anyone looking to use PowerShell in a Power Automate context.
Join this session to get insight into the inner workings of the different methods that PowerShell can be used to make Power Automate an even more flexible solution. Explore the opportunities for automation that this brings to the table as this session will contain many technical explanations and demos that allows you to hit the ground running with this hit duo.
Incidents happen and most depend on commercial tools but they may not always be available. Luckily, we are not out of luck as PowerShell can and is being used for incident response. We will demo how the language can aid you in your next incident including a few frameworks that I developed.
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 organizations 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.
The Configuration Management race has been heating up over the past few years, with a few contenders battling for your dollars: Puppet, Ansible, and DSC. But you’re moving to the Cloud, so do you even need a Configuration Manager? What’s 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 tools that have separated themselves for the pack are Puppet, Ansible, and DSC. Each tool brings its own flavor 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.
In this session, we will look at the many ways you can expose PowerShell scripts as web-based tools with PowerShell Universal. We’ll take a look at how to get started with Universal and how to set up your environment for developing against the platform. We’ll then dive into building REST APIs, running and scheduling scripts, and building dashboards. We’ll also touch on authentication and authorization features built into Universal.
Keynote by Don Jones
Did you know that you can configure Azure Cloud Shell to be running inside a VNet so that we can use PowerShell Remoting to manage internal Virtual Machines? In this session, we will dive into this as well as other tools and techniques used to manage Azure in an effective manner using PowerShell.
In this session, we will look at leveraging a number of tools available for us for becoming an effective administrator in Azure. We`ll start by looking into Azure Cloud Shell and how to set up VNet integration to make it possible to reach services running inside VNets such as Private Endpoint-enabled PaaS-services, as well as Virtual Machines running both in Azure as well as on-premises. We will then look at different techniques for using PowerShell to manage Azure resources, such as various container images. We will close up by looking at how PowerShell can be used as the glue to fill gaps such as triggering automated PowerShell routines based on Azure Event Grid, for example, to create automated tags where Azure Policy is unable to meet the requirements. After this session, you should have a great overview of the various options available for managing Azure using PowerShell.
Nobody talks about certificates, though you find them everywhere: PowerShell script signing, WinRM session authentication, HTTPS. During this session, we’ll take a look inside a certificate, create our own, and put it to some practical use.
Starting with a quick review of Public Key Infrastructure (PKI), we’ll discuss the concept of trust and differentiate between common scenarios. What needs to happen when you sign the code? How does encryption work?
Walking step-by-step through the process of creating a self-signed certificate, we’ll discuss the properties of an X509Certificate2 object and understand its intended uses.
Because a certificate from a public Certification Authority (CA) has a much broader scope of use, we’ll see the ACME request process and use the resultant certificate for practical applications, including installation in on-premise IIS, an Azure App Service, using to secure a WinRM remoting session, and of course signing our PowerShell script!
Whether you are deploying Cloud infrastructure with ARM templates, Terraform modules, or something else entirely, you’re dealing with code, and code needs to be tested. Your infrastructure code should be no different. Let’s talk about some ways to test Terraform with Pester as an example.
When using Infrastructure as Code tools like Terraform to provision Cloud resources, you need to ask these questions:
* How do I ensure the infrastructure I build is what I intended?
* How do I protect against unintended behavior?
* How do I continuously verify this?
In this talk, I will showcase how we at Stack Overflow continuously test our Terraform code with Pester to ensure that what we deploy in Azure adheres to our standards.
You’ve done some basic script troubleshooting. Maybe you’ve used -Debug. Maybe you’ve used breakpoints. Or maybe you just output text to see what is going on. If you really want to script, it’s time to take your skills further. Come to this session to kick your debugging skills up a notch or two.
In this session, you’ll learn more about the debugger. You’ll learn more about breakpoints. Most importantly, you’ll learn how to be more efficient when searching for bugs in your scripts. The debugger is your ally, and once you learn how to speak its language, you’ll leave this session ready to take control of the bugs you face in your scripts more quickly than ever before.
Stop procrastinating and move from the deprecated PowerShell ISE to Visual Studio Code today! I’ll show you how to ease the transition.
You may be aware that the PowerShell Integrated Scripting Environment (ISE) is deprecated. Thus, if you haven’t moved your PowerShell development to Visual Studio Code yet, you should do so. In this session, Tim will show you everything you need to know to make VSCode behave as ISE does, and beyond.
The Secret Management module from the Powershell team is in preview and provides a standard way of storing and retrieving secrets. In this talk I will show you how to build a Secret Management provider, and provide real-world examples using a powershell module interface, a REST API, and a command-line wrapper. If you have a favorite way to store Secrets and it can be automated in Powershell, you too can make a Vault Extension!
You’ve been working with containers in development for a while, benefiting from the ease and speed of the deployments. Now it’s time to extend your container-based data platform’s capabilities for your production scenarios.
In this session, we’ll look at how to build custom containers, enabling you to craft a container image for your production system’s needs. We’ll also dive deeper into operationalizing your container-based data platform and learn how to provision advanced disk topologies, seed larger databases, implement resource control and understand performance concepts.
By the end of this session, you will learn what it takes to build containers and make them production ready for your environment.
You need to give the help desk access to special tooling without giving them special creds or API keys. But how? Today more than ever we are concerned about embedding privileged info in our scripts. But what if you’ve gotta have that to get the job done? In this session, Ashley McGlone (@GoateePFE) will demonstrate a solution he built for the real world using pain old out-of-the-box JEA (Just Enough Administration) to deliver the goods without giving away the goods.
So you can write a function and put it into a module. Or maybe you have a killer production script. What will take it to the next level or make it easier to use? How about adding auto completers, custom formatting, or type extensions? Don’t know how? This is the session for you.
This session is aimed at experienced PowerShell scripters ready to go to the next level. You will learn how to add auto-completers to your commands which go beyond validation sets. You will learn the role dynamic parameters might play in your code and how to create them. You will learn how to add custom type and format extensions and why you want to use them. These are things that might make your module even more powerful, or make your daily PowerShell work easier. You’ll also see how easy it is to run your production scripts from anywhere!
In this session, we will share the best practices that you can apply when you are developing or maintaining PowerShell scripts managing Azure resources.
The team building the Az PowerShell module will give recommendations on how to best authenticate, deal with secrets, manage resources, handle errors, and more. We will also explain how to keep your code up to date and keep up with the pace of Azure services. Code is on the menu and we have saved time for questions. Brush up your knowledge of Azure PowerShell and prepare for a deep dive.
You’re not a regex noob. You know about quantifiers like ?, *, and +. You also know about tokens like \w, \s, and \d. It’s time, now, to take your regex skills to the next level with some advanced concepts like grouping, capturing, and look behind. Get ready to stand above your peers in a big way.
Regex intimidates people, and rightfully so. It’s complicated and isn’t always very readable for humans. It really takes some work to get your head around and truly understand regular expressions. This session is for people who know basic regex concepts and want to take their learning to the next level. Regex is like chess in that it’s easy to learn, but very hard to master. I’ll be teaching attendees some advanced moves to help them accelerate their learning and start doing some really cool things with regex. Anybody can write
$number -match '\d', but not everyone can isolate the third octet out of an IP address.
Most web services use oAuth for authentication of a user. While some services offer a mechanism to pre-generate an access token, many don’t. In this session, you’ll learn how to build a proper oAuth flow between PowerShell and external web services.
While PowerShell isn’t typically seen as a web-focused automation language, integrating with external services is still important. For example, what if you want to pull search data off YouTube, or automatically respond to comments on a YouTube video? What if you want to automate the migration of videos from YouTube to Dailymotion? Understanding how oAuth works, and how to integrate PowerShell with oAuth services, will help you to build deeper integrations with a broader set of services on the web.
We all might think we know the rules in PowerShell, but did you know you could break the game?
You will learn some handy and unusual tricks, including smart aliasing, anonymized recursion, flexible splatting, asynchronous programming, writing games in PowerShell, and more."
This session focuses on PowerShell Crescendo, a new Open-sourced PowerShell module to create a PowerShell module from other executables for a specific use case.
Anyone attending this session will be able to understand the use cases for where all this module can be used. The session covers the internals of PowerShell Crescendo module on how it generates a PowerShell module from a JSON configuration and the possibilities of extending the module as it is Open Sourced. Modules created by PowerShell Crescendo can be open-sourced, hence anyone who uses that module can extend it and make it more valuable and relevant for more users.
Learn how to leverage PowerShell to interact with the 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 directly with Microsoft's 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!
Do you want to access REST APIs using PowerShell with ease? With OpenAPI Generator, you can auto-generate a PowerShell module given an OpenAPI specification and then publish the module to PowerShell Gallery within minutes. In this talk, I'll walk you through the code generation process in 3 steps.
Using PowerShell to obtain data via REST(ful) APIs is not an uncommon task. Instead of using Invoke-RestMethod or Invoke-WebRequest to manually build the HTTP call, is there any other approach we can provide a better experience to PowerShell users?
OpenAPI Generator, an open-source project used by IBM, Cisco, RedHat, and many more companies in production, offers an easy way to generate high-quality API clients in 30+ programming languages including PowerShell. All it needs is an OpenAPI specification describing the REST APIs and within minutes, it can generate a fully-functional PowerShell module with documentation, sample codes, and test templates.
In this talk, we will walk through an example of generating a PowerShell module and then publishing it to PowerShell Gallery in only steps. We will explain the fundamentals such as OpenAPI specification, OpenAPI Generator, and the core of the PowerShell module. Then we'll also touch on customizing the PowerShell clients to meet your unique requirements.
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, that's 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? Or heck, let's talk meta PowerShell regex and do some find and replacing of variables in a folder of scripts! Yes, there is plenty of regex to go around!
But! Even if there are lots of strings to regularly express, there are also times when regular expressions are not the best tool for the job. I want to make sure and cover a couple of examples of terrible things to regex and explain why (with some really gross regex).
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.
What happens when bad things happen to good scripts? Code errors. Run time errors. Depending on how your scripts handle it - it can either become an end-user nightmare (Where did it terminate? What was done? What wasn't done? Was there rollback? Or are we in an uncertain state?) or a pleasant end-user experience. From your perspective was this a run time issue or did the user stumble upon a logic issue in your script? Where did it blow up? Can the error be fixed or if it is runtime trapped and handled? Learn how to integrate error handling in your scripts to make your life easier and stop traumatizing end users with 'walls of red'!
Sometimes it's a pain to keep your scripts together and up to date with other team members. Well, fret no more, creating modules can help you keep your scripts up to date across many computers. Learn what the important parts of a module are, how to update them, and how I set up modules to be easy to work with.
Are you tired of being overwhelmed with cmdlet output or victim to Select-Object throwing away your data when you forgot to save it to a variable? In this presentation, I can teach you the lost art of object formatting! For more detailed information please see the course description.
When administrators use PowerShell to execute commands to retrieve information the data returned from the cmdlet's object output pipeline can be overwhelming. Overtime as business requirements changes so do the size of the workflows or scripts that are being executed to perform day-to-day operations. When this happens it is common for these scripts or workflows to become more complex, cumbersome, and inefficient. In the end, the time it takes administrators to filter through this data cost businesses lost revenue.
This might seem like a pretty bad and time-consuming situation, however, I am here to tell and show you there are ways to solve these issues. The answer is to customize your data output! Yes, I know that sounds complex, but it's not, once you understand some basic concepts about the PowerShell pipeline. I will do a deep dive on the pipeline, the logic behind it, and how you can manipulate the pipeline in ways you probably haven't seen before.
The goal is of this presentation is to teach you how you grab the cmdlet information you care about and customize a data output that works for you. PowerShell has a few cool ways to display your information in (Table, List, Wide, or Custom) formats.
These are the topics that I will cover in this presentation:
1. How PowerhShell uses objects, sends them down the pipeline, how data can be persevered or throw away in the pipeline which affects formatting.
2. Speak about the importance of the PSMembersSet and DefaultDisplayPropertySet and how the PowerShell formatting engine uses them to present the object back to the console.
3. Walk through the PowerShell core types and formatting files and how to use them and create formatting templates.
4. How to create custom PowerShell objects from scratch and how to configure them for formatting.
5. How you can do this on the fly from a live interactive PowerShell console session and also in PowerShell modules.
By the time you are done, you will learn how to fill in the holes on a concept that many people don't fully understand and start using the pipeline to your benefit!
All project files will be posted on GitHub for download for you to use as ready to go examples.
In this talk, we will examine the process used in creating BluebirdPS, a PowerShell 7 module for the Twitter REST API. Topics will include learning the API, authentication, module structure, response, and error handling, and customizing the output.
BluebirdPS is a PowerShell 7 module that interacts with the Twitter REST API and is available in the PowerShell Gallery. This session will begin with a demonstration of a few of the module's commands, then we will see how the module was designed and implemented.
We will examine the core components of the module, the custom class used to generate the appropriate authentication header based on specific endpoint requirements, and the private functions that call the endpoints, format the results, and handle errors.
Next, we will discuss the public functions, those that use the API caller private functions, and those that are helpers that provide information to the user or manage configuration settings.
There are a number of things the PowerShell community knows to speed up their scripts. These range from common sense to superstitious.
I have talked about optimizing PowerShell for Speed at a previous Summit, but with the work, that's been put into PowerShell 7 and beyond itâ€™s time to revisit the topic.
Stop by this demo-heavy session to see if old truisms remain valid and if you even need to make any changes to your existing scripts to leave Windows PowerShell in the dust once youâ€™re behind the wheel of its opensource big brother.
Who knows, PowerShell 7 may just be a performance-enhancing drug that should be banned from the Olympics.
The dbatools project brings automation to the forefront of the SQL Server configuration, operations, and deployment tasks. In this session, we will look at how to install and configure multiple SQL Servers quickly and consistently using dbatools deployment tools. Once those systems are up and running we will look at how to configure and manage multiple systems using PowerShell automation techniques. By the end of this session, you will have the tools, techniques, and code to automatically and consistently deploy and configure SQL Server in your environment.
There are a myriad of examples of code that provides a bad user experience. Typically, these are very simple issues to resolve, they just require a little thought and planning. Come find out how to write experiences with your users in mind.
Writing good code goes beyond how easy it is to read and follow. This talk focuses in on some key considerations you should think about prior to starting your next project.
We'll discuss several things in this talk including but not limited to the following:
- Parameter design
- Help systems
- Overall Usability (How the user will interact with the software)
I hope you'll join me as we discuss making your next project the best user experience possible.
In this post, I will explain how to use the GitHub PowerShell module to manage your GitHub.
We will see for instance how to:
- Connect to your GitHub securely
- Update your profile
- List your repositories
- Update content in a repo
- Create a repository and upload content
- Migrate content from a GitHub to another one
- Migrate data from TechNet to GitHub
- Upload device logs to a private GitHub repo
- Delete multiple repositories at once
- Get view, count of a repo
- Other things relative to your GitHub profile