10 Replies Latest reply: Jun 14, 2013 7:48 AM by JSHACHER11 RSS

loop

JSHACHER11 Cyclist
Currently Being Moderated

Following up on my last post, I have this script that I need to loop

 

 

++++++++++++++++++++++++++++++++++++++

 

 

 

Import-Module Dataontap

write-host ""

write-host ""

write-host "This script will list volumes over 80% full, the containing aggregates and snapmirror relationships" -foregroundcolor yellow

write-host ""

write-host ""

write-host "You will also get an option to increase a volume size" -foregroundcolor yellow

write-host ""

write-host ""

$filer = Read-Host "Enter the filer name"

$user = Read-Host "Enter username"

Connect-NaController -Name $filer -Credential $user

get-navol | ? {$_.used -gt 80} | select name,used,@{Name="Available Size (in GB)";Expression={[math]::truncate($_.Available/1gb)}},@{Name="Total Size (in GB)";Expression={[math]::truncate($_.sizetotal/1gb)}} | ft -Autosize | Out-String

write-host ""

write-host ""

write-host "Here are the aggregates:" -foregroundcolor yellow

write-host ""

write-host ""

get-naaggr | select name,@{Name="Total Size (in GB)";Expression={[math]::truncate($_.totalsize/1gb)}},used,@{Name="Available Size (in GB)";Expression={[math]::truncate($_.available/1gb)}} | ft -Autosize | Out-String

write-host ""

write-host ""

write-host "and the snapmirror relationships:" -foregroundcolor yellow

write-host ""

write-host ""

get-navol | ? {$_.used -gt 80} | get-nasnapmirror | select source,destination | ft -Autosize | Out-String

write-host ""

write-host ""

$ans = Read-Host -prompt "Would you like to increase one of the volumes? [Y/N]"

write-host ""

write-host ""

if ($ans -eq "N") {

exit

} else {

$vol = Read-Host "Enter volume name"

$size = Read-Host "How much more space do you want to give it? (example: +100g)"

Set-NaVolsize -Name $vol -NewSize $size -Confirm

Write-Host ""

Write-Host ""

Write-Host "Check the new size:" -foregroundcolor yellow

Write-Host ""

Write-Host ""

Get-NaVol -Name $vol | select name,used,@{Name="Available Size (in GB)";Expression={[math]::truncate($_.Available/1gb)}},@{Name="Total Size (in GB)";Expression={[math]::truncate($_.sizetotal/1gb)}}

}

 

 

 

+++++++++++++++++++++++++++++++++++++++++++

 

The above gives me the option to increase a volume size but will only run once. I'm after a loop that will give me an option to choose to run the Set-NaVolsize again.

It should be something like this at the end of the script:

 

$ans = Read-Host -prompt "Would you like to increase another volumes? [Y/N]"

if ($ans -eq "N") {

exit

} else {

$vol = Read-Host "Enter volume name"

$size = Read-Host "How much more space do you want to give it? (example: +100g)"

Set-NaVolsize -Name $vol -NewSize $size -Confirm

Write-Host ""

Write-Host ""

Write-Host "Check the new size:" -foregroundcolor yellow

Write-Host ""

Write-Host ""

Get-NaVol -Name $vol | select name,used,@{Name="Available Size (in GB)";Expression={[math]::truncate($_.Available/1gb)}},@{Name="Total Size (in GB)";Expression={[math]::truncate($_.sizetotal/1gb)}}

}

 

so the above should loop until the input is N (no) - how do I do that?

 

