Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am trying to write a simple script to output the Aggregates and Volumes on my filer but the output aoppears in random order.
How can I get the information sorted?
I cut this together out of the Visio Report script.
Import-Module DataONTAP
$FASName = read-host "Enter the FQDN of your NetApp array"
If ($FASName -eq "") { Write-Host "No selection made, script now exiting." ; exit }
Connect-NaController $FASName -Credential (Get-Credential)
$allAGGR = Get-NaAggr
$allVols = Get-NaVol
$allLUNs = Get-NaLun
Foreach ($aggr in $allAGGR) {
Write-Host $aggr.Name ' ' ($aggr.sizetotal / 1gb)
Foreach ($volume in $allVols) {
If ($volume.ContainingAggregate -eq $aggr.Name) {
Write-Host ' ' $volume.name ' ' ($volume.sizetotal / 1gb)
}
}
}
$pauseit = read-host "Press Enter to exit"
8 REPLIES 8
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
create an object collection. In your for-each, append each aggregate object to your collection, say $AggCollection for instance. Then, pipe the aggregate collection throught sort-object specifying the property to sort on (Name I think in your case) with -Property
$AggCollection | sort-object -Property Name
In http://communities.netapp.com/docs/DOC-6293 I use foreach to populate an object collection with connection objects.
J
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I think you could also do something along these lines:
Foreach ($aggr in $allAGGR | sort Name) {
......
Foreach ($volume in $allVols | sort Name) {
......
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks Cole! Worked like a charm.
Sorry fjohn. Cole's solution was faster and easier. 😉
I'll try collections on otehr projects
-C
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Projects where I can spell correctly....
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Both of our responses are the same thing, John was just explaining it in more detail. Both Get-NaAggr and Get-NaVol return a collection of objects when called without the -Name parameter. My use of sort is just the short version of what John wrote. 'sort' is an alias for Sort-Object and the -Property parameter can be left off in this example. It is 'best practice' to use the more verbose version of most cmdlets (as John has done) when writing scripts and saving the short version as I have done for one-liner type scripts. That is typically easier to maintain long after the script is written. In the case of 'sort', though, I typically use the short version.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The difference is in the details.
If you "just" want to sort by aggr name, and then, all volumes inside the aggregate by volume name, then the proposed solution is fine.
If, however, you want to sort all volumes by volume name, regardless of the aggregate they are on, then you will have to create the object collection and sort by that afterwards.
-Michael
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
In powershell, you always have the option of adding properties to a collection. I demonstrated this technique in the sample to sort snapshots. It's more versitile.
J
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You can also sort the collection objects when they are created....
Your code of:
$allAGGR = Get-NaAggr
$allVols = Get-NaVol
$allLUNs = Get-NaLun
Becomes:
$allAGGR = Get-NaAggr | Sort-Object -Property Name
$allVols = Get-NaVol | Sort-Object -Property Name
$allLUNs = Get-NaLun | Sort-Object -Property Name
