Hello guys,
In a case where you have a lot of variables named like this:
- Fruit1
- Fruit2
- Fruit3
- Fruit4
I can then on my code read the values using a loop, for example:
for ($q = 1; $q -le 5; $q++) {
$CurrentValue = (Get-Variable ('Fruit' + $q)).value
}
And that's great and works perfectly.
Now, the problem is I have an array and the elements are named like this (the one I use is actually way bigger):
$Array.fruit1
$Array.Vegetable1
$Array.Drink1
$Array.fruit2
$Array.Vegetable2
$Array.Drink2
I want to be able to read the elements using the same concept, with a loop:
for ($q = 1; $q -le 3; $q++) {
$CurrentFruit = (Get-Variable ('$Array.fruit' + $q)).value
$CurrentVegetable = (Get-Variable ('$Array.vegetable' + $q)).value
$CurrentDrink = (Get-Variable ('$Array.drink' + $q)).value
}
Does any of you know a command or a way to accomplish that?
Something like get-variable for array elements
Forum rules
Do not post any licensing information in this forum.
Any code longer than three lines should be added as code using the 'Select Code' dropdown menu or attached as a file.
Do not post any licensing information in this forum.
Any code longer than three lines should be added as code using the 'Select Code' dropdown menu or attached as a file.
Re: Something like get-variable for array elements
Well, the original object is a PSCustomObject, but doing something as simple as $test = @($Array)
Now yes, I have an array that have the same problem.
The point is if there is a way to do what I'm trying to accomplish, with either of those two type of objects?
Now yes, I have an array that have the same problem.
The point is if there is a way to do what I'm trying to accomplish, with either of those two type of objects?
Re: Something like get-variable for array elements
So you have a custom object. The properties of custom objects do not have numbers.
To enumerate an array of objects just use a loop.
YOur examples do not really make much sense and the first example is not possible as posted. I suspect that you have posted something wrong.
The first step to working with PowerShell is to learn the basics. You cannot guess at this and you cannot learn by copying what you see on teh Internet.
Her4e is a good book that is free and will teach you basic PowerShell and basic coding.
https://www.sapien.com/books_training/W ... werShell-4
To enumerate an array of objects just use a loop.
YOur examples do not really make much sense and the first example is not possible as posted. I suspect that you have posted something wrong.
The first step to working with PowerShell is to learn the basics. You cannot guess at this and you cannot learn by copying what you see on teh Internet.
Her4e is a good book that is free and will teach you basic PowerShell and basic coding.
https://www.sapien.com/books_training/W ... werShell-4
Re: Something like get-variable for array elements
What you mean that the first example is not possible?
If I have a variable called Fruit1 and its content is "Apple", I can do this:
$fruit1 = "Apple"
$number = 1
$CurrentValue = (Get-Variable ('Fruit' + $number)).value
$CurrentValue
-> Apple
Now the content of $CurrentValue will be "Apple". Sorry, but I don't need to read any book to know that.
So, if I have 27 variables called $fruit1 ....$fruit27, I can easily create a loop to read their content.
----------
Now, on my PSCustomObject (I changed the name of the object below so you don't get confused).
As you can see those are grouped, with the last number saying which ones belong to the same group. If I need the objects belonging to group 14, then I want to be able to pass the number 14 on a variable and read the content of those ending on 14.
$PSObj.fruit1
$PSObj.Vegetable1
$PSObj.Drink1
$PSObj.fruit2
$PSObj.Vegetable2
$PSObj.Drink2
.....
.....
$PSObj.fruit27
$PSObj.Vegetable27
$PSObj.Drink27
Something like this is what I'm looking for (of course the below does not work on a PSCustomObject)
function retrievevalues {
Param (
$ObjNumber
)
$CurrentFruit = (get-variable ("PSObj.fruit" + $ObjNumber)).value
$CurrentVegetable = (get-variable ("PSObj.Vegetable" + $ObjNumber)).value
$CurrentDrink = (get-variable ("PSObj.Drink" + $ObjNumber)).value
}
If I have a variable called Fruit1 and its content is "Apple", I can do this:
$fruit1 = "Apple"
$number = 1
$CurrentValue = (Get-Variable ('Fruit' + $number)).value
$CurrentValue
-> Apple
Now the content of $CurrentValue will be "Apple". Sorry, but I don't need to read any book to know that.
So, if I have 27 variables called $fruit1 ....$fruit27, I can easily create a loop to read their content.
----------
Now, on my PSCustomObject (I changed the name of the object below so you don't get confused).
As you can see those are grouped, with the last number saying which ones belong to the same group. If I need the objects belonging to group 14, then I want to be able to pass the number 14 on a variable and read the content of those ending on 14.
$PSObj.fruit1
$PSObj.Vegetable1
$PSObj.Drink1
$PSObj.fruit2
$PSObj.Vegetable2
$PSObj.Drink2
.....
.....
$PSObj.fruit27
$PSObj.Vegetable27
$PSObj.Drink27
Something like this is what I'm looking for (of course the below does not work on a PSCustomObject)
function retrievevalues {
Param (
$ObjNumber
)
$CurrentFruit = (get-variable ("PSObj.fruit" + $ObjNumber)).value
$CurrentVegetable = (get-variable ("PSObj.Vegetable" + $ObjNumber)).value
$CurrentDrink = (get-variable ("PSObj.Drink" + $ObjNumber)).value
}
Re: Something like get-variable for array elements
Yes, the basic idea is correct but the objects don't work like that. You need to learn about objects and object collections. Your question is because you don't understand this and PowerShell is an object system. It can formally be called an Object Oriented Programming System designed to implement the concept of "automation". The base of PowerShell is clearly named System.Management.Automation which is what PowerShell is built on. This is a Net object system. First you must learn about objects and how they work and how PowerShell uses them.
As it stands it is hard to know what you are asking. Your thinking has conflated arrays and old VB array methods with objects and object collections.
Here is an example of how to see what I am pointing you at.
As it stands it is hard to know what you are asking. Your thinking has conflated arrays and old VB array methods with objects and object collections.
Here is an example of how to see what I am pointing you at.
Code: Select all
$array = Get-Service | Select ServiceName,ServiceType
$array.GetType().Name
$array[1].GetType().Name
$array | ForEach-Object{$_.ServiceName}
- Attachments
-
- Annotation 2020-08-28 122337.png (20.39 KiB) Viewed 21047 times
Re: Something like get-variable for array elements
Again - the problem is unclear. Please explain in plain English what the problem is that you are trying to solve.
To extract a specific element of a collection by value you need to use a "Where-Object" command. FOr details on how to use the command see the help. The examples will show you how to do this in various ways.
help where-object -online
$array | Where-Object{ $_.Name -eq 'Apple1'}
To understand how to do this and why it works you need to learn basic objects and how to use PowerShell to access and manipulate objects.
To extract a specific element of a collection by value you need to use a "Where-Object" command. FOr details on how to use the command see the help. The examples will show you how to do this in various ways.
help where-object -online
$array | Where-Object{ $_.Name -eq 'Apple1'}
To understand how to do this and why it works you need to learn basic objects and how to use PowerShell to access and manipulate objects.
Re: Something like get-variable for array elements
I guess I found a way to do it, probably not the best but it looks like it works (needs to test it in production).
I have a PSCustomObject with these values (again, on production is way bigger):
$test.role1 = R1
$test.DataC1 = DC1
$test.ASize1 = AS1
$test.role2 = R2
$test.DataC2 = DC2
$test.ASize2 = AS2
$test.role3 = R3
$test.DataC3 = DC3
$test.ASize3 = AS3
And I'm able to retrieve the group of objects I need using this function.
Again, it might not be the best option (probably it can be optimized), but works for what I need.
I have a PSCustomObject with these values (again, on production is way bigger):
$test.role1 = R1
$test.DataC1 = DC1
$test.ASize1 = AS1
$test.role2 = R2
$test.DataC2 = DC2
$test.ASize2 = AS2
$test.role3 = R3
$test.DataC3 = DC3
$test.ASize3 = AS3
And I'm able to retrieve the group of objects I need using this function.
Again, it might not be the best option (probably it can be optimized), but works for what I need.
- function retrievevalues {
- Param (
- $ObjNumber
- )
- $Temprole = "role"+[string]$ObjNumber
- $Currentrole = ((get-variable "test").value).$Temprole
- $TemDataC = "DataC"+[string]$ObjNumber
- $CurrentDataC = ((get-variable "test").value).$TemDataC
- $TempASize = "ASize"+[string]$ObjNumber
- $CurrentASize = ((get-variable "test").value).$TempASize
- }
Re: Something like get-variable for array elements
jvierra, I will try one more time.
I want to read the value of an item inside a PSObject.
Of course I know how to do it. The part you don't understand is that I want to use a value stored on a variable to form the name of the object to retrieve.
So, I need to retrieve the value of the following variables $fruit1, $fruit2, $fruit3, $fruit4 I don't want to use just the name, because I need to be able to retrieve those values on a loop (it's what I need in order to reduce probably hundreds of lines of code).
So, I know I can accomplish the above with:
$counter = 1
start my loop until counter is equal 5 {
$TheValue = (Get-Variable ('fruit' + $counter)).value
$TheValue
$counter++
} finish my loop
That loop will write the value of $fruit1, $fruit2, etc
Well, I was looking to see if there was a way to do the same, but with a PSCustomObject instead of regular variable.
Where the names of the objects are something like:
$object.fruit1
$object.fruit2
$object.fruit3
$object.fruit4
I found a way, is complicated but works.
I' will stay around to see if anybody knows a better way to do it.
I want to read the value of an item inside a PSObject.
Of course I know how to do it. The part you don't understand is that I want to use a value stored on a variable to form the name of the object to retrieve.
So, I need to retrieve the value of the following variables $fruit1, $fruit2, $fruit3, $fruit4 I don't want to use just the name, because I need to be able to retrieve those values on a loop (it's what I need in order to reduce probably hundreds of lines of code).
So, I know I can accomplish the above with:
$counter = 1
start my loop until counter is equal 5 {
$TheValue = (Get-Variable ('fruit' + $counter)).value
$TheValue
$counter++
} finish my loop
That loop will write the value of $fruit1, $fruit2, etc
Well, I was looking to see if there was a way to do the same, but with a PSCustomObject instead of regular variable.
Where the names of the objects are something like:
$object.fruit1
$object.fruit2
$object.fruit3
$object.fruit4
I found a way, is complicated but works.
I' will stay around to see if anybody knows a better way to do it.
Re: Something like get-variable for array elements
The last post show how to get an object and output the value of a property of the object. That is what "to read the value of an item inside a PSObject" means when speaking about compouters, objects and programming.