0. Einleitung
         Beispiel 1a: Erzeugung eines Arrays aus alphanumerischen Zufallstrings
         Beispiel 1b: Erzeugen eines Testarrays mit vorgegebenen Zufallswerten
         Beispiel 2: Erzeugen einiger Beispieldateien
 

0 Einleitung

Um etwas Testmaterial zur Verfügung zu haben, benutze ich zur Erzeugung eines Arrays mit zufälligen Strings eine Funktion aus dem Kapitel Die Variablen  -> 1.1.2 explizite Typzuweisung -> Beispiel 3. Die Funktion ist dort auch näher erklärt

 

Beispiel 1a: Erzeugung eines Arrays aus alphanumerischen Zufallstrings

Set-StrictMode -Version "2.0"
Clear-Host  

Function Main{
  $Out=@()
  $LinesCount = 200

  for ($Line=0;$Line-lt $LinesCount;$Line++){
  $Value = New-AlphanumericRandom -Digits 80 -NumberOfLines 1 -Flags 11111 -DefinedString "Error:4711"
  $Out += $value
  }
  $Out
}#End Function Main
 
Function New-AlphanumericRandom{
  <#
  .Synopsis
  Generiert zufällige alphanumerische Strings

  .PARAMETER Digits
  Länge des zurückgegebenen Strings

  .PARAMETER NumberOfLines
  Anzahl der Zeilenumbrüche = Anzahl Zeilen
 
  .PARAMETER DefinedString
  Dieser String soll im Zufallsstring auftauchen

  .PARAMETER Flags
  Flag 0: 11110 keine Kleinbuchstaben werden im zurückgegebenen String enthalten sein
  Flag 1: 11101 keine Großbuchstaben werden im zurückgegebenen String enthalten sein
  Flag 2: 11011 keine Zahlen werden im zurückgegebenen String enthalten sein
  Flag 3: 10111 keine Leerzeichen werden im zurückgegebenen String enthalten sein
  Flag 4: 01111 kein fester String wird im zurückgegebenen String enthalten sein
  Flag 5: 11111 kein Zeilenumbruch werden im zurückgegebenen String enthalten sein  

  #>
   Param([int]$Digits=20,[string]$Flags='00111',$NumberOfLines = 2,$DefinedString)
   $RandomPool=$null

   $Flags=[Convert]::ToInt32($Flags, 2) #Konvertierung als Binärwert
   
   $MinLower=[Int][Char]'a' #97
   $MaxLower=[Int][Char]'z' #122

   $MinUpper=[Int][Char]'A'  #65
   $MaxUpper=[Int][Char]'Z'  #90

   $MinNumber=[Int][Char]'0' #48
   $MaxNumber=[Int][Char]'9' #57

   $Space =[Int][Char]' ' #32

   if($Flags -band 1){
     $RandomPool=[Char[]]($MinLower..$MaxLower)
   }
 
   if($Flags -band 2){
     $RandomPool+=[Char[]]($MinUpper..$MaxUpper)
   }
 
   if($Flags -band 4){
     $RandomPool+=[Char[]]($MinNumber..$MaxNumber)
     }

    
   if($Flags -band 8){
     for($i=1;$i -le 3;$i++){
       $RandomPool +=$DefinedString
     }
   }

   if($Flags -band 16){
      for($i=1;$i -lt $NumberOfLines;$i++){
       $RandomPool +=[Environment]::NewLine
       }
    }
   
   #Spacecharacter
   if($Flags -band 8){
     for($i=1;$i -le 10;$i++){
       $RandomPool +=" "
     } #for
   }
   
   #Output Field Separator siehe "Die Variablen" -> "2.1 PreferenceVariables"
   $ofs = ''

  [string](Get-Random -input $RandomPool -count $digits)
}#Function Ende

Main
#mögliche Ausgabe

jn1bKarlA KarlervPDBVs0WMNxkgdIc 67USKXf824QYGNapfwRmtT olhuCJpqF9KarlNapfH5aLEi yO3NapfZz
oeHBKarlY u 5r aKarlNapfx8WANapfFml9VyPcbMX1UKarlsDg7Qp O4iS3LtENapfKvkIG62zCfR0qndhJjTZwN
GIpKLj3nKarlPocQf08WNapf BlkNKarlV TqNapfSHe2gaYJz DNapfF6CsXAROhwKarl14uimbvy7U9E5rt MZxd
sWtdiNyBZVSx4GaMhmHC9gb2YKarlTu5LKarl6R 0XNapfJ 7K Napfn QNapfDKarleE3AcIFjvk8q1wUOlofpPzr
NapfWsjkMKarlQqDNapfTNZ3r HGJgobRAwm FKarlyL4dxlNapfpP8iaKarl EVUz0fnOScKt6X1uY97B h25eICv

 Kap_0 Beispiel_1a RandomString.ps1.txt

 CreateRandomString.zip damit könnt ihr Textdateien auch über eine GUI erzeugen

 

Beispiel 1b: Schnelles Erzeugen eines Testarrays

Set-StrictMode -Version "2.0"
Clear-Host
 
