<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Quota Management in NetApp PowerShell Toolkit broken? in Microsoft Virtualization Discussions</title>
    <link>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453894#M6918</link>
    <description>&lt;P&gt;Hi Wolfgang,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Note that you can also use the "Invoke-NcCli" CmdLet (which can be used as an alternative to SSH). Essentially this will invoke the private REST CLI (so if there's ever an issue using a CmdLet or a command that has no associated CmdLet then you can resort to this method). Here's an example of creating a Quota:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;Connect-NcController -Name 192.168.100.2 -Credential $credential | Out-Null 
Invoke-NcCli -Command "volume quota policy rule create" -Body '{"type":  "user", "vserver":  "vserver1", "policy-name":  "default", "target":  "TESTLAB\\N2003905", "qtree":  "",  "disk-limit":  "5GB", "volume":  "cifs_data_001"}'&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This might be an option for you if you prefer not to add custom functions to your code to invoke the REST API and just use native CmdLet's within the PSTK.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hope that helps&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/Matt&lt;/P&gt;</description>
    <pubDate>Thu, 11 Jul 2024 06:29:45 GMT</pubDate>
    <dc:creator>mbeattie</dc:creator>
    <dc:date>2024-07-11T06:29:45Z</dc:date>
    <item>
      <title>Quota Management in NetApp PowerShell Toolkit broken?</title>
      <link>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453830#M6913</link>
      <description>&lt;P&gt;I'm trying to port an old NetApp PowerShell Toolkit script running on an old server that is managing our home directory quota to the current version of the NetApp PowerShell Toolkit (&lt;FONT face="Arial" size="2"&gt;&lt;SPAN class=""&gt;&lt;FONT color="#000000"&gt;&lt;SPAN&gt;9.14.1.2401&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;) on an up-to-date server.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;First strange effect: Unless I specify &lt;EM&gt;-ZapiCall&lt;/EM&gt;, the &lt;EM&gt;Get-NcQuota&lt;/EM&gt; and &lt;EM&gt;Get-NcQuotaReport&lt;/EM&gt; are useless for me, as the &lt;EM&gt;QuotaTarget&lt;/EM&gt; fields come up blank. So -ZapiCall it must be, even if that interface is deprecated.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Next problem: I have a quota entry, that clearly exists:&lt;/P&gt;&lt;PRE&gt;&amp;gt; Get-NcQuota -Type User -Target AD\ratzka_t -Volume vol_HRZ_H -VserverContext vsrz001 -Qtree ""&lt;BR /&gt;&lt;BR /&gt;QuotaType QuotaTarget Volume Qtree DiskLimit FileLimit Vserver&lt;BR /&gt;--------- ----------- ------ ----- --------- --------- -------&lt;BR /&gt;user AD\ratzka_t vol_HRZ_H 36909875 - vsrz001&lt;/PRE&gt;&lt;P&gt;But trying to remove it gives me a confusing error message:&lt;/P&gt;&lt;PRE&gt;&amp;gt; Remove-NcQuota -Type User -Target AD\ratzka_t -Volume vol_HRZ_H -VserverContext vsrz001 -Qtree ""&lt;BR /&gt;Remove-NcQuota : Group parameter neither specified nor set&lt;BR /&gt;At line:1 char:1&lt;BR /&gt;+ Remove-NcQuota -Type User -Target AD\ratzka_t -Volume vol_HRZ_H -Vser ...&lt;BR /&gt;+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;BR /&gt;+ CategoryInfo : NotSpecified: (:) [Remove-NcQuota], ArgumentException&lt;BR /&gt;+ FullyQualifiedErrorId : Group is empty,DataONTAP.C.PowerShell.SDK.Cmdlets.Quota.RemoveNcQuota&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;Incidentally, searching for this error message turns up a suggestion to just do REST directly.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So is there anybody out there who is successfully using the NcQuota-cmdlets?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Kind Regards,&lt;/P&gt;&lt;P&gt;Wolfgang Ratzka&lt;/P&gt;</description>
      <pubDate>Tue, 09 Jul 2024 14:37:12 GMT</pubDate>
      <guid>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453830#M6913</guid>
      <dc:creator>Wolfgang_Ratzka</dc:creator>
      <dc:date>2024-07-09T14:37:12Z</dc:date>
    </item>
    <item>
      <title>Re: Quota Management in NetApp PowerShell Toolkit broken?</title>
      <link>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453863#M6914</link>
      <description>&lt;P&gt;Hi Wolfgang,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I had a look into the issue (both using an older PSTK version which works) and the latest version (which doesn't work). I think this might be related to the REST API implementation (which the PSTK is leveraging):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mbeattie_0-1720583348512.png" style="width: 400px;"&gt;&lt;img src="https://community.netapp.com/t5/image/serverpage/image-id/28654i7B1215EFE230C2D8/image-size/medium?v=v2&amp;amp;px=400" role="button" title="mbeattie_0-1720583348512.png" alt="mbeattie_0-1720583348512.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;I will reach out to the developers. As a workaround you can use functions in your code that leverage either REST API or the private REST CLI to invoke commands over HTTPS. Here are some examples&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Create a quota using the private REST CLI:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;Param(
    [Parameter(Mandatory = $True, HelpMessage = "The Cluster Name or IP Address")]
    [String]$Cluster,
    [Parameter(Mandatory = $True, HelpMessage = "The Vserver Name")]
    [String]$Vserver,
    [Parameter(Mandatory = $True, HelpMessage = "The Volume Name")]
    [String]$Volume,
    [Parameter(Mandatory = $False, HelpMessage = "The Qtree Name")]
    [String]$Qtree,
    [Parameter(Mandatory = $True, HelpMessage = "The Quota Policy Name")]
    [String]$QuotaPolicy,
    [Parameter(Mandatory = $True, HelpMessage = "The Quota Type")]
    [ValidateSet("group","tree","user")]
    [String]$QuotaType,
    [Parameter(Mandatory = $True, HelpMessage = "The Quota Target")]
    [String]$Target,
    [Parameter(Mandatory = $True, HelpMessage = "The Disk Limit size measured in the storage unit (KB, MB, GB, TB)")]
    [Int]$DiskLimit,
    [Parameter(Mandatory = $True, HelpMessage = "The Disk Limit in the storage type")]
    [ValidateSet("KB","MB","GB","TB")]
    [String]$StorageUnit,
    [Parameter(Mandatory = $True, HelpMessage = "The Credential to authenticate to the Cluster")]
    [ValidateNotNullOrEmpty()]
    [System.Management.Automation.PSCredential]$Credential
)
#'------------------------------------------------------------------------------
Function Get-OntapAuthorization{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory = $True, HelpMessage = "The Credential to authenticate to the ONTAP cluster")]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential
    )
    #'--------------------------------------------------------------------------
    #'Set the authentication header to connect to the cluster.
    #'--------------------------------------------------------------------------
    $auth    = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($Credential.UserName + ':' + $Credential.GetNetworkCredential().Password))
    $headers = @{
        "Authorization" = "Basic $auth"
        "Accept"        = "application/json"
        "Content-Type"  = "application/json"
    }
    Return $headers;
}#'End Function Get-OntapAuthorization.
#'------------------------------------------------------------------------------
Function New-OntapQuotaRule{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory = $True, HelpMessage = "The Cluster Name or IP Address")]
        [String]$Cluster,
        [Parameter(Mandatory = $True, HelpMessage = "The Vserver Name")]
        [String]$Vserver,
        [Parameter(Mandatory = $True, HelpMessage = "The Volume Name")]
        [String]$Volume,
        [Parameter(Mandatory = $False, HelpMessage = "The Qtree Name")]
        [String]$Qtree,
        [Parameter(Mandatory = $True, HelpMessage = "The Quota Policy Name")]
        [String]$QuotaPolicy,
        [Parameter(Mandatory = $True, HelpMessage = "The Quota Type")]
        [ValidateSet("group","tree","user")]
        [String]$QuotaType,
        [Parameter(Mandatory = $True, HelpMessage = "The Quota Target")]
        [String]$Target,
        [Parameter(Mandatory = $True, HelpMessage = "The Disk Limit in Bytes")]
        [Int]$DiskLimit,
        [Parameter(Mandatory = $True, HelpMessage = "The Disk Limit in the storage type")]
        [ValidateSet("KB","MB","GB","TB")]
        [String]$StorageUnit,
        [Parameter(Mandatory = $True, HelpMessage = "The Credentials to authenticate to the destination cluster")]
        [System.Management.Automation.PSCredential]$Credential
    )
    #'--------------------------------------------------------------------------
    #'Enumerate the SnapMirror relationship.
    #'--------------------------------------------------------------------------
    $headers         = Get-OntapAuthorization -Credential $Credential
    [String]$command = "volume quota policy rule create -vserver $Vserver -policy-name $QuotaPolicy -volume $Volume -type $QuotaType -target $Target "
    If($Qtree){
        $command += "-qtree $Qtree "
    }Else{
        $command += "-qtree '' "
    }
    [String]$command += "-disk-limit $DiskLimit"
    [String]$uri     = "https://$Cluster/api/private/cli/volume/quota/policy/rule"
    Write-Host "Executing Command`: $command"
    $cli = @{};
    $cli.Add("vserver", $Vserver)
    $cli.Add("policy-name", $QuotaPolicy)
    $cli.Add("volume", $Volume)
    $cli.Add("type", $QuotaType)
    $cli.Add("target", $Target)
    $cli.Add("disk-limit", $($DiskLimit.ToString() + $StorageUnit))
    If(($Qtree)){
        $cli.Add("qtree", $Qtree)
    }Else{
        $cli.Add("qtree", '')
    }
    $body = $cli | ConvertTo-Json
    Try{
        $response = Invoke-RestMethod -Method POST -Body $body -Uri $uri -Headers $headers -ErrorAction Stop
        Write-Host "Created Quota Policy Rule on cluster ""$Cluster"" using URI ""$uri"""
    }Catch{
        Write-Warning -Message $("Failed Creating Quota Policy Rule on cluster ""$Cluster"" using URI ""$uri"". Error " + $_.Exception.Message)
        Return $Null;
    }
    Return $response
}#'End Function New-OntapQuotaRule.
#'------------------------------------------------------------------------------
#'Set the Certificate Policy and TLS version.
#'------------------------------------------------------------------------------
If(-Not("TrustAllCertsPolicy" -As [Type])){
Add-Type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
    public bool CheckValidationResult(
    ServicePoint srvPoint, X509Certificate certificate,
    WebRequest request, int certificateProblem) {
        return true;
    }
}
"@
}
[System.Net.ServicePointManager]::SecurityProtocol  = [System.Net.SecurityProtocolType]'Tls12'
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
#'------------------------------------------------------------------------------
#'Create the Quota Policy Rule.
#'------------------------------------------------------------------------------
$response = New-OntapQuotaRule -Cluster $Cluster -Vserver $Vserver -Volume $Volume -Qtree $Qtree -QuotaPolicy $QuotaPolicy -QuotaType $QuotaType -Target $Target -DiskLimit $DiskLimit -StorageUnit $StorageUnit -Credential $Credential
#'------------------------------------------------------------------------------
&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Usage:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;PS C:\Scripts\PowerShell\Projects\SetQuotaCli&amp;gt; .\SetQuotaCli.ps1 -Cluster 192.168.100.2 -Vserver vserver1 -Volume cifs_data_001 -Qtree "" -QuotaPolicy default -QuotaType user -Target TESTLAB\N2003909 -DiskLimit 1 -StorageUni
t GB -Credential $credential
Executing Command: volume quota policy rule create -vserver vserver1 -policy-name default -volume cifs_data_001 -type user -target TESTLAB\N2003909 -qtree '' -disk-limit 1
Created Quota Policy Rule on cluster "192.168.100.2" using URI "https://192.168.100.2/api/private/cli/volume/quota/policy/rule"

