PSConfEU 2024

I attended my first PSConfEU event in Antwerp, Belgium, and had a great time! In this blog post, I will recap the four days and what I saw and learned during those!

What is PSConfEU?

It’s an event for all PowerShell enthusiasts hosted in Europe this year in Antwerp (Hilton Hotel). It has many sessions and a PowerShell Community Dinner event. Attending sessions allows you to learn, but it’s also about its social aspect.

Sunday evening before the event

I arrived at 17:15 and parked my car in the garage below the Hilton hotel, went up to the reception, and checked in to the event there:

And yes, I had my company name on it and my website’s name, too 🙂 I checked into my hotel afterward and met with Heiko Brenn and his colleague Achiem Wieser from ScripRunner for a few drinks and dinner. (They are my sponsor, and I am very happy with them!) We went to a different bar, met some more people, and had excellent discussions about automating things and our shared challenges. (Including using other editors than Visual Studio Code). Back to the hotel and time to get some sleep 🙂

Day 1 – Monday, 24 June 2024

Welcome Notes

It started with a piece of history about PowerShell and PSConfEU with funny sidenotes 😊 We got the details about the next few days and the community dinner.

And a nice group picture with the flag of your country (European Championship 2024 🙂 )

Keynote

Excellent presentation and interaction with the audience about the usage of PowerShell 5 or 7, and it only took about 15 minutes before AI was mentioned 😂

Then AI was used to do all kinds of things, which was hilarious, excellent Ben Reader Australian Ascii art 😊 And a new clothing line created by AI:

The Maester product, the PowerShell podcast, and other community contributions and books were mentioned.

State of Shell (Steve Lee)

Here’s a brief overview of new features and demo time from Steven Bucher 🙂 PowerShell predictors plug-ins, experimental features, and so on.

And, of course, security was a topic, too :

And ACR for Psresourceget, DSC, and PowerShell v7.5. And the Ecosystem that is still growing:

Powershell Remoting Demystified (Jordan Borean)

After an excellent table soccer game (My team won 😅) , I joined Jordan’s session:

There is a bit of history throughout the different versions of PowerShell and the Remoting options, which he demonstrated. He pointed out that using a server list is better than using foreach (Parallel)

Custom Transports, available since v7. 3, were discussed, including Jordan’s Remote Forge module. Possible options include psexec, RDP, s3/Azure Files, or PSRemoting to a JSON adapter.

Runspaces and Modules and Closures, oh my! (Bruce Payette)

After a well-needed coffee break, I joined Bruce’s session. After a small introduction, the deep dive began. (Nerdfactor 10 talk 😅) After explaining Closure and how things work, my mind was melting; it was demo time.

The demos started, and yes, we love those, and things became clearer then.

Then the questions came, and Bruce’s knowledge was so good (Obviously as a builder of PowerShell) that he could answer them without doubting! In summary:

SSH & PowerShell: All you need to manage EVERYTHING (Ben Reader)

For me, the last session of the day was with Ben Reader. I’ve been following him online (Intune training) for a while, and it’s nice to see him in person!

And also here, demos with an excellent Terminal background 😅

Ben showed different ways of connecting using SSH, from PowerShell to Windows Server and Debian. Because all the platforms are supported, you can easily standardize connecting to your servers. Afterward, Ben showed us how to configure the connection using certificates to enable passwordless server connections.

Break the Ice

This was the end of the day, and it was scheduled to create an opportunity to meet and talk to other visitors of PSConfEU to share ideas and technologies. And everyone needed a beer, so was busy at the bar 😅

Day 2 – Tuesday, 25 June 2024

Create a custom Microsoft Graph connector with PowerShell (Christian Ritter)

