Microsoft Virtualization Discussions

Netapp powershell toolkit

Gemina
5,427 Views

Hi,

 

Is there a netapp powershell toolkit script to get the uptime of the filer?

 

Thanks in advance!

 

Regards,

Mark Gemina

4 REPLIES 4

mbeattie
5,404 Views

Hi Mark,

 

The uptime is based on the cluster node (assuming you are referring to cDOT). I don't think there is any CmdLet for this but you can run the SSH command and parse the output.

Here is an example:

 

Param(
   [Parameter(Mandatory=$True, HelpMessage="The hostname or IP Address of the cluster")]
   [String]$Cluster
)
#'------------------------------------------------------------------------------
#'Connect to the cluster
#'------------------------------------------------------------------------------
Import-Module DataONTAP -ErrorAction SilentlyContinue
$credentials = Get-Credential -Credential "admin"
Try{
   Connect-NcController -Name $Cluster -HTTPS -Credential $credentials -ErrorAction Stop | Out-Null
   Write-Host "Connected to cluster ""$Cluster"""
}Catch{
   Write-Warning -Message $("Failed connecting to cluster ""$Cluster"". Error " + $_.Exception.Message)
   Break;
}
#'------------------------------------------------------------------------------
#'Enumerate the uptime.
#'------------------------------------------------------------------------------
[String]$command = "system node show -fields uptime -node *"
Try{
   $output = Invoke-NcSsh -Command $command -ErrorAction Stop
   Write-Host "Executed Command`: $command"
}Catch{
   Write-Warning -Message $("Failed Executing Command`: $command. Error " + $_.Exception.Message)
   Break;
}
#'------------------------------------------------------------------------------
#'Display the SSH output.
#'------------------------------------------------------------------------------
Write-Host $output.Value
#'------------------------------------------------------------------------------
#'Add the SSH output into a hashtable.
#'------------------------------------------------------------------------------
[HashTable]$nodeUptime = @{};
[Array]$results        = $output.Value.Split("`r`n")
For($i = 3; $i -le $results.Count; $i++){
   If($results[$i] -ne "" -And $results[$i] -ne $Null){
      [Array]$elements = $results[$i].Split(" ")
      [String]$node    = $elements[0].ToString().Trim();
      [String]$uptime  = $($results[$i] -Replace($node, "")).ToString().Trim();
      If(-Not($nodeUptime.ContainsKey($node))){
         If(-Not($uptime -Match "entries were displayed")){
            $nodeUptime.Add($node, $uptime)
         }
      }
   }
}
$nodeUptime
#'------------------------------------------------------------------------------

Example output:

 

PS C:\Scripts\PowerShell\Projects\GetClusterUptime> .\GetClusterUptime.ps1 -Cluster hecklers
Connected to cluster "hecklers"
Executed Command: system node show -fields uptime -node *
node        uptime
----------- ------------
hecklers-01 9 days 08:09
hecklers-02 9 days 08:09
waldorf-01  9 days 08:09
waldorf-02  9 days 08:08
4 entries were displayed.

Name                           Value
----                           -----
hecklers-02                    9 days 08:09
waldorf-01                     9 days 08:09
hecklers-01                    9 days 08:09
waldorf-02                     9 days 08:08

Hope that helps

 

/Matt

If this post resolved your issue, help others by selecting ACCEPT AS SOLUTION or adding a KUDO.

asulliva
5,375 Views

The uptime is returned as a property using the Get-NcNode cmdlet.

 

Get-NcNode | Select Node,NodeUptimeTS

 

Note that the NodeUptimeTS object is a TimeSpan type, this means it has a fair amount of detail.  Here's what one of my nodes looks like:

 

PS C:\Users\asull> Get-NcNode | Select Node,NodeUptimeTS

Node    NodeUptimeTS
----    ------------
VICE-07 31.06:30:06 
VICE-08 31.06:50:33 

PS C:\Users\asull> (Get-NcNode VICE-07).NodeUptimeTS | Out-String


Days              : 31
Hours             : 6
Minutes           : 31
Seconds           : 31
Milliseconds      : 0
Ticks             : 27018910000000
TotalDays         : 31.2718865740741
TotalHours        : 750.525277777778
TotalMinutes      : 45031.5166666667
TotalSeconds      : 2701891
TotalMilliseconds : 2701891000

Notice that the short format is "days.hours:minutes:seconds", or you can get each of those properties from the object individually.  For examle, you could do a much more friendly output for a report doing something like this:

 

“Node Uptime: {0:dd} days, {0:hh} hours, {0:mm} minutes” -f (Get-NcNode VICE-07).NodeUptimeTS

Hope that helps.

 

Andrew

If this post resolved your issue, please help others by selecting ACCEPT AS SOLUTION or adding a KUDO.

Gemina
5,336 Views

I believe that Nc commands are for cmode. We are using 7-mode. Is there a command for 7-mode?

mbeattie
5,326 Views

Hi,

 

Sorry i just assumed you'd want the uptime for a cDOT system. Yes you are right, the *-Nc* CmdLets are for cDOT and the *-Na* CmdLets are for 7-Mode.

There is no PowerShell CmdLet for the uptime in 7-Mode but you can invoke the "uptime" command via SSH which is displayed as a string. EG:

 

Param(
   [Parameter(Mandatory=$True, HelpMessage="The hostname or IP Address of the controller")]
   [String]$Controller
)
#'------------------------------------------------------------------------------
#'Connect to the controller
#'------------------------------------------------------------------------------
Import-Module DataONTAP -ErrorAction SilentlyContinue
$credentials = Get-Credential -Credential "root"
Try{
   Connect-NaController -Name $Controller -HTTPS -Credential $credentials -ErrorAction Stop | Out-Null
   Write-Host "Connected to controller ""$Controller"""
}Catch{
   Write-Warning -Message $("Failed connecting to controller ""$Controller"". Error " + $_.Exception.Message)
   Break;
}
#'------------------------------------------------------------------------------
#'Enumerate the controller uptime.
#'------------------------------------------------------------------------------
[String]$command = "uptime"
Try{
   $output = Invoke-NaSsh -Command $command -ErrorAction Stop
   Write-Host "Executed Command`: $command"
}Catch{
   Write-Warning -Message $("Failed Executing Command`: $command. Error " + $_.Exception.Message)
   Break;
}
$output.Split(",")[0].Trim();
#'------------------------------------------------------------------------------

 

I tested it using a simulator, Example output:

 

PS C:\Scripts\PowerShell\Projects\GetControllerUptime> .\GetControllerUptime.ps1 -Controller testns01
Connected to controller "testns01"
Executed Command: uptime
6:21pm up 11 mins

/Matt

If this post resolved your issue, help others by selecting ACCEPT AS SOLUTION or adding a KUDO.
Public