Incorrect Output Format

Welcome Forums General PowerShell Q&A Incorrect Output Format

This topic contains 5 replies, has 3 voices, and was last updated by

1 year, 7 months ago.

  • Author
  • #74120

    Points: 2
    Rank: Member

    Hi All,

    I am trying to retrieve my Cluster settings using the Get-Cluster Cmdlet and storing the output in a variable.
    I then used the method suggested by Don Jones in the HTML reporting book and built a Hash Table containing the properties I am in interested in. However, the output I get is not formatted correctly (or atleast the way I want to see). What am I doing wrong ?

    function Get-ClusterInfo {
        $cluster = Get-Cluster -Name $clusterName
        $props = @{'Cluster Name'=$cluster.Name;
                    'Cluster Domain'=$cluster.Domain;
                    'Enable Shared Volumes'=$cluster.EnableSharedVolumes;
                    'Shared Volumes Root'=$cluster.SharedVolumesRoot;
                    'Administrative Access Point'=$cluster.AdministrativeAccessPoint;
                    'Backup In Progress'=$cluster.BackupInProgress;
                    'Fix Quorum'=$cluster.FixQuorum;
                    'Witness Dynamic Weight'=$cluster.WitnessDynamicWeight;
                    'Dynamic Quorum'=$cluster.DynamicQuorum;
                    'Prevent Quorum'=$cluster.PreventQuorum;
                    'Quorum Arbitration Time Max (s)'=$cluster.QuorumArbitrationTimeMax;
                    'Security Level'=$cluster.SecurityLevel;
                    'Shutdown Timeout In Minutes'=$cluster.ShutdownTimeoutInMinutes;
                    'Drain On Shutdown'=$cluster.DrainOnShutdown;
                    'Netft IPSec Enabled'=$cluster.NetftIPSecEnabled;
                    'Lower Quorum Priority NodeId'=$cluster.LowerQuorumPriorityNodeId;
                    'Witness Database Write Timeout'=$cluster.WitnessDatabaseWriteTimeout;
                    'Database Read/Write Mode'=$cluster.DatabaseReadWriteMode;
                    'Witness Restart Interval'=$cluster.WitnessRestartInterval;
                    'Recent Events Reset Time'=$cluster.RecentEventsResetTime;
                    'Message Buffer Length'=$cluster.MessageBufferLength; 
            New-Object -TypeName PSObject -Property $props
    }# End of Get-ClusterInfo
    OUTPUT :
    PS C:\Users\XXXXX\Documents\Cluster> Get-ClusterInfo -ClusterName USXXXXXX
    Witness Restart Interval        : 15
    Enable Shared Volumes           : Enabled
    Recent Events Reset Time        : 1/17/2017 10:48:03 PM
    Dynamic Quorum                  : 1
    Lower Quorum Priority NodeId    : 0
    Prevent Quorum                  : 0
    Quorum Arbitration Time Max (s) : 20
    Witness Database Write Timeout  : 300
    Cluster Name                    : USXXXXXXXXX
    Shutdown Timeout In Minutes     : 20
    Security Level                  : 1
    Shared Volumes Root             : C:\ClusterStorage
    Cluster Domain                  :
    Netft IPSec Enabled             : 1
    Administrative Access Point     : ActiveDirectoryAndDns
    Database Read/Write Mode        : 0
    Message Buffer Length           : 50
    Backup In Progress              : 0
    Drain On Shutdown               : 1
    Witness Dynamic Weight          : 1
    Fix Quorum                      : 0

    PS C:\Users\XXXXX\Documents\Cluster>

  • #74200

    Points: 1,811
    Helping HandTeam Member
    Rank: Community Hero

    It'd help to know what you don't like about it ;).

  • #74218

    Points: 2
    Rank: Member

    Aah... The Don himself. 🙂
    I want it to appear in the way i defined my Hash table, beginning with Cluster name and Cluster domain name.
    Why are the rows/objects being moved around arbitrarily?

    • #74219

      Points: 642
      Helping Hand
      Rank: Major Contributor

      What version of Powershell do you use? Did you ever hear about "[ordered]" hashtables? 😉

    • #74267

      Points: 1,811
      Helping HandTeam Member
      Rank: Community Hero

      Two reasons.

      One, a normal hash tabl doesn't preserve order because it creates a memory-optimized version when it's stored.

      Second, a tool like you've written isn't suppose to worry about what the output looks like. While you can use "[ordered]$props =", I regard that as a kind of crutch that doesn't get you thinking about the right design patterns.

      Option A would be to pipe your output to Select-Object or a Format- command. They'll preserve the order of whatever you specify for display.

      Option B would be to put your tool into a script module, create a manifest for it, and have the manifest define a default view – which will give you additional control over the output display, without affecting the integrity of the underlying data. "Learn PowerShell Toolmaking in a Month of Lunches" covers this technique in excruciating detail.

      Either of these approaches would be valuable for you to learn and understand, whereas [ordered] – while it will accomplish your short-term goal – won't make you a smarter person.

  • #74407

    Points: 2
    Rank: Member

    Thank you Olaf! I had forgotten about ordered dictionary.

    @ Don : Great explanation. While ordered dictionary will take care of my short term requirement, I will work on Option A/Option B as the long term solution.

The topic ‘Incorrect Output Format’ is closed to new replies.

denizli escort samsun escort muğla escort ataşehir escort kuşadası escort