We were almost ready to see Christian’s session but had to move from room 4 to 3. It was probably because it fit more people. 🙂 After a funny introduction, Christian discussed Graph Connectors in an Endpoint beer brewery style with a Fallout theme 😛 He showed us how to create a connector using formatting in the script for the app IDs and the display names for readability, which I also like to do. After making the connector, he showed us how to create and use Adaptive Cards (He pointed out that using https://adaptivecards.io/ is very helpful for this) and how to query Sessionize. The Demo-Gods were not in favor of Christian today 🙁 He could not show us the result but will share the code with us, he promised 🙂

This was in the main room, and the presentation about ScriptRunner was nicely themed by Heiko:

DSCv3 – The Next Generation (Steve Lee)

After the sponsor break from ScriptRunner, I returned to the 2nd floor to see Steve Lee’s session. I like Desired State Configuration and was very curious about version 3!

After a short introduction and history of automation, the versions of Desired State Configuration were discussed. (V1 was my starting point straight away.) DSC v3 is like a complete overhaul, still cross-platform and Open-Source. It’s compatible with both versions 5 and 7, and resources can be written in any language.

The rest of the session was demo-based, and it was great to see how far DSCv3 is now! (The GitHub repository can be found here.) It will be published in the Windows Store soon. (It was already there but was not published because the “dsc.exe” command-line tool didn’t exit correctly with exit 0 😉 )

Steve Lee also had some Demo-God issues, unfortunately, but it didn’t affect the demo that much luckily.

After the demo, there were a lot of questions, and most of the things were already on the radar or in a bug report 😅

Invoke-WhateverYouLike – Building the tools you dream of with PowerShell (Walter Legowski)

After lunch, I went to the session with Walter Legowski. We did a count-down and the loudest applause so that every other session could hear us 🙂

It was an inspiring session about his journey into PowerShell development, bad practices, building modules, and using objects. But it was also about adding help to your scripts, using aliases, and Pipeline usage.

The art of throwing errors (Emrys MacInally)

After a short break, I joined Emrys MacInally’s session about throwing errors in scripts and functions.

He started the demos after explaining the difference between terminating and non-terminating errors. During the demos, he explained how to interpret errors and the differences between versions 5 and 7 and touched on the RecommenedAction topic, which is there in v7.5. Overall, it was an exciting session with good examples and best practices.

Behind the curtain of PowerShell cmdlets (Sergey Chubarov)

I joined the session of Sergey Chubarov and after a duck race on screen ;), he explained that he was working in Security. (Offensive side).

After introducing the topic and explaining how API calls work, he started the demos, using API Monitor as tooling.

During the demo, he showed us how to add things to PowerShell that weren’t there before and how attackers obfuscate things by rewriting cmdlets. (The creation of an Event Log created a service instead of a log)

Caching Data in PowerShell (Guy Leech)

After a coffee, I joined Guy Leech’s session. I saw him in real life for the first time yesterday, and he’s exactly like he’s on social media and how other people described him 🙂 #Funny

After a short introduction and promoting PowerShell ISE like usual, he discussed his issue and use case for the items in the presentation. In the demo, he demonstrated Hashtables for caching.

He discussed storing data and whether you need to store all properties (Depending on usage and what you want to do with the data). He also discussed practical things like specifying case sensitivity, whether something is an Array, etc. It was an excellent, humorous session in a typical Guy Leech style, during which he displayed his knowledge of different platforms and environments.

PowerShell Community Dinner

After the last session, I went to the hotel and the boat afterward, taking us to the dinner event. It is an excellent location with many lovely people and great food. We created a Community team and played against the Microsoft team in a corn hole game, and we lost 2-1, but so much fun 😁

Day 3 – Wednesday, 26 Juni 2024

Building Custom GitHub Actions with PowerShell (Justin Grote)

After the great Community Dinner, a few drinks near the hotel, and a good night’s sleep, I joined Justin Grote’s session.

The session started with an excellent introduction to the anatomy of GitHub Actions and the pricing model. Then, we worked on his test repository and followed along; it was excellent training, including using CodeSpaces. During the training, Justin touched on a few real-life experiences and bugs.

And yes, that is correct 😀

ScriptRunner interview

Heiko Brenn asked me if I wanted to do an interview with him for ScriptRunner, and yes, of course! The link will follow later. It was a fun and relaxed interview.

Meet Entra PowerShell (Aleksander Nikolic)

After the interview, I joined the session with Aleksander Nikolic. I was a bit late, and the room was already full 🙂 After briefly introducing Microsoft Graph and Entra PowerShell, their differences, and scenarios, he touched on when to use what, where, and by whom.

After the intro, he started with some demos:

He showed the difference between the modules and cmdlets, how things were set, and how they were made compatible for transitioning (Parameter names, etc.)., but also other topics, like AdditionalProperties, Case-Sensitivity, etc. This was another excellent session, and it shows what is changing, the bugs still there, and how you can work around things.