cluster1::*&amp;gt; volume quota policy rule show -vserver vserver1 -volume cifs_data_001 -type user -policy-name default -target TESTLAB\N2003909

Vserver: vserver1          Policy: default           Volume: cifs_data_001

                                               Soft             Soft
                         User         Disk     Disk   Files    Files
Type   Target    Qtree   Mapping     Limit    Limit   Limit    Limit  Threshold
-----  --------  ------- -------  --------  -------  ------  -------  ---------
user   TESTLAB\N2003909  "" off        1GB        -       -        -          -&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here's an example using the REST API to remove a quota entry:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;Param(
    [Parameter(Mandatory = $True, HelpMessage = "The Cluster Name or IP Address")]
    [String]$Cluster,
    [Parameter(Mandatory = $True, HelpMessage = "The Vserver Name")]
    [String]$Vserver,
    [Parameter(Mandatory = $True, HelpMessage = "The Volume Name")]
    [String]$Volume,
    [Parameter(Mandatory = $False, HelpMessage = "The Qtree Name")]
    [String]$Qtree,
    [Parameter(Mandatory = $True, HelpMessage = "The Quota Policy Name")]
    [String]$QuotaPolicy,
    [Parameter(Mandatory = $True, HelpMessage = "The Quota Type")]
    [ValidateSet("group","tree","user")]
    [String]$QuotaType,
    [Parameter(Mandatory = $True, HelpMessage = "The Quota Target")]
    [String]$Target,
    [Parameter(Mandatory = $True, HelpMessage = "The Credential to authenticate to the Cluster")]
    [ValidateNotNullOrEmpty()]
    [System.Management.Automation.PSCredential]$Credential
)
#'------------------------------------------------------------------------------
Function Get-OntapAuthorization{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory = $True, HelpMessage = "The Credential to authenticate to the ONTAP cluster")]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential
    )
    #'--------------------------------------------------------------------------
    #'Set the authentication header to connect to the cluster.
    #'--------------------------------------------------------------------------
    $auth    = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($Credential.UserName + ':' + $Credential.GetNetworkCredential().Password))
    $headers = @{
        "Authorization" = "Basic $auth"
        "Accept"        = "application/json"
        "Content-Type"  = "application/json"
    }
    Return $headers;
}#'End Function Get-OntapAuthorization.
#'------------------------------------------------------------------------------
Function Remove-OntapQuotaRule{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory = $True, HelpMessage = "The Cluster Name or IP Address")]
        [String]$Cluster,
        [Parameter(Mandatory = $True, HelpMessage = "The Vserver Name")]
        [String]$Vserver,
        [Parameter(Mandatory = $True, HelpMessage = "The Volume Name")]
        [String]$Volume,
        [Parameter(Mandatory = $False, HelpMessage = "The Qtree Name")]
        [String]$Qtree,
        [Parameter(Mandatory = $True, HelpMessage = "The Quota Policy Name")]
        [String]$QuotaPolicy,
        [Parameter(Mandatory = $True, HelpMessage = "The Quota Type")]
        [ValidateSet("group","tree","user")]
        [String]$QuotaType,
        [Parameter(Mandatory = $True, HelpMessage = "The Quota Target")]
        [String]$Target,
        [Parameter(Mandatory = $True, HelpMessage = "The Credentials to authenticate to the destination cluster")]
        [System.Management.Automation.PSCredential]$Credential
    )
    #'--------------------------------------------------------------------------
    #'Enumerate the quota.
    #'--------------------------------------------------------------------------
    $headers      = Get-OntapAuthorization -Credential $Credential
    [String]$uri  = "https://$Cluster/api/storage/quota/rules?type=$QuotaType"
    If($QuotaType -eq "user"){
        [String]$user = $Target.Replace("\", "%5C")
        [String]$uri += "&amp;amp;users.name=$user"
    }
    [String]$uri += "&amp;amp;svm.name=$Vserver&amp;amp;volume.name=$Volume&amp;amp;fields=users.name"
    Try{
        $response = Invoke-RestMethod -Method GET -Uri $uri -Headers $headers -ErrorAction Stop
        Write-Host "Enumerated Quota Policy Rule on cluster ""$Cluster"" using URI ""$uri"""
    }Catch{
        Write-Warning -Message $("Failed Enumerating Quota Policy Rule on cluster ""$Cluster"" using URI ""$uri"". Error " + $_.Exception.Message)
        Return $Null;
    }
    #'--------------------------------------------------------------------------
    #'Enumerate the quota rule's UUID for deletion.
    #'--------------------------------------------------------------------------
    If($response.num_records -eq 1){
        [String]$uuid = $response.records.uuid
    }Else{
        Write-Warning -Message "Failed Enumerating Quota Policy Rule on cluster ""$Cluster"" using URI ""$uri"""
        Return $Null;
    }
    #'--------------------------------------------------------------------------
    #'Delete the quota rule.
    #'--------------------------------------------------------------------------
    [String]$uri = "https://$Cluster/api/storage/quota/rules/$uuid"
    Try{
        $response = Invoke-RestMethod -Method DELETE -Uri $uri -Headers $headers -ErrorAction Stop
        Write-Host "Deleted Quota Policy Rule on cluster ""$Cluster"" using URI ""$uri"""
    }Catch{
        Write-Warning -Message $("Failed Deleting Quota Policy Rule on cluster ""$Cluster"" using URI ""$uri"". Error " + $_.Exception.Message)
        Return $Null;
    }
    Return $response
}#'End Function Remove-OntapQuotaRule.
#'------------------------------------------------------------------------------
#'Set the Certificate Policy and TLS version.
#'------------------------------------------------------------------------------
If(-Not("TrustAllCertsPolicy" -As [Type])){
Add-Type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
    public bool CheckValidationResult(
    ServicePoint srvPoint, X509Certificate certificate,
    WebRequest request, int certificateProblem) {
        return true;
    }
}
"@
}
[System.Net.ServicePointManager]::SecurityProtocol  = [System.Net.SecurityProtocolType]'Tls12'
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
#'------------------------------------------------------------------------------
#'Delete the Quota Policy Rule.
#'------------------------------------------------------------------------------
$response = Remove-OntapQuotaRule -Cluster $Cluster -Vserver $Vserver -Volume $Volume -Qtree $Qtree -QuotaPolicy $QuotaPolicy -QuotaType $QuotaType -Target $Target -Credential $Credential
#'------------------------------------------------------------------------------
&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Usage:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;PS C:\Scripts\PowerShell\Projects\RemoveQuotaCli&amp;gt; .\RemoveQuotaCli.ps1 -Cluster 192.168.100.2 -Vserver vserver1 -Volume cifs_data_001 -Qtree "" -QuotaPolicy default -QuotaType user -Target "TESTLAB\N2003909" -Credential $cre
dential
Enumerated Quota Policy Rule on cluster "192.168.100.2" using URI "https://192.168.100.2/api/storage/quota/rules?type=user&amp;amp;users.name=TESTLAB%5CN2003909&amp;amp;svm.name=vserver1&amp;amp;volume.name=cifs_data_001&amp;amp;fields=users.name"
Deleted Quota Policy Rule on cluster "192.168.100.2" using URI "https://192.168.100.2/api/storage/quota/rules/83406eaf-3e8c-11ef-ac71-005056a0bb1e"

