Powershell

1083 readers
5 users here now

PowerShell (POSH) is a a task automation command-line shell and scripting language created by Microsoft. It became part of the FOSS community in 2016 and is now available across Windows, Linux, and macOS

Resources:


Rules:

Self-promotion rules:


founded 2 years ago
MODERATORS
1
 
 

Announcements!

Blogs, Articles, and Posts

  • Get started with Microsoft Desired State Configuration v3.0.0
    This post show you how to install DSC v3.0.0 and get started using the dsc command.
  • Authoring Enhancements in Microsoft Desired State Configuration v3.0.0
    This is the third post in a multi-part series about the new release of DSC. Microsoft Desired State Configuration (DSC) v3.0.0 provides powerful feature that enhance the authoring experience. Shell completion Schema-based validation Support for modern DSLs like Azure Bicep DSC command completer The completer command returns a shell script that, when executed, registers completions
  • PowerShell: The new Entra ID Module
    The new PowerShell Entra ID Module is a powerful tool designed to streamline the management and automation of Microsoft Entra resources.
  • SharePoint Online PowerShell Module Gets Modern Authentication
    Microsoft has announced that the SharePoint Online PowerShell module will be upgraded from the very old and now obsolete IDCRL protocol to use modern (OAuth) authentication in versions released from March 28, 2025. The update to OAuth should not affect scripts, but it’s always wise to test in case your use of the module is an edge case that Microsoft doesn’t test.
  • Optimize and customize Windows 11 with PowerShell and Winhance
    Winhance is a PowerShell utility for optimizing and customizing Windows 11. It enables users to remove unwanted software, prevent reinstallation, and enhance system privacy and performance settings.
  • How to Check Who Deleted Emails from Shared Mailbox in Microsoft 365
    With multiple users having access to Microsoft 365 shared mailboxes, the risk of important emails disappearing is a real challenge. A single missing email can disrupt client interactions or halt progress in collaborative projects. Therefore, this blog will show you how to monitor shared mailbox email deletion to identify who…
  • Practical Graph: Nag Users to Upgrade to a Strong Authentication Method
    Convincing people to use MFA is one challenge. Convincing them to use a stronger authentication method than SMS is another. This article explains how to use PowerShell to find people still using SMS for MFA and send email to ask them to upgrade their authentication method.
  • How to manage most Rest APIs with just a few PowerShell functions
    A cmdlet around the endpoint, or a cmdlet per method? Disclaimer: every REST API works different, so this script should be an example of how you can build a function for each REST API. Nowadays there are more and more Rest APIs that we can use instead of Cmdlets (which use the Rest API in … Continue reading How to manage most Rest APIs with just a few PowerShell functions

Projects, Scripts, and Modules

Books, Media, and Learning Resources

  • Find retiring Azure features and address them safely en masse with PowerShell
    See how to find which of your Azure resources will be impacted by upcoming Azure retirements. I also show an approach to targeting updating specific Azure resources, allowing you to more safely modify resources en masse, such as by environment, with PowerShell and the Az PowerShell module. There are other ways to do this as well; this is just one workflow I often use.
  • PowerShell: Summarizing YouTube transcripts with AI
    In this video, 16-time Microsoft MVP Doug Finke demonstrates the PSAI PowerShell module to summarize Scott Hanselman’s NDC London 2025 AI keynote.
2
 
 

Announcements!

  • Microsoft Graph PowerShell SDK V2.26.1 Remains Flawed
    The developers rushed out Version 2.26.1 of the Microsoft Graph PowerShell SDK to fix some obvious issues. Alas, problems persist in PowerShell SDK cmdlets, including licensing failures and an issue that prevents the Connect-MgGraph cmdlet from being able to obtain an access token from Entra ID. My advice is to stay with V2.25 until Microsoft resolves the problems and generates a new stable version of the SDK.

Blogs, Articles, and Posts

  • The not so simplified syntax of Where-Object in PowerShell
    PowerShell 3.0 introduced several notable improvements to its cmdlet library, with one of the most useful features in this release being the simplified syntax for the Where-Object cmdlet. This enhancement made filtering objects more efficient and user-friendly by introducing Property and Value parameters and a switch parameter for every comparison operator. This article explores how these changes work, their usefulness, and how to leverage them in your scripts.
  • EntraFIDOFinder March Update
    We are in March, and looks like no new major changes. I may have to start sending this update out later in the week, as I’m wondering if Microsoft hasn’t updated their page yet. Some things I did notice were that a few of the YubiKey names slightly changed on the FIDO Alliance database
  • Warp for Windows
    We have reviewed Warp's Mac and Linux versions multiple times, as it stands out as the top terminal application. The newly released Windows edition introduces AI-driven automation for PowerShell administrators.
  • AI-powered Azure Function for querying Azure in natural language
    In this post, I introduce an AI-powered Azure Function that connects to the Azure OpenAI API. This Function allows you to execute queries in natural language to fetch Azure resource information without requiring a deep knowledge of the Azure Resource Graph Query Language (KQL).
  • Retrieve End of Life information using PowerShell
    One of the things that I do when writing documents for customers is check if the products I advise or the customers use are still supported. The end-of-life date is essential, and in this blog post, I will show you how to retrieve that information quickly :)
  • Practical Protection: Automating Inactive Account Blocking with PowerShell
    Inactive accounts aren’t glamorous, but they’re a real risk! In this episode of Practical Protection, we dive into the basics of inactive account blocking and share some PowerShell scripts to help automate this process.

Projects, Scripts, and Modules

Community

  • PowerShell as a Defender’s Secret Weapon with Michael Haag
    In this episode of the PowerShell Podcast, we sit down with Michael Haag, Principal Threat Researcher at Splunk, to dive into PowerShell security, threat detection, and automation. Michael shares his journey from IT support to becoming a security expert, the role of PowerShell in modern cybersecurity, and his work on PowerShell Hunter and Atomic Red Team.

Events

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

3
 
 

Announcements!

Blogs, Articles, and Posts

  • Terminal Chat now included in GitHub Copilot Free
    Windows Terminal Canary users can now use Terminal Chat with the GitHub Copilot Free plan! GitHub Copilot Free is limited to 50 chat messages per month. This includes the usage of Copilot in the CLI, VS Code, and Visual Studio.
  • Microsoft Graph PowerShell SDK Runs into Choppy Waters
    A bunch of problems with V2.26 of the Microsoft Graph PowerShell SDK V2.26 make the software unusable. Not only did Microsoft do a horrible job of testing the new release before making it available to customers, but they also failed to communicate the level of change in the new SDK and how it could impact Azure Automation runbooks.
  • Practical Graph: Creating SharePoint News Items from an RSS Feed
    This article explains how to use the SharePoint Pages API to create new site pages with the Microsoft Graph PowerShell SDK after reading information from an RSS feed. Parsing the RSS feed to find article details is just one of the challenges encountered and solved to accomplish the goal.
  • Practical PnP: Automating Teams Creation using Templates
    In this installment of Practical PnP, Sean McAvinue dives into how PnP PowerShell can help to improve automated Teams provisioning using templates and preset structures.
  • Using Warp as PowerShell terminal
    This week, after the official Windows release of Warp on February 26th, I saw many YouTube clips of the new Terminal app. I decided to try it and see what it does differently from my trusty Windows Terminal app. This blog post will show you my first impression of the application.
  • 25 Years of Active Directory and my PowerShell experience managing it
    This week, on the 17th of February, Active Directory celebrated its 25th birthday :) I will share my experience managing it with PowerShell in this blog post.
  • Understanding OAuth: Coding the authentication flow yourself vs using an SDK
    Dive into Microsoft Graph authentication with PowerShell. In this blog we explore OAuth flows, PKCE security, and token handling. Learn how to build a secure auth flow from scratch and why the SDK might still be the best choice for automation.
  • Export All App Registrations with Certificates and Secrets in Microsoft Entra
    Imagine spending your afternoon sifting through dozens of app registrations in Entra ID to determine which ones are still active, and which are relics from past projects. As an admin, you know that applications use certificates and secrets for app registrations to securely authenticate—but many of these credentials persist
  • How to stringify nested Json in PowerShell and back to a PSObject
    Stringify dynamic child properties in Json with PowerShell I had a fun one yesterday that I want to share here. We have a database at work (new job at InSpark), in the database we have a table in which we can create a row ourselves by making a request via a put method. The row … Continue reading How to stringify nested Json in PowerShell and back to a PSObject

