I wrote a very simple PowerShell script (Advanced Function) that will simplify process to add a new disk to any failover cluster (Hyper-V, SQL) that is connected to SAN via Fibre Channel.

If you need WWN (PWWN) of all nodes in the cluster then you need to know only a name of a single node or name of the cluster.

Examples

Enter node name

Get-ClusterNodeInitiatorPort -Cluster OneOfMyNode |
    Export-Csv -Path 'C:\Temp\data.csv'

Enter cluster Name

Get-ClusterNodeInitiatorPort -Cluster MyCluster |
    Format-Table -AutoSize

Code

Function Get-ClusterNodeInitiatorPort
{
    <#
    .SYNOPSIS
        Enter name of the cluster or any node and get all node names and their WWN (PWWN)

    .DESCRIPTION
        Developer
            Developer: Rudolf Vesely, http://rudolfvesely.com/
            Copyright (c) Rudolf Vesely. All rights reserved
            License: Free for private use only

            "RV" are initials of the developer's name Rudolf Vesely and distingue names of Rudolf Vesely's cmdlets from the other cmdlets.

        Description
            Enter name of the cluster or any node and get all node names and their WWN (PWWN).

        Requirements
            Developed and tested using PowerShell 4.0.

    .PARAMETER Cluster
        Name of cluster or node.

    .EXAMPLE
        'EXAMPLE: Enter name of the cluster or any node'
        Get-ClusterNodeInitiatorPort -Cluster MyCluster |
            Format-Table -AutoSize

    .INPUTS

    .OUTPUTS
        System.Management.Automation.PSCustomObject

    .LINK
        https://techstronghold.com/
    #>

    [CmdletBinding(
        DefaultParametersetName = 'Cluster',
        SupportsShouldProcess = $true,
        PositionalBinding = $false,
        HelpURI = 'https://techstronghold.com/',
        ConfirmImpact = 'Medium'
    )]

    Param
    (
        [Parameter(
            Mandatory = $true,
            Position = 0,
            ParameterSetName = 'Cluster',
            ValueFromPipelineByPropertyName = $true
        )]
        [ValidateLength(1, 255)]
        [Alias('ClusterName')]
        [Alias('NodeName')]
        [string[]]$Cluster
    )

    Begin
    {
        # Configurations
        $ErrorActionPreference = 'Stop'
        if ($PSBoundParameters['Debug']) { $DebugPreference = 'Continue' }
        Set-PSDebug -Strict
        Set-StrictMode -Version Latest
    }

    Process
    {
        foreach ($clusterItem in $Cluster)
        {
            $clusterNodeItems = Get-ClusterNode -Cluster $clusterItem |
                Select-Object -ExpandProperty Name

            foreach ($clusterNodeItem in $clusterNodeItems)
            {
                $items = Invoke-Command -ComputerName $clusterNodeItem -ScriptBlock { Get-InitiatorPort }

                foreach ($item in $items)
                {
                    [PsCustomObject]@{
                        Computername    = $clusterNodeItem
                        NodeAddress     = $item.NodeAddress
                        PortAddress     = $item.PortAddress
                    }
                }
            }
        }
    }

    End
    {
    }
}
« Previous Next »