Exploring the World of Parallelism with PowerShell (Christian Ritter)

The next session was with Christian Ritter about the parallel option introduced in PowerShell 7.

After briefly introducing him and the topic, he discussed how jobs work in PowerShell.

Then, he discussed the Foreach-Object with the Parallel parameter and showed the difference with the ordinary job approach from PowerShell. But you can also use them together :). He also pointed out that they will almost start at the same time but not entirely and end at the same time.

He also showed how runspaces work and how to create and use a runspacepool. And to make things easier… 😉 You can also use RSJobs as an alternative… But also Start-ThreadJob… Different options exist to run things in parallel, but which is better? It will probably be the standard IT answer: It depends 😛

And a bit of pair programming in the Q&A with Jordan Borean 😊

Practical PowerShell Empowerment For Protectors (Blue Team) (Miriam Wiesner)

The session with Miriam Wiesner started, and she will do a raffle for her book. Unfortunately, she did not have it physically with her, and we did a raffle online for it at the end of the session.

She started by asking whether PowerShell is dangerous and should be disabled. The answer was no, of course, because you also don’t disable Dotnet, bash, Java, etc. PowerShell has many valuable features that can be used for IT admins to get events, etc.

We discussed the desired state configuration (the push/pull concept) and the well-known M365DSC module for scanning and securing environments. She showed the Scan-RemoteUpdates.ps1 and Get-ExecutedCode scripts:

She also touched on the Constrained language mode for securing machines, using Just Enough Administration (RBAC for restricting commands), the Execution Policy, Application Control and code Signing, and the AntiMalware Scan Interface. And one of her favorite topics is transcript logging. You should enable it using Group Policy, which points to a share with only Write permissions to secure the logs. All these options are for more visibility in your environment.

Introducing Maester, your Microsoft 365 test automation framework (Fabian Bader)

After a small coffee break, I joined the session about Maester with Fabian Bader.

He talked about the history of Maester, how and why it was created, what they wanted to achieve, and the use cases for it. Those were the one-off assessments and the CI/CD option. He demoed it and showed the results in the dashboard, including tips on fixing the problems found.

After releasing the framework in April, exchange tests will be developed, and more will follow from the community. He then asked if we could guess where the name Maester originates from, and it is a reference from Game of Thrones. 🙂 Maester is based on Pester and all tests are written in Pester.

He showed how the scripts look and how results were returned to the dashboard:

On Maester’s website, you can read the documentation on configuring it for your GitHub Actions. It’s good stuff, and there has been a lot of community work on it already!

PoShaKucha – Community Presentations (not Demos)

The last event of the day, PoShaKucha! 20 slides and 20 seconds per slide presentation, no demos:

After a small introduction about the way this works, the presentations started:

The format was nice, it worked and small and to the point presentations, and we need to have more of this 🙂

Day 4 – Thursday, 27 June 2024

Remotely connect, configure, and secure servers anywhere with Azure Arc and PowerShell (Aurnov Chattopadhyay)

It’s the last day of PSConfEU. 🙁 I started with this session from Aurnov to learn more about Azure Arc’s PowerShell capabilities.

After a brief introduction to Azure Arc, the Arc server newsletter (Link in the picture above), and the Community Call they do, he went into more detail about Azure Arc enabled Servers. Then he started his demo, connecting servers to Arc, configuring them, and deploying Defender and those servers.

Although the Demo-Gods did not favor him, he showed us the options for deploying the Arc agent, getting information, and running commands on the servers afterward using Arc. He also showed us how to see the Defender score of the onboarded machines and how this all works. He talked about the roadmap for Arc, which is the tool for server management, like Intune, which is the tool for workstations. Many things are now in preview, like Arc Gateway, 2012/2012R2 Extended Security Updates, Hotpatching, Run Command, Azure Backup capabilities, etc.

Chocolately did a small session about their Central Management product:

Secure Code Design Practices (Friedrich Weinmann)

After a brief introduction, Friedrich provided some assumptions and context about PowerShell Security. He then discussed the fundamentals: no secrets/privileges in your scripts, verifying data (Ensuring you only receive required data), and code trust.

