Microsoft Virtualization Discussions

Powershell Lag Time

JGPSHNTAP
12,711 Views

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.

32 REPLIES 32

abhishekrana
4,700 Views

Hi Eric,

I had similar requirement, i.e i want lag time of only specific volumes, and want output directly on email.

i have modified the script but i am not able to get specific volume, can you please advice me on this.

### Mail "constants"

      $sendMailAs    = ""

       $recipients    = ""

       $subjectLine = ""

       $mailMessage = ""

       $smtpServer = ""

       $priority = "high"

### Import Data OnTap Module

    # Check toolkit version

    try

    {

        if (-Not (Get-Module DataONTAP))

        {

            Import-Module DataONTAP -EA 'STOP' -Verbose:$false

        }

        if ((Get-NaToolkitVersion).CompareTo([system.version]'1.7') -LT 0) { throw }

    }

    catch [Exception]

    {

        Write-Warning "This script requires Data ONTAP PowerShell Toolkit 1.7 or higher."

        return;

    }

### Define Lag time

$lagtimeseconds = "3600" #One hour lagtime

### Input File properties

$hostfile = "C:\Powershell Script\hosts.txt"

$accnt = ""

$filerpassw = ""

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

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

$snapMirrors = @()

gc $hostfile | % {

  $C = Connect-NaController -credential $cred $_

  $snapMirrors +=  Get-NaSnapmirror | where-object {$_.lagTime -gt $lagTimeSeconds} | Select SourceLocation ,DestinationLocation,Status,State,LagtimeTS # |  ft @{expression={$c};Label="Filer name";width=20},@{expression={$_.SourceLocation};Label="Source";Width=40},@{Expression={$_.DestinationLocation};Label="Destination";Width=40},@{expression={$_.status};Label="status";width=20},@{Expression={$_.state};Label="state";width=20},@{Expression={$_.lagtimets};label="lag time";width=20}

 

}

$dataToWrite = $snapMirrors | out-string -width 4096

 

## Send Email

Send-MailMessage -To $recipients -From $sendMailAs -Subject $subjectLine -Body $dataToWrite -Priority $priority -SmtpServer $smtpServer

exit 4

#####

JGPSHNTAP
4,700 Views

You gotta give me a little more information here....   You can query based on volume name if you want, but do all your filers that you want have the same name.

You can do something like

get-navol | ? {$_.name -like "*nameyouwant*"} | get-nasnapmirror

Or you can filter get-nasnapmirror or you can do a where-object on $_.destination ..

abhishekrana
4,700 Views

Hi,

i want output only from destination filer and there is only 1 destination filer.

i want only specific volumes in the list. i will try the query you have given.

Also i am facing 1 problem, in output all the volumes are not getting displayed, there are certain volumes which are not displayed.

Thanks

abhishekrana
4,700 Views

Hi,

seems its working now with below script.

still i am not able to figure out 1) in output i want name of the volume and 2) lag time in minutes.

can you please let me know how can i get this.

### Mail "constants"

      $sendMailAs    = ""

       $recipients    = ""

       $subjectLine = ""

       $mailMessage = ""

       $smtpServer = ""

       $priority = ""

### Import Data OnTap Module

    # Check toolkit version

    try

    {

        if (-Not (Get-Module DataONTAP))

        {

            Import-Module DataONTAP -EA 'STOP' -Verbose:$false

        }

        if ((Get-NaToolkitVersion).CompareTo([system.version]'1.7') -LT 0) { throw }

    }

    catch [Exception]

    {

        Write-Warning "This script requires Data ONTAP PowerShell Toolkit 1.7 or higher."

        return;

    }

### Define Lag time

$lagtimeseconds = "3600" #One hour lagtime

### Input File properties

$hostfile = "C:\Powershell Script\hosts.txt"

$accnt = ""

$filerpassw = ""

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

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

$snapMirrors = @()