Projects, Scripts, and Modules

Community

  • MS Graph and Stepping into Public Speaking with Morten Kristensen
    In this episode of the PowerShell Podcast, we sit down with Morten Kristensen, an automation specialist and PowerShell enthusiast, to discuss his journey with PowerShell, his experience working with the Microsoft Graph API, and his recent leap into public speaking. Morten shares insights from his first-ever technical talk, the challenges of working with Graph API, and how he's navigating his professional growth.

Events

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

4
 
 

Blogs, Articles, and Posts

  • Processing Multiple Message Attachments with the Microsoft Graph PowerShell SDK
    Many examples are available online to explain how to add a single attachment to messages using the Microsoft Graph PowerShell SDK. Here we look at the principles behind how to add attachments (one or many) to messages before sending them with the Send-MgUserMail cmdlet. Get the principles right and you’ll never go wrong!
  • A Mini Dive into the Microsoft Entra PowerShell Module: An Intune Administrator’s Perspective
    In this post, we'll analyse the Entra PowerShell module's authentication implementation and discuss whether it's necessary for your Intune automation needs if you're already using the Microsoft.Graph.Authentication module, part of the Microsoft Graph SDK, to handle your tokens.
  • Retrieve blocked DNS queries from PiHole using PowerShell
    I use PiHole for Ad-blocking at home, and yes, sometimes that causes some issues if it blocks Microsoft (Or other) management addresses. In this blog post, I will show how you can live-track blocked DNS queries and get some insights while troubleshooting :)
  • Practical PowerShell: Parameter Input Validation
    In previous Practical PowerShell articles, Michel discussed using parameters in advanced functions and utilizing dynamic parameters. In this article, we will dive in a bit deeper on a topic we touched on lightly in those articles, which is ways to validate parameter input.
  • Automating Sysmon installation and configuration with PowerShell
    Introduction In today’s fast-paced digital world, quick response to security incidents is crucial. Sysmon (System Monitor) from Microsoft’s Sysinternals suite is an essential tool for detailed system monitoring and security analysis. However, traditional installation can be time-consuming, especially in urgent situations. This blog post introduces a PowerShell script that automates the download, extraction, and installation of Sysmon, along with applying a pre-configured setup.
  • The Micromine Alastri Hub Launcher Tool that leverages a RAM Disk for Temporary Data
    I would like to introduce you to a PowerShell tool I originally created in early 2024, which was in the research and planning stage for about 12 months previous to that. If you or your customer runs Micromine Alastri Software, especially in a virtualised desktop platform from Vendors such as Citrix, Omnissa, Parallels, Microsoft and […]Author informationJeremy SaundersTechnical Architect | DevOps Evangelist | Software Developer | Microsoft, NVIDIA, Citrix and Desktop Virtualisation (VDI) Specialist/Expert | Rapper | Improvisor | Comedian | Property Investor | Kayaking enthusiast at J House ConsultingJeremy Saunders is the Problem Terminator. He is a highly respected IT Professional with over 35 years’ experience in the industry. Using his exceptional design and problem solving skills with precise methodologies applied at both technical and business levels he is always focused on achieving the best business outcomes. He worked as an independent consultant until September 2017, when he took up a full time role at BHP, one of the largest and most innovative global mining companies. With a diverse skill set, high ethical standards, and attention to detail, coupled with a friendly nature and great sense of humour, Jeremy aligns to industry and vendor best practices, which puts him amongst the leaders of his field. He is intensely passionate about solving technology problems for his organisation, their customers and the tech community, to improve the user experience, reliability and operational support. Views and IP shared on this site belong to Jeremy.TwitterFacebookGoogle+LinkedIn
  • Preparing for Microsoft’s Strong Certificate Mapping Enforcement – What You Need to Know
    The post Preparing for Microsoft’s Strong Certificate Mapping Enforcement – What You Need to Know appeared first on PKI Solutions.

Projects, Scripts, and Modules

  • How to Find Inactive Teams in MS Teams
    Since 2020, Microsoft Teams has taken the lead as the go-to communication tool in organizations. From chats to meetings, it’s become the collaboration hub for team projects. However, as projects come to an end, many of the teams gradually fade into inactivity.
  • Get-PSChooseFileName
    A bridge to AppleScript's Choose File Name command
  • PowerShell Bug Reproductions
    A small repo to reproduce PowerShell bugs in.
  • DesktopManager
    DesktopManager is a C# library and PowerShell module that allows to play with desktop settings. It allows to get information about monitors, display devices, wallpapers and set wallpapers.

Books, Media, and Learning Resources

Community

  • Building a Game in PowerShell from the Ground Up with Greg Martin
    In this episode of the PowerShell Podcast, we welcome Greg Martin, a longtime developer and PowerShell enthusiast, who has taken PowerShell beyond system administration and into the realm of game development. Greg shares his journey of building Eldoria, a terminal adventure game written entirely in PowerShell, and how his experience across multiple programming languages influenced his approach.

Events

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

5
 
 

Blogs, Articles, and Posts

  • Primer: Using Exchange Online PowerShell in Azure Automation Runbooks
    In this primer, we cover how to create and execute Azure Automation Exchange Online runbooks (scripts) using cmdlets from the Exchange Online management module. Some setup is necessary before runbooks can process Exchange cmdlets, but once the necessary resources and permissions are in place, it’s all plain sailing.
  • Custom Maester Tests: Validate Full Addresses Now and Cleaned Up Wording
    Added 3 new tests which I think the first two will be game changers. The first 2 are tests for validating locations, in which the user must have street, city, state, postal code, country, business phone, and company name the same as the valid location in the json.
  • 02-14-2025 MSOnline and AzureAD PowerShell modules.. One last Valentine’s day card each
    If you haven’t seen the news already, MSOnline and AzureAD PowerShell modules will be no longer supported after March 30, 2025. So looks like this will be our last year to give them a Valentine’s day card for all the times they’ve been there for us in!
  • Cline vs. Roo Code – Which VS Code extension is better for the AI-augmented IT pro?
    In a prior article, I showcased automating PowerShell management in natural language using the VS Code extension Cline. Roo Code (formerly Roo Cline) is a Cline fork that provides extra valuable features for the AI-enhanced IT pro. Roo Code remains comparable, and the insights I shared about working with MCP servers in Cline also apply to Roo Code. The main difference is that Roo Code serves system administrators more effectively, as it provides a mode more suitable for natural language use in a CLI. Additionally, Roo Code's support of VS Code's Code Actions feature makes it perfect for understanding and modifying a colleague's scripts.
  • Using the PowerShell WinGet Client module to install your apps on your new computer
    Installing all your (management) apps on a new system always takes too much time. In this blog post, I will show you how to use PowerShell and the WinGet Client module to install them quickly.
  • Not the Error I expected! Connect-NsxtServer
    Howdy! It’s been quite a while since I created a blog post. Not sure I would want to say exactly how long. However, today I had a brand new VM that I was using to write some automation with PowerShell/PowerCLI. It took me a few minutes to figure this one out. Maybe it was me?
  • DPRK hackers dupe targets into typing PowerShell commands as admin
    North Korean state actor 'Kimsuky' (aka 'Emerald Sleet' or 'Velvet Chollima') has been observed using a new tactic inspired from the now widespread ClickFix campaigns.
  • Behind the PowerShell Pipeline
    Welcome to Behind the PowerShell Pipeline a subscription-based newsletter that will dive deeply into the world of PowerShell.

Projects, Scripts, and Modules

Books, Media, and Learning Resources

Community

  • Building Secure PowerShell Solutions with Jake Hildreth
    In this episode of the PowerShell Podcast, we welcome back security-focused PowerShell expert Jake Hildreth for an insightful conversation about PowerShell, security tools, and his continued journey in the PowerShell community. Jake shares updates on Locksmith v2, his work with PowerPUG, and his experience learning new PowerShell techniques to refine and improve his tools.

Events

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

6
 
 

Announcements!

