The transition to NetApp MS Azure AD B2C is complete. If you missed the pre-registration, you will be invited to reigister at next log in.
Please note that access to your NetApp data may take up to 1 hour.
To learn more, read the FAQ and watch the video.
Need assistance? Complete this form and select “Registration Issue” as the Feedback Category.

Microsoft Virtualization Discussions

loop

JSHACHER11

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

1 ACCEPTED SOLUTION

JGPSHNTAP

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!

View solution in original post

10 REPLIES 10

KARL_BUSTAMANTE

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)

Check out my script for powershell examples :         http://mymsworld.kahsky.com/?p=54

This works actually only for Cluster mode, I'll add some 7-mode utilities soon.

Cheers,

Karl

thanks guys!

JGPSHNTAP

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!

View solution in original post

JGPSHNTAP

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

JSHACHER11

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")

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 }

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

JGPSHNTAP

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

A function in this case would be good...

JGPSHNTAP

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

}

}

Announcements
NetApp on Discord Image

We're on Discord, are you?

Live Chat, Watch Parties, and More!

Explore Banner

Meet Explore, NetApp’s digital sales platform

Engage digitally throughout the sales process, from product discovery to configuration, and handle all your post-purchase needs.

NetApp Insights to Action
I2A Banner
Public