Skip to main content

Creating files with powershell

powershell



There comes a time when you need to create files with powershell. Search the web and you will find many solutions. Here I am going to list a few of you options.








First one up is from the Powershell Magazine by Shay Levy:
image

It is a basic functions with some parameters for you to change the path where the file should be written and the size of the file.

Second is from another blog Nate Jones. It is a couple of lines with code for you to run:

image

Third is from Jeffery Hicks. He also use the [IO.File] .Net class to create an advanced function that also supports pipeline input. His function requires Powershell version 4:

image

Click the pictures to find the article about each solution. If you search for your self, you will see pretty much all kinds of variations around the .Net class System.IO.File. Natively in Powershell to my knowledge there is no single cmdlet that lets you create files of an predefined size. So lets dig around and see what we can find.

First we need to discuss the size. Size can be specified in bytes, kilobytes(kb), megabytes(mb), gigabytes(gb) and so on. Lucky for us powershell know about this. So if I need to know how many bytes there is in 1 megabyte, I can just ask powershell by typing the command 1mb:

image

This also works with calculus, so if I type this:

image 

Powershell will print the letter "a" 1024 times because there is 1024 bytes in 1kb. Now we can create “content” of a specific size. All we need now is to find some way of writing this to a file.

Two cmdlets come to mind: Out-File and Set-Content. There is also Add-Content, however that is for appending contents to a file.

First candidate Out-File:

image

We can se that we can create files with this function. We just need to specify a path (FilePath) and an InputObject (the value/content we want the file to have). Lets try to create a file of 10kb:

image

There, the file was created and the size was 20486 bytes. Strange that is more than 10kb, actually it is twice the size we were looking for. Notice in the help information we have a parameter called Encoding. Maybe we need to set the encoding to something, oh we can use UTF8 perhaps:

 image

That is better, pretty close to 10kb. I mentioned Set-Content cmdlet, we should give that one a go as well:

image

Well there you go, even easier to remember, no need to worry about encoding. Set-Content got it right the first time. I prefer to write it like this:

image

First I pick a size and pipe that to the Set-content cmdlet and chose the path and filename.

If speed is a requirement, you are probably best off doing file creation with the .Net class System.IO.File. Any of the functions I mentioned earlier will do that just fine. On my system, creating a 10mb file took 79ms using Set-Content cmdlet. If I use Jeffery’s function it takes about 20ms to create a file. Not a huge difference unless you want to create really huge files or may of them.

Cheers

Tore

Comments

Popular posts from this blog

Monitoring Orchestrator runbook events from Operations Manager

Today I will follow up on my colleague’s post Mr ITblog (Knut Huglen) about monitoring Orchestrator Runbook events.  He has build a nice double up SNMP loopback feature that does self monitoring in Orchestrator resulting in entries written to a special Windows Eventlog. Now we need to raise alerts in SCOM when one of his runbooks fails or sends a platform event, who knows there could be trouble lurking in his paradise.

We are not going to do anything fancy, however these are the steps we will be focusing on today:
Create a Management Pack for our customizations Create rules that collects the events from the orchestrator serverOff we go then and fire up the SCOM console and a powershell window. First we create a MP, I am going to use powershell to do this, however you may use the SCOM console as well (Administration – ManagementPacks – Action: Create Management Pack):



Import the Management Pack into SCOM and move on to the Authoring section in the SCOM console. Create a new rule:



Give the…

Powershell – Log like you mean it

How do you do logging in powershell? Why should you do logging? What should you log? Where do you put your log? How do you remove your log? How do you search your log? All important questions and how you answer then depends upon what your background is like and the preferences you have. This will be a 2 part blog post and this is part 1.


Why should you log?

Well it is not mandatory, however I have 2 reasons:
Help with debugging a script/module/functionSelf documenting script/module/function
Firstly; Do you know any program that does not contain any bugs? Working with IT for the last 2 decades, I cannot name one. When you create scripts/modules/functions, you will create bugs, that is where they live and try to make your life a living mess.

Secondly: Adding a little extra information to your logging will make them self documenting. Do you like writing documentation? Well I normally am not fond of it and use logging while debugging to get two birds with one stone.


What should you log?

Anyt…

Powershell - List information about your WIFI networks

This is just a quick post about this new function I have created. Basically this is a text-output to powershell object output function that uses netsh to query the WIFI information. This illustrates the importance of changing the authentication level on your WIFI-network. No matter if you use WEP/WPA/WPA2 your password is available in clear text in your profile.



Cheers

Tore