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
First, I am very new to PowerShell and the toolkit.
When I use some commandlets in a shell I get blank lines for output.
such as when I put in Get-NaSystemOntapiVersion
Tried piping it to foreach and then assigning the variable I wanted, in this case MajorVersion and MinorVersion but I still get nothing
Obviously I am missing something.
Can someone explain in plain language (as opposed to powershell speak) what that might be ?
thanks!
Solved! See The Solution
1 ACCEPTED SOLUTION
migration has accepted the solution
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ahh, so the commands inside the loop don't output text, they return objects directly on the pipeline. You essentially end up with a list of controller, ontapi version, controller, ontapi version, and so on. Because you have a select statement in there and multiple types in the output, PowerShell is getting confused and doesn't know how to format the objects.
Instead, one option is to use the Select-Object cmdlet to combine the controller and Ontapi Version into a single object:
$hostnames = @("10.61.169.28", "10.61.165.227")
foreach ($hostname in $hostnames)
{
$cntlr = Connect-NaController $hostname
Get-NaSystemOntapiVersion |
select @{Name="Name";Expression={$cntlr.Name}},
@{Name="Address";Expression={$cntlr.Address}},
MajorVersion, MinorVersion
}
which outputs this:
Name | Address | MajorVersion | MinorVersion |
---- | ------- | ------------ | ------------ |
10.61.169.28 | 10.61.169.28 | 1 | 13 |
10.61.165.227 | 10.61.165.227 | 1 | 7 |
Of course this example is a bit contrived since the controller object already includes an OntapiVersion property, but it would apply similarly to any other information you gather per controller...
Hope that helps!
5 REPLIES 5
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I figured out the foreach part, but not why it would not list things without using the foreach
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Could you post an example from importing the module to the Get-NaSystemOntapi cmdlet? Something like this:
PS C:\> ipmo dataontap
PS C:\> Connect-NaController 10.61.169.28
Name Address Ontapi Version
---- ------- ------ -------
10.61.169.28 10.61.169.28 1.13 NetApp Release 8.0.1 7-Mode: Wed Jan 5 17:24:41 PST 2011
PS C:\> Get-NaSystemOntapiVersion
MajorVersion MinorVersion NodeOntapiDetails
------------ ------------ -----------------
1 13 {fas2040rre1}
Thanks!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Eric,
Here is the relevant part of the ps script
Import-module DataOnTap
$NetappList=("Controller-1","Controller-2")
$cred = "appropriate definition of $cred here"
foreach ($netapp in $NetappList) {
Connect-nacontroller -credential $cred $netapp | select Name,Address
Get-NaSystemOntapiVersion
} # End netapplist foreach
When I run these commands from the command line the output is what you show
thanks!
migration has accepted the solution
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ahh, so the commands inside the loop don't output text, they return objects directly on the pipeline. You essentially end up with a list of controller, ontapi version, controller, ontapi version, and so on. Because you have a select statement in there and multiple types in the output, PowerShell is getting confused and doesn't know how to format the objects.
Instead, one option is to use the Select-Object cmdlet to combine the controller and Ontapi Version into a single object:
$hostnames = @("10.61.169.28", "10.61.165.227")
foreach ($hostname in $hostnames)
{
$cntlr = Connect-NaController $hostname
Get-NaSystemOntapiVersion |
select @{Name="Name";Expression={$cntlr.Name}},
@{Name="Address";Expression={$cntlr.Address}},
MajorVersion, MinorVersion
}
which outputs this:
Name | Address | MajorVersion | MinorVersion |
---- | ------- | ------------ | ------------ |
10.61.169.28 | 10.61.169.28 | 1 | 13 |
10.61.165.227 | 10.61.165.227 | 1 | 7 |
Of course this example is a bit contrived since the controller object already includes an OntapiVersion property, but it would apply similarly to any other information you gather per controller...
Hope that helps!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ahhhh, I would have thought the select in the connect-nacontroller statement would have only acted on that statement, but after reading your response I see that it apparently does not. Removing it from the connect statement returns the output I would have thought I would see.
I have a long way to go to understand the PowerShell stuff!
thanks!
