Subscribe

Powershell Lag Time

So, i'm new to the whole powershell on Netapp, but I'm looking for a way to query a bunch of filers and report on snapmirror lag time.    I'm a Vbscript guy, so go easy on me as im just starting to learn powershell.

Re: Powershell Lag Time

Shouldn't be difficult.  You can get a flavor of this by connecting to a controller (Connect-NaController) and listing the snapmirror relationships:

PS C:\> Get-NaSnapmirror | ft -AutoSize

Source          Destination                         Status State         LagTimeTS

------          -----------                         ------ -----         ---------

dunn:vol2       benson:dunn_vol2_mirror             idle   source        13:05:57

dunn:testvol3   benson:testvol3                     idle   source     188.07:48:27

benson:testvol3 dunn:testvol3                       idle   broken-off 188.06:48:25

dunn:AS_5_12_1  fas2050b:AS_5_12_1_NODELETE         idle   source     434.02:47:27

dunn:SC_3_3_0   fas2050b:SnapCreator_3_3_0_NODELETE idle   source     434.02:47:00

Then it's just a matter of looping through multiple controllers and formatting the output however you want.  The LagTimeTS field is a .NET TimeSpan object, so it's easy to convert that to different units.

Re: Powershell Lag Time

Clinton

Thanks for the quick response.. I am a poweshell newbie, so i'm just kickin around the tires on this. I have reviewed the "getting started document and plan on reviewing your latest document "Making the most out of powershell"

The goal of the script would be to loop through a set of determined filers and anything over lets' say 50hours lag time be emailed to us.  The issue is that the environment i'm thinking about is has 3800+ daily snapsmirrors and snapvaults.  Right now we don't have a good way to determine where the issue is. 

Re: Powershell Lag Time

That sounds like a great application for a PowerShell script.  You might also review a few other links that may be relevant:

https://communities.netapp.com/docs/DOC-6293

https://communities.netapp.com/docs/DOC-6196

http://www.searchmarked.com/windows/how-to-send-an-email-using-a-windows-powershell-script.php

http://blog.usepowershell.com/2009/03/how-to-send-e-mail-from-powershell/

Once you get the script working, I'd invite you to post it here in the Documents section.

Re: Powershell Lag Time

Clinton,

Thanks for the linkage... Seems like I got LOTS of reading in order.. I will start to review it.  If I get to the point where the script is working 100%, I will definetly post it.  I will post back if i get stuck..

Re: Powershell Lag Time

I've written a similar type of script and I want the LagTimeTS to be presented as actual hours:minutes:seconds and not 118.07:23:01. You wrote that "The LagTimeTS field is a .NET TimeSpan object, so it's easy to convert that to different units." I've done a bit of googeling, but I can't figure out how I can convert it. I'm new to powershell, so some pointers to how to do this would be really nice.

Re: Powershell Lag Time

fmc - you want to share what you already have?

Re: Powershell Lag Time

Sure... I'm not very good at powershell, but this works for me. Although there are probably better ways of doing it.

We got multiple filers with different user/pass so I made one of these for each filer. I don't know ho to use the foreach cmdlet when I have to deal with multiple filers, user and password.

# Import the proper powershell module

Import-module DataONTAP.psd1

# Set your alert time here, this is in seconds. Lagtime higher than 24 hrs 

$LagTimeSeconds = "86400"

# Set your root password

$filerpassw = "p@ssword"

Set your Filer IP or FQDN

$filername1 = "netapp.example.com"

#SMTP server

$PSEmailServer = "smtp.example.com"

#Mail body array

$body = @()

################# FILER1 #################

# Create an encrypted string which the API will use — Change password below

$password = ConvertTo-SecureString $filerpassw -AsPlainText –Force

# Create a credential object in powershell against the root user – Change root user if you use a different admin user

$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "root",$password

# Connect to the Filer using the credential created above – You can change the FQDN or IP below

$connection =  Connect-NaController $filername1 -Credential $cred

$body += Get-NaSnapmirror | where-object {$_.LagTime -gt $LagTimeSeconds}

$body = $body | out-string

send-mailmessage -to "User01 <user1@example.com>" -from "User02 <user2@example.com>" -subject "Snapmirror status" -body "$body"

Re: Powershell Lag Time

Yeah, i'm just getting rockin with it as well.. I will kick the tires on your script as well. 

Re: Powershell Lag Time

"118.07:23:01" is days.hours:minutes:seconds, which isn't much different.

You can use the various TimeSpan properties to get whatever you want:

PS C:\> $ts = (Get-NaSnapmirror -Location dunn:AS_5_12_1).LagTimeTS

PS C:\> $ts

Days              : 450

Hours             : 20

Minutes           : 26

Seconds           : 29

Milliseconds      : 0

Ticks             : 389535890000000

TotalDays         : 450.851724537037

TotalHours        : 10820.4413888889

TotalMinutes      : 649226.483333333

TotalSeconds      : 38953589

TotalMilliseconds : 38953589000

PS C:\> $ts.ToString()

450.20:26:29


PS C:\> ([int] $ts.TotalHours).ToString() + ":" + $ts.Minutes + ":" + $ts.Seconds

10820:26:29

http://msdn.microsoft.com/en-us/library/system.timespan.aspx