cluster1::*&amp;gt; volume quota policy rule show -vserver vserver1 -volume cifs_data_001 -type user -policy-name default -target TESTLAB\N2003909
There are no entries matching your query.&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;Hope that helps&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/Matt&lt;/P&gt;</description>
      <pubDate>Wed, 10 Jul 2024 07:33:01 GMT</pubDate>
      <guid>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453863#M6914</guid>
      <dc:creator>mbeattie</dc:creator>
      <dc:date>2024-07-10T07:33:01Z</dc:date>
    </item>
    <item>
      <title>Re: Quota Management in NetApp PowerShell Toolkit broken?</title>
      <link>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453868#M6916</link>
      <description>&lt;P&gt;I have continued looking for a solution myself and found it easier to use &lt;EM&gt;Invoke-NcSsh&lt;/EM&gt; together with the &lt;EM&gt;volume quota policy rule&lt;/EM&gt; commands, as this requires less "glue" and fits into the original script quite nicely. (Well, the quota in my first attempt where too generous by a factor of 1024...)&lt;/P&gt;&lt;P&gt;I will, however, look into your suggestions as I am not sure that we shouldn't move from PowerShell Toolkit to REST-API or REST-CLI.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks a lot&lt;/P&gt;&lt;P&gt;Wolfgang&lt;/P&gt;</description>
      <pubDate>Wed, 10 Jul 2024 14:12:18 GMT</pubDate>
      <guid>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453868#M6916</guid>
      <dc:creator>Wolfgang_Ratzka</dc:creator>
      <dc:date>2024-07-10T14:12:18Z</dc:date>
    </item>
    <item>
      <title>Re: Quota Management in NetApp PowerShell Toolkit broken?</title>
      <link>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453891#M6917</link>
      <description>&lt;P&gt;Hi Wolfgang&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There is also an "Invoke-NcCli" CmdLet that can be used as an alternative to SSH which uses the private REST CLI but I prefer to define my own functions. Anyway i did ping the PSTK developers to take a look into the issues with these CmdLet's so hopefully it gets fixed in a future release.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/Matt&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jul 2024 04:34:40 GMT</pubDate>
      <guid>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453891#M6917</guid>
      <dc:creator>mbeattie</dc:creator>
      <dc:date>2024-07-11T04:34:40Z</dc:date>
    </item>
    <item>
      <title>Re: Quota Management in NetApp PowerShell Toolkit broken?</title>
      <link>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453894#M6918</link>
      <description>&lt;P&gt;Hi Wolfgang,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Note that you can also use the "Invoke-NcCli" CmdLet (which can be used as an alternative to SSH). Essentially this will invoke the private REST CLI (so if there's ever an issue using a CmdLet or a command that has no associated CmdLet then you can resort to this method). Here's an example of creating a Quota:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;Connect-NcController -Name 192.168.100.2 -Credential $credential | Out-Null 
Invoke-NcCli -Command "volume quota policy rule create" -Body '{"type":  "user", "vserver":  "vserver1", "policy-name":  "default", "target":  "TESTLAB\\N2003905", "qtree":  "",  "disk-limit":  "5GB", "volume":  "cifs_data_001"}'&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This might be an option for you if you prefer not to add custom functions to your code to invoke the REST API and just use native CmdLet's within the PSTK.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hope that helps&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/Matt&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jul 2024 06:29:45 GMT</pubDate>
      <guid>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453894#M6918</guid>
      <dc:creator>mbeattie</dc:creator>
      <dc:date>2024-07-11T06:29:45Z</dc:date>
    </item>
    <item>
      <title>Re: Quota Management in NetApp PowerShell Toolkit broken?</title>
      <link>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453962#M6921</link>
      <description>&lt;P&gt;In Rest QuotaTarget is No Rest Equivalent&lt;/P&gt;&lt;TABLE width="100%" cellspacing="0" cellpadding="4"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class=""&gt;quota-target&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class=""&gt;&lt;EM&gt;NO REST EQUIVALENT&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class=""&gt;The REST API uses one of the three separate fields instead of quota-target: users/group/qtree.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Mon, 15 Jul 2024 18:10:33 GMT</pubDate>
      <guid>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453962#M6921</guid>
      <dc:creator>saharsh</dc:creator>
      <dc:date>2024-07-15T18:10:33Z</dc:date>
    </item>
    <item>
      <title>Re: Quota Management in NetApp PowerShell Toolkit broken?</title>
      <link>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453963#M6922</link>
      <description>&lt;P&gt;For Remove-NcQuota could you please share the debug logs with us on ng-ontap-pstk-rest DL it will help us to identify the issue more efficiently.&lt;/P&gt;&lt;P&gt;You can enable the debug logs using &lt;STRONG&gt;Set-NaToolkitConfiguration debug &lt;/STRONG&gt;command.&lt;/P&gt;</description>
      <pubDate>Mon, 15 Jul 2024 18:16:31 GMT</pubDate>
      <guid>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Quota-Management-in-NetApp-PowerShell-Toolkit-broken/m-p/453963#M6922</guid>
      <dc:creator>saharsh</dc:creator>
      <dc:date>2024-07-15T18:16:31Z</dc:date>
    </item>
  </channel>
</rss>