Blogs, Articles, and Posts

  • Automating Code Compliance: AI-Driven Code Style Enforcement for Pull Requests
    As teams increasingly rely on automation for code quality and compliance, ensuring consistent coding standards can be challenging during the pull request (PR) process. In this article, we explore how to build an AI-powered style enforcement pipeline using modern tools like GPT-4 and CI/CD workflows.
  • PowerShell: How to find empty Attributes
    We are often looking for attributes, but what about the empty attributes? How can I find out if an attribute is empty? That is the focus of this article.
  • Now you can use your own company standards with Maester custom tests
    I thought checking to see if they were filled in or even formatted correctly wasn’t enough.. now you can config the validation.json file in the Validating folder with your company standards to make only those values pass. Here are the fields so far, and will be adding more!
  • Get All Teams Channels With External Members
    Channels in Microsoft Teams are the heartbeat of collaboration, designated to help teams organize conversations, files, and tasks around specific topics or projects. However, they also come with challenges—especially when external members are involved.
  • Microsoft Entra PowerShell modules
    The new Microsoft Entra PowerShell modules are available, replacing the deprecated AzureAD modules. This blog post will highlight the installation, changes, and features.
  • New Microsoft script updates Windows media with bootkit malware fixes
    Microsoft has released a PowerShell script to help Windows users and admins update bootable media so it utilizes the new "Windows UEFI CA 2023" certificate before the mitigations of the BlackLotus UEFI bootkit are enforced later this year.

Books, Media, and Learning Resources

  • Monthly Update #116 for Office 365 for IT Pros
    Monthly update #116 (February 2025) is available for the Office 365 for IT Pros eBook. The refresh includes update #8 new files for the Automating Microsoft 365 with PowerShell eBook. We’ve also updated the print (paperback) version that’s sold on an on-demand basis through Amazon.com. Things keep on changing inside Microsoft 365 with agent management a new challenge that’s coming into view.
  • Behind the PowerShell Pipeline
    Discover parts of PowerShell that lie under the surface that can make you a better PowerShell user and scripter. From one of the original PowerShell experts.

Community

  • Exploring the Power of IoT and PowerShell with Mark Go
    In this episode of the PowerShell Podcast, we sit down with Mark Go, a PowerShell enthusiast and innovator, to discuss his exciting journey from the Navy to becoming a tech-savvy system administrator. Mark shares his experiences using PowerShell to make his work life better.

Events

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

7
 
 

Announcements!

Blogs, Articles, and Posts

Projects, Scripts, and Modules

  • Get-MacInfo
    This is a powershell module for PS on macOS that, as much as possible, replicates "Get-ComputerInfo".

Community

  • Streamlining PowerShell Package Management with Fred Weinmann
    In this episode of the #PowerShell Podcast, we continue our deep dive with Fred Weinmann, a Microsoftie and PowerShell legend, as he shares more insights and tools that redefine productivity for PowerShell enthusiasts. Picking up where we left off in the last episode, Fred takes us through his journey of mastering PowerShell, collaborating with the community, and optimizing workflows with powerful custom modules.
  • Inside IT Automation | E19
    Jakub Jares talks about PowerShell testing with Pester and more

Events

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

8
 
 

I really appreciate your understanding for the missed edition last week. To make up for it, this week’s issue is packed with even more tips, insights, and updates to level up your PowerShell skills.

Blogs, Articles, and Posts

Continued in the comments...

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

9
 
 

Announcements!

  • Pester v5.7.0
    Pester 5.7.0 is out, it adds new code coverage format Cobertura, and other fixes

Blogs, Articles, and Posts

  • PowerShell Pester 101: A Practical Guide for Beginners
    Learn how to validate your PowerShell scripts with Pester testing. This hands-on guide shows you how to write tests that ensure your code works as intended.
  • Automated Provisioning of Windows 365 Cloud PCs: Advanced Scripts
    We decided that we would create some more advanced scripts for admins, which would include some error handling, prompts for input, and more. You will be able to use these scripts to provision your Entra ID joined Cloud PCs for various scenarios, be it using a Microsoft Hosted network or an Azure Network Connection, Enterprise or Frontline builds, or choosing your Cloud PC image, language, or region etc.
  • Using PowerShell to make bulk changes to DotNet .csproj files
    When working on a big DotNet team, it’s easy to create a library but forget to set a configuration property according to your team’s standards. Most people don’t spend a lot of time looking at their…

Projects, Scripts, and Modules

  • All About the Office 365 for IT Pros GitHub Repository
    The Office365ITPros GitHub repository holds over 300 PowerShell scripts showing how to interact with Microsoft 365 and Entra ID. Anyone can contribute to Office365ITPros by forking the code to a copy of the repository and making changes to scripts there. If you want, you can push the changes back to us so that we can consider their inclusion in Office365ITPros. It's a great example of community in action.
  • JsonFS
    Mount a Json file as PowerShell file system. Contribute to wgross/json-fs development by creating an account on GitHub.
  • Icewolf.EXO.SpamAnalyze v2.0.14
    This is a Powershell Module that simplifies the Message Trace in Exchange Online (EXO).

Books, Media, and Learning Resources

  • A PowerShell Teaser
    Somewhat ironically, since finishing our long series on Bash scripting I’ve been almost exclusively writing scripts in a completely different language, PowerShell! Being a Microsoft language you’d be forgiven for assuming that means I’ve moved to Windows and started trying to automate things there, but you’d be mistaken, I’m still very much a Mac user! So what gives? Despite what its origins may suggest, the core PowerShell environment is both open source and cross-platform, running just fine on the Mac and Linux as well as Windows.
  • PowerShell in Azure: Adding Tags & Setting Location Restrictions
    In this tutorial, learn how to create and apply tags to Azure resources and enforce a location restriction policy using PowerShell. Effective resource tagging helps you organise and manage your Azure environment, while location restriction policies ensure compliance with regional regulations.
  • Run Data Access Governance reports with PowerShell
    How to run Data Access Governance reports for SharePoint Advanced Management in PowerShell

Community

  • Exploring PnP PowerShell Updates with MVP Gautam Sheth
    In this episode of the PowerShell Podcast, we’re joined by Gautam Sheth, Microsoft MVP and M365 developer extraordinaire, to explore the latest improvements to the PnP PowerShell module and how to get started with it. Gautam shares his unique perspective on automating SharePoint, working with Microsoft 365, and leveraging Microsoft Graph through PowerShell. We discuss practical use cases, best practices, and the significance of PnP PowerShell for modern IT and development workflows. From SharePoint tips to automation strategies, this episode is packed with insights for PowerShell enthusiasts and M365 developers alike. Whether you're just starting or looking for advanced techniques, Gautam provides actionable advice and plenty of inspiration!

Fun

Events

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

10
 
 

Blogs, Articles, and Posts

  • Automated Deployment of a Zero Trust Azure Automation Environment
    A common and recommended security practice is only allowing access to an Azure Storage Account via a whitelisted IP address. While this is generally a good idea, a problem arises when you need an Azure Automation Account to access one of these Storage Accounts.
  • PowerShell Reusable Sessions: A Guide to Persistent Remote Connections
    Learn how to leverage PowerShell reusable sessions to maintain persistent connections with remote systems. This tutorial shows you how to create, manage and effectively use PowerShell sessions for remote administration.
  • PowerShell 7.5 new features
    Microsoft has unveiled the first release candidate of PowerShell 7.5, with the General Availability (GA) launch expected in January or February 2025. This release candidate provides the most accurate preview of the upcoming final production version of PowerShell 7.5. This new version includes hundreds of changes, ranging from minor adjustments to major new features. In the following sections, we will discuss the key changes in this major PowerShell update.
  • PowerShell Pipeline Parameters: How to Create Pipeline-Ready Functions
    Learn how to enable pipeline input in your custom PowerShell functions using parameter binding. This tutorial shows you how to use ValueFromPipeline and ValueFromPipelineByPropertyName to create functions that work seamlessly with the PowerShell pipeline.
  • Validate list of Email Addresses using PowerShell
    What if you have an extensive list of email addresses? And if you must validate them for syntax and check if there's an email server for that domain? PowerShell is your friend :) In this blog post, I will show you how to import, validate, and export the results of those email addresses.
  • Automatically update PowerShell 7.4 with WSUS or SCCM
    Microsoft enabled automatic updates for PowerShell with the release of PowerShell 7.2; that continues now with PowerShell 7.4.
  • Quickly Finding Previously Typed Commands With PowerShell
    How to find that extremely convoluted command you typed in three months ago that you can't find in your PowerShell history.

