NetApp Community Update
This site will enter Read Only mode on July 23 as we prepare to move to a new platform. You will still be able to view content, but posting and replying will be temporarily disabled.
We're excited to launch our new Community experience on July 30 and more information will follow soon.
Stay connected during the transition - Join our Discord community today.

Microsoft Virtualization Discussions

get-nasnapmirror question

kurt_westenhoefer
6,060 Views

I am trying to create a script that will list the snapmirror status for my filers and send the results to me in an e-mail.  When I type get-nasnapmirror FILERNAME it just brings me right back to the command prompt with no data returned.  I have also tried get-nasnapmirror FILERNAME:volume

If I type get-nasnapmirror by itself I get the result of a filer, but not the one I am trying to get.  I am not sure how or why it is going to that particular filer.

What am I doing wrong?

1 ACCEPTED SOLUTION

cknight
6,060 Views

Hello, Kurt.  When you issue Connect-NaController, the resulting connection is cached in $global:CurrentNaController, and this value is used by all subsequent Toolkit cmdlet invocations unless you specifically provide the target using the -Controller parameter.

So to get Snapmirror relationships on a single controller, try:

Connect-NaController <controllerName>

Get-NaSnapmirror

To get Snapmirror relationships on a different controller, or in a loop context, try this:

$controller = Connect-NaController <controllerName>

Get-NaSnapmirror -Controller $controller

To get a specific relationship:


Get-NaSnapmirror -Location <sourceOrDestinationName> -Controller (Connect-NaController <controllerName>)

In this last case, the -Location parameter is just a string that matches the values returned by Get-NaSnapmirror or the values in /etc/snapmirror.conf.  Don't forget that you can use wildcards in the -Location parameter to expand your query results.  Also, nearly all Toolkit cmdlets have one or more examples in their online help, i.e. 'man Get-NaSnapmirror -Examples'.

View solution in original post

4 REPLIES 4

cknight
6,061 Views

Hello, Kurt.  When you issue Connect-NaController, the resulting connection is cached in $global:CurrentNaController, and this value is used by all subsequent Toolkit cmdlet invocations unless you specifically provide the target using the -Controller parameter.

So to get Snapmirror relationships on a single controller, try:

Connect-NaController <controllerName>

Get-NaSnapmirror

To get Snapmirror relationships on a different controller, or in a loop context, try this:

$controller = Connect-NaController <controllerName>

Get-NaSnapmirror -Controller $controller

To get a specific relationship:


Get-NaSnapmirror -Location <sourceOrDestinationName> -Controller (Connect-NaController <controllerName>)

In this last case, the -Location parameter is just a string that matches the values returned by Get-NaSnapmirror or the values in /etc/snapmirror.conf.  Don't forget that you can use wildcards in the -Location parameter to expand your query results.  Also, nearly all Toolkit cmdlets have one or more examples in their online help, i.e. 'man Get-NaSnapmirror -Examples'.

fjohn
6,060 Views

One way to work with  multiple controllers in your loop is to create a collection of naconnection objects.  There's an example here: http://communities.netapp.com/docs/DOC-6293

J

kurt_westenhoefer
6,060 Views

Here is what I have so far.  I am stuck trying to get the results of this script in the body of the e-mail I am sending at the end of the script.  I can get it to output the results to the screen, but not in the body of the email.  Can someone tell me what I am doing wrong.  I am pretty new to PS so I am assuming I am missing something obvious.  I tried using Write-Output in the loop, but I couldn't get that to work either.

Import-Module DataONTAP

Connect-NAController netapp03

$sm = Get-NaSnapmirror

$SMTPSRV = "server.domain.com"

$EmailFrom = [email protected]

$EmailTo = [email protected]

foreach($sm in $sm) {

Write-Host $sm.SourceLocation "-->" $sm.DestinationLocation "-->" $sm.LagTime "-->" $sm.State "-->" $sm.Status

}

Send-MailMessage -To $EmailTo -Subject "Snapmirror Status" -Body "blahblahblah" -From $EmailFrom -SmtpServer $SMTPSRV

wedge1212
6,060 Views

if your foreach loop you just need to add the results to a variable instead of doing a write-host.  Then reference that new variable as the body in the send-mailmessage command. For example:

foreach ($item in $collection) {

     $a += $item

}

Send-MailMessage -To $EmailTo -Subject "Snapmirror Status" -Body $a -From $EmailFrom -SmtpServer $SMTPSRV

that would get the job done but you can probably do a little bit more to format the information to make it more readable.

Public