$Lines=@()
$Lines+="jn1bKarlA KarlervPDBVs0WMNxkgdIc 67USKXf824QYGNapfwRmtT olhuCJpqF9KarlNapfH5aLEi yO3NapfZz"
$Lines+="oeHBKarlY u 5r aKarlNapfx8WANapfFml9VyPcbMX1UKarlsDg7Qp O4iS3LtENapfKvkIG62zCfR0qndhJjTZwN"
$Lines[0]
$Lines[1]
#Ausgabe

jn1bKarlA KarlervPDBVs0WMNxkgdIc 67USKXf824QYGNapfwRmtT olhuCJpqF9KarlNapfH5aLEi yO3NapfZz
oeHBKarlY u 5r aKarlNapfx8WANapfFml9VyPcbMX1UKarlsDg7Qp O4iS3LtENapfKvkIG62zCfR0qndhJjTZwN

Mit diesen beiden Elementen des Arrays $Lines will ich in diesem Kapitel arbeiten

 

Beispiel 2: Erzeugen einiger Beispieldateien

Das folgende Skript erzeugt mehrere Texdateien unter "C:\temp\" mit 100, 1000, 10000 und mehr Zeilen aus zufällig Strings. Gelegentlich kommen die beiden Suchstring " Error: 220 " und " Error: 250 " vor.
Das Skript basiert auf der gleichen Grundlage wie Beispiel 1a.

###########################################################
Version 1.0.1
###########################################################
 
Set-StrictMode -Version "2.0"
Clear-Host

Function Get-AlphaNumericRandom{
   Param($Digits=8,
         [String]$Flag='111',
         $SpaceFrequency=4,
         [Boolean]$LineFeed=$False)

   $RandomPool=$null
   $Flag=[Convert]::ToInt32($Flag, 2)

   $MinLower=[int][char]'a' #97
   $MaxLower=[int][char]'z' #122
   $MinUpper=[int][char]'A'  #65
   $MaxUpper=[int][char]'Z'  #90
   $MinNumber=[int][char]'0' #48
   $MaxNumber=[int][char]'9' #57
   $Space =[int][char]' ' #32

   if($Flag -band 1){
     $RandomPool=[char[]]($MinLower..$MaxLower)
   }
   if($Flag -band 2){
     $RandomPool+=[char[]]($MinUpper..$MaxUpper)
   }
   if($Flag -band 4){
     $RandomPool+=[char[]]($MinNumber..$MaxNumber)
     }
   if($Flag -band 8){
     for($i=1;$i -le $spaceFrequency;$i++){
       $RandomPool +=" "
     } #for
   }
     #Benutzerdefinierte zusätzliche Zeichenketten
   for($i=1;$i -le 1;$i++){
       $RandomPool +=" ErrorID:220 "
       $RandomPool +=" ErrorID:225 "
       $RandomPool +=" ErrorID:250 "
   }
   for($i=1;$i -le 2;$i++){
       #if($LineBreak){$RandomPool +="`n"} #Zeilenumbruch
       if($LineFeed){$RandomPool +=[Environment]::NewLine}
     }

  $Ofs = ''

  [String](Get-Random -input $RandomPool -count $Digits)
}#Function Ende


Function BigFile{
   Param(
       $Extension="txt",
       $NumberFiles=1,
       $NumberLines=150,
       $FileName="Big",
       $Path = "C:\temp"
       )
       New-Item -type "File" -path "$Path" -name "$FileName.$Extension" -force
       Out-File -filepath "$Path\$FileName.$Extension" -append -inputobject $(Get-Date) -width 80
         for($j=1;$j -le $NumberLines; $j++){
            $Text=Get-AlphaNumericRandom -digits 80 -flag 1111 -SpaceFrequency 7 -Linefeed $False
            $Text=$(get-date -format g)+ "   "+$Text
             Out-File -filepath "$Path\$FileName.$Extension" -append -inputobject $Text -width 80 -encoding Unicode
       } #for j
     }
 
BigFile  -NumberLines 150 -Filename Big150 -Path "C:\temp"   #ca. 25  Kb - Datei
#BigFile -NumberLines 1500 -Filename Big1500        #ca. 255 Kb - Datei
#BigFile  -NumberLines 15000 -Filename Big15000      #ca. 2,5 Mb - Datei
#BigFile -NumberLines 150000 -Filename Big150000    #ca. 25  Mb - Datei
#BigFile -NumberLines 1000000 -Filename Big1000000  #ca. 200  Mb - Datei

 Kap_0 Beispiel 2 CreateBigTextFiles.ps1.txt

 

Beispiel 3: Umgang mit Arrays

In vielen der folgenden Beispiele benutze ich Arrays zum Speichern von Zeilen und Inhalten.

Bei Bedarf ist es sicher lohnenswert sich in dieses Thema einzulesen:

Interessant ist beispielsweise die Methode Clear der Klasse [System.Array], um ein oder mehrere Elemente eines Arrays zu entfernen

Clear-host

$Array = @("2","3","5","6")
$Position = 1
$Count = 2

[System.Array]::Clear($Array,$Position,$Count)
$Array
#Ausgabe

2
6

MSDN: Array.Clear-Methode