While working on an upcoming blog post, I found myself in the need to create a lot of files filled with random data. I know there are plenty tools out there that will create files, but the bulk of them create empty files – I needed them filled with a considerable amount of text data. So I did what any good PowerShell guy does – I built it myself using ideas from everyone else!
Download the function on GitHub!
Basically we are using the old “Lorem Ipsum” block of text and filling single files until it reaches about the right size. In this example, I am not really concerned about getting the EXACT size. In fact, I included a ‘Variance’ parameter to allow the size to get a bit more random – setting this will make the size of each file larger or smaller by the variance amount. Also included is a pair of parameters that handle sub-directory creation and sub-directory creation chance. At this time it will only go one layer deep, but in future releases I will allow nested subdirectories.
Here is the help text:
<# .SYNOPSIS Creates a number of auto-generated files in the spcified directories. .DESCRIPTION This function will supply any number of files approximately at the size you request. Rather than setting a file size, this function actually fills the files with text until they reach the requested size. You can control the number of files, size of files, and whether or not to create random sub-directories. .PARAMETER Path The top level path where the script will begin to create files. C:\Temp, for example .PARAMETER FileTypes The types of files to create. This parameter expects an array of values. For example: 'log','log1','log2' .PARAMETER Size Size of each individual file. This parmeter is added to, or subtracted from, by the variance parameter. This value is in MB. Exact sizes will vary, and larger file sizes will lead to larger variance. .PARAMETER Variance This parameter is added to, or subtracted from, the Size parameter to get a semi-random file size. Blocks of text are added to the files, so exact file sizes will be random within a range. .PARAMETER SubDirectories Specify if this script should create subdirectories under the directory specified by the Path parameter. Directories will have random names similar to file names, and there is a random chance of them being created (specified by the SubDirectoryCreateChance parameter) .PARAMETER Count The number of files to create under the directory specified by the Path parameter .PARAMETER SubDirectoryCreateChance The chance that a subdirectory will be created. Larger numbers here will actually make it less likely that a subdirectory is created. A number of 20 means that 1-in-20 will create a subdirectory. A number of 100 means that 1-100 will create a subdirectory. .EXAMPLE PS C:\> Create-Files -Path c:\Temp\blog -FileTypes log, log1, log2, log3, log4, log5, log6, log7, log8 -Size 3 -Count 100 .EXAMPLE PS C:\> Create-Files -Path c:\Temp\blog -FileTypes log, log1, log2, log3, log4, log5, log6, log7, log8 -Size 1 -Count 20000 -SubDirectories True -SubDirectoryCreateChance 50 .EXAMPLE PS C:\> Create-Files -Path c:\Temp\blog -FileTypes log, log1, log2, log3, log4, log5, log6, log7, log8 -Size 10 -Count 50 -Variance 4 -SubDirectories True -SubDirectoryCreateChance 10 #>
Let’s look at the examples:
Create-Files -Path c:\Temp\blog -FileTypes log, log1, log2, log3, log4, log5, log6, log7, log8 -Size 3 -Count 100
This example will create log files in the c:\temp\blog directory. It will create 100 files with a size of approximately 3MB. It will do so in only one directory.
Create-Files -Path c:\Temp\blog -FileTypes log, log1, log2, log3, log4, log5, log6, log7, log8 -Size 1 -Count 20000 -SubDirectories True -SubDirectoryCreateChance 50
This example will create log files in the c:\temp\blog directory. It will create 20,000 files with a size of around 1MB. It has a 1-in-50 chance on each file of putting it in a sub-directory.
Create-Files -Path c:\Temp\blog -FileTypes log, log1, log2, log3, log4, log5, log6, log7, log8 -Size 10 -Count 50 -Variance 4 -SubDirectories True -SubDirectoryCreateChance 10
This final example will create log files in the c:\temp\blog directory. It will create 50 files of approximately 10MB, plus or minus 4MB. It has a 1-in-10 chance of creating subdirectories.
This fun little script is up on GitHub at the link above. Feel free to leave any comments or suggestions! I am already planning to add nested sub-directories, disk space checking, and multi-threading the creation to decrease generation time.
Thanks!