Projects, Scripts, and Modules

Community

  • Holiday Special with Gilbert Sanchez: PSScriptAnalyzer, AST, and PowerShell Gifts
    In this special holiday episode of the PowerShell Podcast, we are joined by the incredibly talented Gilbert Sanchez. We dive into the world of PSScriptAnalyzer and use it as a gateway to explore and understand the Abstract Syntax Tree (AST) in PowerShell. Gilbert walks us through a live demo and highlights some powerful ways to leverage the AST to analyze and improve our PowerShell code. As a special holiday treat, Gilbert comes bearing gifts—several awesome PowerShell modules that listeners can start using today.
  • Evgenij Smirnov Talks Certs, Security, and PowerShell Adventures
    In this episode of the PowerShell Podcast, we sit down with Microsoft MVP Evgenij Smirnov to explore his incredible journey from working as a forklift driver to becoming a PowerShell and security expert. We dive into his insights on certificates, security best practices, and the importance of identity in modern IT. Evgenij also shares his experiences with cross-platform PowerShell, highlights from his recent talks, and the value of community events like PowerShell Saturday. Along the way, we discuss his unique career path, his passion for the PowerShell community, and tips for those looking to grow in IT.

Fun

  • 2024 Overview
    It’s 2025, so it’s time to reflect on 2024 :). In this blog post, I will highlight all the great PowerShell things that happened during the year.

Events

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

11
 
 

This is the final edition of PowerShell Weekly for 2024. Since this newsletter is hand-curated, I always take the last week of the year off to rest and reflect. I’ll return in the New Year with fresh content and my annual year-in-review, covering all the major PowerShell highlights from 2024.

Announcements!

  • Announcing a free GitHub Copilot for VS Code
    We're excited to announce an all new free plan for GitHub Copilot, available for everyone today in VS Code. All you need is a GitHub account. No trial. No subscription. No credit card required.

Blogs, Articles, and Posts

Projects, Scripts, and Modules

Books, Media, and Learning Resources

  • PowerShell Universal Christmas Edition - Adam Driscoll & Constantin Hager
    In this lecture, Adam Driscoll and Constantin Hager guide the audience through the PowerShell Universal Christmas edition, demonstrating the latest features and functionalities of version 5.1. The session is organized into two main demos, focusing on practical applications of PowerShell and how attendees can utilize these updates in their own projects. The first half of the presentation features Constantin who shares his user management application, utilizing the Request API to query and display user data in a seamless table format.

Community

  • Miriam Wiesner on Identity Hygiene, Security Tools, and Finding Balance
    In this episode of the PowerShell Podcast, we sit down with Miriam Wiesner, a Senior Security Research Program Manager at Microsoft, to dive into the fascinating world of security and identity hygiene. Miriam shares her expertise on the GraphAPI and the critical importance of maintaining proper identity hygiene in today's digital landscape.

Events

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

12
 
 

Blogs, Articles, and Posts

  • Install and integrate Microsoft AI Shell with a PowerShell module
    Microsoft’s new AI Shell integrates AI into command-line workflows, featuring the Azure OpenAI Agent and Copilot in Azure Agent for tasks like PowerShell scripting and cloud automation. You can install AI Shell (aish.exe) as a standalone app or PowerShell module to streamline coding, error resolution, and resource management on Windows, macOS, or Linux.
  • Jingle All the Way to Savings: Automate Azure Bastion with Azure Automation!
    In my blog post contribution for this year’s Festive Tech Calendar, I’ll show you how to reduce Azure costs by automating the runtime of your Azure Bastion host(s) with Azure Automation.
  • Setting Up VS Code for PowerShell Development: A Beginner’s Guide
    Learn how to set up Visual Studio Code (VS Code) for PowerShell development in this step-by-step guide. You'll learn how to install VS Code, configure the PowerShell extension, set up the integrated terminal, and explore key features to enhance your PowerShell scripting experience.
  • How to Rename Multiple Files Using PowerShell?
    Recently, I got a requirement to rename numerous report files in a project. PowerShell script is the best option for it. In this tutorial, I will explain how to rename multiple files using PowerShell. Rename Multiple Files Using PowerShell Recently, I was working on a project for a client in New York City.
  • PowerShell Function for the cmd.ms website
    I'm a big fan of the cmd.ms website because it has all the links to quickly jump to a specific blade in a portal instead of clicking multiple parts of a Microsoft Management portal to get there. In this blog post, I will show you how to use a PowerShell function to open one or multiple management websites from the command line.
  • Prevent users from switching and migrating to new Outlook using PowerShell and Microsoft Intune
    Prevent future automatic migration to the new Outlook. In this post, I’ll share the PowerShell script I’m using to prevent users from migrating to the new Outlook if your environment isn’t quite ready for it.
  • It's always DNS
    A story of when it was actually DNS.

Projects, Scripts, and Modules

Books, Media, and Learning Resources

  • Windows PowerShell Use Cases in 1 Hour
    In this video, dive into essential PowerShell use cases, including file management, system administration, and basic networking. Learn how to manage files, perform essential administrative tasks, and execute networking commands for tasks like testing up connections, all through PowerShell scripts. This tutorial is perfect for beginners aiming to improve their IT skills and handle various everyday tasks with PowerShell efficiently.
  • PowerShell Collaboration Unleashed! [OC]
    Learn how to use JupyterHub to create shared environments for seamless scripting & collaboration—accessible from any browser.

Community

  • PowerShell Evolution with Sean Wheeler: What's new in PS 7.5, AIShell, & More!
    In this episode of the PowerShell Podcast, we welcome back Sean Wheeler, Lead Documentarian at Microsoft for PowerShell, to catch up on the latest developments in the PowerShell ecosystem. Sean dives into the updates with PSResourceGet, the powerful enhancements in PowerShell 7.5, and the groundbreaking potential of the AI Shell project, designed to transform command-line experiences with artificial intelligence. We also get a recap of Sean’s experience at SpiceWorld, highlighting community insights and key takeaways from the event. Packed with expert tips and exciting news, this episode is a must-listen for PowerShell enthusiasts and IT pros alike!

Fun

Events

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

13
 
 

Hey c/PowerShell community!

I’m excited to announce the launch of my new YouTube series, PowerShell Collaboration Unleashed!.

In the first part, we dive into The Littlest JupyterHub— an awesome tool for creating shared environments on a single server. These environments are accessible from any web browser, allowing you to create, run, and share scripts effortlessly.

Here’s what you’ll learn in the first part of the series:

  • An intro to JupyterHub and why it’s a game-changer for collaboration.
  • How to provision an Ubuntu server for The Littlest JupyterHub.
  • Installing and configuring The Littlest JupyterHub and support for dotnet and PowerShell.
  • Setting up shared environments you can start using right away.

Future videos will cover topics like setting up SSH, adding AzureAD/Entra ID authentication, connecting to external resources, securing secrets, logging, and integration with source control.

If you’re passionate about scripting, automation, or simply improving team collaboration, this series is for you!

I would love to hear your thoughts, feedback, questions, or ideas for future topics in this series.

14
 
 

Announcements!

  • PowerShell VSCode Extension v2024.5.2-preview
    New PowerShell VSCode extension preview release v2024.5.1! This includes the breakpoint performance improvement I developed, you should see stepping through code work much faster. Please try to break this feature before release!

