I'm trying to create a "matrix / multidimensional array) inside a class function whit a loop.
Also (because I'm used to other languages) couldn't get it to work.
Is there somebody who could help me to get this working / or could explain to me what I'm doing wrong?
Class Matrix {
[int]$row
[int]$column
[int]$counter
$data
Matrix() {
Write-Host "No rows and columns provided"
}
Matrix($row, $column){
#Write-Host "row = " $row " column = " $column
$array = #(,#())
for ($i=0;$i -le $row -1 ; $i++) {
#Write-Host "This is row number " + $i
for ($j=0;$j -le $column -1 ; $j++) {
#Write-Host "This is column number " + $j
#00,01,02..10,11,12..
$array[$i][$j] = 2
}
}
$this.row = $row
$this.column = $column
$this.counter = 0
$this.data = $array
}
[void]add($adder){
if ($adder.GetType().name -eq "Matrix"){
Write-Host "You had given a matrix not a number"
}Else{
$this.counter = $this.counter + $adder
}
}
}
$matrix1 = [Matrix]::New(4,3)
$matrix1
I got it :)
for the people who are searching this , here is the code I used :
Matrix($row,$col){
$temp_array = New-Object 'object[,]' $row,$col #<<<<============
for ($i=0;$i -le $row -1 ; $i++) {
for ($j=0;$j -le $col -1 ; $j++) {
$temp_array[$i,$j] = Get-Random -Minimum 0 -Maximum 10
}
}
$this.row = $row
$this.col = $col
$this.counter = 0
$this.prosessed = 0
$this.data = $temp_array #<<<<============
}
Related
Well i want only to know what i Have to do if that what read out (includs like words like "leiter" in Verkaufsabteilungsleiter or Gesamtleitung and save in Variables like MitgliedÄndern2, $Mitgliedlesen2 , $MitgliedÄndern3 , $Mitgliedlesen3 filtered out that this things doesn't generate.
Or It finds things like Verkaufsabteilung-Inland and add there something in String.
So i think to compare two arrays are shorter If i write line for line.
if ($Abt -match "leiter") {$Standortsleitunglesen2 = $Mtl2 + "s" + "leitung" + "-" + "Lesen"}
if ($Abt -match "leiter") {$Standortsleitunglesen2 = $Mtl2 + "s" + "leitung" + "-" + "Lesen"}
if ($Standortsleitunglesen2 -match "Geschäft" ) {$Standortsleitunglesen2 = "" }
So i can set the terms in array2 and i don't need to write lots of lines and type it manualy. I hope you understand it now.
So I think my Solution goes in following direction:
$array = #($MitgliedÄndern2, $Mitgliedlesen2 , $MitgliedÄndern3 , $Mitgliedlesen3)
$array2 = "leiter" , "leitung"
for([int] $i = 0; $i -le ($array.Count -1); $i++)
{
foreach($word in $array2)
{
if($array[$i] -like "*$word*")
{
if ($array[$i] -match $MitgliedÄndern2) { ($MitgliedÄndern2 = "") }
if ($array[$i] -match $Mitgliedlesen2) { ($Mitgliedlesen2 = "") }
if ($array[$i] -match $MitgliedÄndern3) { ($MitgliedÄndern3 = "") }
if ($array[$i] -match $Mitgliedlesen3) { $Mitgliedlesen3 = ""}
$array[$i] = ""
}
}
}
I have a problem in Variables would generate Usernames of a Table of CSV.
CSV: Inhalt
Nummer;Ordner1;Ordner2;Ordner3;Benutzername;;;Beschreibung;Mitglied;Mitglied 2;Gruppenbeschreibung;Gruppenbeschreibung 2
1;Hamburg;Geschäftsleitung;HH-GL;Stefan Berti;;;Standortleiter;GG-H-Geschäftsleiter;;Geschäftsleitung Hamburg;
in array2 i would like to Words that the the loop have to search in array1.
and if he find the string of array2 for example 'leiter' or another word like "Sekretär" in $array1 in $MitgliedÄndern2, $Mitgliedlesen2 , $MitgliedÄndern3 it would be Write "" in $MitgliedÄndern2, $Mitgliedlesen2 , $MitgliedÄndern3.
I have a method that works with an easy array but that method doesn't work in that example.
I'm new in Powershell and have find lots of things out but that. I don't know.
$File=Import-Csv '.\Datenbank\Hamburg.csv' -Delimiter ";" -Encoding UTF8 | foreach-object {
$Mtl1 = ""
$Mtl2 = ""
$Mtl3 = ""
$Org1 = ""
$Org2 = ""
$Org3 = ""
$Nummer = $_.Nummer
$User = ""
$Ordner1 = $_.Ordner1
$Ordner2 = $_.Ordner2
$Ordner3 = $_.Ordner3
$Beschreibung = $_.Gruppenbeschreibung
$Beschreibung2 = $_.Gruppenbeschreibung2
if ($Ordner1 -ne '') {$Org1 = echo HH}
if ($Ordner2 -ne '') {$Org2 = $($_.'Ordner2')}
if ($Ordner3 -ne '') {$Org3 = $($_.'Ordner3')}
$Mtl1 = "$Org1"
$Mtl2 = "$Org1" + "-" + "$Org2"
$Mtl3 = "$Org1" + "-" + "$Org2" + "-" + "$Org3"
#Lesen
$Mitgliedlesen3 = ""
$Mitgliedlesen2 = ""
$MitgliedÄndern3 = ""
$MitgliedÄndern2 = ""
$Bes = $_.Beschreibung
if ($Org3 -ne '') {$Mitgliedlesen3 = $Mtl3 + "-"+ "Lesen"}
if ($Org2 -ne '') {$Mitgliedlesen2 = $Mtl2 + "-" + "Lesen"}
$MitgliedÄndern2 = "Abteilungsleiter"
$Mitgliedlesen2 = "Bundesleiter"
$MitgliedÄndern3 = "Mitarbeiter"
$Mitgliedlesen3 = "Mitarbeiterleiter"
$array = $MitgliedÄndern2, $Mitgliedlesen2 , $MitgliedÄndern3
$array2 = "leiter" , ""
have tested follow things.
#$array3 = (Compare-Object $array2 $array).InputObject
#$Array4 = $Array | where {$_ -match "leiter"}
$result = $array | Where {$array -notContains "leiter"}
#$result = $array1 | ?{$_.Split('=')[0] -in ($array2 | %{$_.Split('=')[0]})}
#$result = compare $Array $Array2 -Property Key -IncludeEqual -ExcludeDifferent -,
Passthru $result
#$Array -like "*$array2*"
#$Array4
#$array3[0..1]
#ForEach ($array in $array2){
#$array -replace "^[$i0 .. $i]$array2",""
#}
..
}
thanks for help.
I had some problems with the characters in your variables so I renamed them.
$MitgliedAndern2 = "Abteilungsleiter"
$Mitgliedlesen2 = "Bunde"
$MitgliedAndern3 = "Mitarbeiter"
$Mitgliedlesen3 = "Mitarbeiterleiter"
$array1 = #($MitgliedAndern2 , $Mitgliedlesen2 , $MitgliedAndern3 , $Mitgliedlesen3)
$array2 = "leiter" , "Sekretär"
"array1 before before script runs: $array1`r"
for([int] $i = 0; $i -le ($array1.Count -1); $i++)
{
foreach($word in $array2)
{
if($array1[$i] -like "*$word*")
{
$array1[$i] = ""
}
}
}
"`rarray1 after script run: $array1`r"
the solution is this is my groundsolution:
$MitgliedÄndern2 = "Abteilungsleiter"
$Mitgliedlesen2 = "Bundespräsident"
$MitgliedÄndern3 = "Mitarbeiter"
$Mitgliedlesen3 = "Mitarbeiterleiter"
$array = #($MitgliedÄndern2, $Mitgliedlesen2 , $MitgliedÄndern3 , $Mitgliedlesen3)
$array2 = "leiter" , "präsident"
"array1 before before script runs: $array`r"
for([int] $i = 0; $i -le ($array.Count -1); $i++)
{
foreach($word in $array2)
{
if($array[$i] -like "*$word*")
{
if ($array[$i] -match $MitgliedÄndern2) { if ($MitgliedÄndern2 -like "*$word*") {$MitgliedÄndern2 = ""}}
if ($array[$i] -match $Mitgliedlesen2) { if ($Mitgliedlesen2 -like "*$word*") {$Mitgliedlesen2 = ""} }
if ($array[$i] -match $MitgliedÄndern3) { if ($MitgliedÄndern3 -like "*$word*") {$MitgliedÄndern3 = ""} }
if ($array[$i] -match $Mitgliedlesen3) { if ($Mitgliedlesen3 -like "*$word*") {$Mitgliedlesen3 = ""} }
$array[$i] = ""
}
}
}
#$array[$i] = ""
"`rarray1 after script run: $array`r"
$MitgliedÄndern2
$Mitgliedlesen2
$MitgliedÄndern3
$Mitgliedlesen3
I would like to map an array object. I need to find the matched object of array. After the object match, I need to stop checking other objects, then continue to the next process.
I tried this, but it always return not match, even if the array object match exists.
$ID = #("8537", "8538", "8539", "8540", "85AC", "85DE", "82EA")
$Signal = #("8537", "8220")
for ($i = 0; $i -lt $Signal.count; $i++)
{
if ($Signal[$i] -like "$ID[$i]")
{
"found ‘$($Signal[$i])’
at index $i"
# Do some process
}
else {
"Not Match"
# Do some process
}
}
If you need to go Match process if exists at least 1 match object, you can try this:
$ID = #("8538", "8539", "8540", "85AC", "85DE", "82EA","8537")
$Signal = #("8537","8220","85DE")
$matched = $false
for ($i = 0; $i -lt $ID.count; $i++) {
if ($matched) {
break
}
for ($j = 0; $j -lt $Signal.count; $j++) {
if ($ID[$i] -like $Signal[$j])
{
$matched = $true
"found $($ID[$i]) at index $i"
break
}
}
}
if ($matched) {
# Do some process
} else {
"Not Match"
# Do some process
}
Something like that you should test :
cls
$ID = #("8538", "8539", "8540", "85AC", "85DE", "82EA","8537")
$Signal = #("8537","8220","85DE")
for ($i = 0; $i -lt $ID.count; $i++) {
for ($j = 0; $j -lt $Signal.count; $j++) {
if ($ID[$i] -like $Signal[$j])
{
"found $($ID[$i]) at index $i"
# Do some process
}
else
{
"Not Match"
# Do some process
}
}
}
As mentioned in my comment above - to make your example work you can use a nested loop like this:
$ID = #("8537", "8538", "8539", "8540", "85AC", "85DE", "82EA")
$Signal = #("8234", "8512", "8220")
$MatchFound = $false
for ($i = 0; $i -lt $Signal.count; $i++) {
for ($x = 0; $x -lt $ID.Count; $x++) {
if ($Signal[$i] -eq $ID[$x]) {
"found '$($Signal[$i])' at index $i"
$MatchFound = $true
}
}
}
if (-not $MatchFound) {
"No match was found"
}
If you have a complex object you want to compare you can take a look at the cmdlet Compare-Object.
I have written a script to Identify a timestamp in a logfile:
$start = Get-Content "C:\Webserverlogfiles\ise*.log" | select -first 1 -skip 6
$end -match '(([0-9][0-9]:){2}([0-9][0-9]))'
$end = $Matches[1]
$start -match '(([0-9][0-9]:){2}([0-9][0-9]))'
$start = $Matches[1]
$TimeDiff = New-TimeSpan $end $start
if ($TimeDiff.Seconds -lt 0) {
$Hrs = ($TimeDiff.Hours) + 23
$Mins = ($TimeDiff.Minutes) + 59
$Secs = ($TimeDiff.Seconds) + 59 }
else {
$Hrs = $TimeDiff.Hours
$Mins = $TimeDiff.Minutes
$Secs = $TimeDiff.Seconds }
$refreshrate = '{0:00}:{1:00}:{2:00}' -f $Hrs,$Mins,$Secs
echo $refreshrate
This returns the result I am after which is the timespan between each refresh.
Now I am trying to expand on this so it loops through the whole file. And so far my script just hangs.
$Workfrom = Get-Content "C:\Webserverlogfiles\ise*.log"
Foreach ($Line in (Get-Content $Workfrom)) {
$end = $line | Select-String 'ShowStatus = Reset Status' -SimpleMatch
$end -match '(([0-9][0-9]:){2}([0-9][0-9]))'
$end = $Matches[1]
$start = $line | Select-String 'ShowStatus = Waiting for server ()' -SimpleMatch
$start -match '(([0-9][0-9]:){2}([0-9][0-9]))'
$start = $matches[1]
$TimeDiff = New-TimeSpan $end $start
if ($TimeDiff.Seconds -lt 0) {
$Hrs = ($TimeDiff.Hours) + 23
$Mins = ($TimeDiff.Minutes) + 59
$Secs = ($TimeDiff.Seconds) + 59 }
else {
$Hrs = $TimeDiff.Hours
$Mins = $TimeDiff.Minutes
$Secs = $TimeDiff.Seconds }
$refreshrate = '{0:00}:{1:00}:{2:00}' -f $Hrs,$Mins,$Secs
echo $refreshrate
}
From what I can tell this is correct unless I have grouped too much into the ForEach loop. Can I ask what I am missing?
change
$Workfrom = Get-Content "C:\Webserverlogfiles\ise*.log"
Foreach ($Line in (Get-Content $Workfrom)
to
$Workfrom = Get-Content "C:\Webserverlogfiles\ise*.log"
Foreach ($Line in $Workfrom) {
$workfrom is already the lines of text. Otherwise, perhaps you meant Get-ChildItem in the first line?
I'm currently trying to make a function that gets all possible combinations of array values.
I have come up with a non function version but it's limited to 3 values so i'm trying to make a function out of it to become more Dynamic
I tried searching SO but could not find a powershell example of what i was trying to do, i could find a PHP version but i'm very limited in my PHP
PHP: How to get all possible combinations of 1D array?
Non-function Script
$name = 'First','Middle','Last'
$list = #()
foreach ($c1 in $name) {
foreach ($c2 in $name) {
foreach ($c3 in $name) {
if (($c1 -ne $c2) -and ($c2 -ne $c3) -and ($c3 -ne $c1))
{
$list += "$c1 $c2 $c3"
}
}
}
}
This gives me the result
First Middle Last
First Last Middle
Middle First Last
Middle Last First
Last First Middle
Last Middle First
I'm not sure how i would rearrange the values when i'm recursing the function, this is what i have so far:
<#
.Synopsis
Short description
.DESCRIPTION
Long description
.EXAMPLE
Example of how to use this cmdlet
.EXAMPLE
Another example of how to use this cmdlet
#>
function Get-Combinations
{
[CmdletBinding()]
[OutputType([int])]
Param
(
# Param1 help description
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
[string[]]$Array,
# Param1 help description
[Parameter(Mandatory=$false,
ValueFromPipelineByPropertyName=$false,
Position=1)]
[string]$Temp,
# Param1 help description
[Parameter(Mandatory=$false,
ValueFromPipelineByPropertyName=$true,
Position=2)]
[string[]]$Return
)
Begin
{
Write-Verbose "Starting Function Get-Combinations with parameters `n`n$($Array | Out-String)`n$temp`n`n$($Return | Out-String)"
If ($Temp)
{
$Return = $Temp
}
$newArray = new-object system.collections.arraylist
}
Process
{
Write-Verbose ($return | Out-String)
For($i=0; $i -lt $Array.Length; $i++)
{
#Write-Verbose $i
$Array | ForEach-Object {$newArray.Add($_)}
$newArray.RemoveAt($i)
Write-Verbose ($newArray | Out-String)
if ($newArray.Count -le 1)
{
Get-Combinations -Array $newArray -Temp $Temp -Return $Return
}
else
{
$Return = $Temp
}
}
$newArray
}
End
{
Write-Verbose "Exiting Function Get-Combinations"
}
}
$combinations = #("First","First2","Middle","Last")
$Combos = Get-Combinations -Array $combinations
$Combos
But the output i'm getting is all over the place
First2
Last
First2
Last
First
First2
Middle
Last
First
First2
Middle
Last
28/08 Update
Getting closer but still getting weird output
<#
.Synopsis
Short description
.DESCRIPTION
Long description
.EXAMPLE
Example of how to use this cmdlet
.EXAMPLE
Another example of how to use this cmdlet
#>
function Get-Combinations
{
[CmdletBinding()]
[OutputType([int])]
Param
(
# Param1 help description
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
[string[]]$Array,
# Param1 help description
[Parameter(Mandatory=$false,
ValueFromPipelineByPropertyName=$false,
Position=1)]
[string]$Temp,
# Param1 help description
[Parameter(Mandatory=$false,
ValueFromPipelineByPropertyName=$true,
Position=2)]
[string[]]$Return
)
Begin
{
Write-Verbose "Starting Function Get-Combinations with parameters `n`n$($Array | Out-String)`n$temp`n`n$($Return | Out-String)"
If ($Temp)
{
$Return += $Temp
}
#$newArray = new-object [System.Collections.ArrayList]
#$Array | ForEach-Object {$newArray.Add($_) | Out-Null}
[System.Collections.ArrayList]$newArray = $Array
}
Process
{
Write-Verbose "return -> $return"
For($i=0; $i -lt $Array.Length; $i++)
{
Write-Verbose "`$i -> $i"
$element = $newArray[0]
$newArray.RemoveAt(0)
Write-Verbose "`$newArray -> $newArray"
Write-Verbose "Element -> $element"
if ($newArray.Count -gt 0)
{
Get-Combinations -Array $newArray -Temp (($temp + " " +$element).Trim()) -Return $Return
}
else
{
$Return = $Temp + " " + $element
}
}
$return
}
End
{
Write-Verbose "Exiting Function Get-Combinations"
}
}
$combinations = #("First","First2","Middle","Last")
$return = #()
$Combos = Get-Combinations -Array $combinations -Return $return
$Combos
New output (Yes there is a space before the 'Last' value, no i have no idea why)
First First2 Middle Last
First First2 Last
First Middle Last
First Last
First2 Middle Last
First2 Last
Middle Last
Last
Here is my solution:
function Remove ($element, $list)
{
$newList = #()
$list | % { if ($_ -ne $element) { $newList += $_} }
return $newList
}
function Append ($head, $tail)
{
if ($tail.Count -eq 0)
{ return ,$head }
$result = #()
$tail | %{
$newList = ,$head
$_ | %{ $newList += $_ }
$result += ,$newList
}
return $result
}
function Permute ($list)
{
if ($list.Count -eq 0)
{ return #() }
$list | %{
$permutations = Permute (Remove $_ $list)
return Append $_ $permutations
}
}
cls
$list = "x", "y", "z", "t", "v"
$permutations = Permute $list
$permutations | %{
Write-Host ([string]::Join(", ", $_))
}
EDIT: the same in one function (Permute). This is cheating a bit, however since I replaced plain functions whith lambdas. You could replace recursive calls with a stack you handle yourself, but that would make the code unecessarily complex ...
function Permute ($list)
{
$global:remove = {
param ($element, $list)
$newList = #()
$list | % { if ($_ -ne $element) { $newList += $_} }
return $newList
}
$global:append = {
param ($head, $tail)
if ($tail.Count -eq 0)
{ return ,$head }
$result = #()
$tail | %{
$newList = ,$head
$_ | %{ $newList += $_ }
$result += ,$newList
}
return $result
}
if ($list.Count -eq 0)
{ return #() }
$list | %{
$permutations = Permute ($remove.Invoke($_, $list))
return $append.Invoke($_, $permutations)
}
}
cls
$list = "x", "y", "z", "t"
$permutations = Permute $list
$permutations | %{
Write-Host ([string]::Join(", ", $_))
}
I tried to learn something new and help you out but Im stuck. maybe this will help you get in the right direction but I dont know enough about Powershell recursion to figure this out. I converted the php to powershell and in theory it should work but it doesnt.
$array = #('Alpha', 'Beta', 'Gamma', 'Sigma')
function depth_picker([system.collections.arraylist]$arr,$temp_string, $collect)
{
if($temp_string -ne ""){$collect += $temp_string}
for($i = 0; $i -lt $arr.count;$i++)
{
[system.collections.arraylist]$arrCopy = $arr
$elem = $arrCopy[$i]
$arrCopy.removeRange($i,1)
if($arrCopy.count -gt 0){
depth_picker -arr $arrCopy -temp_string "$temp_string $elem" -collect $collect}
else{$collect += "$temp_string $elem"}
}
}
$collect = #()
depth_picker -arr $array -temp_string "" -collect $collect
$collect
It seems to work and will get you the first set of possibles:
Alpha
Alpha Beta
Alpha Beta Gamma
Alpha Beta Gamma Sigma
But for some reason that I cant figure out when it gets back to the previous functions and does $i++ then checks ($i -lt $arr.count) $arr.count it always 0 so it never goes to the next iteration to continue finding the possibilities.
Hopefully someone else can fix what I cant seem to figure out as I dont know enough about recursion. But it seems that with each level of depth called the previous depth level $arr variable and values is lost.
Here is my solution with a recursive function. It generates space separated strings but it's quite simple to split each element with $list[$i].split(" "):
function Get-Permutations
{
param ($array, $cur, $depth, $list)
$depth ++
for ($i = 0; $i -lt $array.Count; $i++)
{
$list += $cur+" "+$array[$i]
if ($depth -lt $array.Count)
{
$list = Get-Permutations $array ($cur+" "+$array[$i]) $depth $list
}
}
$list
}
$array = #("first","second","third","fourth")
$list = #()
$list = Get-Permutations $array "" 0 $list
$list
The solution posted by Micky Balladelli almost worked for me. Here is a version that does not duplicate values:
Function Get-Permutations
{
param ($array_in, $current, $depth, $array_out)
$depth++
$array_in = $array_in | select -Unique
for ($i = 0; $i -lt $array_in.Count; $i++)
{
$array_out += ($current+" "+$array_in[$i]).Trim()
if ($depth -lt $array_in.Count)
{
$array_out = Get-Permutations $array_in ($current+" "+$array_in[$i]) $depth $array_out
}
else {}
}
if(!($array_out -contains ($array_in -Join " "))) {}
for ($i = 0; $i -lt $array_out.Count; $i++)
{
$array_out[$i] = (($array_out[$i].Split(" ")) | select -Unique) -Join " "
}
$array_out | select -Unique
}
I am wondering how one would tackle looping through a collection of objects, processing the elements of that collection in groups instead of singularly, as is the case in normal Foreach loops. For example, instead of this:
$items = get-vm
foreach ($item in $items) { do something }
I would like to do this:
$items = get-vm
foreach ((5)$item in $items) {do something}
Essentially, this statement intends to say foreach 5 items in items do some work.....
Can anyone show me the proper constructs required to accomplish this?
I've got this:
$array = 1..100
$group = 10
$i = 0
do {
$array[$i..(($i+= $group) - 1)]
'*****'
}
until ($i -ge $array.count -1)
Here's a function that will collection items into chunks of a specified size:
function ChunkBy($items,[int]$size) {
$list = new-object System.Collections.ArrayList
$tmpList = new-object System.Collections.ArrayList
foreach($item in $items) {
$tmpList.Add($item) | out-null
if ($tmpList.Count -ge $size) {
$list.Add($tmpList.ToArray()) | out-null
$tmpList.Clear()
}
}
if ($tmpList.Count -gt 0) {
$list.Add($tmpList.ToArray()) | out-null
}
return $list.ToArray()
}
The usage would be something like:
ChunkBy (get-process) 10 | foreach { $_.Count }
You guys definitely gave me some great ideas for this functionality. I ended up going with the following:
#create base collection
$group = get-vm
$i = 0
do {
new-variable -Name "subgroup$i" -value $group[0..4]
++$i
$group = $group[5..$group.length]
}
while ($group.length -gt 0)
This code results in a number of subgroups, which is based on how many times the base collection is divisible by 5, which is the desired subgroup quantity in this case......
Change to Do...Until, increment counter by 5 each time.
$items = get-vm
$i = 0
do {
#STUFF
$i = $i + 5
} until ($i -ge $items.count)
(Untested, but should give you an idea)
EDIT:
Fully tested:
$items = #()
foreach ($item in (get-alias)) {
$items += $item
}
$i = 0
do {
write-host $i
$i = $i + 5
} until ($i -ge $items.count)
Output:
0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110
115 120 125 130 135
EDIT 2:
$items = #()
for($i=1; $i -le 75; $i++) {
$items += $i
}
[int]$i = 0
$outarray = #()
do {
$outarray += $items[$i]
if ((($i+1)%5) -eq 0) {
write-host $outarray
write-host ---------
$outarray = #()
}
$i = $i + 1
} until ($i -gt $items.count)