Thank you

  • Re: loop
    JGPSHNTAP Kart Racer
    Currently Being Moderated

    Ok, so let me address a few issues here

     

    First, you shouldn't be importing the module every time you run the script.  You should add it to your profile.  And someone mentioned to me that the module will load automatically in 3.0, but i haven't tested that.  Look up Powershell profiles. 

     

    First, you should eliminate all the Write-host ""

     

    You should use something like

    Write-Host "`n`nCheck the new size:`n`n" -foregroundcolor yellow

     

    Also, as stated in previous email, you should be using the convertto-formattednumber cmdlet in place of - Expression={[math]::truncate($_.Available/1gb)}},    It's a custom Dataontap module cmdlet that will help with other future scripts

     

    As for your loop. you need to focus on something like Do.... Until.

     

    something like

     

    Do {

    $ans = Read-Host -prompt "Would you like to increase one of the volumes? [Y/N]"

    write-host ""

    write-host ""

    if ($ans -eq "N") {

    exit

    } else {

    $vol = Read-Host "Enter volume name"

    $size = Read-Host "How much more space do you want to give it? (example: +100g)"

    Set-NaVolsize -Name $vol -NewSize $size -Confirm

    Write-Host ""

    Write-Host ""

    Write-Host "Check the new size:" -foregroundcolor yellow

    Write-Host ""

    Write-Host ""

    Get-NaVol -Name $vol | select name,used,@{Name="Available Size (in GB)";Expression={[math]::truncate($_.Available/1gb)}},@{Name="Total Size (in GB)";Expression={[math]::truncate($_.sizetotal/1gb)}}

    }

     

    }

    Until ( $ans -eq "N")

     

    Enjoy!

    • Re: loop
      JGPSHNTAP Kart Racer
      Currently Being Moderated

      And if you are going to do it that way, you should probably remove the if/else

      • Re: loop
        JSHACHER11 Cyclist
        Currently Being Moderated

        sweet, thanks

         

        so it should look like that?

         

         

         

        Do {

        $ans = Read-Host -prompt "Would you like to increase one of the volumes? [Y/N]"

        $vol = Read-Host "`n`nEnter volume name`n`n"

        $size = Read-Host "`n`nHow much more space do you want to give it? (example: +100g)`n`n"

        Set-NaVolsize -Name $vol -NewSize $size -Confirm

        Write-Host "`n`nCheck the new size:`n`n" -foregroundcolor yellow

        Get-NaVol -Name $vol | select name,used,@{Name="Available Size (in GB)";Expression={[math]::truncate($_.Available/1gb)}},@{Name="Total Size (in GB)";Expression={[math]::truncate($_.sizetotal/1gb)}}

        }

        Until ( $ans -eq "N")

        • Re: loop
          KARL.BUSTAMANTE Novice
          Currently Being Moderated

          Hi Joel,

          Why not use :

           

          function volincrease {

              $vol = Read-Host "`n`nEnter volume name`n`n"

              $size = Read-Host "`n`nHow much more space do you want to give it? (example: +100g)`n`n"

              Set-NaVolsize -Name $vol -NewSize $size -Confirm

              Write-Host "`n`nCheck the new size:`n`n" -foregroundcolor yellow

              Get-NaVol -Name $vol | select name,used,@{Name="Available Size (in GB)";Expression={[math]::truncate($_.Available/1gb)}},@{Name="Total Size (in GB)";Expression={[math]::truncate($_.sizetotal/1gb)}}

          }

           

                  $yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes",""

                  $no = New-Object System.Management.Automation.Host.ChoiceDescription "&No",""

                  $choices = [System.Management.Automation.Host.ChoiceDescription[]]($yes,$no)

                  $caption = "Volume Increase"

                  $message = "Would you like to increase one of the volumes?"

                  $result = $Host.UI.PromptForChoice($caption,$message,$choices,0)

                  if($result -eq 0) { volincrease }

                  if($result -eq 1) { exit }

          • Re: loop
            JSHACHER11 Cyclist
            Currently Being Moderated

            Hi Karl

             

            a. Josh told me not to use functions

            b. That is a bit beyond my basic knowledge. What is 'New-Object System.Management.Automation.Host.ChoiceDescription'?

             

            Cheers

            • Re: loop
              JGPSHNTAP Kart Racer
              Currently Being Moderated

              No, I said, in your last implementation of the script a function was pointless...

               

              A function in this case would be good...

              • Re: loop
                JGPSHNTAP Kart Racer
                Currently Being Moderated

                I tend to lean more towards switch statements as well in this nstance.

                 

                Switch ( $ans )

                {

                    0 { volincrease}

                    1 {

                 

                        Write-Host "`nYou have selected Exit`n"

                        timeout /t -1

                         cls

                        Exit

                }

                }

  • Re: loop
    KARL.BUSTAMANTE Novice
    Currently Being Moderated

    Import-Module Dataontap

     

    function volincrease {

        $vol = Read-Host "`n`nEnter volume name`n`n"

        $size = Read-Host "`n`nHow much more space do you want to give it? (example: +100g)`n`n"

        Set-NaVolsize -Name $vol -NewSize $size -Confirm

        Write-Host "`n`nCheck the new size:`n`n" -foregroundcolor yellow

        Get-NaVol -Name $vol | select name,used,@{Name="Available Size (in GB)";Expression={[math]::truncate($_.Available/1gb)}},@{Name="Total Size (in GB)";Expression={[math]::truncate($_.sizetotal/1gb)}}

    }

     

    write-host "This script will list volumes over 80% full, the containing aggregates and snapmirror relationships" -foregroundcolor yellow

     

    write-host "`n`nYou will also get an option to increase a volume size`n`n" -foregroundcolor yellow

     

    $filer = Read-Host "Enter the filer name"

    $user = Read-Host "Enter username"

     

    Connect-NaController -Name $filer -Credential $user

     

    do {

        get-navol | ? {$_.used -gt 80} | select name,used,@{Name="Available Size (in GB)";Expression={[math]::truncate($_.Available/1gb)}},@{Name="Total Size (in GB)";Expression={[math]::truncate($_.sizetotal/1gb)}} | ft -Autosize | Out-String

        write-host "`n`nHere are the aggregates:`n`n" -foregroundcolor yellow

     

        get-naaggr | select name,@{Name="Total Size (in GB)";Expression={[math]::truncate($_.totalsize/1gb)}},used,@{Name="Available Size (in GB)";Expression={[math]::truncate($_.available/1gb)}} | ft -Autosize | Out-String

     

        write-host "`n`nand the snapmirror relationships:`n`n" -foregroundcolor yellow

     

        get-navol | ? {$_.used -gt 80} | get-nasnapmirror | select source,destination | ft -Autosize | Out-String

           

        write-host "`n`n"

     

        $yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes",""

        $no = New-Object System.Management.Automation.Host.ChoiceDescription "&No",""

        $choices = [System.Management.Automation.Host.ChoiceDescription[]]($yes,$no)

        $caption = "Volume Increase"

        $message = "Would you like to increase one of the volumes?"

        $result = $Host.UI.PromptForChoice($caption,$message,$choices,0)

        if($result -eq 0) { volincrease }

        if($result -eq 1) { exit }

    } while (1 -gt 0)

More Like This

  • Retrieving data ...

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points