Blogs, Articles, and Posts

  • PowerShell: How to configure a custom PSSessionconfiguration
    A remote session can be set up with the help of PSSession. The predefined remote session is used by default. However, we can also create our own session configurations and then connect
  • Install and manage VM watch on Azure Virtual Machines
    Microsoft announced the public preview of VM watch, a new in-VM service designed for Azure Virtual Machines (VMs) and Virtual Machine Scale Sets (VMSS). This service aims to enhance VM health monitoring by offering standardized, lightweight, and flexible in-VM health checks that connect seamlessly with Azure's monitoring and AIOps systems.
  • How to Create a PowerShell Module: A Beginner’s Guide
    PowerShell modules are essential for scriptwriters and system administrators to organize and reuse their code. A module is a package of related functions, cmdlets, and resources bundled together for easy sharing and deployment. Creating a custom PowerShell module allows you to centralize functionality, streamline code reuse, and distribute your work to others.
  • How To Check If File Modified In Last 24 Hours Using PowerShell?
    One of my team members recently wanted to check if a file has been modified in the last 24 hours. I suggest using PowerShell as it provides different methods to check. In this tutorial, I will explain how to check if a file has been modified in the last 24 hours using PowerShell with examples.
  • How to compare all files in two folders using PowerShell
    When I am investigating or troubleshooting any issue, I always hope to have access to any log, source control, build artifacts, and pipelines. However, some scenarios are not related to software development where the only resources that I have immediate access to are folders and the files contained, and also the same ones but
  • How to Replace Carriage Returns in Strings Using PowerShell?
    There will be times when you want to replace carriage returns in strings using PowerShell. In this tutorial, we will learn how to replace carriage returns in strings using PowerShell. To replace a string containing a carriage return in PowerShell, use the -replace operator with the carriage return escape sequence `r. For example, $string -replace “r”, “replacement text”will replace

Projects, Scripts, and Modules

  • v0.0.13 EntraFIDOFinder is out
    New Version of EntraFIDOFinder is out and i’ve added a better way to find out which version of FIDO they are using too. I’ve updated it for the PowerShell version and the webversion. Enhancements I did notice that there is a difference for AAGUID 30b5035e-d297-4ff7-b00b-addc96ba6a98 where on Microsofts website it says it should be compatible
  • PSAppDeployToolkit 4.0.2
    The all-new and vastly improved PSAppDeployToolkit v4 is here!

Community

  • Turning the tables. An interview with Andrew Pla
    In this episode, we turn the tables and interview Andrew Pla. We explore Andrew's back story, find out how he got started in IT, and discover where his love of PowerShell comes from. We also discuss his journey from community member to advocate to PowerShell MVP. Get to know Andrew Pla!
  • OnRamp Scholarship Application Now Open
    Are you an entry-level IT professional looking for an immersive introduction to PowerShell, DevOps, and the broader tech community? The OnRamp program at the PowerShell + DevOps Global Summit is designed just for you, and scholarship applications are now open!
  • BlueSky PowerShell Community Starter Pack
    PowerShell and automation enthusiasts who love to share what they know - through code, content, teaching, or lending a hand to others. They strive to make tech accessible to everyone and support each person's learning path with enthusiasm and respect.​​​​​​​​​​​​​​​​
  • Inside IT Automation E18
    Joe Houghes talks about VMware, PowerCLI, PowerShell and more

Events

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

15
 
 

Blogs, Articles, and Posts

  • PowerShell Automatic Variables: Special Variables Built into PowerShell
    Learn about PowerShell's automatic variables - built-in special variables that serve specific purposes. Discover how to work with history limits, constants, exit codes, and null values.
  • Install and manage VM watch on Azure Virtual Machines
    Microsoft announced the public preview of VM watch, a new in-VM service designed for Azure Virtual Machines (VMs) and Virtual Machine Scale Sets (VMSS). This service aims to enhance VM health monitoring by offering standardized, lightweight, and flexible in-VM health checks that connect seamlessly with Azure's monitoring and AIOps systems.
  • How to Verify a File Hash (Checksum) on Windows
    Checking a downloaded file’s hash (checksum) allows verifying its integrity and ensuring that the file contents have not been modified. Administrators commonly use MD5/SHA256 checksum verification for downloaded OS distros…
  • Use PowerShell to check if (shortened) URL link is safe
    It just happens a lot: you receive a (shortened) URL and are unsure if it's safe to open. Sometimes, I open it in Windows Sandbox or use the urlscan.io website. In this blog post, I will show you how you can automate the check of a URL and see if it's safe or not :)
  • Activating PIM Roles that require MFA or Conditional Access Authentication Context with PowerShell
    For some time, I’ve been activating and scheduling activations for Azure roles under Privileged Identity Management (PIM) using the Microsoft Graph PowerShell SDK. However recently we secured these role activations to require a conditional access authentication context with MFA. This basically requires me to MFA when I activate a role with PIM. Problem is, by … Continue reading Activating PIM Roles that require MFA or Conditional Access Authentication Context with PowerShell →
  • Loading PowerShell Custom Functions: Profiles, Dot-Sourcing, and Modules
    PowerShell is a versatile scripting environment that allows users to extend its capabilities by creating custom functions. Once written, you can load these PowerShell custom functions into your session or environment for reuse. Here are four common methods to load custom functions in PowerShell.

Projects, Scripts, and Modules

Community

  • Jordan Returns: A Fun Dive into Life, PowerShell, and Beyond
    In this special episode, we catch up with our former cohost, Jordan, and hear about his journey since leaving the PowerShell Podcast. Jordan shares an exciting life update, offers invaluable advice on how PowerShell has shaped his career and participates in our fun "This or That" segment.

Fun

Events

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

16
 
 

Announcements!

Blogs, Articles, and Posts

  • How to Query REST APIs with PowerShell: A Practical Guide
    Learn how to use PowerShell to query REST APIs, parse JSON responses, and build a reusable tool for working with web services. This hands-on tutorial covers Invoke-RestMethod, error handling, and creating custom output objects.
  • GitHub Actions and PowerShell: The Underdog
    Remember how I mentioned how GitHub actions are underrated? I’m going to show at a high level how GitHub Actions with PowerShell can save you time and be more efficient. What does it do? It does that automatically once every day, I could do it more, but didn’t think it was necessary.
  • PowerShell Copy-Item with Folder Structure
    In this tutorial, I will explain how to use PowerShell’s Copy-Item cmdlet to copy files and folders while maintaining their original structure. This is a common task for system administrators and developers who need to manage file systems efficiently. You will learn here how to use the PowerShell Copy-Item cmdlet to efficiently copy files
  • Using the Fluent Theme in WPF with PowerShell and .Net 9
    For a long time, adding a modern design theme to your WPF project typically meant adding a 3rd party library to provide the styling, such as MahApps Metro, or WPF UI. With the release of .Net 9, a Fluent theme is finally coming to WPF! There are still areas where 3rd party libraries will be … Continue reading Using the Fluent Theme in WPF with PowerShell and .Net 9
  • Conditional Access Gallery - Point, Select, and Deploy in Minutes
    With my new Conditional Access Gallery tool Invoke-DCConditionalAccessGallery in DCToolbox you can pick and choose from any of 25+ available Conditional Access templates included, and the tool will auto-deploy them in your tenant (report-only mode), automatically create all dependencies like groups, named locations, and terms of use agreements, and finally document your new policy design
  • Upgrading your Azure Function Apps to run on PowerShell 7.4
    PowerShell language worker for Azure Functions. Contribute to Azure/azure-functions-powershell-worker development by creating an account on GitHub.

Projects, Scripts, and Modules

  • PowerHuntShares
    PowerHuntShares is an audit script designed in inventory, analyze, and report excessive privileges configured on Active Directory domains.

Books, Media, and Learning Resources

  • PwshSpecteConsole with Shaun Lawrie
    Shaun Lawrie talks to the Pacific Powershell User Group about PwshSpectreConsole.
  • GitHub Pages with PowerShell
    The Pacific Powershell User Group talks about GitHub Pages and PowerShell and demonstrates PSJekyll.
  • Get-EventSession
    Script to assist in downloading Microsoft Ignite, Inspire, Build or MEC contents or return session information for easier digesting.

Community

  • Growth, Grit, and Community with Steven Judd & Kevin Laux
    In this episode of the PowerShell Podcast, we sit down with Steven Judd and Kevin Laux for insights and inspiration from the PowerShell community. Steven shares his experiences overcoming the hurdles of live demos, recounts the highlights of PowerShell Saturday NC, and reveals the story behind his iconic bling and love for puns. He delves into the importance of "practice makes progress," encouraging listeners to embrace growth through consistent effort. Kevin Laux joins the conversation to discuss his journey with PowerShell, his role with the Research Triangle PowerShell User Group (RTPSUG), and the impact of community involvement.

Fun

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

17
 
 

Blogs, Articles, and Posts

  • Powershell and the Left Hand Side
    A new article, to talk about an important notion in Powershell, the Left Hand Side (LHS) notion.
  • Manage PIM Role Assignments with PowerShell
    This article describes how to create eligible and active PIM role assignment requests using cmdlets from the Microsoft Graph PowerShell SDK.
  • How to install PowerShell 7 and essential tools on macOS
    As you prepare for the OnRamp track at the PowerShell + DevOps Global Summit, this guide walks you through installing the essential tools on your macOS system, if that's your preferred operating system. You'll learn to install PowerShell version 7, Visual Studio Code, and the PowerShell extension for VS Code to ensure your system is prepared for the event.
  • GitHub and PowerShell: The Underdog
    Remember how I mentioned how GitHub actions are underrated? I’m going to show at a high level how GitHub Actions with PowerShell can save you time and be more efficient. What does it do? It does that automatically once every day, I could do it more, but didn’t think it was necessary.
  • Install and enable SSH on Windows Server 2025
    Windows Server 2025 comes with SSH pre-installed, making secure remote server management easier for administrators. This is especially helpful when accessing servers from macOS or Linux machines or Windows computers not part of the Active Directory domain, as enabling PowerShell remoting can be complicated in this scenario. By default, SSH on Windows Server 2025 uses password authentication, which you should change to public key authentication for enhanced security.
  • Introducing a Custom 'map' Function in PowerShell for Functional Programming
    I built the custom map function to enable processing multiple arrays with ease. Simplify your scripts by applying transformations simply and flexibly.
  • How Can You Effortlessly Restart or Shutdown Windows Using PowerShell Commands?
    In Windows PowerShell, you have two main commands for controlling shutdown and restart functions: Restart-Computer and Stop-Computer. Each command can
  • New PowerShell Threat: Infiltrating Networks with Advanced Techniques
    In a recent discovery, Cyble Research and Intelligence Lab (CRIL) detailed a complex, multi-stage PowerShell campaign that employs several advanced techniques to infiltrate networks, maintain persistence, and enable covert communications.

Projects, Scripts, and Modules

  • CMHealthcheck v 1.0.30
    ConfigMgr healthcheck reporting
  • linuxtools v 1.0.12
    An experimental PowerShell module for Linux nerds. Because: why not?
  • PSBluesky
    A set of PowerShell 7 commands that use the BlueSky API. You can skeet and upload images from a PowerShell prompt as well as view your feed and timeline.

Community

Fun

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

18
 
 

Blogs, Articles, and Posts

Projects, Scripts, and Modules

Books, Media, and Learning Resources

Community

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

19
 
 

Script is made to control Veeam VBR
Thanks for taking a look at my massive feature creep ;)

<#
    .SYNOPSIS
        Startet ein Veeam VBR Job

    .DESCRIPTION
        Startet einen VBR Job basierend auf den Namen.
        Ursprünglicher Zweck war ein Verknüpfung von Jobs (z.B. als Pre-Execution Skript)

    .PARAMETER JobName
        Job-Name des Backup Jobs

    .PARAMETER JobType
        Typ des Backup Jobs
        Erlaubte Typen: VAW, VAL, VMware,
        Nicht erlaubte: Typen: HyperV, PVE

        $Get-VBRBackup | Select-Object -Property Name,TypeToString,JobType
        Backup              Pretty                  Verbose                 Typ im Skript   Notizen
        ########################################################################################################
        Backup Copy Job     Backup Copy             SimpleBackupCopyPolicy  /               /
        VAW Managed SRV     Windows Agent Backup    EpAgentBackup           VAW             CMDlet deprecated for Agent backups
        VAW Managed PC      Windows Agent Policy    EpAgentPolicy           VAW             CMDlet deprecated for Agent backups
        VAL Managed SRV     Linux Agent Backup      EpAgentBackup           VAL             CMDlet deprecated for Agent backups
        VAL Managed PC      Linux Agent Policy      EpAgentPolicy           VAL             CMDlet (probably) deprecated for Agent backups # UNGETESTET WERTE! 
        Proxmox VE          Proxmox Backup          VmbApiPolicyTempJob     PVE             Nicht nutzbar mit Powershell via Start-VBRJob
        VMware              VMware Backup Backup    Backup                  VMware
        Hyper-V

    .EXAMPLE
        Start-VeeamJob.ps1 -JobName 
        passes F1234567-1abc-1234-ab1c-1a2345b6c78d to $JobName
        
    .NOTES
        Author  : Appoxo
        Version : 2.0
    
    .LINK
        Job-ID auslesen:
            Get-VBRComputerBackupJob | Where-Object Name -CLike "*Name*" | Select-Object -Property Id, Name
#>

[CmdletBinding()]
Param(
    [Parameter(Mandatory = $true,
    HelpMessage = "Enter Job-Name of the VBR-Job")]
    [String]
    $JobName,

    [Parameter(Mandatory = $true,
    HelpMessage = "Art des VBR-Jobs. Die Bezichnung ist NICHT canse-sensitiv!")]
    [string]
    $JobType
)

Begin {
    Write-Host "Script started successfully"
    $ExitCode = 0  

    #TimeStamp Logging:
    function Get-TimeStamp {return "{0:yy/MM/dd} {0:HH:mm:ss}" -f (Get-Date)}
    
    <#
    #Debug Values:
    $JobName = "L1 Backup Appoxo-PC2 (Games)"
    $JobType = "VAW"
    #>

    # Variablen
    $workingDir = "C:\Skripte\SkriptLogs"
    $log = "$($workingDir)\Log-StartVeeamJob.log"
    $JobDetails = Get-VBRBackup | Where-Object Name -EQ "$($JobName)"
    $timeout = 9

    # Vorbereitung
    if ($JobType -in @("VAW","VAL","VMware")){
        Write-Host "Valid backup type selected"
        $JobTypUnbestimmt = 0
    }
    else {
        Write-Host "Invalid backup type selected. Please choose something else :)"
        $ExitCode = 1
        exit $ExitCode
    }

    if (Test-Path -Path $workingDir) {
    } else {
        New-Item -ItemType Directory -Path "$workingDir"
    }

    if (-not (Test-Path -Path $log -PathType Leaf)) {
        New-Item -ItemType file -Path $log
        Add-Content -Path $log "Log zur Überprüfung der Start von VBR-Jobs"
    }
}

Process {
    Write-Host "You passed the following information:"
    $data = @([PSCustomObject]@{"Job Details"="$($JobDetails.Name)"; "Selected Job Type"="$($JobType)"})
    $data | Format-Table -AutoSize
    Write-Host "The following Job-ID was found for this job: $($JobDetails.JobId)"

    Write-Host "If there is an error please abort NOW." 
    while ($timeout -gt 0) {
        Write-Host -NoNewline "`rThe script starts in $($timeout)"
        Start-Sleep -Seconds 1
        $timeout--
    }
    Write-Host "Starting script now!"
    Write-Output "$(Get-TimeStamp) Start des Backup Job Skripts. Für den Job '$($JobDetails.Name)' wurde die Job-ID $($JobDetails.JobId) gefunden!" | Add-Content -Path $log

    try{
        $startTime = Get-Date
        Write-Host "Validating input... This may take a while"
        if((($JobType -in @("VAW","VAL"))) -AND (($JobDetails.JobType -in @("EpAgentBackup","EpAgentPolicy")))) {
            Write-Host "Valid backup type '$($JobDetails.TypeToString)' was found. Starting now!"
            Start-VBRComputerBackupJob -Job $JobName | Select-Object -OutVariable JobResult
        }
        elseif (($JobType -in @("VMware")) -AND (($JobDetails.JobType -in @("Backup")))) {
            Write-Host "Valid backup type '$($JobDetails.TypeToString)' was found. Starting now!"
            Start-VBRJob -Job $JobName | Select-Object -OutVariable JobResult
        }
        elseif (($JobType -in @("PVE")) -AND (($JobDetails.JobType -in @("VmbApiPolicyTempJob")))) {
            Write-Host "Der Job des Typs $JobType ist aktuell nicht implementiert"
            $ExitCode = 1
            exit $ExitCode
            <#
            Write-Host "Valid backup type '$($JobDetails.TypeToString)' was found. Starting now!"
            Start-VBRJob -Job $JobName | Select-Object -OutVariable JobResult
            #>
        }
        else {
            Write-Host "Invalid backup type '$($JobDetails.TypeToString)' was found. Please restart the script!"
            Write-Output "$(Get-TimeStamp) Bestimmung des Typs für den Job '$($JobDetails.Name)' nicht erfolgreich. Angegeben wurde '$($JobType)'" | Add-Content -Path $log
            $ExitCode = 1
            $JobTypUnbestimmt = 1
        }

        # Job Result report
        if(($JobTypUnbestimmt -EQ 0) -AND ($JobResult.State -EQ "Stopped") -AND ($JobResult.Result -EQ "Success")){
            Write-Host "Execution of the Job '$($JobName) was successful"
            Write-Output "$(Get-TimeStamp) Backup Job $($JobDetails.Name) erfolgreich ausgeführt" | Add-Content -Path $log
            $ExitCode = 0
        } else{
            Write-Host "Execution of the Job '$($JobName) encountered an error. Please check the VBR-Console"
            Write-Output "$(Get-TimeStamp) Fehler beim ausführen vom Backup Job '$($JobDetails.Name)'" | Add-Content -Path $log
            $ExitCode = 1
        }
        #Stats
        $endTime = Get-Date
        $executionTime = $endTime - $startTime
    } catch {
        Write-Host "Something went wrong during execution"
        Write-Host $_  # This prints the actual error
        Write-Output "$(Get-TimeStamp) Error: $($_)" | Add-Content -Path $log
        $ExitCode = 1 
    }
}