Then, he started his demo, highlighting options to store and retrieve credentials securely. After that, he showed examples using Invoke-Expression securely using validation and an enormous RegEx 😀

He also covered scope trespassing and how to circumvent it using local variables instead of globally defined ones. After that, he highlighted the importance of cultivating data quality when uninstalling old versions of applications. (You could hide commands in the Uninstall strings in the registry to abuse that while uninstalling applications). Then, he talked about ScriptBlocks and Constrained Language Mode. Running in RunSpace, this could be switched to Full Language instead, which can be avoided using New Closure. As a last topic, he touched on using code signing and said that you should at least prepare your scripts for it. (Avoiding hardcoded values)

It was an excellent technical session on how things work and how much you’re opening your system up when you’re not running things securely.

Talking about mental health – For you and them (Traci Sewell)

It’s not a technical session, but it’s an important topic. Traci started her session after a brief introduction, highlighting the life-work balance.

She talked about how it’s OK not to be OK, which was the subject of an extensive campaign in England. But she also said that no one is indestructible, and not being okay is NOT a weakness. Asking for help takes courage. How do you know if there’s something that you should talk about? Sleep or insomnia issues, enthusiasm/esteem, plans and commitments, the different types of people, Self-Care, and many other topics.

A lot of valuable tips, practical and recognizable things. Great session!

Community Demos

After lunch, de community demos started but first, the winner of shortening the code was announced, including the whole how he did it:

The demos started, and the first one had the best title: How much is 20.000 beers on disk 😀

Axel showed his script, which used AI to get 20 Belgian beers, with descriptions, alcohol, etc. He outputted that to different formats, such as .csv/.xlsx and .parquet, by using PSParquet.

The following presentation was about automating Microsoft 365 tenant access from a Microsoft Partner Center. It was excellent, practical, and fast.

Then, Leo Visser gave his presentation about querying the sustainability data from Azure. He’s automated in grabbing the data and saving it as a PDF.

Next in line was Friedrich Weinmann. His session was about automatic tab completion in the Terminal:

Then, Steven Bucher from Microsoft gave us more insights and tips for using PSReadline:

Ben Reader was demoing connecting using SSH over the RDP port 3389 while other people were playing table tennis on two tables next to him 😀 Despite that going on, it worked 😛

Then Justin Grote did a demo about formatting output using EasyTable. It’s cool stuff!

Jordan Borean did a session about his PowerShell module for monitoring API calls. Nice!

Fabian Bader was next about Sentinel analytics from YAML to Arm, nice work!

Jelle de Graaf showed off his PowerShell game, PowerSpel! He created it to learn PowerShell and rewrote it a few years later. So impressive!

The following demo was from Chrissy LeMaire about her PSCopilot.Help module. It enables you to talk PowerShell commands, a super use case!

Ask me Anything with the PowerShell Team

After a small break, the AMA started, and Justin Grote became the ‘Mic Runner’ 🙂

The first question, of course, was why PowerShell 7 was not available by default. It has to do with DotNet dependencies, support life cycles, etc. Some other questions were:

  • PowerShell certification? – Will be looked into
  • Could the predictor be used to show information about deprecated modules? – The feedback provider should be used for that
  • Why is the Exchange Online module not open-sourced? – It depends on the priorities of the product team
  • Is the get-help, get-member going to be moved to the Terminal sidebar? – To separate Terminal input from the Help pane, also doing it inline would cause a delay in typing
  • Can you register a private PS Repository with PSResourceGet for all users? – It should be possible if you have enough permission to do it. There should already be an issue in the GitHub Repository
  • Could the login experience to Microsoft Graph and Azure modules be better when using MFA and PIM? – It’s the difference between 1st and 3rd party app registration and the security issues with that
  • The parsing method from Invoke-WebRequest was removed from 6 and up. Why? – It relied on Internet Explorer and was moved. Using PSParseHTML would be a better option
  • Does the PowerShell team help other teams streamline their modules? – Yes, they do, but they don’t see everything being built

Closing session – Goodbye all

After the great AMA session, the closing session started with a recap, and a thank you to everyone who spoke or contributed.

And then… It was over 🙁 Four days of fun, socializing, and learning were over! It’s such a great event, and I can’t wait for PSConfEU 2025!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.