gc $hostfile | % {

  $C = Connect-NaController -credential $cred $_

  $snapMirrors +=   Get-NaSnapmirror | where-object {$_.destination -like "name"} | Select SourceLocation,DestinationLocation,Status,LagtimeTS  |  ft -AutoSize @{expression={$_.SourceLocation};Label="Source";Width=40},@{Expression={$_.DestinationLocation};Label="Destination";Width=40},@{expression={$_.status};Label="status";width=20},@{Expression={$_.lagtimets};label="lag time";width=20}

 

}

$dataToWrite = $snapMirrors | out-string -Width 4096

#$dataToWrite | sc $outfile

 

## Send Email

Send-MailMessage -To $recipients -From $sendMailAs -Subject $subjectLine -Body $dataToWrite -Priority $priority -SmtpServer $smtpServer

exit 4

#####

JGPSHNTAP
4,700 Views

Well you can use the below.. This is what i use as of today

gc $hostfile | % {

    $C = Connect-NaController  $_

    $snapMirrors = Get-NaSnapmirror | Where-Object {$_.lagTime -gt $lagtimeseconds}

    if ($snapMirrors -ne $null)

    {

     $snapMirrors | ft @{expression={$C};Label="Filer";Width=10},@{expression={$_.sourcelocation};Label="Source";Width=20}`

    ,@{expression={$_.destinationlocation};Label="Destination Location";Width=20},@{expression={$_.state};Label="Current State";Width=20}`

    ,@{N='Current Lag Time';E={'{0} days, {1} hrs, {2} mins, {3} secs' -f $_.LagTimeTS.days, $_.LagTimeTS.Hours, $_.LagTimeTS.Minutes, $_.LagTimeTS.Seconds}}`

    ,@{expression={ConvertTo-FormattedNumber $_.transferprogress DataSize "0.0"};Label="Current Progress";Width=20}`

    ,@{expression={ConvertTo-FormattedNumber $_.lasttransfersize Datasize "0.0"};Label="Last Transfer size";Width=20} -autosize `

    |  Out-String -Width 4096 | Out-File $totaloutfile -append

}

}

abhishekrana
4,700 Views

Script you mentioned is not working.

i am using below script and its working fine though i need some modification in it.

1) i am able to filter 1 volume using query but i want to filter list of volumes which are mentioned in file.

2) lag time should be only in minutes.

3) i want name of volume in output which is not happening.

$snapMirrors = @()

gc $hostfile | % {

  $C = Connect-NaController -credential $cred $_

    $snapMirrors +=   Get-NaSnapmirror | where-object {$_.destination -like } | Select VOLNAME,DestinationLocation,Status,LagtimeTS  |  ft -AutoSize @{expression={$_.VOLNAME};Label="Volume";Width=40},@{Expression={$_.DestinationLocation};Label="Destination";Width=40},@{expression={$_.status};Label="status";width=20},@{expression={$_.lagtimets};Label="lagtime";width=20}

}

Thanks in advance.

JGPSHNTAP
4,700 Views

Ok, I didn't post the entire script, just a snippet... 

What I posted is exactly what your looking for...

abhishekrana
4,242 Views

I am new to scripting so if you can post entire script it would be great.

JGPSHNTAP
4,700 Views

Clinton,

I've been playing along with Add-nacredential.  Seems pretty cool.  Currently, the set of filers that i'm thinking about are not in the domain so that's why I am using -cred root.    I assume if I add the credentials to each filer on the local cache I need to use -systemscope especially if I am going to schedule the job as Local system in task manager.    The only bothering thing is that we need to update this when the root password changes.. Ugg..

Oh well, thx for the continued tips..

JGPSHNTAP
4,700 Views

I've adjusted the log file.  I didn't quite like using sc $outfile to xls. 

added out-string -width 4096 | out-file $outfile.

I had to use out-string b/c my volumes kept getting truncated b/c they were too long.  I had to change the default behavior of the display window.  Just make sure you adjust $ext to $ext = ".log"

steve4
4,242 Views

Is it possible to add threshold logic and also e-mail if over a threshold.  i.e.: send the daily report of all SV relationships to a general distro list, and ALSO send an "alert" e-mail to a NOC if LAG is over a defined threshold?

Thanks!

Steve

JGPSHNTAP
3,310 Views

Wow - this thread is old... And how i've progressed in such a year...

Anything's possible.. that's sort of what we do

Public