 So I usually name my interaction training by one because it means like really introduction, so do not expect anything super deep, but it's you know the high level overview what is PowerShell core, how it works, what are the main differences compared to traditional shells in Linux. Again, my name is Ciepan Bihinski and I'm a technical trainer at Microsoft. So my main responsibility is to train the companies and Microsoft partner to use Microsoft Azure. So probably the main difference, if you think about what you know from the Linux, you know it Bashel, KShell, there are many of them. So the main differences compared to PowerShell is that it works with the objects. So you are not sending if you are sending the output from one, it's from one command to another one using the pipe. It's not text, it's object, so it's object based command line. Of course it can, you like it, you can like it, maybe you will not like it, but I'm a quite big fan of this because it makes a lot of things really easier and you can work with this, you know, little different way of course it's a little different mindset compared to traditional text based shells. Instead of using the commands, there is something we called commandlets. So the commandlet is a built in functionality, you can create your own commandlets, you can extend the existing ones, and so on. But you can combine it with other Linux commands. So in one shell, you can use, let's say, PowerShell like commandlets, or you can of course use any other tool, I don't know, grab, offset, all those tools you already know from the Linux. If you want to install it, there is a documentation I will show it to you in a few minutes. So we are supporting many versions, so let's say officially we are supporting many versions of the Linux distributions. Of course it works with the macOS, it works on ARM, it works on Windows because everything is built on top of .NET Core, and .NET Core is a version of the .NET environment available for almost any operating system. So let's stop my presentation. Let's start something interesting. So first of all, as I told you, if you want to install it. There is a documentation, we are supporting, there is official support for many Linux distributions, and usually the way how to install it is usually to use some packaging system based on the Linux distribution you are using. So to install it, it's usually quite easy. So when I connect to my VM with the Linux, so if you want to go into the PowerShell command prompt, you just need to run it, which is pwsh, and now I am in a PowerShell command prompt. So of course I can use all Linux based commands you know, it works because it's one of the new, but of course I can use, I can use commandlets, so you can see this is a commandlet. So there are really many of them and you can extend existing set of your commandlets. So what you can do, you can create a module with the new commandlets. So you can imagine that the commandlet is a command for PowerShell and those commands are not, are, let's say, object based, so they are not pushing the text to the output of the screen or they are not pushing the text using the pipe to another commandlets, it works with objects. So I will speak about it more later. So the idea behind commandlet is that there is some, let's say, standardization, so we are trying to make it, we are trying to make it easy to understand. So if I run this, sorry, so if I run my commandlet, which is called get-verb, you see something, you see verbs, and there are recommendations, how to name commands. So if you want to create a resource to container, whatever you should use the app, something, so we have, so this is a verb and this is a noun. And here you can see like a recommendation, how to name your commandlets. And if you go through this documentation, you can understand better, so if I'm expecting, okay, I need some information. So probably I will need some get-verb, so I will ask for get-verb. So if I run get-verb again, and I run, I'm on super small place now, I have a small table, so I am, my computer send them the screen set up is really strange. So I have, there is another command, or commandlet, which is called get-command, and I can do something like this, get, and you see how many get commands I have here. So all those commands starting with get, giving me something. So using get-command, you can start those things like this, for example, so I want to, I know I want to work with the files, so I want to get some information about the files. So I see okay, there is only one, get file hash. So now using this get command, you can search for the commands. So I know I want to get the information. So this is based on output get-verb. I know if I want to get something, if I'm looking for some information, I need to use that get. And then I am, I want to work with the files. So using this, I can search for the commands. So I can show it to you on a difference machine. So now I'm, I just switched to another Linux machine. This one I am controlling from my web browser, and it's a developer console for Azure. So only thing I want to show you here is that if I go, for example, get command here, and I say noun is a z, I will see big amount of commands related to Azure. So there are really hundreds of them. And for example, I know I, so I kill it. So there are really many, many of them. And now what can I do here? If it stopped somewhere, okay. So I know, for example, I want to create a new, I want to create a new VM, for example. So I just do this, okay, I want to work, I want to create a new VM. But then it shows me, okay, command let new VM. So it means that, hey, this is the right command if I want to create a new virtual machine. So using this get command, you can search for command let's say if you are new, you are starting with this, this is the way how you can search. And now I'm, of course, interesting in getting some help. So it's easy just get help. Name of command let, and then I should get the help. This is very similar to month pages in Linux. And again, using the different switches, you can see here, I can get, for example, examples. So this is the common examples for, for using this command let. This is super, you know, this is the easy way how to get the information, this is the easy way how to get the information you need. Just scroll down a little. Okay. So I do another example for you. So I use, so I will use this command. And this one is, you know, to calculating the hash of the file so I can do here. I just can do get file hash. I read the documentation. So now I can calculate the hash for example for this file. And again, as you see the output here, it's an object. So what can I do, I can do, for example, this one. And now I'm getting only the hash. This is now I'm getting only what I need, but how to know what the command let is returning. And this one we have very nice another command let surprisingly, which is called get member. And it shows you the members of the object. And you see, it's a real object that some metals. And I have some properties and the properties you can see here. You can see the properties. And in my previous example I asked for the property. If you need to pass on some. So if you want to for this, this way, of course, what can I do I can create. Let's say variable. And I kept can put the output of the command let to variable. And again, if I use the get member, you see my variable is object so I can do something like this, for example. So the idea here is that the command let's are working with the object. So it doesn't return string. It returns the object. So then you can do a lot of things. So for example, if I want to get only say if I want to get only some object, some part of the output and I want to pass it to another command let, I can use select object. And I say, okay, I want just a hash. And again, it's another object. So I just, you know, put I just take what I need from the out. And of course, I can do something like this. So the pipe here. So the pipe, you know, from Linux doesn't, you know, move the text from one up to another one. It moves the objects. So you are working on the object level. So if you if you think about about this you can, you can do quite a lot of things here is this. So there is another. Let's use this one get process, it shows you the, it shows the processes are not so many here. Because it's really, it's really super easy. Yeah. But what you can do, you can do for example, something like this. Let's switch to another view and where we have a, let's say, more processes. So I'm looking at the processes if there is some process starting with P, and you can see there. So you can use this one where object, then you can use regular expressions to search for some value in the property. So it works the property name. So if I want to know what properties are available again I need to go go get process get member and you can see all properties. So that's what I think about the processes. Of course it doesn't show if it doesn't show all. So if I run just the get process, you will see it will show me just some selected properties not all of them, because there are really many many of them, but using the select object for example, command that I can pick up another from the list available, Okay. So it can be quite complex. So this is more complex one so again, I list all processes, then I'm looking only the processes where CPU usage in seconds is greater than 100. I sort it, and then I pick up just top top three. So this is the way how it works so I'm sending the objects from one command like to another one. And then I can manipulate is it just working with the property name of the object. The object can be really complex. So again, if I scroll up here, you see that the object returned by the get process is very complex you have a lot of information here. But then you can easily filter it and select, select what you select what you really need. If you have something quite more complex you can choose a different formatting so for example I can do. I don't know format list. So it shows me the information in in different shows me the information in different different way. So this is the main idea here that you are working with the object so are not passing the information using the text pipeline, you are using the object, object pipeline, object pipeline here. So this is like a basic information. So of course if you want to do something more complex, you can. So I switch to some code. So what you see now here can make the font a little bigger here. I make it a little bigger. So how to work with the variables so working with the variables is quite easy. You just need to do you need just need to use the dollar sign and variable name. So the variable is again it's a object so you can, you can, you can, it's automatic data type detection. But of course what you can, what you can do, you can tell the data type you will see it in next example. So if I use, if I take for example in this one. And here. And I do in the resource group yet member. So you should you see. It's a. It's a string so there's automatic way, you know it's automatic type detection. Okay. So working with the, if you need to do some loops or if you need to do some statement and so on. Again, it's very probably similar to you. So nothing special. The only thing is that you are not using the greater than sign or equal sign. It's LTE GT. EQ and so on. And if you look at it and if you are, if you are familiar with the parallel. So some concept of the language of the power shell are from parallel programming language. So you will be, you will, you will see those implicit variables in PowerShell, because, you know, some ideas, you know how the language is working are similar to to peril. But if you program in the peril, I did, I was a developer. Oh, 20 years ago, but it was, it was a lot of fun to develop in peril, believe me. You can see how to create a dictionary. Usually the dictionary you are using usually as a parameter of command let you can see the usage here. So if you want to use it as a parameter, you just need to use at sign. If you want to access parts of your dictionary, of course use the dollar sign here. But if you want to pass it as a parameter, you need to use, you need to use at sign. In the power shell, you can write quite complex scripts because you know the programming language is quite powerful. And what's interesting here is because it's built on dot net so on the, on the back end of the power shell. There is a dot net and dot net core to be more to be more precise. So you can call any, you can call anything from the dot net. So for example, here I have some example. It's a power shell. But you can see I have I'm using this new object command plant. And this is an object from dot net. So I can call and I can use any dot net object inside the power shell, because it's built on top of the power shell. So I can use anything which is from power show us or from from dot net. So using this new object. I can create a new object based on the object from dot net. This is the type conversion. This is the way how you converted, but if I look for this one in documentation here. So it's a standard dot net class. But I create the instance of this class inside inside the power shell. Another, you would think you can see the escape the escape sequences different here. It's not the backslash. It says opposite apostrophe no idea how to name it correctly. And you see another thing here which is this, let's say, warning or recommendation that the echo is alias. So again, you can create the aliases here. So you don't instead of writing the full name of the command lab, you can create the alias. It's not recommended. So if you will speak about the best practices. It's not recommended to use the aliases because you know the idea behind the comma command lets is that and especially the naming convention of the command lets is that if you see the name of the command let you should be able to understand what is it doing without any help, you know, you know, there is a try to make it as easy readable for the humans as possible. So the echo is not recommended one, instead of you should use the right output, because the echo is alias for right output for right output commands. If I jump back here, because you see the know how to work with the strings. So using using the strings is again quite simple. So you just use the strength and you can use the F format parameter. And again, there are some common options you have is the this formatting this formatting strings and so on. The file extension is PS one. So this is the common fire extension. The one thing which is unfortunately not working now, but I expect to change on Linux is the way how is the signing the script so what you can do. You can force some politics at least on the windows operating system. And which means that you are forcing that all scripts must be signed. So you can sign the script and the signature is on the end of the script. So if someone changed the signature change the script. The signature is not valid and then the system will not allow to run those scripts which are, which are changed. Unfortunately, this is not yet available on Linux in the current version, but I expect it will be, it will be there. Okay, so we have some few minutes left for the questions. I just a basic overview. What is the power shell? What is the idea behind the power shell are the basic principles of the power shell. In Windows world, the power shell world is the power shell, probably the most used way how to automate some administrative tasks. So all main applications and servers running on windows, they support the power shell. So with the power shell you can control different servers, different operating windows operating system and so on. And now you can use the power shell on Linux too.