End {
    Write-Output "$(Get-TimeStamp) Skript abgeschlossen für $($JobDetails.Name) Job-ID $($JobDetails.Id)" | Add-Content -Path $log
    Write-Host "Script ended."
    $seconds = "{0:N2}" -f $executionTime.TotalSeconds
    $minutes = "{0:N2}" -f ($executionTime.TotalSeconds / 60)
    Write-Host "Time for stats! The script took $($seconds) seconds or $($minutes) minutes)"
    exit $ExitCode
}
20
 
 

Announcements!

Blogs, Articles, and Posts

  • GitHub Copilot in Windows Terminal
    GitHub Copilot users can now use the power of GitHub Copilot to get command suggestions and explanations without leaving the terminal with Terminal Chat in Windows Terminal Canary 🚀 This is available for all GitHub Copilot Individual, Business, and Enterprise customers. To get started, sign up for a GitHub Copilot free trial and check out […]
  • Creating an AWS SSL Certs from Scratch (CLI and PowerShell)
    Learn how to create SSL certificates in AWS Certificate Manager using the AWS CLI. This tutorial walks through setting up permissions, requesting a certificate, and verifying its creation.
  • Export Complex PowerShell Objects to CliXML: A Practical Guide
    Learn how to export complex, nested PowerShell objects to CliXML while preserving their structure and relationships. Follow along with a real-world example using workout program data.
  • Dell Command Update – Install & Manage via PowerShell
    So if you haven’t read my last post yet, Dell Command Update – pulling back the curtains – GARYTOWN ConfigMgr Blog, you should, as I go into how Dell Command Update (DCU) gets it’s feed of information under the hood. That is the basis for a lot of things I’ll be doing. In this post, ... Read more
  • Popping Toast Notifications in PowerShell Core
    If you’ve ever popped a toast notification in PowerShell using the Windows Runtime (WinRT), you’ve probably discovered that, whilst it works fine in PowerShell 5, it doesn’t work at all in PowerShell Core (5/6/7+). That’s because the WinRT assemblies are not included in PowerShell Core – WinRT is an exclusively Windows thing
  • Powershell - Managing disks, partitions and volumes
    How to manage disks, partitions and volumes in Powershell
  • How to bypass Microsoft Graph PowerShell access restrictions
    Learn how to bypass Microsoft Graph PowerShell access restrictions and gain full directory access using PowerShell.

