<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>system32</title><link>https://system32.blog/</link><description>Recent content on system32</description><generator>Hugo -- gohugo.io</generator><lastBuildDate>Fri, 20 May 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://system32.blog/index.xml" rel="self" type="application/rss+xml"/><item><title>AD Authentication Issues 2022-05 May Patches / Mapping Certificates to AD Objects</title><link>https://system32.blog/post/adsmapcertificates/</link><pubDate>Fri, 20 May 2022 00:00:00 +0000</pubDate><guid>https://system32.blog/post/adsmapcertificates/</guid><description>
&lt;p>This article shows how to use PowerShell to address the issues that come with the new StrongCertificateBindingEnforcement security feature of Active Directory by mapping the existing/already enrolled certificates to their respective AD account (whether computer or user).&lt;/p>
&lt;p>&lt;code>Disclaimer: This content and scripts are provided free of charge and I do not take any responsability for them nor any harm they may cause, it is up to you to review and test them properly before deploying them anywhere.&lt;/code>&lt;/p>
&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;p>Many organizations were hit a bit unprepared by this months' patchday which introduces a new security feature called &amp;quot;StrongCertificateBindingEnforcement&amp;quot; that ended up breaking authentication on various important Windows roles such as Network Policy Servers (NPS) or Routing and Remote Access Service (RRAS) when authenticating via certificates.&lt;/p>
&lt;p>While Microsoft already released hotfixes to address an issue where the AD Object was not properly matched to the Certificate it uses, there are still many users facing issues.&lt;/p>
&lt;p>It is possible to disable this new behavior by setting the registry property &lt;code>HKLM\SYSTEM\CurrentControlSet\Services\Kdc\StrongCertificateBindingEnforcement&lt;/code> to &lt;code>REG_DWORD:0x00000000&lt;/code>. However this disables the security mitigations that Microsoft introduced during this patch day (for a good reason!).&lt;/p>
&lt;p>Mitigating the actual issue will require multiple steps in many environments, therefor please follow the next paragraphs.&lt;/p>
&lt;h1 id="issue-mitigation-steps">Issue Mitigation Steps&lt;/h1>
&lt;p>In this post, I will address different topics you should take into account when addressing this issue in your environment.&lt;/p>
&lt;h2 id="1-applying-the-hotfixes">1. Applying the Hotfixes&lt;/h2>
&lt;p>First off, apply the hotfixes Microsoft released on 2022/05/20 to make sure that you're not walking into the previously introduced bug.&lt;/p>
&lt;p>As for the modern operating systems, all you need is to install the following cumulative updates depending on the OS (installation of the previous 2022-05 updates is not required):&lt;/p>
&lt;ul>
&lt;li>Windows Server 2022: &lt;a href="https://support.microsoft.com/help/5015013">​KB5015013&lt;/a>&lt;/li>
&lt;li>Windows Server version 20H2: ​&lt;a href="https://support.microsoft.com/help/5015020">KB5015020&lt;/a>&lt;/li>
&lt;li>Windows Server 2019: &lt;a href="https://support.microsoft.com/help/5015018">KB5015018&lt;/a>&lt;/li>
&lt;li>Windows Server 2016: ​&lt;a href="https://support.microsoft.com/help/5015019">KB5015019&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>On the older OSes which do not follow the modern update pattern with cumulative updates, you will first have to update your OS before applying one of the following hotfixes:&lt;/p>
&lt;ul>
&lt;li>Windows Server 2012 R2: &lt;a href="https://support.microsoft.com/help/5014986">KB5014986&lt;/a>&lt;/li>
&lt;li>Windows Server 2012: &lt;a href="https://support.microsoft.com/help/5014991">KB5014991&lt;/a>&lt;/li>
&lt;li>Windows Server 2008 R2 SP1: &lt;a href="https://support.microsoft.com/help/5014987">KB5014987&lt;/a>&lt;/li>
&lt;li>Windows Server 2008 SP2: &lt;a href="https://support.microsoft.com/help/5014990">KB5014990&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="2-adding-userprincipalname-to-the-certificate-templates">2. Adding userPrincipalName to the Certificate Templates&lt;/h2>
&lt;p>While this is not mentioned in any of the official support articles, you will need to make sure that the Certificate Template your clients are using does include the userPrincipalName (UPN) in the Subject Alternative Name (SAN) as shown on this screenshot:&lt;/p>
&lt;p>&lt;img src="templatesubject.png" alt="Template">&lt;/p>
&lt;h2 id="3-updating-adcs-and-re-enrolling-certificates">3. Updating ADCS and re-enrolling Certificates&lt;/h2>
&lt;p>After applying the 2022-05 Cumulative Updates to your Enterprise Issuing CAs, you will see that each enrolled certificate has a new property with the OID &lt;code>1.3.6.1.4.1.311.25.2&lt;/code> under &amp;quot;Details&amp;quot;. This new property holds the SID of the AD account that enrolled it.
To map existing certificates, please see the next paragraph.&lt;/p>
&lt;p>&lt;img src="oid.png" alt="Template">&lt;/p>
&lt;h1 id="mapping-existing-certificates-to-their-ad-object">Mapping existing certificates to their AD Object&lt;/h1>
&lt;p>&lt;code>Hint: For this to work, your Templates already need to include the UserPrincipalName as described above&lt;/code>&lt;/p>
&lt;h2 id="background-information">Background Information&lt;/h2>
&lt;p>To avoid having to wait for all clients to re-enroll their certificate, you can map them to the AD Objects manually, however this is a lot of manual effort.&lt;/p>
&lt;p>Mapping certificates is archived by adding an certain identifiers of the previously issued certificates to the &lt;code>altSecurityIdentities&lt;/code> attribute of the AD Object. This identifier can be built using the following ways, some of them are not explicitly unique to the certificate and should therefor be avoided.&lt;/p>
&lt;p>The recommended way to map it is using the certificate serial number in conjunction with the CA Name for example &lt;code>X509:&amp;lt;I&amp;gt;DC=com,DC=contoso,CN=CONTOSO-DC-CA&amp;lt;SR&amp;gt;1200000000AC11000000002B&lt;/code>.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Mapping&lt;/th>
&lt;th>Example&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Remarks&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>X509IssuerSubject&lt;/td>
&lt;td>&amp;quot;X509:&amp;lt;I&amp;gt;IssuerName&amp;lt;S&amp;gt;SubjectName&amp;quot;&lt;/td>
&lt;td>Weak&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>X509SubjectOnly&lt;/td>
&lt;td>&amp;quot;X509:&amp;lt;S&amp;gt;SubjectName&amp;quot;&lt;/td>
&lt;td>Weak&lt;/td>
&lt;td>Text&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>X509RFC822&lt;/td>
&lt;td>&amp;quot;X509:&amp;lt;RFC822&amp;gt;user@contoso.com&amp;quot;&lt;/td>
&lt;td>Weak&lt;/td>
&lt;td>EmailAddress&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>X509IssuerSerialNumber&lt;/td>
&lt;td>&amp;quot;X509:&amp;lt;I&amp;gt;IssuerName&amp;lt;SR&amp;gt;1234567890&amp;quot;&lt;/td>
&lt;td>Strong&lt;/td>
&lt;td>Recommended&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>X509SKI&lt;/td>
&lt;td>&amp;quot;X509:&amp;lt;SKI&amp;gt;123456789abcdef&amp;quot;&lt;/td>
&lt;td>Strong&lt;/td>
&lt;td>Text&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>X509SHA1PublicKey&lt;/td>
&lt;td>&amp;quot;X509:&amp;lt;SHA1-PUKEY&amp;gt;123456789abcdef&amp;quot;&lt;/td>
&lt;td>Strong&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://support.microsoft.com/de-de/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16#bkmk_certmap">Source - support.microsoft.com&lt;/a>&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>For this approach, the binary order of the serial number needs to be added backwards and the CA Name needs to be read backwards as well. As quoted &lt;a href="https://support.microsoft.com/de-de/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16#bkmk_certmap">here&lt;/a>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">Note that when you reverse the SerialNumber, you must keep the byte order. This means that reversing the SerialNumber “A1B2C3” should result in the string “C3B2A1” and not “3C2B1A”. For more information, see HowTo: Map a user to a certificate via all the methods available in the altSecurityIdentities attribute.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="mapping-using-powershell">Mapping using PowerShell&lt;/h2>
&lt;p>Luckily PowerShell comes into play here and allows us to read the existing enrolled certificates from the Enterprise CA and automatically set them on the AD Object in question (no matter if user account or computer account).
The script has cross-domain support and will ask you for credentials for all trusted domains where the Enterprise CA issued certificates to.&lt;/p>
&lt;p>To use the script, you will need to populate the following environment variables before you execute the script:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-PowerShell" data-lang="PowerShell">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="no">string&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="nv">$CertAuthority&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;pkiname&amp;gt;&amp;#34;&lt;/span> &lt;span class="c"># Server Name of the Enterprise CA is enough&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="no">array&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="nv">$CertTemplates&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s1">&amp;#39;DeviceCert&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;UserCert&amp;#39;&lt;/span> &lt;span class="c"># List of Certificate Templates to process&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="no">bool&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="nv">$DryRun&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">$true&lt;/span> &lt;span class="c"># With DryRun = $true, the script will not do any changes but will show you the impact&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You will also need to install the &lt;code>PSPKI&lt;/code> Module which is available &lt;a href="https://www.pkisolutions.com/tools/pspki/">here&lt;/a> or in the PS Gallery.&lt;/p>
&lt;p>You can find the script here: &lt;a href="https://github.com/system32blog/blog/blob/master/static/post/adsmapcertificates/Invoke-ADCSCertMapping.ps1">https://github.com/system32blog/blog/blob/master/static/post/adsmapcertificates/Invoke-ADCSCertMapping.ps1&lt;/a>&lt;/p></description></item><item><title>PowerShell based PRTG Sensor Discovery</title><link>https://system32.blog/post/prtgsensordiscovery/</link><pubDate>Mon, 08 Nov 2021 00:00:00 +0000</pubDate><guid>https://system32.blog/post/prtgsensordiscovery/</guid><description>
&lt;p>This article shows a script I made to enhance PRTGs own sensor discovery. The script can be run as scheduled tasks and will use the PrtgApi to find any kind of sensors that you wish to monitor on your systems (such as Windows Services, NetApp Volumes, Cisco UCS Disks and so on)&lt;/p>
&lt;p>&lt;code>Disclaimer: This content and scripts are provided free of charge and I do not take any responsability for them nor any harm they may cause, it is up to you to review and test them properly before deploying them anywhere.&lt;/code>&lt;/p>
&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;p>Many of you probably already heard about PRTG or are already using it to monitor your network. PRTG has a great builtin sensor discovery that will add sensors for almost everything you'd want to know about on your server.
One downside of this is the fact, that everytime you run this discovery, it adds all sensors once again as it does not check if this sensor is already there.&lt;/p>
&lt;p>To workaround this, I've build a PowerShell script that you can run as scheduled job to automatically discover any kind of discoverable sensor.&lt;/p>
&lt;p>The script is also able to send you a summary of what it discovered and created directly into your Teams Channel (via an Webhook Connector).&lt;/p>
&lt;h1 id="how-does-it-work">How does it work?&lt;/h1>
&lt;p>The script uses PRTGs inbuilt API and the PowerShell Module &amp;quot;PrtgApi&amp;quot; (&lt;a href="https://github.com/lordmilko/PrtgApi">https://github.com/lordmilko/PrtgApi&lt;/a>) to invoke a sensor discovery for a specific sensor on a device or a group of devices.
After that it loops through the existing sensors to detect if there are any that are not explicitly excluded or already existent.&lt;/p>
&lt;p>The script has the following features and attributes per sensor type:&lt;/p>
&lt;ul>
&lt;li>RawType: The PRTG Name of a sensor, you can find all your PRTG Instance is aware off using the cmdlet &lt;code>Get-SensorType&lt;/code>.&lt;/li>
&lt;li>SensorPrefix: The prefix that is used by the sensor when you add them using the PRTG API.&lt;/li>
&lt;li>Group: The PRTG Device Group which the script shall run for this sensor type. If multiple groups with the same name exist (e.g. under different probes), it will run for all of them.&lt;/li>
&lt;li>NameFilter: A wildcard aware filter of devices the script shall run for. Do all your Windows Servers starts with &amp;quot;WSRV&amp;quot;? Great! Enter &amp;quot;WSRV*&amp;quot; into the NameFilter and you'll avoid unnecessary discoveries on not applicable devices. If not, just let the asterix in.&lt;/li>
&lt;li>AttributeName: The attribute name out of which the script shall extract the discovered sensors. This differs per sensor. You can find the correct property by running &lt;code>New-SensorParameters&lt;/code> on a device.&lt;/li>
&lt;li>ExclusionList: An array of occurences to ignore, in the existing sensor types below, you can find some examples. This exclusion list also supports wildcards.&lt;/li>
&lt;li>MaxSensors: A threshold of how many sensors to discover per device. Exceeding this limit will fire an error message.&lt;/li>
&lt;li>DiscoveryInterval: A limitation of how often this Sensor Type discovery shall run, meaning that even if the script is executed multiple times in a row, if the discovery interval is not yet due again, it will skip this sensor type. An example of this would be disk sensors, discovering them all few days will be more than enough. Windows services however might pop up more often and therefor require a more frequent discovery. The last discovery is saved in the current user registry for each device, if you run the script on another device or under an other user context, it will start fresh.&lt;/li>
&lt;li>NameExtractionSB: An additional scriptblock that's being run against the object &lt;code>t&lt;/code> to extract the individual element name out of a device. This might be required for devices that return inconsistent or badly formatted informations around the actual device name. The &lt;code>Cisco UCS Disks&lt;/code> Sensor Type shows an example of it.&lt;/li>
&lt;/ul>
&lt;h1 id="how-to-use-it">How to use it&lt;/h1>
&lt;p>To use the script, you will need to populate the following environment variables before you execute the script:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-PowerShell" data-lang="PowerShell">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="c"># Required&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="c">## PRTG server url&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="nv">$env:PRTGUrl&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;https://prtg.internaldomain.com&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="c">## PRTG Username&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="nv">$env:PRTGUsername&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;svc-discovery&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="c">## PRTG Password&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="nv">$env:PRTGPassword&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;bacon&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="c"># Optional&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">&lt;span class="c">## A teams webhook to sent a summary of discovered sensors to (if any)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">&lt;span class="nv">$env:TeamsURL&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;https://yourtenant.webhook.office.com/webhookb2/..&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">&lt;span class="c">## A teams webhook to sent a summary of discovered sensors to (if any) while using VSCode to work on the script&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">&lt;span class="nv">$env:TeamsStagingURL&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;https://yourtenant.webhook.office.com/webhookb2/..&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Depending on the number of items you got in the specified groups, it will take some time (minutes to hours) to discover the Sensor Types defined below.&lt;/p>
&lt;h2 id="predefined-sensor-types">Predefined Sensor Types&lt;/h2>
&lt;p>There is already a bunch of sensor types defined in the script, feel free to either keep them or delete them out of the hashtable. Those are the ones I've developed the script for and are actively used in my work environment.&lt;/p>
&lt;ul>
&lt;li>Cisco UCS Disks: Discover disk of a Cisco UCSC and Cisco UCSB Series using their CIMC Interface&lt;/li>
&lt;li>NetApp System Health: Discover NetApp System Health Sensors for each Controller&lt;/li>
&lt;li>NetApp IO: Discover NetApp IO Sensors for each Controller&lt;/li>
&lt;li>NetApp Aggregates: Discover NetApp Aggregates Sensors for all clusters&lt;/li>
&lt;li>NetApp Lifs: Discover NetApp Lif Sensors for each Controller&lt;/li>
&lt;li>NetApp Physical Disk: Discover NetApp Disk Sensors for each physical disk&lt;/li>
&lt;li>NetApp Interfaces: Discover NetApp Physical Interface Sensors for each&lt;/li>
&lt;li>NetApp Volumes: Discover NetApp Volume Sensors for each Cluster&lt;/li>
&lt;li>NetApp SnapMirrors: Discover NetApp Snapmirror/SnapVault Relationship Sensors for each Cluster&lt;/li>
&lt;li>Disk Space: Discover any available SNMP Disk Space Sensor (Windows/Linux) for each device&lt;/li>
&lt;li>Windows Services: Discover any running Windows Service via SNMP for each device. This Sensor Type already holds a long list of exclusions of builtin Windows Services in English and German OS. The reference lists are from Server 2019 Installations.&lt;/li>
&lt;/ul>
&lt;h1 id="the-script">The script&lt;/h1>
&lt;p>You can find the script here: &lt;a href="https://github.com/system32blog/blog/blob/master/static/post/PRTGSensorDiscovery/Invoke-PRTGSensorDiscovery.ps1">https://github.com/system32blog/blog/blob/master/static/post/PRTGSensorDiscovery/Invoke-PRTGSensorDiscovery.ps1&lt;/a>&lt;/p></description></item><item><title>PowerShell NetApp SnapMirror Destination Migration</title><link>https://system32.blog/post/netappsnapmirrorposhmigration/</link><pubDate>Mon, 23 Aug 2021 00:00:00 +0000</pubDate><guid>https://system32.blog/post/netappsnapmirrorposhmigration/</guid><description>
&lt;p>This article shows how to use PowerShell and the NetApp PowerShell Module to migrate all NetApp SnapVault/SnapMirror relationships to a new system.
The script also builds the SVM Relationships and does the cutovers of the relationships on the source ONTAP Systems.&lt;/p>
&lt;p>&lt;code>Disclaimer: This content and scripts are provided free of charge and I do not take any responsability for them nor any harm they may cause, it is up to you to review and test them properly before deploying them anywhere.&lt;/code>&lt;/p>
&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;p>If you ever had to migrate a SnapMirror Destination ONTAP System to a new one, you probably already faced the struggle to migrate Volume by Volume and SnapMirror by SnapMirror to keep all Snapshots.&lt;/p>
&lt;p>The good news: You don't have to do this manually as NetApp has a great PowerShell integration for both, ONTAP and 7-Mode Systems.&lt;/p>
&lt;h1 id="the-magic">The magic&lt;/h1>
&lt;p>Since I had to migrate multiple SnapMirror Destination ONTAP Clusters to new ones and realized how much effort this is per volume, I came up with this PowerShell script to automate this process.&lt;/p>
&lt;p>What this script does is:&lt;/p>
&lt;ul>
&lt;li>SVM Peering&lt;/li>
&lt;li>Volume creation&lt;/li>
&lt;li>Intermediate SnapMirror Relationship and Initialization&lt;/li>
&lt;li>Cutover on the Source Systems from the old SnapMirror Destination over to new SnapMirror Destination (keeping the existing policy, schedule and settings)&lt;/li>
&lt;li>Break-up off the existing SnapMirror from Source Systems to the old Destination System&lt;/li>
&lt;/ul>
&lt;p>Prerequisites:&lt;/p>
&lt;ul>
&lt;li>Credentials for all involved ONTAP Systems&lt;/li>
&lt;li>Cluster Peering between old destination system and new destination system&lt;/li>
&lt;li>Cluster Peering between source systems and new destination systems&lt;/li>
&lt;li>SnapMirror Policies, Schedules and Snapshot Labels from all source storages pre-created on the new destination system (the script will not create them)&lt;/li>
&lt;/ul>
&lt;h1 id="how-to-use-it">How to use it&lt;/h1>
&lt;p>To use the script, simply fill in the variables at the start of the script, please make sure to cross check all information you enter.
On the first run, it will ask you for credentials for both, the old and the new destination system. After that, it will create the SVM Peerings (if not existent), the volumes and the SnapMirrors between the old and new destination system and initialize them.&lt;/p>
&lt;p>It will take some time (hours to weeks) to transfer the data in those volumes between the old destination and the new destination systems depending on both systems performance and the amount of data.&lt;/p>
&lt;p>You can check the status on the new destination system by executing &lt;code>snapmirror show&lt;/code> and verifying that the status is &lt;code>snapmirrored&lt;/code> and &lt;code>idle&lt;/code>.&lt;/p>
&lt;p>As soon as that's the case, run the script once more. It will start by fetching the status then quiescing, breaking and deleting the mirrors to the old backup system and ask you for credentials to all involved source systems. After entering the credentials, it will start to build the SnapMirror Relationships from the source system to the new destination system, invoke a resync and release the SnapMirror to the old backup system.&lt;/p>
&lt;h1 id="the-script">The script&lt;/h1>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-PowerShell" data-lang="PowerShell">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="c">#region Variables&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="nv">$oldIP&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;Management IP of old destination storage&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="nv">$newIP&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;Management IP of new destination storage&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="no">array&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="nv">$svms&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">@&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> &lt;span class="vm">@&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &lt;span class="n">Old&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;SVM Name on old destination storage&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> &lt;span class="n">New&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;SVM Name on new destination storage&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 10&lt;/span>&lt;span class="cl"> &lt;span class="cm">&amp;lt;#
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 11&lt;/span>&lt;span class="cl">&lt;span class="cm"> Add as many SVMs as required
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 12&lt;/span>&lt;span class="cl">&lt;span class="cm"> @{
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 13&lt;/span>&lt;span class="cl">&lt;span class="cm"> Old = &amp;#34;&amp;lt;SVM Name on old destination storage&amp;gt;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 14&lt;/span>&lt;span class="cl">&lt;span class="cm"> New = &amp;#34;&amp;lt;SVM Name on new destination storage&amp;gt;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 15&lt;/span>&lt;span class="cl">&lt;span class="cm"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 16&lt;/span>&lt;span class="cl">&lt;span class="cm"> #&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 17&lt;/span>&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 18&lt;/span>&lt;span class="cl">&lt;span class="c">#endregion&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 19&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 20&lt;/span>&lt;span class="cl">&lt;span class="c">#region Code below&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 21&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 22&lt;/span>&lt;span class="cl">&lt;span class="k">if&lt;/span>&lt;span class="p">(!&lt;/span>&lt;span class="nv">$oldCreds&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 23&lt;/span>&lt;span class="cl"> &lt;span class="nv">$oldCreds&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-Credential&lt;/span> &lt;span class="n">-Message&lt;/span> &lt;span class="s2">&amp;#34;Old System&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 24&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 25&lt;/span>&lt;span class="cl">&lt;span class="k">if&lt;/span>&lt;span class="p">(!&lt;/span>&lt;span class="nv">$newCreds&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 26&lt;/span>&lt;span class="cl"> &lt;span class="nv">$newCreds&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-Credential&lt;/span> &lt;span class="n">-Message&lt;/span> &lt;span class="s2">&amp;#34;New System&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 27&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 28&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 29&lt;/span>&lt;span class="cl">&lt;span class="nv">$oldCluster&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Connect-NcController&lt;/span> &lt;span class="n">-HTTPS&lt;/span> &lt;span class="n">-Credential&lt;/span> &lt;span class="nv">$oldCreds&lt;/span> &lt;span class="n">-Name&lt;/span> &lt;span class="nv">$oldIP&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 30&lt;/span>&lt;span class="cl">&lt;span class="nv">$newCluster&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Connect-NcController&lt;/span> &lt;span class="n">-HTTPS&lt;/span> &lt;span class="n">-Credential&lt;/span> &lt;span class="nv">$newCreds&lt;/span> &lt;span class="n">-Name&lt;/span> &lt;span class="nv">$newIP&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 31&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 32&lt;/span>&lt;span class="cl">&lt;span class="nv">$oldClusterName&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nb">Get-NcCluster&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$oldCluster&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="py">ClusterName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 33&lt;/span>&lt;span class="cl">&lt;span class="nv">$newClusterName&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nb">Get-NcCluster&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="py">ClusterName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 34&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 35&lt;/span>&lt;span class="cl">&lt;span class="k">if&lt;/span>&lt;span class="p">(!&lt;/span>&lt;span class="nv">$CredentialTable&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 36&lt;/span>&lt;span class="cl"> &lt;span class="nv">$CredentialTable&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">@&lt;/span>&lt;span class="p">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 37&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 38&lt;/span>&lt;span class="cl">&lt;span class="k">if&lt;/span>&lt;span class="p">(!&lt;/span>&lt;span class="nv">$IPTable&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 39&lt;/span>&lt;span class="cl"> &lt;span class="nv">$IPTable&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">@&lt;/span>&lt;span class="p">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 40&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 41&lt;/span>&lt;span class="cl">&lt;span class="k">if&lt;/span>&lt;span class="p">(!&lt;/span>&lt;span class="nv">$ClusterTable&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 42&lt;/span>&lt;span class="cl"> &lt;span class="nv">$ClusterTable&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">@&lt;/span>&lt;span class="p">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 43&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 44&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 45&lt;/span>&lt;span class="cl">&lt;span class="k">if&lt;/span>&lt;span class="p">(!(&lt;/span>&lt;span class="nv">$calculatedBlacklist&lt;/span>&lt;span class="p">)){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 46&lt;/span>&lt;span class="cl"> &lt;span class="nv">$calculatedBlacklist&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">@&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 47&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 48&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 49&lt;/span>&lt;span class="cl">&lt;span class="nv">$svms&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">GetEnumerator&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">ForEach-Object&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 50&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 51&lt;/span>&lt;span class="cl"> &lt;span class="nv">$OldSVM&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Old&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 52&lt;/span>&lt;span class="cl"> &lt;span class="nv">$NewSVM&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">New&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 53&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 54&lt;/span>&lt;span class="cl"> &lt;span class="nv">$OldSVMObj&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-NcVserver&lt;/span> &lt;span class="n">-Name&lt;/span> &lt;span class="nv">$OldSVM&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$oldCluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 55&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 56&lt;/span>&lt;span class="cl"> &lt;span class="c"># Check if Destination SVM Exists&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 57&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(!(&lt;/span>&lt;span class="nv">$NewSVMObj&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-NcVserver&lt;/span> &lt;span class="n">-Name&lt;/span> &lt;span class="nv">$newSVM&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span>&lt;span class="p">)){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 58&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Creating new vServer &lt;/span>&lt;span class="nv">$newSVM&lt;/span>&lt;span class="s2"> on &lt;/span>&lt;span class="nv">$newClusterName&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 59&lt;/span>&lt;span class="cl"> &lt;span class="nv">$aggr&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nb">Get-NcAggr&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">Sort-Object&lt;/span> &lt;span class="n">-Property&lt;/span> &lt;span class="n">Available&lt;/span> &lt;span class="n">-Descending&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mf">0&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="py">Name&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 60&lt;/span>&lt;span class="cl"> &lt;span class="vm">$null&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">New-NcVserver&lt;/span> &lt;span class="n">-Name&lt;/span> &lt;span class="nv">$NewSVM&lt;/span> &lt;span class="p">`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 61&lt;/span>&lt;span class="cl"> &lt;span class="n">-RootVolumeAggregate&lt;/span> &lt;span class="nv">$aggr&lt;/span> &lt;span class="p">`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 62&lt;/span>&lt;span class="cl"> &lt;span class="n">-RootVolumeSecurityStyle&lt;/span> &lt;span class="nv">$oldsvmobj&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">RootVolumeSecurityStyle&lt;/span> &lt;span class="p">`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 63&lt;/span>&lt;span class="cl"> &lt;span class="n">-Language&lt;/span> &lt;span class="nv">$oldsvmobj&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Language&lt;/span> &lt;span class="p">`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 64&lt;/span>&lt;span class="cl"> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 65&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 66&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 67&lt;/span>&lt;span class="cl"> &lt;span class="c"># Check if Destination SVM is peered with source vserver&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 68&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(!(&lt;/span>&lt;span class="nv">$peerrelationship&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-NcVserverPeer&lt;/span> &lt;span class="n">-Vserver&lt;/span> &lt;span class="nv">$OldSVM&lt;/span> &lt;span class="n">-PeerVserver&lt;/span> &lt;span class="nv">$NewSVM&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$oldCluster&lt;/span> &lt;span class="n">-Application&lt;/span> &lt;span class="s2">&amp;#34;snapmirror&amp;#34;&lt;/span>&lt;span class="p">)){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 69&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Creating new vServer Peer Relationship for &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$oldClusterName&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$OldSVM&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2"> to &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$newClusterName&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$NewSVM&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 70&lt;/span>&lt;span class="cl"> &lt;span class="nv">$peerrelationship&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">New-NcVserverPeer&lt;/span> &lt;span class="n">-Vserver&lt;/span> &lt;span class="nv">$OldSVM&lt;/span> &lt;span class="n">-PeerVserver&lt;/span> &lt;span class="nv">$NewSVM&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$oldCluster&lt;/span> &lt;span class="n">-Application&lt;/span> &lt;span class="s2">&amp;#34;snapmirror&amp;#34;&lt;/span> &lt;span class="n">-PeerCluster&lt;/span> &lt;span class="nv">$newClusterName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 71&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 72&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 73&lt;/span>&lt;span class="cl"> &lt;span class="c"># Check if SVM Peer is unitialized&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 74&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$peerrelationship&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">PeerState&lt;/span> &lt;span class="o">-eq&lt;/span> &lt;span class="s2">&amp;#34;initiated&amp;#34;&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 75&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Confirming new vServer Peer Relationship for &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$oldClusterName&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$OldSVM&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2"> to &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$newClusterName&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$NewSVM&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 76&lt;/span>&lt;span class="cl"> &lt;span class="vm">$null&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Confirm-NcVserverPeer&lt;/span> &lt;span class="n">-Vserver&lt;/span> &lt;span class="nv">$NewSVM&lt;/span> &lt;span class="n">-PeerVserver&lt;/span> &lt;span class="nv">$OldSVM&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 77&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 78&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 79&lt;/span>&lt;span class="cl"> &lt;span class="c"># Get existing volumes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 80&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Getting volumes for &lt;/span>&lt;span class="nv">$oldSVM&lt;/span>&lt;span class="s2"> on &lt;/span>&lt;span class="nv">$oldClusterName&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 81&lt;/span>&lt;span class="cl"> &lt;span class="nv">$vols&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">@&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 82&lt;/span>&lt;span class="cl"> &lt;span class="nb">Get-NcVol&lt;/span> &lt;span class="n">-Vserver&lt;/span> &lt;span class="nv">$OldSVM&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$oldCluster&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">Where-Object&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Name&lt;/span> &lt;span class="o">-notlike&lt;/span> &lt;span class="s2">&amp;#34;*root*&amp;#34;&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">ForEach-Object&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 83&lt;/span>&lt;span class="cl"> &lt;span class="nv">$vols&lt;/span> &lt;span class="p">+=&lt;/span> &lt;span class="vm">@&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 84&lt;/span>&lt;span class="cl"> &lt;span class="n">Size&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">TotalSize&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 85&lt;/span>&lt;span class="cl"> &lt;span class="n">Language&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">VolumeLanguageAttributes&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">LanguageCode&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 86&lt;/span>&lt;span class="cl"> &lt;span class="n">Name&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Name&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 87&lt;/span>&lt;span class="cl"> &lt;span class="n">Security&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">VolumeSecurityAttributes&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Style&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 88&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 89&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 90&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 91&lt;/span>&lt;span class="cl"> &lt;span class="c"># Run through volumes &lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 92&lt;/span>&lt;span class="cl"> &lt;span class="nv">$vols&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">GetEnumerator&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">Where-Object&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 93&lt;/span>&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Name&lt;/span> &lt;span class="n">-notin&lt;/span> &lt;span class="nv">$calculatedBlacklist&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-and&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 94&lt;/span>&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Name&lt;/span> &lt;span class="n">-notin&lt;/span> &lt;span class="nv">$volumeBlacklist&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 95&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">ForEach-Object&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 96&lt;/span>&lt;span class="cl"> &lt;span class="c"># Create new volume if it doesn&amp;#39;t exist&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 97&lt;/span>&lt;span class="cl"> &lt;span class="nv">$aggr&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nb">Get-NcAggr&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">Sort-Object&lt;/span> &lt;span class="n">-Property&lt;/span> &lt;span class="n">Available&lt;/span> &lt;span class="n">-Descending&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mf">0&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="py">Name&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 98&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(!(&lt;/span>&lt;span class="nv">$volume&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-NcVol&lt;/span> &lt;span class="n">-Name&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Name&lt;/span> &lt;span class="n">-Vserver&lt;/span> &lt;span class="nv">$NewSVM&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span>&lt;span class="p">)){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 99&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Creating new volume &lt;/span>&lt;span class="se">`&amp;#34;&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Name&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="se">`&amp;#34;&lt;/span>&lt;span class="s2"> for &lt;/span>&lt;span class="nv">$newSVM&lt;/span>&lt;span class="s2"> on &lt;/span>&lt;span class="nv">$newClusterName&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">100&lt;/span>&lt;span class="cl"> &lt;span class="vm">$null&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">New-NcVol&lt;/span> &lt;span class="n">-Size&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Size&lt;/span> &lt;span class="n">-Name&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Name&lt;/span> &lt;span class="n">-Language&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Language&lt;/span> &lt;span class="n">-SecurityStyle&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Security&lt;/span> &lt;span class="n">-VserverContext&lt;/span> &lt;span class="nv">$NewSVM&lt;/span> &lt;span class="n">-Aggregate&lt;/span> &lt;span class="nv">$aggr&lt;/span> &lt;span class="n">-Type&lt;/span> &lt;span class="n">dp&lt;/span> &lt;span class="n">-JunctionActive:&lt;/span>&lt;span class="vm">$false&lt;/span> &lt;span class="n">-JunctionPath&lt;/span> &lt;span class="vm">$null&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">101&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">102&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">103&lt;/span>&lt;span class="cl"> &lt;span class="c"># Create new snapmirror if it doesn&amp;#39;t exist&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">104&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(!(&lt;/span>&lt;span class="nv">$snapmirror&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-NcSnapmirror&lt;/span> &lt;span class="n">-SourceCluster&lt;/span> &lt;span class="nv">$oldClusterName&lt;/span> &lt;span class="n">-SourceVserver&lt;/span> &lt;span class="nv">$OldSVM&lt;/span> &lt;span class="n">-SourceVolume&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Name&lt;/span> &lt;span class="n">-DestinationCluster&lt;/span> &lt;span class="nv">$newClusterName&lt;/span> &lt;span class="n">-DestinationVserver&lt;/span> &lt;span class="nv">$NewSVM&lt;/span> &lt;span class="n">-DestinationVolume&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Name&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span>&lt;span class="p">)){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">105&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Creating new snapmirror from &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$oldClusterName&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$OldSVM&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Name&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2"> to &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$newClusterName&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$NewSVM&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Name&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">106&lt;/span>&lt;span class="cl"> &lt;span class="nv">$snapmirror&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">New-NcSnapmirror&lt;/span> &lt;span class="n">-SourceCluster&lt;/span> &lt;span class="nv">$oldClusterName&lt;/span> &lt;span class="n">-SourceVserver&lt;/span> &lt;span class="nv">$OldSVM&lt;/span> &lt;span class="n">-SourceVolume&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Name&lt;/span> &lt;span class="n">-DestinationCluster&lt;/span> &lt;span class="nv">$newClusterName&lt;/span> &lt;span class="n">-DestinationVserver&lt;/span> &lt;span class="nv">$NewSVM&lt;/span> &lt;span class="n">-DestinationVolume&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Name&lt;/span> &lt;span class="n">-Schedule&lt;/span> &lt;span class="s2">&amp;#34;hourly&amp;#34;&lt;/span> &lt;span class="n">-Policy&lt;/span> &lt;span class="s2">&amp;#34;MirrorAllSnapshots&amp;#34;&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">107&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">108&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">109&lt;/span>&lt;span class="cl"> &lt;span class="c"># Initialize new snapmirror if not done yet&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">110&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">111&lt;/span>&lt;span class="cl"> &lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">MirrorState&lt;/span> &lt;span class="o">-eq&lt;/span> &lt;span class="s2">&amp;#34;uninitialized&amp;#34;&lt;/span> &lt;span class="o">-and&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">112&lt;/span>&lt;span class="cl"> &lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Status&lt;/span> &lt;span class="o">-ne&lt;/span> &lt;span class="s2">&amp;#34;transferring&amp;#34;&lt;/span> &lt;span class="o">-and&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">113&lt;/span>&lt;span class="cl"> &lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Status&lt;/span> &lt;span class="o">-ne&lt;/span> &lt;span class="s2">&amp;#34;finalizing&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">114&lt;/span>&lt;span class="cl"> &lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">115&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Initializing new snapmirror from &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$oldClusterName&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$OldSVM&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Name&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2"> to &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$newClusterName&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$NewSVM&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Name&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">116&lt;/span>&lt;span class="cl"> &lt;span class="vm">$null&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Invoke-NcSnapmirrorInitialize&lt;/span> &lt;span class="n">-SourceCluster&lt;/span> &lt;span class="nv">$oldClusterName&lt;/span> &lt;span class="n">-SourceVserver&lt;/span> &lt;span class="nv">$OldSVM&lt;/span> &lt;span class="n">-SourceVolume&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Name&lt;/span> &lt;span class="n">-DestinationCluster&lt;/span> &lt;span class="nv">$newClusterName&lt;/span> &lt;span class="n">-DestinationVserver&lt;/span> &lt;span class="nv">$NewSVM&lt;/span> &lt;span class="n">-DestinationVolume&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Name&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">117&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">118&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">119&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">120&lt;/span>&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">MirrorState&lt;/span> &lt;span class="o">-eq&lt;/span> &lt;span class="s2">&amp;#34;snapmirrored&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-and&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">121&lt;/span>&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">status&lt;/span> &lt;span class="o">-eq&lt;/span> &lt;span class="s2">&amp;#34;idle&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-and&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">122&lt;/span>&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">IsHealthy&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-and&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">123&lt;/span>&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="nv">$oldSnapmirror&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-NcSnapmirror&lt;/span> &lt;span class="n">-DestinationCluster&lt;/span> &lt;span class="nv">$oldClusterName&lt;/span> &lt;span class="n">-Destination&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Name&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$oldCluster&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-and&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">124&lt;/span>&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="nv">$peerVserver&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-NcVserverPeer&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$oldCluster&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">Where-Object&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">125&lt;/span>&lt;span class="cl"> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">PeerVserverUuid&lt;/span> &lt;span class="o">-eq&lt;/span> &lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">SourceVserverUuid&lt;/span> &lt;span class="o">-and&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">126&lt;/span>&lt;span class="cl"> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">VserverUuid&lt;/span> &lt;span class="o">-eq&lt;/span> &lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">DestinationVserverUuid&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">127&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">128&lt;/span>&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">129&lt;/span>&lt;span class="cl"> &lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">130&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Found healthy snapmirror for &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$oldClusterName&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$OldSVM&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Name&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">, source cluster &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$peerVserver&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">PeerCluster&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2"> - ready for cutover.&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">131&lt;/span>&lt;span class="cl"> &lt;span class="nv">$peerCluster&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$peerVserver&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">PeerCluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">132&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(!(&lt;/span>&lt;span class="nv">$IPTable&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="p">])){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">133&lt;/span>&lt;span class="cl"> &lt;span class="nv">$IPTable&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Read-Host&lt;/span> &lt;span class="n">-Prompt&lt;/span> &lt;span class="s2">&amp;#34;Enter IP for: &lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">134&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">135&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(!(&lt;/span>&lt;span class="nv">$CredentialTable&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="p">])){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">136&lt;/span>&lt;span class="cl"> &lt;span class="nv">$CredentialTable&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-Credential&lt;/span> &lt;span class="n">-Message&lt;/span> &lt;span class="s2">&amp;#34;Enter Credentials for: &lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="n">-UserName&lt;/span> &lt;span class="s2">&amp;#34;admin&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">137&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">138&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(!(&lt;/span>&lt;span class="nv">$ClusterTable&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="p">])){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">139&lt;/span>&lt;span class="cl"> &lt;span class="nv">$ClusterTable&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Connect-NcController&lt;/span> &lt;span class="n">-HTTPS&lt;/span> &lt;span class="n">-Credential&lt;/span> &lt;span class="nv">$CredentialTable&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">-Name&lt;/span> &lt;span class="nv">$IPTable&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">140&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">141&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">142&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">Get-NcVol&lt;/span> &lt;span class="n">-Name&lt;/span> &lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">SourceVolume&lt;/span> &lt;span class="n">-Vserver&lt;/span> &lt;span class="nv">$oldSnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">SourceVserver&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$ClusterTable&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="p">]){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">143&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Found healthy snapmirror for &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$oldClusterName&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$OldSVM&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Name&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">, source cluster &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$peerVserver&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">PeerCluster&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2"> - successfully validated volume on source cluster.&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">144&lt;/span>&lt;span class="cl"> &lt;span class="nv">$curVol&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$_&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">145&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(!(&lt;/span>&lt;span class="nb">Get-NcClusterPeer&lt;/span> &lt;span class="n">-Name&lt;/span> &lt;span class="nv">$peerCluster&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span>&lt;span class="p">)){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">146&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span> &lt;span class="n">-Object&lt;/span> &lt;span class="s2">&amp;#34;Cluster Peering between &lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="s2"> and &lt;/span>&lt;span class="nv">$newClusterName&lt;/span>&lt;span class="s2"> does not exist, please peer first!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">147&lt;/span>&lt;span class="cl"> &lt;span class="k">break&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">148&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">149&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">150&lt;/span>&lt;span class="cl"> &lt;span class="c"># Check if Destination SVM is peered with source vserver&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">151&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(!(&lt;/span>&lt;span class="nv">$peerrelationship&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-NcVserverPeer&lt;/span> &lt;span class="n">-Vserver&lt;/span> &lt;span class="nv">$peervserver&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">PeerVserver&lt;/span> &lt;span class="n">-PeerVserver&lt;/span> &lt;span class="nv">$NewSVM&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$ClusterTable&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">-Application&lt;/span> &lt;span class="s2">&amp;#34;snapmirror&amp;#34;&lt;/span>&lt;span class="p">)){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">152&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Creating new vServer Peer Relationship for &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$peervserver&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">PeerVserver&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2"> to &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$newClusterName&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$NewSVM&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">153&lt;/span>&lt;span class="cl"> &lt;span class="nv">$peerrelationship&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">New-NcVserverPeer&lt;/span> &lt;span class="n">-Vserver&lt;/span> &lt;span class="nv">$peervserver&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">PeerVserver&lt;/span> &lt;span class="n">-PeerVserver&lt;/span> &lt;span class="nv">$NewSVM&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$ClusterTable&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">-Application&lt;/span> &lt;span class="s2">&amp;#34;snapmirror&amp;#34;&lt;/span> &lt;span class="n">-PeerCluster&lt;/span> &lt;span class="nv">$newClusterName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">154&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">155&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">156&lt;/span>&lt;span class="cl"> &lt;span class="c"># Check if SVM Peer is unitialized&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">157&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$peerrelationship&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">PeerState&lt;/span> &lt;span class="o">-eq&lt;/span> &lt;span class="s2">&amp;#34;initiated&amp;#34;&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">158&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Confirming vServer Peer Relationship for &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$peervserver&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">PeerVserver&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2"> to &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$newClusterName&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">:&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$NewSVM&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">159&lt;/span>&lt;span class="cl"> &lt;span class="vm">$null&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Confirm-NcVserverPeer&lt;/span> &lt;span class="n">-Vserver&lt;/span> &lt;span class="nv">$NewSVM&lt;/span> &lt;span class="n">-PeerVserver&lt;/span> &lt;span class="nv">$peervserver&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">PeerVserver&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">160&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">161&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">162&lt;/span>&lt;span class="cl"> &lt;span class="c"># Stop replicating from source to old cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">163&lt;/span>&lt;span class="cl"> &lt;span class="c">## Quiesce Snapmirror on old cluster from source cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">164&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Quiscing Snapmirror from &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">SourceLocation&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2"> to &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">DestinationLocation&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">165&lt;/span>&lt;span class="cl"> &lt;span class="nb">Invoke-NcSnapmirrorQuiesce&lt;/span> &lt;span class="n">-Destination&lt;/span> &lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">DestinationLocation&lt;/span> &lt;span class="n">-Source&lt;/span> &lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">SourceLocation&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$oldCluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">166&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">167&lt;/span>&lt;span class="cl"> &lt;span class="c"># Break Relationship new cluster to old cluster &lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">168&lt;/span>&lt;span class="cl"> &lt;span class="c">## Quiesce Snapmirror on new cluster from old cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">169&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Quiscing Snapmirror from &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">SourceLocation&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2"> to &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">DestinationLocation&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">170&lt;/span>&lt;span class="cl"> &lt;span class="nb">Invoke-NcSnapmirrorQuiesce&lt;/span> &lt;span class="n">-Destination&lt;/span> &lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">DestinationLocation&lt;/span> &lt;span class="n">-Source&lt;/span> &lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">SourceLocation&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">171&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">172&lt;/span>&lt;span class="cl"> &lt;span class="c">## Break Snapmirror on new cluster from old cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">173&lt;/span>&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Break Snapmirror from &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">SourceLocation&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2"> to &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">DestinationLocation&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">174&lt;/span>&lt;span class="cl"> &lt;span class="nb">Invoke-NcSnapmirrorBreak&lt;/span> &lt;span class="n">-Destination&lt;/span> &lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">DestinationLocation&lt;/span> &lt;span class="n">-Source&lt;/span> &lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">SourceLocation&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span> &lt;span class="n">-Confirm:&lt;/span>&lt;span class="vm">$false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">175&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">176&lt;/span>&lt;span class="cl"> &lt;span class="c">## Delete Snapmirror on new cluster from old cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">177&lt;/span>&lt;span class="cl"> &lt;span class="nb">Remove-NcSnapmirror&lt;/span> &lt;span class="n">-Destination&lt;/span> &lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">DestinationLocation&lt;/span> &lt;span class="n">-Source&lt;/span> &lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">SourceLocation&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span> &lt;span class="n">-Confirm:&lt;/span>&lt;span class="vm">$false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">178&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">179&lt;/span>&lt;span class="cl"> &lt;span class="c">## Release Snapmirror on old cluster to new cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">180&lt;/span>&lt;span class="cl"> &lt;span class="nb">Invoke-NcSnapmirrorRelease&lt;/span> &lt;span class="n">-Source&lt;/span> &lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">SourceLocation&lt;/span> &lt;span class="n">-Destination&lt;/span> &lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">DestinationLocation&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$oldCluster&lt;/span> &lt;span class="n">-Confirm:&lt;/span>&lt;span class="vm">$false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">181&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">182&lt;/span>&lt;span class="cl"> &lt;span class="c"># Build Snapmirror to new cluster from source cluster and cleanup&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">183&lt;/span>&lt;span class="cl"> &lt;span class="c">## Create new snapmirror&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">184&lt;/span>&lt;span class="cl"> &lt;span class="nb">New-NcSnapmirror&lt;/span> &lt;span class="n">-Destination&lt;/span> &lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">DestinationLocation&lt;/span> &lt;span class="n">-Source&lt;/span> &lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">SourceLocation&lt;/span> &lt;span class="n">-Schedule&lt;/span> &lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Schedule&lt;/span> &lt;span class="n">-Policy&lt;/span> &lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Policy&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span> &lt;span class="n">-Type&lt;/span> &lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">PolicyType&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">185&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">186&lt;/span>&lt;span class="cl"> &lt;span class="c">## Resync new snapmirror&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">187&lt;/span>&lt;span class="cl"> &lt;span class="nb">Invoke-NcSnapmirrorResync&lt;/span> &lt;span class="n">-Destination&lt;/span> &lt;span class="nv">$snapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">DestinationLocation&lt;/span> &lt;span class="n">-Source&lt;/span> &lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">SourceLocation&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$newCluster&lt;/span> &lt;span class="n">-Confirm:&lt;/span>&lt;span class="vm">$false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">188&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">189&lt;/span>&lt;span class="cl"> &lt;span class="c">## Break Snapmirror on old cluster from source cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">190&lt;/span>&lt;span class="cl"> &lt;span class="nb">Invoke-NcSnapmirrorRelease&lt;/span> &lt;span class="n">-Destination&lt;/span> &lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">DestinationLocation&lt;/span> &lt;span class="n">-Source&lt;/span> &lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">SourceLocation&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$ClusterTable&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nv">$peerCluster&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">-Confirm:&lt;/span>&lt;span class="vm">$false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">191&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">192&lt;/span>&lt;span class="cl"> &lt;span class="c">## Delete Snapmirror on old cluster from source cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">193&lt;/span>&lt;span class="cl"> &lt;span class="nb">Remove-NcSnapmirror&lt;/span> &lt;span class="n">-Destination&lt;/span> &lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">DestinationLocation&lt;/span> &lt;span class="n">-Source&lt;/span> &lt;span class="nv">$oldsnapmirror&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">SourceLocation&lt;/span> &lt;span class="n">-Controller&lt;/span> &lt;span class="nv">$oldCluster&lt;/span> &lt;span class="n">-Confirm:&lt;/span>&lt;span class="vm">$false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">194&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">195&lt;/span>&lt;span class="cl"> &lt;span class="c">## Add Volume to calculated blacklist&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">196&lt;/span>&lt;span class="cl"> &lt;span class="nv">$calculatedBlacklist&lt;/span> &lt;span class="p">+=&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Name&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">197&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">198&lt;/span>&lt;span class="cl"> &lt;span class="nb">Start-Sleep&lt;/span> &lt;span class="n">-Seconds&lt;/span> &lt;span class="mf">15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">199&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">200&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">201&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">202&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">203&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">204&lt;/span>&lt;span class="cl">&lt;span class="c">#endregion&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Post and Collaboration Guide</title><link>https://system32.blog/post/howtopost/</link><pubDate>Fri, 20 Aug 2021 00:00:00 +0000</pubDate><guid>https://system32.blog/post/howtopost/</guid><description>
&lt;p>This article offers a quick guide on how to collaborate on the blog and submit / update posts.&lt;/p>
&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;p>The system32.blog is powered by a static site generator called Hugo and the &lt;a href="https://github.com/chipzoller/hugo-clarity">Clarity Theme&lt;/a>.
All content is written in Markdown and hosted on Github which allows anyone to submit posts or collaborate on existing ones.&lt;/p>
&lt;h1 id="how-to-contribute">How to contribute?&lt;/h1>
&lt;p>To contribute to the block, please fork the repository &lt;a href="https://github.com/system32blog/blog">system32blog/blog&lt;/a> and update or add a post under &lt;code>/content/post&lt;/code>.
If your change is ready in your opinion, please raise a pull request to the &lt;code>preview&lt;/code> branch on &lt;a href="https://github.com/system32blog/blog">system32blog/blog&lt;/a>.&lt;/p>
&lt;p>After raising the pull request, a spellcheck action will check your spelling. If the action fails, please review its' output and correct if required. If there are words that need to be whitelisted, please add them to the &lt;code>wordlist.txt&lt;/code> in the repository root and commit them. The pull request will check again.&lt;/p>
&lt;p>&lt;code>Scroll down further to see a video which describes the process.&lt;/code>&lt;/p>
&lt;h2 id="license">License&lt;/h2>
&lt;p>Please note that all content you submit will fall under the &lt;a href="https://github.com/system32blog/blog/blob/preview/LICENSE">MIT License&lt;/a>. We will remove blog posts based on the authors request, but the content will stay in the Git Revision history.&lt;/p>
&lt;h1 id="preview-posts">Preview posts&lt;/h1>
&lt;p>After your pull request was accepted, you can preview your post on &lt;a href="https://preview.system32.blog">preview.system32.blog&lt;/a>.
We'll review the formatting there and move it into the &lt;code>master&lt;/code> branch.&lt;/p>
&lt;h1 id="posting">Posting&lt;/h1>
&lt;p>To submit a new post, please create a new file under &lt;a href="https://github.com/system32blog/blog/tree/preview/content/post">&lt;code>/content/post/&lt;/code>&lt;/a> with a meaningful name like &lt;code>whataregrouppolicypreferences.md&lt;/code>.
The post needs a set of metadata information, please follow this guidance.&lt;/p>
&lt;h2 id="syntax">Syntax&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">+++
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">title = &amp;#34;Post and Collaboration Guide&amp;#34; &lt;span class="c">&amp;lt;!--- A meaningful title ---&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">date = &amp;#34;2021-08-20&amp;#34; # Date in Format yyyy-MM-dd ---&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">description = &amp;#34;An article describing the process to collaborate on the blog.&amp;#34; &lt;span class="c">&amp;lt;!--- A short description for the search engine ---&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">featured = false &lt;span class="c">&amp;lt;!--- Please don&amp;#39;t change ---&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">tags = [
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &amp;#34;Robin Beismann&amp;#34; &lt;span class="c">&amp;lt;!--- Put yourself as author here, realname, nickname or github username is fine ---&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">categories = [
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> &amp;#34;blogging&amp;#34; &lt;span class="c">&amp;lt;!--- Categories, please have a look at the existing ones or invent a new one if there is none that fits ---&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">series = [&amp;#34;&amp;#34;] &lt;span class="c">&amp;lt;!--- If this is a blog series, put a meaningful name here, otherwise leave empty ---&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">thumbnail = &amp;#34;images/building.png&amp;#34; &lt;span class="c">&amp;lt;!--- Use one of the thumbnails under /images/ or submit a new one. Please note that you need to have the rights on it. ---&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">+++ &lt;span class="c">&amp;lt;!--- This is a separator, please leave in-place ---&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">This article offers a quick guide on how to collaborate on the blog and submit / update posts. &lt;span class="c">&amp;lt;!--- The preview line the start page, please leave the next line in-place ---&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">&lt;span class="c">&amp;lt;!--more--&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl">&lt;span class="gh"># First heading
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl">&lt;span class="gh">&lt;/span>More text to follow
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Feel free to check out the formatting on any other post under &lt;a href="https://github.com/system32blog/blog/tree/preview/content/post">&lt;code>/content/post/&lt;/code>&lt;/a>.&lt;/p>
&lt;h2 id="referencing-media">Referencing media&lt;/h2>
&lt;p>If you want to reference pictures or other content in your posts, please submit them under &lt;code>&amp;quot;/static/post/&amp;lt;your post name without extension&amp;gt;&amp;quot;&lt;/code>.
You can then reference them using:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">![&lt;span class="nt">describing text&lt;/span>](&lt;span class="na">logo_red.png&lt;/span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="how-to-use-visual-studio-code-for-git-in-a-webbrowser">How to use Visual Studio Code for Git in a Webbrowser&lt;/h2>
&lt;p>This animation shows how you can check in posts without any Git Client or Markdown editor on your computer.
&lt;img src="howtopost.gif" alt="example animation">&lt;/p></description></item></channel></rss>