- Видео 36
- Просмотров 40 523
Jeff Brown Tech
США
Добавлен 11 дек 2017
Tutorial videos covering PowerShell, Azure, DevOps, Office 365 and more!
Streamline Module Publishing to PowerShell Gallery Using GitHub Actions
Learn how to use GitHub Actions to automate publishing to the PowerShell Gallery! 👉 In this video, I show how I am using GitHub Actions to test and publish the PowerAzPlus module.
👇 Get the Code Here! 👇
github.com/JeffBrownTech/PowerAzPlus
PowerAzPlus in PowerShell Gallery
www.powershellgallery.com/packages/PowerAzPlus
📖 Read More About This 📖
How to Publish Your First PowerShell Gallery Package
jeffbrown.tech/how-to-publish-your-first-powershell-gallery-package/
📺 Watch 📺
ruclips.net/video/w-t7jBLD9LE/видео.html
⏰ Chapters ⏰
00:00 Introduction
00:37 GitHub Actions review
04:42 Repository secrets review
05:20 Workflow example
10:48 Summary
Social Links
🔗 LinkedIn: www.linkedin.com/jeffbrowntech
🔗 Threads: ...
👇 Get the Code Here! 👇
github.com/JeffBrownTech/PowerAzPlus
PowerAzPlus in PowerShell Gallery
www.powershellgallery.com/packages/PowerAzPlus
📖 Read More About This 📖
How to Publish Your First PowerShell Gallery Package
jeffbrown.tech/how-to-publish-your-first-powershell-gallery-package/
📺 Watch 📺
ruclips.net/video/w-t7jBLD9LE/видео.html
⏰ Chapters ⏰
00:00 Introduction
00:37 GitHub Actions review
04:42 Repository secrets review
05:20 Workflow example
10:48 Summary
Social Links
🔗 LinkedIn: www.linkedin.com/jeffbrowntech
🔗 Threads: ...
Просмотров: 17
Видео
Create PowerShell Modules: Adding a Module Manifest
Просмотров 79День назад
Let's continue working on our custom PowerShell module for PowerAzPlus by adding a manifest file! ➡️ In this video, you'll learn how to quickly create a manifest file to include important metadata about the module. Read More About This 📖 How to Create a PowerShell Module: A Beginner's Guide jeffbrown.tech/create-powershell-module/ 📺 Watch 📺 ruclips.net/video/sUXSf4vdO_o/видео.html ruclips.net/...
Loading PowerShell Custom Functions: Profiles, Dot-Sourcing, and Modules
Просмотров 7314 дней назад
Now that you've written your custom PowerShell function, how do you use it on a daily basis? This video covers several different ways to load a custom function into your PowerShell terminal. Read More About This 📖 Loading PowerShell Custom Functions: Profiles, Dot-Sourcing, and Modules jeffbrown.tech/load-powershell-custom-functions/ ⏰ Chapters ⏰ 00:00 Introduction 00:21 Pasting Directly into ...
Become a PowerShell Master Writing Advanced Functions! [Part 2]
Просмотров 159Месяц назад
Learn how to write your own PowerShell advanced functions! ➡️ Part 2 covers handling multiple inputs from the pipeline and Write methods. 👇 Get the Code Here! 👇 github.com/JeffBrownTech/jeffbrowntech_youtube/blob/main/2024-09-30-PowerShellAdvancedFunctionExample/AdvancedFunctionExample.ps1 Read More About This 📖 Process Pipeline Data in PowerShell Parameters jeffbrown.tech/powershell-pipeline-...
Become a PowerShell Master Writing Advanced Functions! [Part 1]
Просмотров 3432 месяца назад
🚀 Learn how to write your own PowerShell advanced functions! Part 1 covers identifying the solution, creating the function, validating parameters, and error handling. 👇 Get the Code Here! 👇 github.com/JeffBrownTech/jeffbrowntech_youtube/blob/main/2024-09-30-PowerShellAdvancedFunctionExample/AdvancedFunctionExample.ps1 ⭐ Read: ⭐ PowerShell Advanded Functions: Getting Started Guide jeffbrown.tech...
Get Started with PowerShell Advanced Functions!
Просмотров 2542 месяца назад
Advanced functions take your PowerShell development to the next level, letting you create cmdlet-like scripts with advanced features. In this video, we’ll dive into creating advanced functions with examples on how to utilize their additional features. #powershell 👇 Get the Code Here! 👇 github.com/JeffBrownTech/jeffbrowntech_youtube/blob/main/2024-09-17-PowerShellAdvancedFunctions/PowerShellAdva...
Mastering PowerShell Basics: Understanding Objects, Pipelines, and Essential Commands
Просмотров 1863 месяца назад
Are you new to PowerShell? Learn some helpful tips and tricks to PowerShell syntax as well as some cmdlets to help you along the way! 👇 Get the Code Here! 👇 github.com/JeffBrownTech/jeffbrowntech_youtube/blob/main/2024-09-06-PowerShellTips/PowerShellTips.ps1 📺 Watch: 📺 ruclips.net/video/al95BRieqN4/видео.htmlsi=riIjepl3yzuBFpvq ⏰ Chapters ⏰ 00:00 Introduction 00:24 Get-Help 03:31 Show-Command 0...
PowerShell & RegEx Getting Started Tutorial
Просмотров 1783 месяца назад
Harness the power of RegEx inside PowerShell! RegEx is a brilliant way to search, match, and manipulates strings based on specific patterns. 👇 Get the Code Here! 👇 github.com/JeffBrownTech/jeffbrowntech_youtube/blob/main/2024-08-28-PowerShellRegEx/PowerShellRegEx.ps1 Read More About This 📖 PowerShell RegEx: Getting Started Guide jeffbrown.tech/powershell-regex/ 📺 Watch: ruclips.net/video/ikLED...
Understanding PowerShell Variable Scope in Scripts and Modules
Просмотров 2083 месяца назад
Not all PowerShell variables are created equally! In this video, learn about the different scopes available when working with PowerShell variables. 👇 Get the Code Here! 👇 github.com/JeffBrownTech/jeffbrowntech_youtube/tree/main/2024-08-21-PowerShellVariableScope Read More About This 📖 PowerShell Variable Scope Guide: Using Scope in Scripts and Modules www.varonis.com/blog/powershell-variable-s...
How To Create PowerShell Dynamic Parameters!
Просмотров 1523 месяца назад
What are PowerShell dynamic parameters and when can you use them? Find out everything you need to know in this video! 👇 Get the Code Here! 👇 github.com/JeffBrownTech/jeffbrowntech_youtube/blob/main/2024-08-14-PowerShellDynamicParameters/PowerShellDynamicParameters.ps1 Read More About This 📖 Tips and Tricks to Using PowerShell Dynamic Parameters jeffbrown.tech/tips-and-tricks-to-using-powershel...
Add Tab Completion to your PowerShell Parameters Today!
Просмотров 2354 месяца назад
Enhance your PowerShell scripts and functions by adding parameter tab completion! This video goes over 5 different ways to level up on parameter tab completions. 👇 Get the Code Here! 👇 github.com/JeffBrownTech/jeffbrowntech_youtube/blob/main/2024-07-29-PowerShellTabCompletion/PowerShellTabCompletion.ps1 Read More About This 📖 PowerShell Tab Completion: The Ultimate Guide jeffbrown.tech/powersh...
PowerShell ForEach Deep Dive
Просмотров 2474 месяца назад
Harness the power of the PowerShell ForEach loop! This video covers three ways to iterate through an array and the differences in their performance. 👇 Get the Code Here! 👇 github.com/JeffBrownTech/jeffbrowntech_youtube/blob/main/2024-07-22-PowerShellForEach/PowerShellForEach.ps1 Read More About This 📖 PowerShell ForEach: Everything You Need to Know jeffbrown.tech/powershell-foreach/ 📺 Watch: 📺...
PowerShell Hashtable vs. PSCustomObject Deep Dive
Просмотров 5174 месяца назад
While they may look similar, PowerShell hashtables and custom objects are quite different. Learn all about each of these data types and some neat tricks with each one! 👇 Get the Code Here! 👇 github.com/JeffBrownTech/jeffbrowntech_youtube/tree/main/2024-07-15-HashtablePSCustomObject Read More About This 📖 PowerShell Hash Table vs. PSCustomObject: Deep Dive & Comparison jeffbrown.tech/powershell...
Own Your IT Career
Просмотров 1005 месяцев назад
What does it mean to own your IT career? In this video, I discuss my experience learning how to make sure I keep my skills relevant for working in the IT industry. Read More About This 📖 The Most Inspiring PowerShell Story Ever web.archive.org/web/20150308234145/http:/donjones.com/2015/03/04/the-most-inspiring-powershell-story-ever/ Book: Own Your Tech Career www.manning.com/books/own-your-tec...
Copying PowerShell Hashtables (The Right Way!)
Просмотров 1286 месяцев назад
Avoid frustration and learn how to copy a hashtable (the right way)! 👇 Get the Code Here! 👇 github.com/JeffBrownTech/jeffbrowntech_youtube/tree/main/2024-06-10-CopyingHashTables Read More About This 📖 jeffbrown.tech/copying-powershell-hashtables-the-right-way/ ⏰ Chapters ⏰ 00:00 Introduction 00:17 Copying Strings Example 01:13 Copying Hashtables 04:01 Copying Hashtables (The Right Way) 07:00 S...
Manage PowerShell Parameters with Splatting
Просмотров 2446 месяцев назад
Manage PowerShell Parameters with Splatting
PowerShell Begin Process End Block Demystified
Просмотров 1846 месяцев назад
PowerShell Begin Process End Block Demystified
Use PowerShell WhatIf So You Don't Break Stuff
Просмотров 1326 месяцев назад
Use PowerShell WhatIf So You Don't Break Stuff
Learn About PowerShell 7 Ternary Operator with Examples!
Просмотров 1467 месяцев назад
Learn About PowerShell 7 Ternary Operator with Examples!
How I Became a Cloud and DevOps Engineer - You Can Too!
Просмотров 2547 месяцев назад
How I Became a Cloud and DevOps Engineer - You Can Too!
Write Awesome Scripts with PowerShell Parameter Sets
Просмотров 4577 месяцев назад
Write Awesome Scripts with PowerShell Parameter Sets
Validate PowerShell Parameters Today!
Просмотров 2517 месяцев назад
Validate PowerShell Parameters Today!
Getting Started with PowerShell Parameters
Просмотров 5958 месяцев назад
Getting Started with PowerShell Parameters
Coding Session: Enhancing PowerShell Scripts with Parameters and Error Handling
Просмотров 2238 месяцев назад
Coding Session: Enhancing PowerShell Scripts with Parameters and Error Handling
PowerShell ForEach and CSV File Tutorial
Просмотров 8668 месяцев назад
PowerShell ForEach and CSV File Tutorial
Master PowerShell Errors with Try Catch Blocks
Просмотров 3569 месяцев назад
Master PowerShell Errors with Try Catch Blocks
How to Renew Your Microsoft Certification!
Просмотров 7529 месяцев назад
How to Renew Your Microsoft Certification!
Assign Graph API App Role to Azure Managed Identity
Просмотров 2,8 тыс.10 месяцев назад
Assign Graph API App Role to Azure Managed Identity
Graph API Demonstration using PowerShell
Просмотров 87510 месяцев назад
Graph API Demonstration using PowerShell
Thanks mate! Great stuff and with the holiday season approaching, there will be plenty of time to work through this! Also more familiar with Azure.
I've written so many one-off things over the years, I'm excited to start keeping them in a module.
Just found your channel. Explanation is great and im just starting to need graph access. Thanks so much!
I answered my own question. $object.PSObject.Copy() actually uses $object.Clone() if the base object is clonable
Nice, thanks for sharing!
Great pace and content, the perfect intro to Graph API - thank you
Clean, concise, and well explained. Thank you, Jeff!
When will you be doing a video on how to get an access token from a client app to connect to MS Graph, without user intervention. (Assuming permissions have been setup already in Azure.)
I am not familiar with that process, but I will take it under consideration for a future video.
I didn't realize that I actually am famliar with that process, it had just been a while. I have a blog post covering the process of creating the app registration, then using PowerShell to get an access token. This article is a specific use case with Microsoft Teams, but most of the concepts will hopefully help. jeffbrown.tech/creating-microsoft-teams-and-channels-with-graph-api-and-powershell/
Very Informative and Helpful Thanks
Outstanding Jeff. Thank you.
And you just demoed that. Happy to be close on one page
Oftentimes I use datetime for output files, plus something like current set page, counter etc, to make filename unique
All great ideas, thanks for sharing.
Thanks again. I just upgraded my simplistic one-block param() approach of stuffing everything between the parentheses into scripting structured self-documented param blocks with validation and custom err messages. You got a docile apprentice here :)
Happy to find this channel. Thank you for the perfect structuring and delivery. Definitely subscribed.
Awesome, thank you!
Why bother putting quotes around the key names in your hash table?
Probably just a habit I picked up at one point for some reason and it's stuck 🤷♂️
Great video as usual Jeff. Thanks for making it.
Thanks for watching!
Great stuff! Thank you for the video!
Glad you liked it!
Great video - I have an idea for you. Many people have complained to MS that there isn't a bulk method for hiding chats (or leaving, deleting etc). For many of us this becomes a very tedious task. Can PS help? Thanks again!!
At a quick glance, that looks like it would take diving into the Teams API to find a user's chats and remove or soft-delete them.
You've got a like a sub. I have been trying to figure out how to assign permissions to the Managed Identity Service Principal and no useful information is available online. Cheers, keep up and good luck!
Glad it helped, and that's why I wrote the article and did the video. Seems like a complicated process and wanted to document it myself.
What is the future of Microsoft Graph API, and how is Microsoft evolving it? Is investing in learning this skill for career growth a good idea?
Learning how to interact with any API is a good thing. Microsoft's Graph API is the gateway to managing all of its services directly. You can write your own code to perform actions or get information. I've used it when there wasn't a clear PowerShell cmdlet or it had limitations that querying the API directly was better.
Thank you so much. It answered all of the questions I had. Really nice. tnx.
Great to hear!
Off the jump, it looked like you could just use parameter sets for private. Haven’t finished video though.
Oh nvm. It’s a parameter value you are keying on. I would just have a private channel switch maybe or another function. Dynamic param is nice too. I usually forget about it. Hmmm
Hmmm. Yeah I see this simplifies UX while complicating for the dev. I think it is a win especially to reduce complexity. It might reduce discoverability in the help. I’m curious if private channel owner would show in the help.
For sure, multiple parameters to cover parameter sets, my goal here was to have one parameter for the channel name, channel type, then specify a private channel owner when needed. But definitely multiple ways to accomplish this.
I dig regex for searching through logs or parsing native command output where the formatting isn't quite predictable. I also tend to use it with the "-replace" operator to either remove the text matching a pattern or transform it somehow. One of the most common uses for me though is within Visual Studio Code and doing a regex search, or find & replace, in a file or across all files in the repo. That is super helpful when you need to find a very specific pattern and change it everywhere.
Thank you so much for making this video 🙏
Glad it was helpful!
How do you use regex and PowerShell together? Leave a comment below!
Just the introduction I was looking for! Thank you so much!
You bet, glad it was helpful!
Excellent video and demonstration!
When I need to save some kind of state in a module, I’ll use a script scope variable as well. Typically I’ll explicitly declare that variable in my PSM1 so that there’s one place to go to know all script scope variables used in the module. And I’ll try to minimize the functions that touch the variable directly. Usually by having private get/set functions and ensuring that any other function that needs the variable will get it from the private function rather than accessing it directly. Depending on the circumstances, environment vars can fill a similar role except they’re available in the global scope making them transparently available to the user and any other script/module running in that session.
Do you create the variable outside all the functions in your PSM1 file? Did not think of that approach but I like it!
@@jeffbrowntechExactly, not that it makes a _technical_ difference, but I know there is only one place to look to remember if/which script scope variables are being used and it feels more intentional. I also do a lot of C# code and it still feels dirty to declare a variable in an “inner scope” and then access it outside of that “scope” even though those try-block or if-block scopes are imaginary and don’t exist in PowerShell.
@@psjoshooaj I agree, I like the idea of having one place where the variable lives, then the get/set functions to control it. Thank you for sharing!
brand new to graph, and this video is where i started. i tried editing the department, and i got the following error. "code": "Authorization_RequestDenied", "message": "Insufficient privileges to complete the operation.", this was performed with the global admin for my account, and i confirmed i can edit this property in the azure identity portal i can pull these attributes just fine. do i have an application permission limitation in this explorer?
looks like i needed to add permissions in the permissions tab. i made it work. is there a way to grant these permissions temporarily? if i close the session, will the api permissions persist? should i manually revoke the permissions i just granted at the end of this exercise to reduce the attack surface until i get back into graph?
@@hassenfepher I believe those permissions are persistent, if you are unsure of leaving those out there, go ahead and revoke them.
@@hassenfepherI could be wrong but JIT PAM solutions might be what you need for this sort of security you’re mentioning.
Thank you very much. Your instructions on the video are very useful.
Glad to hear that!
That was a great tutorial on dynamic parameters! I've used them a couple of times, but I generally avoid them because of the added complexity for me and the reduced discoverability for users. For the example here with public vs private "Teams teams" I'm not sure whether I would come up with a way to use a second parameterset, or have two public commands like "New-PublicChannel" and "New-PrivateChannel" which delegate to a single private function to do the work (to minimize duplicate code). One of the things that holds me back from using dynamic parameters is the lack of platyPS support but if I remember correctly, I think Sean Wheeler mentioned platyPS v1 may have support for dynamic parameters and supposedly they're aiming to release v1 this year so it's definitely worth another look!
What do you think about dynamic parameters, is this something you would use?
Thanks, Jeff, for sharing your experiences. This is very motivating!
Thanks for sharing this information Jeff! Much needed and right on time!
Nice video, thank you!
This video was excellent Jeff. Light bulbs were going off while watching this. Honestly can't wait to go to work to try some of these!
Have you ever used or needed tab completion for your parameters? Leave a comment below!
Hi Jeff, Please make the next video on Regex in PowerShell.
It's a good topic, it's on my to-do list.
This is terrible... Not the video. The video is great! But why this information is not easy to find in Microsoft Docs? They should have a atep by step guide like this... Anyway, thanks for your help! Why did the Graph series stopped?
That is primarily why I blogged about it and created the video, to put all the steps together. That's all I had for Graph stuff at the time but will produce more if something comes up. I primarily pull from things I encounter in my daily work.
@@jeffbrowntech could you bring more examples of using Python? The general step: register the app, request the token, use the API via requests/SDK
@@starvosxant4348 Unfortunately I don't know Python, PowerShell is my go-to scripting language for now.
Great video, when i run 'New-MgServicePrincipalAppRoleAssignment' i get the 'Insufficient privileges to complete the operation.' error, I can't figure out which permissions are missing, i created the function app,, i am also a global admin, but error comes up each time when itry to run it, any idea what m,ay be causing it?
Double check what scopes you have in your Microsoft Graph connection context, there should be something like Directory.ReadWrite.All: Get-MgContext | Select-Object -ExpandProperty Scopes
@@jeffbrowntech thanks for your replay, I managed to resolve my issue, At first I only used scope which you mentioned in the video 'Connect-MgGraph -Scopes 'Directory.ReadWrite.All'' but it did not work, only after adding 'AppRoleAssignment.ReadWrite.All' it started to work for me, so first command was "'Connect-MgGraph -Scopes 'Directory.ReadWrite.All', 'AppRoleAssignment.ReadWrite.All'" in my case Thanks for the comments!
Interesting, thank you for the update, glad you were able to figure it out! I don't believe I needed that permission previously but something could have changed in the requirements.
@@pawelhaubus172 Thank you for posting your solution, I was having the same issue until I came across your comment.
I dont see it on my end, can you help?
What specifically don't you see?
You're amazing Jeff
Thank you so much , It helped a lot !!
Glad it helped!
Great video Jeff 👏
Is this possible via Terraform?
I have not personally done that but I can't think of any reason it couldn't be. You would have to know the app role to assign ahead of time. registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/app_role_assignment
@@jeffbrowntech This worked btw. Thank you! I needed to be Global Administrator not just Application Administrator. Not sure why yet. Need to work on that. ``` data "azuread_application_published_app_ids" "well_known" {} resource "azuread_service_principal" "msgraph" { client_id = data.azuread_application_published_app_ids.well_known.result.MicrosoftGraph use_existing = true } resource "azuread_app_role_assignment" "directory_read_all" { app_role_id = azuread_service_principal.msgraph.app_role_ids["Directory.Read.All"] principal_object_id = azurerm_user_assigned_identity.github.principal_id resource_object_id = azuread_service_principal.msgraph.object_id } ```
Another great video Jeff!
Great video Jeff! Splatting is such a handy feature.
Thank you! Please help with JSON imports
Check out ConvertFrom-Json learn.microsoft.com/powershell/module/microsoft.powershell.utility/convertfrom-json
Thanks for making this video Jeff. ✌️
Thanks for this! Ternary syntax is the same in Bicep so getting used to it is helpful for that onramp too!
Great stuff Jeff. I've never messed around with [void] and or Out-Null. I'm still a PS noon so much of the stuff I do is just Ah-Hoc. Is the main reason for Out-Null for performance?
This is the StackOverflow thread I referenced in the video: stackoverflow.com/questions/5260125/whats-the-better-cleaner-way-to-ignore-output-in-powershell The way I am using Out-Null seems to be slower but someone points out it may be due to the pipeline. Overall, we're talking milliseconds, but if you're script is long running and doing the operation millions of times, it could make a difference.
@@jeffbrowntech Thanks Jeff. Keep up the great work you're doing.
This really keeps me motivated towards my goals, Jeff. 😊 Thank you for making this video 😊 I am also trying to switch to a complete Azure cloud engineer role and I am really working hard towards that goal and hope will get there in the coming months or might be there in a few years 😊