Projects, Scripts, and Modules

  • Show-PSRunObject: function to inspect objects
    Example function to inspect objects interactively. It shows what methods and properties the passed object has. You can go down/up the object hierarchy with key presses.
  • WinPostInstall
    Windows Post Install script written in PowerShell
  • PSBluesky
    If you are a Bluesky user, I'm working on a PowerShell module so that you can do things like post from a PowerShell prompt. Not ready to publish to the PSGallery, but the module is stable enough for you to kick the tires.
  • PSAPIClient v 1.1.0
    This Powershell module is a wrapper for the use of one or more API(s). Each API can be configured and addressed independently. This allows easy use of multiple APIs within a session.

Books, Media, and Learning Resources

  • Learning PowerShell using Microsoft Learn
    This week, I posted a link to the PowerShell courses/learning paths on Microsoft Learn for PowerShell; I did that because there is so much material to learn from and use as a reference/help system. In this blog post, I will show you your options at Microsoft Learn to improve your PowerShell skills.

Community

Fun

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

21
 
 

Blogs, Articles, and Posts

  • Automating VM Deployment in Azure with PowerShell
    Learn how to automate the deployment of a Windows VM on Azure using PowerShell. This guide covers network setup, NSG rules, and IIS installation.
  • Get Active Directory ports with PowerShell
    Active Directory services communicate over specific ports needed for authentication, replication, and other directory services. Knowing these ports is crucial for configuring firewalls, ensuring secure communication, and troubleshooting network issues related to Active Directory services. This post will teach you how to get the Active Directory ports with PowerShell.
  • How to Set Directory Synchronization Features with the Graph
    Directory synchronization features control how the Entra Connect tool works when synchronizing accounts from Active Directory to Entra ID. The current advice is to use a cmdlet from the depreciated MSOL module to update settings. This article explains how to do the job with the Graph APIs, including cmdlets from the Entra PowerShell module.
  • Automating Sign-In Analysis with PowerShell and Microsoft Graph
    In this article, we'll walk through how to explore and analyze Conditional Access data in Microsoft Entra using the Developer Tools in your browser. The purpose of this walkthrough is to demonstrate how you can identify and extract the necessary Microsoft Graph API calls directly from the Entra portal, providing a foundation for automating this process with PowerShell.
  • List all EEEU and Anonymous links for SharePoint and OneDrive!
    A colleague of mine asked me before the weekend if I knew if there was a way to list all Everyone Except External Users and Anonymous links for OneDrive for Business. He had written a PowerShell script but had some errors.
  • Practical PowerShell: The Dark Power of Dynamic Parameters
    In this episode of Practical PowerShell, we dive into the dark power of dynamic parameters, and how to use them within in functions and scripts.

Projects, Scripts, and Modules

Community

Events

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

22
 
 

Blogs, Articles, and Posts

  • Convert to Azure Premium SSD v2 Disks with PowerShell
    Azure Premium SSD v2 disks, currently in public preview, provide enhanced throughput and IOPS at a lower cost than earlier versions. You can convert existing disks to Premium SSD v2 using PowerShell. However, it's crucial to understand the specific limitations and requirements beforehand.
  • Manage Your SharePoint Online Environment with PnP PowerShell
    In this article, we explain how to get started using PnP PowerShell, and review some practical examples of where the module can immediately add value for tenant administrators.
  • Duplicate Drivers from a ConfigMgr Boot Image
    When creating new boot images in ConfigMgr, you often want to copy drivers from an older boot image. If you have many drivers added, it's way quicker to do that in PowerShell compared to comparing drivers in the boot image drivers tab.
  • Query WinGet software installer data with PowerShell
    I'm a big fan of WinGet, and the software available in their ecosystem is growing daily. Still, I'm always curious about what WinGet will download and how it does the silent install of the specified software. In this blog post, I will show you an easy way of retrieving that data :)
  • Automating Performance Monitor in Windows
    For advanced scenarios where you need to automate running Perfmon at scale
  • Type less by using PowerShell type accelerators
    I had heard the PowerShell term “type accelerators” a few times, but never really knew what that meant. I finally decided to check out the about_Type_Accelerators docs and it turns out they’re simply aliases for .NET types.

Projects, Scripts, and Modules

Books, Media, and Learning Resources

Community

  • Exploring Redfish Protocol, Data Science, and PowerShell with Blake Cherry & Danny Stutz
    In this episode of the PowerShell Podcast, I sit down with Blake Cherry to discuss the Redfish Protocol and its impact on simplifying data center hardware management, drawing insights from his talk at PowerShell Saturday, NC. We explore how Redfish is reshaping IT systems at scale. I also speak with Danny Stutz, who dives into the intersection of PowerShell and Data Science, covering topics like AI, data analysis, and K-means clustering, all applied to real-world use cases using PowerShell. Whether you're managing hardware or looking to integrate advanced data science techniques into your scripts, this episode has something for everyone!
  • OpenAI for PowerShell with Doug Finke
    You should be writing tests for your PowerShell scripts... but how to get started? Doug talks to RunAsRadio about using ChatGPT and GitHub Copilot to explore different aspects of PowerShell, including testing!

Events

  • PowerShell AI Build Hour - Doug Finke
    Friday, October 25, 2024 at 12:30 PM EDT - Ready to go from zero to app hero? I'll live demo building an app using the new OpenAI Canvas—the interface that transforms writing and coding into an interactive adventure. This isn't just chat; it's creating real-world projects, start to finish.

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

23
 
 

Blogs, Articles, and Posts

Books, Media, and Learning Resources

Community

  • Culinary to Command Line: Catching Up with Drew McClellan
    In this episode of the PowerShell Podcast, we welcome back the "bestsest in the midwestest" Drew McClellan, who shares his recent promotion from Jr. Sysadmin to SysAdmin II. Drew talks about how he uses PowerShell in his daily role, tackling new software implementations and projects, and his approach to continuous learning. We also dive into how the OnRamp experience at PowerShell Summit helped prepare him. As a bonus, Drew, a chef for 10 years, dishes out some recipe recommendations to Andrew!
  • Shorten The Code - Results and Learnings with Well-known Community Members
    Xavier Clinquart from the Belgian PowerShell User Group has analyzed all scripts, and now it is time to take a look at the best ones. Together with well-known members of the PowerShell community, we will talk about the results and learnings of this fun competition.

Fun

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

24
 
 

Blogs, Articles, and Posts

  • Restore classic context menu in Windows 11 Explorer using Group Policy or PowerShell
    Alongside the revamped Start Menu, one of the most noticeable changes in Windows 11 is the redesigned context menu in File Explorer. However, these modifications are not merely aesthetic – they also restrict its functionality. You can deploy a registry key using Group Policy Preferences to restore the classic context.
  • How to Create Azure Service Principals in PowerShell
    Learn how to create Azure service principals using PowerShell, enabling secure automation for managing Azure resources like virtual machines.
  • Microsoft Retires the Revoke-SPOUserSession Cmdlet
    Unsurprisingly, Microsoft announced the deprecation of the Revoke-SPOUserSession cmdlet for November 2024. The cmdlet is replaced by the Revoke-MgUserSignInSession cmdlet, which works across Microsoft 365 rather than just SharePoint Online. All of this happened while the 2nd annual PowerShell Script-Off happened at TEC 2024 and competitors struggled with what to do to secure a user account for an ex-employee.
  • GitHub Copilot Password Warning
    Did you know that GitHub Copilot is now sensing hard coded credentials and giving you a warning? It’s not perfect, but even if something looks like hard coded creds it will flag it, as on another script I had, it contained numbers that looked like they could be private, and it gave me a warning
  • Using Get-Content in PowerShell
    I use Get-Content a lot (or cat, gc, and type as its alias) to display or track the contents of a file. There are different parameters for it, and in this blog post, I will show you what you can do with those :)
  • Customize your Windows 11 (23H2 and onwards) taskbar during OSD with ConfigMgr using just PowerShell
    Approximately two years ago, I authored a blog post detailing how to customize the taskbar in Windows 11.
  • Running PSScriptAnalyzer in GitHub Actions
    I was working on a project recently that has some PowerShell scripts and I wanted to add some kind of linting for PRs, as you do. The go-to for PowerShell seems to be PSScriptAnalyzer and it's something I've already setup in VS Code. Great! The next step was to setup
  • PowerShell Potluck - September 2024
    Welcome back to another PowerShell Potluck, and you didn't have to bring a thing, other than a little curiosity and a willingness to try new things.

Projects, Scripts, and Modules

  • EntraFIDOFinder – New PowerShell Module
    After so much interest from my post on Friday, I figured I’d do one better and make a PowerShell module that does it for you. So now you will be able to find which FIDO2 keys are attestation compatible with Entra right from your terminal. In the very near future I will have individual functions

Books, Media, and Learning Resources

Community

  • PowerShell + DevOps Global Summit 2025: Call for Papers Now Open!
    PowerShell + DevOps Global Summit 2025: Call for Papers Now Open! Calling all innovators, problem-solvers, and thought leaders in the PowerShell and DevOps realm!
  • Spectre Console and TUI Magic with Shaun Lawrie
    On this episode of The PowerShell Podcast, we sit down with Shaun Lawrie to discuss terminal user interfaces (TUIs) and his work on the PWSHSpectreConsole project. Shaun shares insights into the world of TUIs, offers valuable career advice, and talks about his journey in tech. Tune in for practical tips and an in-depth look at what it takes to thrive in the PowerShell ecosystem.

Fun

  • PowerShell ASCII Art
    I posted my Windows Terminal this week on social media channels, including LinkedIn, and received some responses about the login banner screen. In this blog post, I will show you an easy way to pimp your PowerShell Console ;)

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

25
 
 

Blogs, Articles, and Posts

  • Build dynamic JSON with PowerShell
    I recently did a Contacts Sync with GRAPH Api and PowerShell to create Contacts in a Shared Mailbox and USer Contact Folder. At this time, it was needed to build dynamic JSON related to existing Values, so I looked for some posts on how to build dynamic JSON with PowerShell.
  • How to install PowerShell 7 and essential tools on Linux
    As you prepare for the OnRamp track at the PowerShell + DevOps Global Summit, this guide walks you through installing the essential tools on your Ubuntu Linux system if that's your preferred operating system. You'll learn how to install PowerShell version 7, Visual Studio Code, and the PowerShell extension for VS Code to ensure your system is prepared for the event. If you're using Windows 11, refer to the companion article, How to install PowerShell 7 and essential tools on Windows 11. A future article covers installations on macOS.
  • Installing the Entire Microsoft Graph PowerShell SDK Seems Like the Right Idea
    An article described some benefits that could be gained from not installing the complete Microsoft Graph PowerShell SDK. The question is whether the claimed benefits are more theoretical than actual. It’s hard to say because it all depends on how someone uses the SDK for development or to run scripts. Anyway, it’s a topic worth discussing.
  • How to Authenticate to Azure Using PowerShell (User and Device Authentication)
    Learn how to authenticate to Azure using PowerShell, including module installation, interactive and device login methods, verifying sessions, and managing multiple subscriptions.
  • Passkey Provider AAGUIDs PowerShell Module
    The FIDO2 specification requires each security key vendor to provide an Authenticator Attestation GUID (AAGUID) during registration. An AAGUID is a 128-bit identifier indicating the key type, such as the make and model. Passkey providers on desktop and mobile devices are also expected to provide an AAGUID during registration.
  • PowerShell Confirm Parameter: Best Practices for Safe Scripting
    The PowerShell Confirm parameter is an essential safeguard that prompts users before performing potentially destructive actions. This article will explore how to implement the -Confirm parameter in custom PowerShell functions to make them more robust and user-friendly. What is the PowerShell Confirm parameter?
  • Outlook Email Mover
    The way I manage my email might seem a bit strange. Due to working in IT, I get lots of emails. Some emails need action, some are regular emails, and some are notifications I want to know about as soon as they happen. I feel like a normal person would make an Outlook rule to…
  • SQL Query Stats via Powershell
    Checking query runtimes via PowerShell

Projects, Scripts, and Modules

  • PowerShellRun
    Terminal Based Launcher and Fuzzy Finder for PowerShell.

Books, Media, and Learning Resources

Community

  • Innovating with PowerShell: Micah Shonyo’s Path to C# Mastery
    In this episode of the PowerShell Podcast, we sit down with Micah Shonyo to explore his inspiring journey into PowerShell, from his early days learning the language to his current projects. We dive into the story behind his Microsoft Cluster Management module, discussing what motivated him to create it and how it helps sysadmins. Micah also shares how learning PowerShell opened the door for him to start using C#, blending scripting with development to elevate his technical skills. We wrap up the conversation with insights into his career goals and aspirations for the future.
  • Inside IT Automation E16
    The History of PowerShell with Jeffrey Snover

Fun

Events

Check out psweekly.dowst.dev for all past editions as well as a searchable archive.

view more: next ›