diff --git a/src/Network/Network.Management.Sdk/Generated/INetworkManagementClient.cs b/src/Network/Network.Management.Sdk/Generated/INetworkManagementClient.cs
index e4d76050c00b..ecf21035a88f 100644
--- a/src/Network/Network.Management.Sdk/Generated/INetworkManagementClient.cs
+++ b/src/Network/Network.Management.Sdk/Generated/INetworkManagementClient.cs
@@ -766,6 +766,10 @@ public partial interface INetworkManagementClient : System.IDisposable
/// Gets the IVirtualNetworkAppliancesOperations
///
IVirtualNetworkAppliancesOperations VirtualNetworkAppliances { get; }
+ ///
+ /// Gets the IVirtualNetworkApplianceCapabilitiesOperations
+ ///
+ IVirtualNetworkApplianceCapabilitiesOperations VirtualNetworkApplianceCapabilities { get; }
///
/// Gets the IExpressRouteGatewaysOperations
diff --git a/src/Network/Network.Management.Sdk/Generated/IVirtualNetworkApplianceCapabilitiesOperations.cs b/src/Network/Network.Management.Sdk/Generated/IVirtualNetworkApplianceCapabilitiesOperations.cs
new file mode 100644
index 000000000000..21a8775dc8d9
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/IVirtualNetworkApplianceCapabilitiesOperations.cs
@@ -0,0 +1,213 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+namespace Microsoft.Azure.Management.Network
+{
+ using Microsoft.Rest.Azure;
+ using Models;
+
+ ///
+ /// VirtualNetworkApplianceCapabilitiesOperations operations.
+ ///
+ public partial interface IVirtualNetworkApplianceCapabilitiesOperations
+ {
+ ///
+ /// Gets all capabilities of a virtual network appliance.
+ ///
+ ///
+ /// Gets all capabilities of a virtual network appliance.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// Thrown when the operation returned an invalid status code
+ ///
+ ///
+ /// Thrown when unable to deserialize the response
+ ///
+ System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
+
+ ///
+ /// Gets the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// Gets the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// Thrown when the operation returned an invalid status code
+ ///
+ ///
+ /// Thrown when unable to deserialize the response
+ ///
+ System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
+
+ ///
+ /// Creates or updates a capability on a virtual network appliance.
+ ///
+ ///
+ /// Creates or updates a capability on a virtual network appliance.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// Parameters supplied to the create or update virtual network appliance
+ /// capability operation.
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// Thrown when the operation returned an invalid status code
+ ///
+ ///
+ /// Thrown when unable to deserialize the response
+ ///
+ System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
+
+ ///
+ /// Deletes the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// Deletes the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// Thrown when the operation returned an invalid status code
+ ///
+ System.Threading.Tasks.Task> DeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
+
+ ///
+ /// Creates or updates a capability on a virtual network appliance.
+ ///
+ ///
+ /// Creates or updates a capability on a virtual network appliance.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// Parameters supplied to the create or update virtual network appliance
+ /// capability operation.
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// Thrown when the operation returned an invalid status code
+ ///
+ ///
+ /// Thrown when unable to deserialize the response
+ ///
+ System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
+
+ ///
+ /// Deletes the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// Deletes the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// Thrown when the operation returned an invalid status code
+ ///
+ System.Threading.Tasks.Task> BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
+
+ ///
+ /// Gets all capabilities of a virtual network appliance.
+ ///
+ ///
+ /// Gets all capabilities of a virtual network appliance.
+ ///
+ ///
+ /// The NextLink from the previous successful call to List operation.
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// Thrown when the operation returned an invalid status code
+ ///
+ ///
+ /// Thrown when unable to deserialize the response
+ ///
+ System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
+
+ }
+}
\ No newline at end of file
diff --git a/src/Network/Network.Management.Sdk/Generated/Models/Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0.cs b/src/Network/Network.Management.Sdk/Generated/Models/Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0.cs
new file mode 100644
index 000000000000..9ab5b0d62b5d
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/Models/Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0.cs
@@ -0,0 +1,65 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+namespace Microsoft.Azure.Management.Network.Models
+{
+ using System.Linq;
+
+ ///
+ /// Concrete proxy resource types can be created by aliasing this type using a
+ /// specific property type.
+ ///
+ public partial class Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0 : ProxyResourceAutoGenerated
+ {
+ ///
+ /// Initializes a new instance of the Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0 class.
+ ///
+ public Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0()
+ {
+ CustomInit();
+ }
+
+ ///
+ /// Initializes a new instance of the Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0 class.
+ ///
+
+ /// Fully qualified resource ID for the resource. E.g.
+ /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
+ ///
+
+ /// The name of the resource
+ ///
+
+ /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
+ /// "Microsoft.Storage/storageAccounts"
+ ///
+
+ /// Azure Resource Manager metadata containing createdBy and modifiedBy
+ /// information.
+ ///
+
+ /// The resource-specific properties for this resource.
+ ///
+ public Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties))
+
+ : base(id, name, type, systemData)
+ {
+ this.Properties = properties;
+ CustomInit();
+ }
+
+ ///
+ /// An initialization method that performs custom operations like setting defaults
+ ///
+ partial void CustomInit();
+
+
+ ///
+ /// Gets or sets the resource-specific properties for this resource.
+ ///
+ [Newtonsoft.Json.JsonProperty(PropertyName = "properties")]
+ public VirtualNetworkApplianceCapabilityProperties Properties {get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Network/Network.Management.Sdk/Generated/Models/Nat64Capability.cs b/src/Network/Network.Management.Sdk/Generated/Models/Nat64Capability.cs
new file mode 100644
index 000000000000..69b7b6189418
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/Models/Nat64Capability.cs
@@ -0,0 +1,75 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+namespace Microsoft.Azure.Management.Network.Models
+{
+ using System.Linq;
+
+ ///
+ /// The NAT64 capability. Enables stateful NAT64 translation (IPv6-only
+ /// workloads reaching IPv4
+ /// destinations) on the appliance's floating NIC; supported on a dual-stack
+ /// appliance. This kind is
+ /// property-less: it carries no `ipVersion` (the parent appliance's
+ /// dual-stack configuration is the
+ /// precondition, service-validated) beyond the properties common to every
+ /// capability.
+ ///
+ [Newtonsoft.Json.JsonObject("NAT64")]
+ public partial class Nat64Capability : VirtualNetworkApplianceCapability
+ {
+ ///
+ /// Initializes a new instance of the Nat64Capability class.
+ ///
+ public Nat64Capability()
+ {
+ CustomInit();
+ }
+
+ ///
+ /// Initializes a new instance of the Nat64Capability class.
+ ///
+
+ /// Fully qualified resource ID for the resource. E.g.
+ /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
+ ///
+
+ /// The name of the resource
+ ///
+
+ /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
+ /// "Microsoft.Storage/storageAccounts"
+ ///
+
+ /// Azure Resource Manager metadata containing createdBy and modifiedBy
+ /// information.
+ ///
+
+ /// The resource-specific properties for this resource.
+ ///
+ public Nat64Capability(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties))
+
+ : base(id, name, type, systemData, properties)
+ {
+ CustomInit();
+ }
+
+ ///
+ /// An initialization method that performs custom operations like setting defaults
+ ///
+ partial void CustomInit();
+
+ ///
+ /// Validate the object.
+ ///
+ ///
+ /// Thrown if validation fails
+ ///
+ public override void Validate()
+ {
+ base.Validate();
+ }
+ }
+}
diff --git a/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapability.cs b/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapability.cs
new file mode 100644
index 000000000000..c5fcfbf23520
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapability.cs
@@ -0,0 +1,70 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+namespace Microsoft.Azure.Management.Network.Models
+{
+ using System.Linq;
+
+ ///
+ /// The Private Link Gateway (slow-path) capability. Private Link programming
+ /// offloaded to the appliance's gateway;
+ /// IPv6 on a dual-stack appliance.
+ ///
+ [Newtonsoft.Json.JsonObject("PLGateway")]
+ public partial class PLGatewayCapability : VirtualNetworkApplianceCapability
+ {
+ ///
+ /// Initializes a new instance of the PLGatewayCapability class.
+ ///
+ public PLGatewayCapability()
+ {
+ CustomInit();
+ }
+
+ ///
+ /// Initializes a new instance of the PLGatewayCapability class.
+ ///
+
+ /// Fully qualified resource ID for the resource. E.g.
+ /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
+ ///
+
+ /// The name of the resource
+ ///
+
+ /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
+ /// "Microsoft.Storage/storageAccounts"
+ ///
+
+ /// Azure Resource Manager metadata containing createdBy and modifiedBy
+ /// information.
+ ///
+
+ /// The resource-specific properties for this resource.
+ ///
+ public PLGatewayCapability(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties))
+
+ : base(id, name, type, systemData, properties)
+ {
+ CustomInit();
+ }
+
+ ///
+ /// An initialization method that performs custom operations like setting defaults
+ ///
+ partial void CustomInit();
+
+ ///
+ /// Validate the object.
+ ///
+ ///
+ /// Thrown if validation fails
+ ///
+ public override void Validate()
+ {
+ base.Validate();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapability.cs b/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapability.cs
new file mode 100644
index 000000000000..6d165b841860
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapability.cs
@@ -0,0 +1,70 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+namespace Microsoft.Azure.Management.Network.Models
+{
+ using System.Linq;
+
+ ///
+ /// The Private Link Gateway FastPath capability. Private Link fast-path
+ /// programming on the appliance's gateway;
+ /// supported on a dual-stack appliance.
+ ///
+ [Newtonsoft.Json.JsonObject("PLGatewayFastpath")]
+ public partial class PLGatewayFastpathCapability : VirtualNetworkApplianceCapability
+ {
+ ///
+ /// Initializes a new instance of the PLGatewayFastpathCapability class.
+ ///
+ public PLGatewayFastpathCapability()
+ {
+ CustomInit();
+ }
+
+ ///
+ /// Initializes a new instance of the PLGatewayFastpathCapability class.
+ ///
+
+ /// Fully qualified resource ID for the resource. E.g.
+ /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
+ ///
+
+ /// The name of the resource
+ ///
+
+ /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
+ /// "Microsoft.Storage/storageAccounts"
+ ///
+
+ /// Azure Resource Manager metadata containing createdBy and modifiedBy
+ /// information.
+ ///
+
+ /// The resource-specific properties for this resource.
+ ///
+ public PLGatewayFastpathCapability(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties))
+
+ : base(id, name, type, systemData, properties)
+ {
+ CustomInit();
+ }
+
+ ///
+ /// An initialization method that performs custom operations like setting defaults
+ ///
+ partial void CustomInit();
+
+ ///
+ /// Validate the object.
+ ///
+ ///
+ /// Thrown if validation fails
+ ///
+ public override void Validate()
+ {
+ base.Validate();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapability.cs b/src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapability.cs
new file mode 100644
index 000000000000..32feed18d6c1
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapability.cs
@@ -0,0 +1,70 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+namespace Microsoft.Azure.Management.Network.Models
+{
+ using System.Linq;
+
+ ///
+ /// The Private Link IP-forwarders (NVA) capability. Private Link programming
+ /// offloaded to the appliance NVA;
+ /// IPv6 on a dual-stack appliance.
+ ///
+ [Newtonsoft.Json.JsonObject("PLIPForwarders")]
+ public partial class PlipForwardersCapability : VirtualNetworkApplianceCapability
+ {
+ ///
+ /// Initializes a new instance of the PlipForwardersCapability class.
+ ///
+ public PlipForwardersCapability()
+ {
+ CustomInit();
+ }
+
+ ///
+ /// Initializes a new instance of the PlipForwardersCapability class.
+ ///
+
+ /// Fully qualified resource ID for the resource. E.g.
+ /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
+ ///
+
+ /// The name of the resource
+ ///
+
+ /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
+ /// "Microsoft.Storage/storageAccounts"
+ ///
+
+ /// Azure Resource Manager metadata containing createdBy and modifiedBy
+ /// information.
+ ///
+
+ /// The resource-specific properties for this resource.
+ ///
+ public PlipForwardersCapability(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties))
+
+ : base(id, name, type, systemData, properties)
+ {
+ CustomInit();
+ }
+
+ ///
+ /// An initialization method that performs custom operations like setting defaults
+ ///
+ partial void CustomInit();
+
+ ///
+ /// Validate the object.
+ ///
+ ///
+ /// Thrown if validation fails
+ ///
+ public override void Validate()
+ {
+ base.Validate();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Network/Network.Management.Sdk/Generated/Models/ProxyResourceAutoGenerated.cs b/src/Network/Network.Management.Sdk/Generated/Models/ProxyResourceAutoGenerated.cs
new file mode 100644
index 000000000000..7c50847c8a6b
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/Models/ProxyResourceAutoGenerated.cs
@@ -0,0 +1,59 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+namespace Microsoft.Azure.Management.Network.Models
+{
+ using System.Linq;
+
+ ///
+ /// The resource model definition for a Azure Resource Manager proxy resource.
+ /// It will not have tags and a location
+ ///
+ ///
+ /// The resource model definition for a Azure Resource Manager proxy resource.
+ /// It will not have tags and a location
+ ///
+ public partial class ProxyResourceAutoGenerated : CommonResource
+ {
+ ///
+ /// Initializes a new instance of the ProxyResourceAutoGenerated class.
+ ///
+ public ProxyResourceAutoGenerated()
+ {
+ CustomInit();
+ }
+
+ ///
+ /// Initializes a new instance of the ProxyResourceAutoGenerated class.
+ ///
+
+ /// Fully qualified resource ID for the resource. E.g.
+ /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
+ ///
+
+ /// The name of the resource
+ ///
+
+ /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
+ /// "Microsoft.Storage/storageAccounts"
+ ///
+
+ /// Azure Resource Manager metadata containing createdBy and modifiedBy
+ /// information.
+ ///
+ public ProxyResourceAutoGenerated(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData))
+
+ : base(id, name, type, systemData)
+ {
+ CustomInit();
+ }
+
+ ///
+ /// An initialization method that performs custom operations like setting defaults
+ ///
+ partial void CustomInit();
+
+ }
+}
\ No newline at end of file
diff --git a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders.cs b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders.cs
new file mode 100644
index 000000000000..9788dd93f2da
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders.cs
@@ -0,0 +1,55 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+namespace Microsoft.Azure.Management.Network.Models
+{
+ using System.Linq;
+
+ public partial class VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders
+ {
+ ///
+ /// Initializes a new instance of the VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders class.
+ ///
+ public VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders()
+ {
+ CustomInit();
+ }
+
+ ///
+ /// Initializes a new instance of the VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders class.
+ ///
+
+ ///
+ ///
+
+ ///
+ ///
+ public VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders(string azureAsyncOperation = default(string), int? retryAfter = default(int?))
+
+ {
+ this.AzureAsyncOperation = azureAsyncOperation;
+ this.RetryAfter = retryAfter;
+ CustomInit();
+ }
+
+ ///
+ /// An initialization method that performs custom operations like setting defaults
+ ///
+ partial void CustomInit();
+
+
+ ///
+ /// Gets or sets
+ ///
+ [Newtonsoft.Json.JsonProperty(PropertyName = "Azure-AsyncOperation")]
+ public string AzureAsyncOperation {get; set; }
+
+ ///
+ /// Gets or sets
+ ///
+ [Newtonsoft.Json.JsonProperty(PropertyName = "Retry-After")]
+ public int? RetryAfter {get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilitiesDeleteHeaders.cs b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilitiesDeleteHeaders.cs
new file mode 100644
index 000000000000..152c0460a394
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilitiesDeleteHeaders.cs
@@ -0,0 +1,55 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+namespace Microsoft.Azure.Management.Network.Models
+{
+ using System.Linq;
+
+ public partial class VirtualNetworkApplianceCapabilitiesDeleteHeaders
+ {
+ ///
+ /// Initializes a new instance of the VirtualNetworkApplianceCapabilitiesDeleteHeaders class.
+ ///
+ public VirtualNetworkApplianceCapabilitiesDeleteHeaders()
+ {
+ CustomInit();
+ }
+
+ ///
+ /// Initializes a new instance of the VirtualNetworkApplianceCapabilitiesDeleteHeaders class.
+ ///
+
+ ///
+ ///
+
+ ///
+ ///
+ public VirtualNetworkApplianceCapabilitiesDeleteHeaders(string location = default(string), int? retryAfter = default(int?))
+
+ {
+ this.Location = location;
+ this.RetryAfter = retryAfter;
+ CustomInit();
+ }
+
+ ///
+ /// An initialization method that performs custom operations like setting defaults
+ ///
+ partial void CustomInit();
+
+
+ ///
+ /// Gets or sets
+ ///
+ [Newtonsoft.Json.JsonProperty(PropertyName = "Location")]
+ public string Location {get; set; }
+
+ ///
+ /// Gets or sets
+ ///
+ [Newtonsoft.Json.JsonProperty(PropertyName = "Retry-After")]
+ public int? RetryAfter {get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapability.cs b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapability.cs
new file mode 100644
index 000000000000..941050443732
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapability.cs
@@ -0,0 +1,79 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+namespace Microsoft.Azure.Management.Network.Models
+{
+ using System.Linq;
+
+ ///
+ /// A capability enabled on a virtual network appliance. The top-level `kind`
+ /// discriminator selects the
+ /// capability family; every kind shares the same `properties` schema (see
+ /// VirtualNetworkApplianceCapabilityProperties). One capability of a given
+ /// kind may exist per appliance.
+ ///
+ [Newtonsoft.Json.JsonObject("VirtualNetworkApplianceCapability")]
+ public partial class VirtualNetworkApplianceCapability : Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0
+ {
+ ///
+ /// Initializes a new instance of the VirtualNetworkApplianceCapability class.
+ ///
+ public VirtualNetworkApplianceCapability()
+ {
+ CustomInit();
+ }
+
+ ///
+ /// Initializes a new instance of the VirtualNetworkApplianceCapability class.
+ ///
+
+ /// Fully qualified resource ID for the resource. E.g.
+ /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
+ ///
+
+ /// The name of the resource
+ ///
+
+ /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
+ /// "Microsoft.Storage/storageAccounts"
+ ///
+
+ /// Azure Resource Manager metadata containing createdBy and modifiedBy
+ /// information.
+ ///
+
+ /// The resource-specific properties for this resource.
+ ///
+ public VirtualNetworkApplianceCapability(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties))
+
+ : base(id, name, type, systemData, properties)
+ {
+ CustomInit();
+ }
+
+ ///
+ /// An initialization method that performs custom operations like setting defaults
+ ///
+ partial void CustomInit();
+
+
+ ///
+ /// Validate the object.
+ ///
+ ///
+ /// Thrown if validation fails
+ ///
+ public virtual void Validate()
+ {
+ if (this.Name != null)
+ {
+ if (!System.Text.RegularExpressions.Regex.IsMatch(this.Name, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"))
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "Name", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$");
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityIpVersion.cs b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityIpVersion.cs
new file mode 100644
index 000000000000..ee27d3433ea2
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityIpVersion.cs
@@ -0,0 +1,25 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+namespace Microsoft.Azure.Management.Network.Models
+{
+
+ ///
+ /// Defines values for VirtualNetworkApplianceCapabilityIpVersion.
+ ///
+
+
+ public static class VirtualNetworkApplianceCapabilityIpVersion
+ {
+ ///
+ /// Single stack IPv6 only.
+ ///
+ public const string IPv6 = "IPv6";
+ ///
+ /// Dual stack (both IPv4 and IPv6).
+ ///
+ public const string DualStack = "DualStack";
+ }
+}
\ No newline at end of file
diff --git a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityKind.cs b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityKind.cs
new file mode 100644
index 000000000000..86e63736e176
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityKind.cs
@@ -0,0 +1,33 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+namespace Microsoft.Azure.Management.Network.Models
+{
+
+ ///
+ /// Defines values for VirtualNetworkApplianceCapabilityKind.
+ ///
+
+
+ public static class VirtualNetworkApplianceCapabilityKind
+ {
+ ///
+ /// Private Link Gateway FastPath.
+ ///
+ public const string PLGatewayFastpath = "PLGatewayFastpath";
+ ///
+ /// Private Link Gateway (slow-path).
+ ///
+ public const string PLGateway = "PLGateway";
+ ///
+ /// Private Link IP-forwarders (NVA).
+ ///
+ public const string PlipForwarders = "PLIPForwarders";
+ ///
+ /// NAT64 (stateful IPv6-to-IPv4 translation).
+ ///
+ public const string Nat64 = "NAT64";
+ }
+}
\ No newline at end of file
diff --git a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityProperties.cs b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityProperties.cs
new file mode 100644
index 000000000000..6c764cb77d86
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityProperties.cs
@@ -0,0 +1,84 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+namespace Microsoft.Azure.Management.Network.Models
+{
+ using System.Linq;
+
+ ///
+ /// Properties common to every virtual network appliance capability,
+ /// independent of kind.
+ ///
+ public partial class VirtualNetworkApplianceCapabilityProperties
+ {
+ ///
+ /// Initializes a new instance of the VirtualNetworkApplianceCapabilityProperties class.
+ ///
+ public VirtualNetworkApplianceCapabilityProperties()
+ {
+ CustomInit();
+ }
+
+ ///
+ /// Initializes a new instance of the VirtualNetworkApplianceCapabilityProperties class.
+ ///
+
+ /// The Azure resource ID of the owning virtual network. System-derived and
+ /// read-only.
+ ///
+
+ /// The provisioning state of the capability resource.
+ /// Possible values include: 'Failed', 'Succeeded', 'Canceled', 'Creating',
+ /// 'Updating', 'Deleting'
+
+ /// The IP version the capability applies to. Private Link Gateway FastPath
+ /// (`PLGatewayFastpath`)
+ /// only accepts `DualStack`; Private Link Gateway (`PLGateway`) and Private
+ /// Link IP-forwarders
+ /// (`PLIPForwarders`) only accept `IPv6`. The service validates the value
+ /// against the resource's
+ /// `kind` when the capability is created or updated.
+ /// Possible values include: 'IPv6', 'DualStack'
+ public VirtualNetworkApplianceCapabilityProperties(string linkedResourceId = default(string), string provisioningState = default(string), string ipVersion = default(string))
+
+ {
+ this.LinkedResourceId = linkedResourceId;
+ this.ProvisioningState = provisioningState;
+ this.IPVersion = ipVersion;
+ CustomInit();
+ }
+
+ ///
+ /// An initialization method that performs custom operations like setting defaults
+ ///
+ partial void CustomInit();
+
+
+ ///
+ /// Gets the Azure resource ID of the owning virtual network. System-derived
+ /// and read-only.
+ ///
+ [Newtonsoft.Json.JsonProperty(PropertyName = "linkedResourceId")]
+ public string LinkedResourceId {get; private set; }
+
+ ///
+ /// Gets the provisioning state of the capability resource. Possible values include: 'Failed', 'Succeeded', 'Canceled', 'Creating', 'Updating', 'Deleting'
+ ///
+ [Newtonsoft.Json.JsonProperty(PropertyName = "provisioningState")]
+ public string ProvisioningState {get; private set; }
+
+ ///
+ /// Gets or sets the IP version the capability applies to. Private Link Gateway
+ /// FastPath (`PLGatewayFastpath`)
+ /// only accepts `DualStack`; Private Link Gateway (`PLGateway`) and Private
+ /// Link IP-forwarders
+ /// (`PLIPForwarders`) only accept `IPv6`. The service validates the value
+ /// against the resource's
+ /// `kind` when the capability is created or updated. Possible values include: 'IPv6', 'DualStack'
+ ///
+ [Newtonsoft.Json.JsonProperty(PropertyName = "ipVersion")]
+ public string IPVersion {get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Network/Network.Management.Sdk/Generated/NetworkManagementClient.cs b/src/Network/Network.Management.Sdk/Generated/NetworkManagementClient.cs
index 439805c909b1..755abb8117ab 100644
--- a/src/Network/Network.Management.Sdk/Generated/NetworkManagementClient.cs
+++ b/src/Network/Network.Management.Sdk/Generated/NetworkManagementClient.cs
@@ -620,6 +620,10 @@ public partial class NetworkManagementClient : Microsoft.Rest.ServiceClient
public virtual IVirtualNetworkAppliancesOperations VirtualNetworkAppliances { get; private set; }
///
+ /// Gets the IVirtualNetworkApplianceCapabilitiesOperations
+ ///
+ public virtual IVirtualNetworkApplianceCapabilitiesOperations VirtualNetworkApplianceCapabilities { get; private set; }
+ ///
/// Gets the IExpressRouteGatewaysOperations
///
public virtual IExpressRouteGatewaysOperations ExpressRouteGateways { get; private set; }
@@ -1102,6 +1106,7 @@ private void Initialize()
this.VirtualRouterPeerings = new VirtualRouterPeeringsOperations(this);
this.VipSwap = new VipSwapOperations(this);
this.VirtualNetworkAppliances = new VirtualNetworkAppliancesOperations(this);
+ this.VirtualNetworkApplianceCapabilities = new VirtualNetworkApplianceCapabilitiesOperations(this);
this.ExpressRouteGateways = new ExpressRouteGatewaysOperations(this);
this.P2SVpnGateways = new P2SVpnGatewaysOperations(this);
this.VirtualHubs = new VirtualHubsOperations(this);
@@ -1164,6 +1169,8 @@ private void Initialize()
DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("kind"));
SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("kind"));
DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("kind"));
+ SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("kind"));
+ DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("kind"));
SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("kind"));
DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("kind"));
SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("ruleType"));
diff --git a/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperations.cs b/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperations.cs
new file mode 100644
index 000000000000..e72d76aa4021
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperations.cs
@@ -0,0 +1,1228 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+namespace Microsoft.Azure.Management.Network
+{
+ using System.Linq;
+ using Microsoft.Rest;
+ using Microsoft.Rest.Azure;
+ using Models;
+
+ ///
+ /// VirtualNetworkApplianceCapabilitiesOperations operations.
+ ///
+ internal partial class VirtualNetworkApplianceCapabilitiesOperations : Microsoft.Rest.IServiceOperations, IVirtualNetworkApplianceCapabilitiesOperations
+ {
+ ///
+ /// Initializes a new instance of the VirtualNetworkApplianceCapabilitiesOperations class.
+ ///
+ ///
+ /// Reference to the service client.
+ ///
+ ///
+ /// Thrown when a required parameter is null
+ ///
+ internal VirtualNetworkApplianceCapabilitiesOperations (NetworkManagementClient client)
+ {
+ if (client == null)
+ {
+ throw new System.ArgumentNullException("client");
+ }
+ this.Client = client;
+ }
+
+ ///
+ /// Gets a reference to the NetworkManagementClient
+ ///
+ public NetworkManagementClient Client { get; private set; }
+
+ ///
+ /// Gets all capabilities of a virtual network appliance.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// Thrown when the operation returned an invalid status code
+ ///
+ ///
+ /// Thrown when unable to deserialize the response
+ ///
+ ///
+ /// Thrown when a required parameter is null
+ ///
+ ///
+ /// Thrown when a required parameter is null
+ ///
+ ///
+ /// A response object containing the response body and response headers.
+ ///
+ public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
+ {
+
+
+
+
+ string apiVersion = "2026-03-01";
+
+
+ if (resourceGroupName == null)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName");
+ }
+ if (resourceGroupName != null)
+ {
+ if (resourceGroupName.Length > 90)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MaxLength, "resourceGroupName", 90);
+ }
+ if (resourceGroupName.Length < 1)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MinLength, "resourceGroupName", 1);
+ }
+ }
+ if (virtualNetworkApplianceName == null)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkApplianceName");
+ }
+ if (virtualNetworkApplianceName != null)
+ {
+ if (!System.Text.RegularExpressions.Regex.IsMatch(virtualNetworkApplianceName, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"))
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "virtualNetworkApplianceName", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$");
+ }
+ }
+ // Tracing
+ bool _shouldTrace = Microsoft.Rest.ServiceClientTracing.IsEnabled;
+ string _invocationId = null;
+ if (_shouldTrace)
+ {
+ _invocationId = Microsoft.Rest.ServiceClientTracing.NextInvocationId.ToString();
+ System.Collections.Generic.Dictionary tracingParameters = new System.Collections.Generic.Dictionary();
+ tracingParameters.Add("resourceGroupName", resourceGroupName);
+ tracingParameters.Add("virtualNetworkApplianceName", virtualNetworkApplianceName);
+
+
+ tracingParameters.Add("cancellationToken", cancellationToken);
+ Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "List", tracingParameters);
+ }
+ // Construct URL
+
+ var _baseUrl = this.Client.BaseUri.AbsoluteUri;
+ var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkAppliances/{virtualNetworkApplianceName}/capabilities").ToString();
+ _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(this.Client.SubscriptionId, this.Client.SerializationSettings).Trim('"')));
+ _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName));
+ _url = _url.Replace("{virtualNetworkApplianceName}", System.Uri.EscapeDataString(virtualNetworkApplianceName));
+
+ System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List();
+ if (apiVersion != null)
+ {
+ _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(apiVersion)));
+ }
+ if (_queryParameters.Count > 0)
+ {
+ _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters);
+ }
+ // Create HTTP transport objects
+ var _httpRequest = new System.Net.Http.HttpRequestMessage();
+ System.Net.Http.HttpResponseMessage _httpResponse = null;
+ _httpRequest.Method = new System.Net.Http.HttpMethod("GET");
+ _httpRequest.RequestUri = new System.Uri(_url);
+ // Set Headers
+ if (this.Client.GenerateClientRequestId != null && this.Client.GenerateClientRequestId.Value)
+ {
+ _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString());
+ }
+ if (this.Client.AcceptLanguage != null)
+ {
+ if (_httpRequest.Headers.Contains("accept-language"))
+ {
+ _httpRequest.Headers.Remove("accept-language");
+ }
+ _httpRequest.Headers.TryAddWithoutValidation("accept-language", this.Client.AcceptLanguage);
+ }
+
+ if (customHeaders != null)
+ {
+ foreach(var _header in customHeaders)
+ {
+ if (_httpRequest.Headers.Contains(_header.Key))
+ {
+ _httpRequest.Headers.Remove(_header.Key);
+ }
+ _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
+ }
+ }
+ // Serialize Request
+ string _requestContent = null;
+ // Set Credentials
+ if (this.Client.Credentials != null)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ await this.Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ }
+ // Send Request
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
+ }
+
+ System.Net.HttpStatusCode _statusCode = _httpResponse.StatusCode;
+ cancellationToken.ThrowIfCancellationRequested();
+ string _responseContent = null;
+
+ if ((int)_statusCode != 200)
+ {
+ var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
+ try
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ Microsoft.Rest.Azure.CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ if (_errorBody != null)
+ {
+ ex.Body = _errorBody;
+ }
+ }
+ catch (Newtonsoft.Json.JsonException)
+ {
+ // Ignore the exception
+ }
+ ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent);
+ ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent);
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.Error(_invocationId, ex);
+ }
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw ex;
+ }
+ // Create Result
+ var _result = new Microsoft.Rest.Azure.AzureOperationResponse>();
+ _result.Request = _httpRequest;
+ _result.Response = _httpResponse;
+
+ if (_httpResponse.Headers.Contains("x-ms-request-id"))
+ {
+ _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault();
+ }
+ // Deserialize Response
+ if ((int)_statusCode == 200)
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ try
+ {
+ _result.Body = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject>(_responseContent, this.Client.DeserializationSettings);
+ }
+ catch (Newtonsoft.Json.JsonException ex)
+ {
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw new Microsoft.Rest.SerializationException("Unable to deserialize the response.", _responseContent, ex);
+ }
+ }
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result);
+ }
+ return _result;
+
+
+
+
+
+ }
+ ///
+ /// Gets the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// Thrown when the operation returned an invalid status code
+ ///
+ ///
+ /// Thrown when unable to deserialize the response
+ ///
+ ///
+ /// Thrown when a required parameter is null
+ ///
+ ///
+ /// Thrown when a required parameter is null
+ ///
+ ///
+ /// A response object containing the response body and response headers.
+ ///
+ public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
+ {
+
+
+
+
+ string apiVersion = "2026-03-01";
+
+
+ if (resourceGroupName == null)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName");
+ }
+ if (resourceGroupName != null)
+ {
+ if (resourceGroupName.Length > 90)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MaxLength, "resourceGroupName", 90);
+ }
+ if (resourceGroupName.Length < 1)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MinLength, "resourceGroupName", 1);
+ }
+ }
+ if (virtualNetworkApplianceName == null)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkApplianceName");
+ }
+ if (virtualNetworkApplianceName != null)
+ {
+ if (!System.Text.RegularExpressions.Regex.IsMatch(virtualNetworkApplianceName, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"))
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "virtualNetworkApplianceName", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$");
+ }
+ }
+ if (capabilityName == null)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "capabilityName");
+ }
+ if (capabilityName != null)
+ {
+ if (!System.Text.RegularExpressions.Regex.IsMatch(capabilityName, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"))
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "capabilityName", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$");
+ }
+ }
+ // Tracing
+ bool _shouldTrace = Microsoft.Rest.ServiceClientTracing.IsEnabled;
+ string _invocationId = null;
+ if (_shouldTrace)
+ {
+ _invocationId = Microsoft.Rest.ServiceClientTracing.NextInvocationId.ToString();
+ System.Collections.Generic.Dictionary tracingParameters = new System.Collections.Generic.Dictionary();
+ tracingParameters.Add("resourceGroupName", resourceGroupName);
+ tracingParameters.Add("virtualNetworkApplianceName", virtualNetworkApplianceName);
+ tracingParameters.Add("capabilityName", capabilityName);
+
+
+ tracingParameters.Add("cancellationToken", cancellationToken);
+ Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Get", tracingParameters);
+ }
+ // Construct URL
+
+ var _baseUrl = this.Client.BaseUri.AbsoluteUri;
+ var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkAppliances/{virtualNetworkApplianceName}/capabilities/{capabilityName}").ToString();
+ _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(this.Client.SubscriptionId, this.Client.SerializationSettings).Trim('"')));
+ _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName));
+ _url = _url.Replace("{virtualNetworkApplianceName}", System.Uri.EscapeDataString(virtualNetworkApplianceName));
+ _url = _url.Replace("{capabilityName}", System.Uri.EscapeDataString(capabilityName));
+
+ System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List();
+ if (apiVersion != null)
+ {
+ _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(apiVersion)));
+ }
+ if (_queryParameters.Count > 0)
+ {
+ _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters);
+ }
+ // Create HTTP transport objects
+ var _httpRequest = new System.Net.Http.HttpRequestMessage();
+ System.Net.Http.HttpResponseMessage _httpResponse = null;
+ _httpRequest.Method = new System.Net.Http.HttpMethod("GET");
+ _httpRequest.RequestUri = new System.Uri(_url);
+ // Set Headers
+ if (this.Client.GenerateClientRequestId != null && this.Client.GenerateClientRequestId.Value)
+ {
+ _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString());
+ }
+ if (this.Client.AcceptLanguage != null)
+ {
+ if (_httpRequest.Headers.Contains("accept-language"))
+ {
+ _httpRequest.Headers.Remove("accept-language");
+ }
+ _httpRequest.Headers.TryAddWithoutValidation("accept-language", this.Client.AcceptLanguage);
+ }
+
+ if (customHeaders != null)
+ {
+ foreach(var _header in customHeaders)
+ {
+ if (_httpRequest.Headers.Contains(_header.Key))
+ {
+ _httpRequest.Headers.Remove(_header.Key);
+ }
+ _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
+ }
+ }
+ // Serialize Request
+ string _requestContent = null;
+ // Set Credentials
+ if (this.Client.Credentials != null)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ await this.Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ }
+ // Send Request
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
+ }
+
+ System.Net.HttpStatusCode _statusCode = _httpResponse.StatusCode;
+ cancellationToken.ThrowIfCancellationRequested();
+ string _responseContent = null;
+
+ if ((int)_statusCode != 200)
+ {
+ var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
+ try
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ Microsoft.Rest.Azure.CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ if (_errorBody != null)
+ {
+ ex.Body = _errorBody;
+ }
+ }
+ catch (Newtonsoft.Json.JsonException)
+ {
+ // Ignore the exception
+ }
+ ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent);
+ ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent);
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.Error(_invocationId, ex);
+ }
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw ex;
+ }
+ // Create Result
+ var _result = new Microsoft.Rest.Azure.AzureOperationResponse();
+ _result.Request = _httpRequest;
+ _result.Response = _httpResponse;
+
+ if (_httpResponse.Headers.Contains("x-ms-request-id"))
+ {
+ _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault();
+ }
+ // Deserialize Response
+ if ((int)_statusCode == 200)
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ try
+ {
+ _result.Body = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ }
+ catch (Newtonsoft.Json.JsonException ex)
+ {
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw new Microsoft.Rest.SerializationException("Unable to deserialize the response.", _responseContent, ex);
+ }
+ }
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result);
+ }
+ return _result;
+
+
+
+
+
+ }
+ ///
+ /// Creates or updates a capability on a virtual network appliance.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// Parameters supplied to the create or update virtual network appliance
+ /// capability operation.
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
+ {
+ // Send Request
+ Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters, customHeaders, cancellationToken).ConfigureAwait(false);
+ return await this.Client.GetPutOrPatchOperationResultAsync(_response, customHeaders, cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// Deletes the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public async System.Threading.Tasks.Task> DeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
+ {
+ // Send Request
+ Microsoft.Rest.Azure.AzureOperationHeaderResponse _response = await BeginDeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, customHeaders, cancellationToken).ConfigureAwait(false);
+ return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// Creates or updates a capability on a virtual network appliance.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// Parameters supplied to the create or update virtual network appliance
+ /// capability operation.
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// Thrown when the operation returned an invalid status code
+ ///
+ ///
+ /// Thrown when unable to deserialize the response
+ ///
+ ///
+ /// Thrown when a required parameter is null
+ ///
+ ///
+ /// Thrown when a required parameter is null
+ ///
+ ///
+ /// A response object containing the response body and response headers.
+ ///
+ public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
+ {
+
+
+
+
+ if (parameters == null)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters");
+ }
+
+ string apiVersion = "2026-03-01";
+
+
+ if (resourceGroupName == null)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName");
+ }
+ if (resourceGroupName != null)
+ {
+ if (resourceGroupName.Length > 90)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MaxLength, "resourceGroupName", 90);
+ }
+ if (resourceGroupName.Length < 1)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MinLength, "resourceGroupName", 1);
+ }
+ }
+ if (virtualNetworkApplianceName == null)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkApplianceName");
+ }
+ if (virtualNetworkApplianceName != null)
+ {
+ if (!System.Text.RegularExpressions.Regex.IsMatch(virtualNetworkApplianceName, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"))
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "virtualNetworkApplianceName", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$");
+ }
+ }
+ if (capabilityName == null)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "capabilityName");
+ }
+ if (capabilityName != null)
+ {
+ if (!System.Text.RegularExpressions.Regex.IsMatch(capabilityName, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"))
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "capabilityName", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$");
+ }
+ }
+ // Tracing
+ bool _shouldTrace = Microsoft.Rest.ServiceClientTracing.IsEnabled;
+ string _invocationId = null;
+ if (_shouldTrace)
+ {
+ _invocationId = Microsoft.Rest.ServiceClientTracing.NextInvocationId.ToString();
+ System.Collections.Generic.Dictionary tracingParameters = new System.Collections.Generic.Dictionary();
+ tracingParameters.Add("resourceGroupName", resourceGroupName);
+ tracingParameters.Add("virtualNetworkApplianceName", virtualNetworkApplianceName);
+ tracingParameters.Add("capabilityName", capabilityName);
+
+ tracingParameters.Add("parameters", parameters);
+
+ tracingParameters.Add("cancellationToken", cancellationToken);
+ Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginCreateOrUpdate", tracingParameters);
+ }
+ // Construct URL
+
+ var _baseUrl = this.Client.BaseUri.AbsoluteUri;
+ var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkAppliances/{virtualNetworkApplianceName}/capabilities/{capabilityName}").ToString();
+ _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(this.Client.SubscriptionId, this.Client.SerializationSettings).Trim('"')));
+ _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName));
+ _url = _url.Replace("{virtualNetworkApplianceName}", System.Uri.EscapeDataString(virtualNetworkApplianceName));
+ _url = _url.Replace("{capabilityName}", System.Uri.EscapeDataString(capabilityName));
+
+ System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List();
+ if (apiVersion != null)
+ {
+ _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(apiVersion)));
+ }
+ if (_queryParameters.Count > 0)
+ {
+ _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters);
+ }
+ // Create HTTP transport objects
+ var _httpRequest = new System.Net.Http.HttpRequestMessage();
+ System.Net.Http.HttpResponseMessage _httpResponse = null;
+ _httpRequest.Method = new System.Net.Http.HttpMethod("PUT");
+ _httpRequest.RequestUri = new System.Uri(_url);
+ // Set Headers
+ if (this.Client.GenerateClientRequestId != null && this.Client.GenerateClientRequestId.Value)
+ {
+ _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString());
+ }
+ if (this.Client.AcceptLanguage != null)
+ {
+ if (_httpRequest.Headers.Contains("accept-language"))
+ {
+ _httpRequest.Headers.Remove("accept-language");
+ }
+ _httpRequest.Headers.TryAddWithoutValidation("accept-language", this.Client.AcceptLanguage);
+ }
+
+ if (customHeaders != null)
+ {
+ foreach(var _header in customHeaders)
+ {
+ if (_httpRequest.Headers.Contains(_header.Key))
+ {
+ _httpRequest.Headers.Remove(_header.Key);
+ }
+ _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
+ }
+ }
+ // Serialize Request
+ string _requestContent = null;
+ if(parameters != null)
+ {
+ _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(parameters, this.Client.SerializationSettings);
+ _httpRequest.Content = new System.Net.Http.StringContent(_requestContent, System.Text.Encoding.UTF8);
+ _httpRequest.Content.Headers.ContentType =System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8");
+ }
+ // Set Credentials
+ if (this.Client.Credentials != null)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ await this.Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ }
+ // Send Request
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
+ }
+
+ System.Net.HttpStatusCode _statusCode = _httpResponse.StatusCode;
+ cancellationToken.ThrowIfCancellationRequested();
+ string _responseContent = null;
+
+ if ((int)_statusCode != 200 && (int)_statusCode != 201)
+ {
+ var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
+ try
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ Microsoft.Rest.Azure.CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ if (_errorBody != null)
+ {
+ ex.Body = _errorBody;
+ }
+ }
+ catch (Newtonsoft.Json.JsonException)
+ {
+ // Ignore the exception
+ }
+ ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent);
+ ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent);
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.Error(_invocationId, ex);
+ }
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw ex;
+ }
+ // Create Result
+ var _result = new Microsoft.Rest.Azure.AzureOperationResponse();
+ _result.Request = _httpRequest;
+ _result.Response = _httpResponse;
+
+ if (_httpResponse.Headers.Contains("x-ms-request-id"))
+ {
+ _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault();
+ }
+ // Deserialize Response
+ if ((int)_statusCode == 200)
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ try
+ {
+ _result.Body = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ }
+ catch (Newtonsoft.Json.JsonException ex)
+ {
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw new Microsoft.Rest.SerializationException("Unable to deserialize the response.", _responseContent, ex);
+ }
+ }
+ // Deserialize Response
+ if ((int)_statusCode == 201)
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ try
+ {
+ _result.Body = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ }
+ catch (Newtonsoft.Json.JsonException ex)
+ {
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw new Microsoft.Rest.SerializationException("Unable to deserialize the response.", _responseContent, ex);
+ }
+ }
+ try
+ {
+ _result.Headers = _httpResponse.GetHeadersAsJson().ToObject(Newtonsoft.Json.JsonSerializer.Create(this.Client.DeserializationSettings));
+ }
+ catch (Newtonsoft.Json.JsonException ex)
+ {
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw new Microsoft.Rest.SerializationException("Unable to deserialize the headers.", _httpResponse.GetHeadersAsJson().ToString(), ex);
+ }
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result);
+ }
+ return _result;
+
+
+
+
+
+ }
+ ///
+ /// Deletes the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// Thrown when the operation returned an invalid status code
+ ///
+ ///
+ /// Thrown when a required parameter is null
+ ///
+ ///
+ /// Thrown when a required parameter is null
+ ///
+ ///
+ /// A response object containing the response body and response headers.
+ ///
+ public async System.Threading.Tasks.Task> BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
+ {
+
+
+
+
+ string apiVersion = "2026-03-01";
+
+
+ if (resourceGroupName == null)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName");
+ }
+ if (resourceGroupName != null)
+ {
+ if (resourceGroupName.Length > 90)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MaxLength, "resourceGroupName", 90);
+ }
+ if (resourceGroupName.Length < 1)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MinLength, "resourceGroupName", 1);
+ }
+ }
+ if (virtualNetworkApplianceName == null)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkApplianceName");
+ }
+ if (virtualNetworkApplianceName != null)
+ {
+ if (!System.Text.RegularExpressions.Regex.IsMatch(virtualNetworkApplianceName, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"))
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "virtualNetworkApplianceName", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$");
+ }
+ }
+ if (capabilityName == null)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "capabilityName");
+ }
+ if (capabilityName != null)
+ {
+ if (!System.Text.RegularExpressions.Regex.IsMatch(capabilityName, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"))
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "capabilityName", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$");
+ }
+ }
+ // Tracing
+ bool _shouldTrace = Microsoft.Rest.ServiceClientTracing.IsEnabled;
+ string _invocationId = null;
+ if (_shouldTrace)
+ {
+ _invocationId = Microsoft.Rest.ServiceClientTracing.NextInvocationId.ToString();
+ System.Collections.Generic.Dictionary tracingParameters = new System.Collections.Generic.Dictionary();
+ tracingParameters.Add("resourceGroupName", resourceGroupName);
+ tracingParameters.Add("virtualNetworkApplianceName", virtualNetworkApplianceName);
+ tracingParameters.Add("capabilityName", capabilityName);
+
+
+ tracingParameters.Add("cancellationToken", cancellationToken);
+ Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginDelete", tracingParameters);
+ }
+ // Construct URL
+
+ var _baseUrl = this.Client.BaseUri.AbsoluteUri;
+ var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkAppliances/{virtualNetworkApplianceName}/capabilities/{capabilityName}").ToString();
+ _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(this.Client.SubscriptionId, this.Client.SerializationSettings).Trim('"')));
+ _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName));
+ _url = _url.Replace("{virtualNetworkApplianceName}", System.Uri.EscapeDataString(virtualNetworkApplianceName));
+ _url = _url.Replace("{capabilityName}", System.Uri.EscapeDataString(capabilityName));
+
+ System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List();
+ if (apiVersion != null)
+ {
+ _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(apiVersion)));
+ }
+ if (_queryParameters.Count > 0)
+ {
+ _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters);
+ }
+ // Create HTTP transport objects
+ var _httpRequest = new System.Net.Http.HttpRequestMessage();
+ System.Net.Http.HttpResponseMessage _httpResponse = null;
+ _httpRequest.Method = new System.Net.Http.HttpMethod("DELETE");
+ _httpRequest.RequestUri = new System.Uri(_url);
+ // Set Headers
+ if (this.Client.GenerateClientRequestId != null && this.Client.GenerateClientRequestId.Value)
+ {
+ _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString());
+ }
+ if (this.Client.AcceptLanguage != null)
+ {
+ if (_httpRequest.Headers.Contains("accept-language"))
+ {
+ _httpRequest.Headers.Remove("accept-language");
+ }
+ _httpRequest.Headers.TryAddWithoutValidation("accept-language", this.Client.AcceptLanguage);
+ }
+
+ if (customHeaders != null)
+ {
+ foreach(var _header in customHeaders)
+ {
+ if (_httpRequest.Headers.Contains(_header.Key))
+ {
+ _httpRequest.Headers.Remove(_header.Key);
+ }
+ _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
+ }
+ }
+ // Serialize Request
+ string _requestContent = null;
+ // Set Credentials
+ if (this.Client.Credentials != null)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ await this.Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ }
+ // Send Request
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
+ }
+
+ System.Net.HttpStatusCode _statusCode = _httpResponse.StatusCode;
+ cancellationToken.ThrowIfCancellationRequested();
+ string _responseContent = null;
+
+ if ((int)_statusCode != 202 && (int)_statusCode != 204)
+ {
+ var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
+ try
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ Microsoft.Rest.Azure.CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ if (_errorBody != null)
+ {
+ ex.Body = _errorBody;
+ }
+ }
+ catch (Newtonsoft.Json.JsonException)
+ {
+ // Ignore the exception
+ }
+ ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent);
+ ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent);
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.Error(_invocationId, ex);
+ }
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw ex;
+ }
+ // Create Result
+ var _result = new Microsoft.Rest.Azure.AzureOperationHeaderResponse();
+ _result.Request = _httpRequest;
+ _result.Response = _httpResponse;
+
+ if (_httpResponse.Headers.Contains("x-ms-request-id"))
+ {
+ _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault();
+ }
+ try
+ {
+ _result.Headers = _httpResponse.GetHeadersAsJson().ToObject(Newtonsoft.Json.JsonSerializer.Create(this.Client.DeserializationSettings));
+ }
+ catch (Newtonsoft.Json.JsonException ex)
+ {
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw new Microsoft.Rest.SerializationException("Unable to deserialize the headers.", _httpResponse.GetHeadersAsJson().ToString(), ex);
+ }
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result);
+ }
+ return _result;
+
+
+
+
+
+ }
+ ///
+ /// Gets all capabilities of a virtual network appliance.
+ ///
+ ///
+ /// The NextLink from the previous successful call to List operation.
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// Thrown when the operation returned an invalid status code
+ ///
+ ///
+ /// Thrown when unable to deserialize the response
+ ///
+ ///
+ /// Thrown when a required parameter is null
+ ///
+ ///
+ /// Thrown when a required parameter is null
+ ///
+ ///
+ /// A response object containing the response body and response headers.
+ ///
+ public async System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
+ {
+
+ if (nextPageLink == null)
+ {
+ throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "nextPageLink");
+ }
+ // Tracing
+ bool _shouldTrace = Microsoft.Rest.ServiceClientTracing.IsEnabled;
+ string _invocationId = null;
+ if (_shouldTrace)
+ {
+ _invocationId = Microsoft.Rest.ServiceClientTracing.NextInvocationId.ToString();
+ System.Collections.Generic.Dictionary tracingParameters = new System.Collections.Generic.Dictionary();
+ tracingParameters.Add("nextPageLink", nextPageLink);
+
+
+ tracingParameters.Add("cancellationToken", cancellationToken);
+ Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListNext", tracingParameters);
+ }
+ // Construct URL
+ string _url = "{nextLink}";
+ _url = _url.Replace("{nextLink}", nextPageLink);
+
+ System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List();
+ if (_queryParameters.Count > 0)
+ {
+ _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters);
+ }
+ // Create HTTP transport objects
+ var _httpRequest = new System.Net.Http.HttpRequestMessage();
+ System.Net.Http.HttpResponseMessage _httpResponse = null;
+ _httpRequest.Method = new System.Net.Http.HttpMethod("GET");
+ _httpRequest.RequestUri = new System.Uri(_url);
+ // Set Headers
+ if (this.Client.GenerateClientRequestId != null && this.Client.GenerateClientRequestId.Value)
+ {
+ _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString());
+ }
+ if (this.Client.AcceptLanguage != null)
+ {
+ if (_httpRequest.Headers.Contains("accept-language"))
+ {
+ _httpRequest.Headers.Remove("accept-language");
+ }
+ _httpRequest.Headers.TryAddWithoutValidation("accept-language", this.Client.AcceptLanguage);
+ }
+
+ if (customHeaders != null)
+ {
+ foreach(var _header in customHeaders)
+ {
+ if (_httpRequest.Headers.Contains(_header.Key))
+ {
+ _httpRequest.Headers.Remove(_header.Key);
+ }
+ _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
+ }
+ }
+ // Serialize Request
+ string _requestContent = null;
+ // Set Credentials
+ if (this.Client.Credentials != null)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ await this.Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ }
+ // Send Request
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
+ }
+
+ System.Net.HttpStatusCode _statusCode = _httpResponse.StatusCode;
+ cancellationToken.ThrowIfCancellationRequested();
+ string _responseContent = null;
+
+ if ((int)_statusCode != 200)
+ {
+ var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
+ try
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ Microsoft.Rest.Azure.CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ if (_errorBody != null)
+ {
+ ex.Body = _errorBody;
+ }
+ }
+ catch (Newtonsoft.Json.JsonException)
+ {
+ // Ignore the exception
+ }
+ ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent);
+ ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent);
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.Error(_invocationId, ex);
+ }
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw ex;
+ }
+ // Create Result
+ var _result = new Microsoft.Rest.Azure.AzureOperationResponse>();
+ _result.Request = _httpRequest;
+ _result.Response = _httpResponse;
+
+ if (_httpResponse.Headers.Contains("x-ms-request-id"))
+ {
+ _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault();
+ }
+ // Deserialize Response
+ if ((int)_statusCode == 200)
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ try
+ {
+ _result.Body = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject>(_responseContent, this.Client.DeserializationSettings);
+ }
+ catch (Newtonsoft.Json.JsonException ex)
+ {
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw new Microsoft.Rest.SerializationException("Unable to deserialize the response.", _responseContent, ex);
+ }
+ }
+ if (_shouldTrace)
+ {
+ Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result);
+ }
+ return _result;
+
+
+
+
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperationsExtensions.cs b/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperationsExtensions.cs
new file mode 100644
index 000000000000..1c653eb5b995
--- /dev/null
+++ b/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperationsExtensions.cs
@@ -0,0 +1,313 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+namespace Microsoft.Azure.Management.Network
+{
+ using Microsoft.Rest.Azure;
+ using Models;
+
+ ///
+ /// Extension methods for VirtualNetworkApplianceCapabilitiesOperations
+ ///
+ public static partial class VirtualNetworkApplianceCapabilitiesOperationsExtensions
+ {
+ ///
+ /// Gets all capabilities of a virtual network appliance.
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ public static Microsoft.Rest.Azure.IPage List(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName)
+ {
+ return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).ListAsync(resourceGroupName, virtualNetworkApplianceName).GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Gets all capabilities of a virtual network appliance.
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async System.Threading.Tasks.Task> ListAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
+ {
+ using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, null, cancellationToken).ConfigureAwait(false))
+ {
+ return _result.Body;
+ }
+ }
+ ///
+ /// Gets the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ public static VirtualNetworkApplianceCapability Get(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName)
+ {
+ return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).GetAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName).GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Gets the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async System.Threading.Tasks.Task GetAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
+ {
+ using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, null, cancellationToken).ConfigureAwait(false))
+ {
+ return _result.Body;
+ }
+ }
+ ///
+ /// Creates or updates a capability on a virtual network appliance.
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ public static VirtualNetworkApplianceCapability CreateOrUpdate(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters)
+ {
+ return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).CreateOrUpdateAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters).GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Creates or updates a capability on a virtual network appliance.
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
+ {
+ using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters, null, cancellationToken).ConfigureAwait(false))
+ {
+ return _result.Body;
+ }
+ }
+ ///
+ /// Deletes the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ public static VirtualNetworkApplianceCapabilitiesDeleteHeaders Delete(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName)
+ {
+ return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).DeleteAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName).GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Deletes the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async System.Threading.Tasks.Task DeleteAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
+ {
+ using (var _result = await operations.DeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, null, cancellationToken).ConfigureAwait(false))
+ {
+ return _result.Headers;
+ }
+ }
+ ///
+ /// Creates or updates a capability on a virtual network appliance.
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ public static VirtualNetworkApplianceCapability BeginCreateOrUpdate(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters)
+ {
+ return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).BeginCreateOrUpdateAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters).GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Creates or updates a capability on a virtual network appliance.
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
+ {
+ using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters, null, cancellationToken).ConfigureAwait(false))
+ {
+ return _result.Body;
+ }
+ }
+ ///
+ /// Deletes the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ public static VirtualNetworkApplianceCapabilitiesDeleteHeaders BeginDelete(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName)
+ {
+ return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).BeginDeleteAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName).GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Deletes the specified capability of a virtual network appliance.
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The name of the resource group. The name is case insensitive.
+ ///
+ ///
+ /// The name of the virtual network appliance.
+ ///
+ ///
+ /// The name of the virtual network appliance capability.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async System.Threading.Tasks.Task BeginDeleteAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
+ {
+ using (var _result = await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, null, cancellationToken).ConfigureAwait(false))
+ {
+ return _result.Headers;
+ }
+ }
+ ///
+ /// Gets all capabilities of a virtual network appliance.
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The NextLink from the previous successful call to List operation.
+ ///
+ public static Microsoft.Rest.Azure.IPage ListNext(this IVirtualNetworkApplianceCapabilitiesOperations operations, string nextPageLink)
+ {
+ return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).ListNextAsync(nextPageLink).GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Gets all capabilities of a virtual network appliance.
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The NextLink from the previous successful call to List operation.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async System.Threading.Tasks.Task> ListNextAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
+ {
+ using (var _result = await operations.ListNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false))
+ {
+ return _result.Body;
+ }
+ }
+ }
+}
diff --git a/src/Network/Network.Management.Sdk/README.md b/src/Network/Network.Management.Sdk/README.md
index b6c22647109e..21827777e9a1 100644
--- a/src/Network/Network.Management.Sdk/README.md
+++ b/src/Network/Network.Management.Sdk/README.md
@@ -46,7 +46,12 @@ input-file:
- https://github.com/Azure/azure-rest-api-specs/blob/$(commit)/specification/network/resource-manager/Microsoft.Network/Network/stable/2026-01-01/networkingOperations.json
- https://github.com/Azure/azure-rest-api-specs/blob/$(commit)/specification/network/resource-manager/Microsoft.Network/Network/stable/2026-01-01/serviceGateway.json
- https://github.com/Azure/azure-rest-api-specs/blob/$(commit)/specification/network/resource-manager/Microsoft.Network/Network/stable/2026-01-01/virtualNetwork.json
- - https://github.com/Azure/azure-rest-api-specs/blob/$(commit)/specification/network/resource-manager/Microsoft.Network/Network/stable/2026-01-01/virtualNetworkAppliance.json
+ # Pulled from a newer commit than $(commit) because this file now also defines the
+ # Virtual Network Appliance capability resource (Microsoft.Network/virtualNetworkAppliances/capabilities),
+ # added in https://github.com/Azure/azure-rest-api-specs/pull/46629. The 2026-03-01 version of this file
+ # is additive over 2026-01-01 (same pre-existing paths plus the new capability paths), so the
+ # VirtualNetworkAppliances* directive below pins the pre-existing operations back to 2026-01-01.
+ - https://github.com/Azure/azure-rest-api-specs/blob/b8522b0ea77d6fc7fbdc8f987ec749d06309b846/specification/network/resource-manager/Microsoft.Network/Network/stable/2026-03-01/virtualNetworkAppliance.json
- https://github.com/Azure/azure-rest-api-specs/blob/$(commit)/specification/network/resource-manager/Microsoft.Network/Network/stable/2026-01-01/virtualWan.json
- https://github.com/Azure/azure-rest-api-specs/blob/$(commit)/specification/network/resource-manager/Microsoft.Network/Network/stable/2018-10-01/vmssNetwork.json
@@ -84,6 +89,14 @@ directive:
- from: IpamPoolsOperations.cs
where: $
transform: $ = $.replace(/string apiVersion = "2025-09-01";/g, 'string apiVersion = "2026-01-01";');
+# virtualNetworkAppliance.json is now pulled from the 2026-03-01 version (see the input-file
+# comment above) solely to pick up the new capability resource. Pin the pre-existing
+# VirtualNetworkAppliances operations back to 2026-01-01 so this upgrade does not change the
+# wire api-version of any already-released cmdlet; only VirtualNetworkApplianceCapabilities*
+# (new in this version) is meant to use 2026-03-01.
+ - from: VirtualNetworkAppliancesOperations.cs
+ where: $
+ transform: $ = $.replace(/string apiVersion = "2026-03-01";/g, 'string apiVersion = "2026-01-01";');
# The 2025-09-01 service response returns resourceGuid at the resource root, while the
# published swagger places it under properties. Move the schema property during generation
# until the current and next API specifications are corrected.
diff --git a/src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs b/src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs
new file mode 100644
index 000000000000..98203b943174
--- /dev/null
+++ b/src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs
@@ -0,0 +1,167 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+using System;
+using System.Management.Automation;
+using Microsoft.Azure.Commands.Network;
+using Microsoft.Azure.Management.Network.Models;
+using Microsoft.WindowsAzure.Commands.ScenarioTest;
+using Xunit;
+
+namespace Commands.Network.Test.UnitTests
+{
+ ///
+ /// Unit tests for the client-side kind/ipVersion logic of the Virtual Network Appliance capability cmdlets.
+ /// These exercise pure logic (payload construction, discriminator mapping, validation) with no service
+ /// dependency, so they do not require a recorded session.
+ ///
+ public class VirtualNetworkApplianceCapabilityUnitTests
+ {
+ [Fact]
+ [Trait(Category.AcceptanceType, Category.CheckIn)]
+ public void BuildCapabilityParameters_PLGatewayFastpath_UsesDualStack()
+ {
+ var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("PLGatewayFastpath", "DualStack");
+
+ var fastpath = Assert.IsType(parameters);
+ Assert.NotNull(fastpath.Properties);
+ Assert.Equal("DualStack", fastpath.Properties.IPVersion);
+ }
+
+ [Fact]
+ [Trait(Category.AcceptanceType, Category.CheckIn)]
+ public void BuildCapabilityParameters_PLGateway_UsesIPv6()
+ {
+ var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("PLGateway", "IPv6");
+
+ var gateway = Assert.IsType(parameters);
+ Assert.Equal("IPv6", gateway.Properties.IPVersion);
+ }
+
+ [Fact]
+ [Trait(Category.AcceptanceType, Category.CheckIn)]
+ public void BuildCapabilityParameters_PLIPForwarders_UsesIPv6()
+ {
+ var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("PLIPForwarders", "IPv6");
+
+ var ipForwarders = Assert.IsType(parameters);
+ Assert.Equal("IPv6", ipForwarders.Properties.IPVersion);
+ }
+
+ [Fact]
+ [Trait(Category.AcceptanceType, Category.CheckIn)]
+ public void BuildCapabilityParameters_Nat64_IsPropertyLess()
+ {
+ var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("NAT64", null);
+
+ var nat64 = Assert.IsType(parameters);
+ // NAT64 carries an empty properties bag with no ipVersion, matching the service contract.
+ Assert.NotNull(nat64.Properties);
+ Assert.Null(nat64.Properties.IPVersion);
+ }
+
+ [Fact]
+ [Trait(Category.AcceptanceType, Category.CheckIn)]
+ public void BuildCapabilityParameters_IsCaseInsensitive()
+ {
+ var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("plgateway", "ipv6");
+
+ var gateway = Assert.IsType(parameters);
+ // The ip version is canonicalized to the exact wire casing.
+ Assert.Equal("IPv6", gateway.Properties.IPVersion);
+ }
+
+ [Fact]
+ [Trait(Category.AcceptanceType, Category.CheckIn)]
+ public void BuildCapabilityParameters_Nat64WithIpVersion_Throws()
+ {
+ var exception = Assert.Throws(
+ () => VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("NAT64", "IPv6"));
+ Assert.Contains("NAT64", exception.Message);
+ }
+
+ [Fact]
+ [Trait(Category.AcceptanceType, Category.CheckIn)]
+ public void BuildCapabilityParameters_PrivateLinkWithoutIpVersion_Throws()
+ {
+ var exception = Assert.Throws(
+ () => VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("PLGateway", null));
+ Assert.Contains("required", exception.Message);
+ }
+
+ [Fact]
+ [Trait(Category.AcceptanceType, Category.CheckIn)]
+ public void GetCapabilityKind_MapsEveryKind()
+ {
+ Assert.Equal("PLGatewayFastpath", VirtualNetworkApplianceCapabilityBaseCmdlet.GetCapabilityKind(new PLGatewayFastpathCapability()));
+ Assert.Equal("PLGateway", VirtualNetworkApplianceCapabilityBaseCmdlet.GetCapabilityKind(new PLGatewayCapability()));
+ Assert.Equal("PLIPForwarders", VirtualNetworkApplianceCapabilityBaseCmdlet.GetCapabilityKind(new PlipForwardersCapability()));
+ Assert.Equal("NAT64", VirtualNetworkApplianceCapabilityBaseCmdlet.GetCapabilityKind(new Nat64Capability()));
+ }
+
+ [Theory]
+ [Trait(Category.AcceptanceType, Category.CheckIn)]
+ [InlineData("PLGatewayFastpath", "IPv6")]
+ [InlineData("PLGateway", "DualStack")]
+ [InlineData("PLIPForwarders", "DualStack")]
+ public void BuildCapabilityParameters_MismatchedIpVersionForKind_Throws(string kind, string ipVersion)
+ {
+ var exception = Assert.Throws(
+ () => VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters(kind, ipVersion));
+ Assert.Contains(kind, exception.Message);
+ }
+
+ [Fact]
+ [Trait(Category.AcceptanceType, Category.CheckIn)]
+ public void ParseCapabilityResourceId_ValidId_ParsesNames()
+ {
+ const string id = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworkAppliances/vna1/capabilities/pl-gateway";
+
+ VirtualNetworkApplianceCapabilityBaseCmdlet.ParseCapabilityResourceId(id, out var resourceGroupName, out var applianceName, out var capabilityName);
+
+ Assert.Equal("rg1", resourceGroupName);
+ Assert.Equal("vna1", applianceName);
+ Assert.Equal("pl-gateway", capabilityName);
+ }
+
+ [Fact]
+ [Trait(Category.AcceptanceType, Category.CheckIn)]
+ public void ParseCapabilityResourceId_NamesEqualToStructuralKeywords_ParsedByPosition()
+ {
+ // An appliance literally named "capabilities" and a capability literally named "resourceGroups"
+ // must still be parsed from their fixed positions, not by keyword search.
+ const string id = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworkAppliances/capabilities/capabilities/resourceGroups";
+
+ VirtualNetworkApplianceCapabilityBaseCmdlet.ParseCapabilityResourceId(id, out var resourceGroupName, out var applianceName, out var capabilityName);
+
+ Assert.Equal("rg1", resourceGroupName);
+ Assert.Equal("capabilities", applianceName);
+ Assert.Equal("resourceGroups", capabilityName);
+ }
+
+ [Theory]
+ [Trait(Category.AcceptanceType, Category.CheckIn)]
+ [InlineData(null)]
+ [InlineData("")]
+ [InlineData("/subscriptions/s/resourceGroups/rg/providers/Microsoft.Network/virtualNetworkAppliances/vna")] // parent id, too short
+ [InlineData("/subscriptions/s/resourceGroups/rg/providers/Microsoft.Compute/virtualNetworkAppliances/vna/capabilities/c")] // wrong provider
+ [InlineData("/subscriptions/s/resourceGroups/rg/providers/Microsoft.Network/virtualNetworkAppliances/vna/subnets/c")] // wrong child type
+ [InlineData("/subscriptions/s/resourceGroups/rg/providers/Microsoft.Network/virtualNetworkAppliances/vna/capabilities/c/extra")] // too long
+ public void ParseCapabilityResourceId_MalformedId_Throws(string resourceId)
+ {
+ Assert.Throws(
+ () => VirtualNetworkApplianceCapabilityBaseCmdlet.ParseCapabilityResourceId(resourceId, out _, out _, out _));
+ }
+ }
+}
diff --git a/src/Network/Network/Az.Network.psd1 b/src/Network/Network/Az.Network.psd1
index 488130c1d104..c20e0bdd11a7 100644
--- a/src/Network/Network/Az.Network.psd1
+++ b/src/Network/Network/Az.Network.psd1
@@ -315,7 +315,7 @@ CmdletsToExport = 'Add-AzApplicationGatewayAdvancedRoutingConditionSet',
'Get-AzVHubRouteTable', 'Get-AzVirtualApplianceSite',
'Get-AzVirtualHub', 'Get-AzVirtualHubBgpConnection',
'Get-AzVirtualHubRouteTable', 'Get-AzVirtualHubVnetConnection',
- 'Get-AzVirtualNetwork', 'Get-AzVirtualNetworkAppliance',
+ 'Get-AzVirtualNetwork', 'Get-AzVirtualNetworkAppliance', 'Get-AzVirtualNetworkApplianceCapability',
'Get-AzVirtualNetworkAvailableEndpointService',
'Get-AzVirtualNetworkGateway',
'Get-AzVirtualNetworkGatewayAdvertisedRoute',
@@ -551,7 +551,7 @@ CmdletsToExport = 'Add-AzApplicationGatewayAdvancedRoutingConditionSet',
'New-AzVirtualHub', 'New-AzVirtualHubBgpConnection',
'New-AzVirtualHubRoute', 'New-AzVirtualHubRouteTable',
'New-AzVirtualHubVnetConnection', 'New-AzVirtualNetwork',
- 'New-AzVirtualNetworkAppliance', 'New-AzVirtualNetworkGateway',
+ 'New-AzVirtualNetworkAppliance', 'New-AzVirtualNetworkApplianceCapability', 'New-AzVirtualNetworkGateway',
'New-AzVirtualNetworkGatewayCertificateAuthentication',
'New-AzVirtualNetworkGatewayConnection',
'New-AzVirtualNetworkGatewayIpConfig',
@@ -675,7 +675,7 @@ CmdletsToExport = 'Add-AzApplicationGatewayAdvancedRoutingConditionSet',
'Remove-AzVirtualHub', 'Remove-AzVirtualHubBgpConnection',
'Remove-AzVirtualHubRouteTable',
'Remove-AzVirtualHubVnetConnection', 'Remove-AzVirtualNetwork',
- 'Remove-AzVirtualNetworkAppliance',
+ 'Remove-AzVirtualNetworkAppliance', 'Remove-AzVirtualNetworkApplianceCapability',
'Remove-AzVirtualNetworkGateway',
'Remove-AzVirtualNetworkGatewayConnection',
'Remove-AzVirtualNetworkGatewayDefaultSite',
diff --git a/src/Network/Network/ChangeLog.md b/src/Network/Network/ChangeLog.md
index 26b79782a725..d9d2e41d32ff 100644
--- a/src/Network/Network/ChangeLog.md
+++ b/src/Network/Network/ChangeLog.md
@@ -55,6 +55,8 @@
* Removed client-side validation of the `-FormatVersion` parameter for `New-AzNetworkWatcherFlowLog` and `Set-AzNetworkWatcherFlowLog`.
- Flow log format versions are now validated by the service, so newly supported versions can be used without a module update.
- Corrected the error message shown for an invalid `-FormatType` value, which previously reported an invalid format version.
+* Added cmdlets to manage Virtual Network Appliance capabilities.
+ - `New-AzVirtualNetworkApplianceCapability`, `Get-AzVirtualNetworkApplianceCapability`, `Remove-AzVirtualNetworkApplianceCapability`.
* Added Change Safety support for additional cmdlets.
* Added support for the `CAPTCHA` action in Application Gateway WAF (Web Application Firewall) policies.
- Added `CAPTCHA` as an allowed value for the `-Action` parameter of custom rules (`New-AzApplicationGatewayFirewallCustomRule`) and managed rule overrides (`New-AzApplicationGatewayFirewallPolicyManagedRuleOverride`).
diff --git a/src/Network/Network/Models/PSVirtualNetworkApplianceCapability.cs b/src/Network/Network/Models/PSVirtualNetworkApplianceCapability.cs
new file mode 100644
index 000000000000..a69ed320929a
--- /dev/null
+++ b/src/Network/Network/Models/PSVirtualNetworkApplianceCapability.cs
@@ -0,0 +1,33 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+namespace Microsoft.Azure.Commands.Network.Models
+{
+ public class PSVirtualNetworkApplianceCapability : PSChildResource
+ {
+ public string Type { get; set; }
+
+ public string Kind { get; set; }
+
+ public string IpVersion { get; set; }
+
+ public string LinkedResourceId { get; set; }
+
+ public string ProvisioningState { get; set; }
+
+ public string ResourceGroupName { get; set; }
+
+ public string VirtualNetworkApplianceName { get; set; }
+ }
+}
diff --git a/src/Network/Network/VirtualNetworkApplianceCapability/GetVirtualNetworkApplianceCapabilityCommand.cs b/src/Network/Network/VirtualNetworkApplianceCapability/GetVirtualNetworkApplianceCapabilityCommand.cs
new file mode 100644
index 000000000000..4fd5cbe6d123
--- /dev/null
+++ b/src/Network/Network/VirtualNetworkApplianceCapability/GetVirtualNetworkApplianceCapabilityCommand.cs
@@ -0,0 +1,99 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+using Microsoft.Azure.Commands.Network.Models;
+using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
+using Microsoft.Azure.Management.Network;
+using Microsoft.Azure.Management.Network.Models;
+using Microsoft.Rest.Azure;
+using System.Collections.Generic;
+using System.Management.Automation;
+
+namespace Microsoft.Azure.Commands.Network
+{
+ [Cmdlet("Get", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "VirtualNetworkApplianceCapability", DefaultParameterSetName = ResourceNameParameterSet, HelpUri = "https://learn.microsoft.com/powershell/module/az.network/get-azvirtualnetworkappliancecapability"), OutputType(typeof(PSVirtualNetworkApplianceCapability))]
+ public class GetVirtualNetworkApplianceCapabilityCommand : VirtualNetworkApplianceCapabilityBaseCmdlet
+ {
+ private const string ResourceNameParameterSet = "ResourceNameParameterSet";
+ private const string ResourceIdParameterSet = "ResourceIdParameterSet";
+
+ [Alias("ResourceName")]
+ [Parameter(
+ Mandatory = false,
+ ValueFromPipelineByPropertyName = true,
+ HelpMessage = "The capability name.",
+ ParameterSetName = ResourceNameParameterSet)]
+ [ValidateNotNullOrEmpty]
+ public virtual string Name { get; set; }
+
+ [Alias("ApplianceName")]
+ [Parameter(
+ Mandatory = true,
+ ValueFromPipelineByPropertyName = true,
+ HelpMessage = "The name of the parent Virtual Network Appliance.",
+ ParameterSetName = ResourceNameParameterSet)]
+ [ResourceNameCompleter("Microsoft.Network/virtualNetworkAppliances", "ResourceGroupName")]
+ [ValidateNotNullOrEmpty]
+ public virtual string VirtualNetworkApplianceName { get; set; }
+
+ [Parameter(
+ Mandatory = true,
+ ValueFromPipelineByPropertyName = true,
+ HelpMessage = "The resource group name.",
+ ParameterSetName = ResourceNameParameterSet)]
+ [ResourceGroupCompleter]
+ [ValidateNotNullOrEmpty]
+ public virtual string ResourceGroupName { get; set; }
+
+ [Parameter(
+ Mandatory = true,
+ ValueFromPipelineByPropertyName = true,
+ HelpMessage = "The resource Id of the capability.",
+ ParameterSetName = ResourceIdParameterSet)]
+ [ValidateNotNullOrEmpty]
+ public virtual string ResourceId { get; set; }
+
+ public override void Execute()
+ {
+ base.Execute();
+
+ if (ParameterSetName.Equals(ResourceIdParameterSet))
+ {
+ ParseCapabilityResourceId(this.ResourceId, out string parsedResourceGroupName, out string parsedApplianceName, out string parsedCapabilityName);
+ this.ResourceGroupName = parsedResourceGroupName;
+ this.VirtualNetworkApplianceName = parsedApplianceName;
+ this.Name = parsedCapabilityName;
+ }
+
+ if (!string.IsNullOrEmpty(this.Name))
+ {
+ var capability = this.GetVirtualNetworkApplianceCapability(this.ResourceGroupName, this.VirtualNetworkApplianceName, this.Name);
+ WriteObject(capability);
+ }
+ else
+ {
+ IPage page = this.VirtualNetworkApplianceCapabilitiesClient.List(this.ResourceGroupName, this.VirtualNetworkApplianceName);
+ var all = ListNextLink.GetAllResourcesByPollingNextLink(page, this.VirtualNetworkApplianceCapabilitiesClient.ListNext);
+
+ var results = new List();
+ foreach (var capability in all)
+ {
+ results.Add(this.ToPsVirtualNetworkApplianceCapability(capability, this.ResourceGroupName, this.VirtualNetworkApplianceName));
+ }
+
+ WriteObject(results, true);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Network/Network/VirtualNetworkApplianceCapability/NewVirtualNetworkApplianceCapabilityCommand.cs b/src/Network/Network/VirtualNetworkApplianceCapability/NewVirtualNetworkApplianceCapabilityCommand.cs
new file mode 100644
index 000000000000..0aa18c889d6f
--- /dev/null
+++ b/src/Network/Network/VirtualNetworkApplianceCapability/NewVirtualNetworkApplianceCapabilityCommand.cs
@@ -0,0 +1,100 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+using Microsoft.Azure.Commands.Network.Models;
+using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
+using Microsoft.Azure.Management.Network;
+using System.Management.Automation;
+
+namespace Microsoft.Azure.Commands.Network
+{
+ [Cmdlet("New", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "VirtualNetworkApplianceCapability", SupportsShouldProcess = true, DefaultParameterSetName = ResourceNameParameterSet, HelpUri = "https://learn.microsoft.com/powershell/module/az.network/new-azvirtualnetworkappliancecapability"), OutputType(typeof(PSVirtualNetworkApplianceCapability))]
+ public class NewVirtualNetworkApplianceCapabilityCommand : VirtualNetworkApplianceCapabilityBaseCmdlet
+ {
+ private const string ResourceNameParameterSet = "ResourceNameParameterSet";
+
+ [Alias("ResourceName")]
+ [Parameter(
+ Mandatory = true,
+ ValueFromPipelineByPropertyName = true,
+ HelpMessage = "The capability name.",
+ ParameterSetName = ResourceNameParameterSet)]
+ [ValidateNotNullOrEmpty]
+ public virtual string Name { get; set; }
+
+ [Alias("ApplianceName")]
+ [Parameter(
+ Mandatory = true,
+ ValueFromPipelineByPropertyName = true,
+ HelpMessage = "The name of the parent Virtual Network Appliance.",
+ ParameterSetName = ResourceNameParameterSet)]
+ [ResourceNameCompleter("Microsoft.Network/virtualNetworkAppliances", "ResourceGroupName")]
+ [ValidateNotNullOrEmpty]
+ public virtual string VirtualNetworkApplianceName { get; set; }
+
+ [Parameter(
+ Mandatory = true,
+ ValueFromPipelineByPropertyName = true,
+ HelpMessage = "The resource group name.",
+ ParameterSetName = ResourceNameParameterSet)]
+ [ResourceGroupCompleter]
+ [ValidateNotNullOrEmpty]
+ public virtual string ResourceGroupName { get; set; }
+
+ [Parameter(
+ Mandatory = true,
+ ValueFromPipelineByPropertyName = true,
+ HelpMessage = "The capability kind. Possible values: PLGatewayFastpath, PLGateway, PLIPForwarders, NAT64.")]
+ [ValidateSet("PLGatewayFastpath", "PLGateway", "PLIPForwarders", "NAT64", IgnoreCase = true)]
+ public virtual string Kind { get; set; }
+
+ [Parameter(
+ Mandatory = false,
+ ValueFromPipelineByPropertyName = true,
+ HelpMessage = "The IP version the capability applies to. Required for the Private Link kinds: PLGatewayFastpath requires DualStack; PLGateway and PLIPForwarders require IPv6. Must not be set for NAT64 (property-less). Possible values: IPv6, DualStack.")]
+ [ValidateSet("IPv6", "DualStack", IgnoreCase = true)]
+ public virtual string IpVersion { get; set; }
+
+ [Parameter(
+ Mandatory = false,
+ HelpMessage = "Do not ask for confirmation if you want to overwrite a resource")]
+ public SwitchParameter Force { get; set; }
+
+ [Parameter(Mandatory = false, HelpMessage = "Run cmdlet in the background")]
+ public SwitchParameter AsJob { get; set; }
+
+ public override void Execute()
+ {
+ base.Execute();
+
+ // Validate and build the payload before any service call so client-side errors (e.g. an unsupported
+ // kind/ipVersion combination) surface without network I/O.
+ var parameters = BuildCapabilityParameters(this.Kind, this.IpVersion);
+
+ var present = this.IsVirtualNetworkApplianceCapabilityPresent(this.ResourceGroupName, this.VirtualNetworkApplianceName, this.Name);
+ ConfirmAction(
+ Force.IsPresent,
+ string.Format(Properties.Resources.OverwritingResource, Name),
+ Properties.Resources.CreatingResourceMessage,
+ Name,
+ () =>
+ {
+ var response = this.VirtualNetworkApplianceCapabilitiesClient.CreateOrUpdate(this.ResourceGroupName, this.VirtualNetworkApplianceName, this.Name, parameters);
+ var capability = ToPsVirtualNetworkApplianceCapability(response, this.ResourceGroupName, this.VirtualNetworkApplianceName);
+ WriteObject(capability);
+ },
+ () => present);
+ }
+ }
+}
diff --git a/src/Network/Network/VirtualNetworkApplianceCapability/RemoveVirtualNetworkApplianceCapabilityCommand.cs b/src/Network/Network/VirtualNetworkApplianceCapability/RemoveVirtualNetworkApplianceCapabilityCommand.cs
new file mode 100644
index 000000000000..7e4f684fae7e
--- /dev/null
+++ b/src/Network/Network/VirtualNetworkApplianceCapability/RemoveVirtualNetworkApplianceCapabilityCommand.cs
@@ -0,0 +1,117 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+using Microsoft.Azure.Commands.Network.Models;
+using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
+using Microsoft.Azure.Management.Network;
+using System.Management.Automation;
+
+namespace Microsoft.Azure.Commands.Network
+{
+ [Cmdlet("Remove", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "VirtualNetworkApplianceCapability", SupportsShouldProcess = true, DefaultParameterSetName = ResourceNameParameterSet, HelpUri = "https://learn.microsoft.com/powershell/module/az.network/remove-azvirtualnetworkappliancecapability"), OutputType(typeof(bool))]
+ public class RemoveVirtualNetworkApplianceCapabilityCommand : VirtualNetworkApplianceCapabilityBaseCmdlet
+ {
+ private const string ResourceNameParameterSet = "ResourceNameParameterSet";
+ private const string ResourceIdParameterSet = "ResourceIdParameterSet";
+ private const string InputObjectParameterSet = "InputObjectParameterSet";
+
+ [Alias("ResourceName")]
+ [Parameter(
+ Mandatory = true,
+ ValueFromPipelineByPropertyName = true,
+ HelpMessage = "The capability name.",
+ ParameterSetName = ResourceNameParameterSet)]
+ [ValidateNotNullOrEmpty]
+ public virtual string Name { get; set; }
+
+ [Alias("ApplianceName")]
+ [Parameter(
+ Mandatory = true,
+ ValueFromPipelineByPropertyName = true,
+ HelpMessage = "The name of the parent Virtual Network Appliance.",
+ ParameterSetName = ResourceNameParameterSet)]
+ [ResourceNameCompleter("Microsoft.Network/virtualNetworkAppliances", "ResourceGroupName")]
+ [ValidateNotNullOrEmpty]
+ public virtual string VirtualNetworkApplianceName { get; set; }
+
+ [Parameter(
+ Mandatory = true,
+ ValueFromPipelineByPropertyName = true,
+ HelpMessage = "The resource group name.",
+ ParameterSetName = ResourceNameParameterSet)]
+ [ResourceGroupCompleter]
+ [ValidateNotNullOrEmpty]
+ public virtual string ResourceGroupName { get; set; }
+
+ [Parameter(
+ Mandatory = true,
+ ValueFromPipelineByPropertyName = true,
+ HelpMessage = "The resource Id of the capability.",
+ ParameterSetName = ResourceIdParameterSet)]
+ [ValidateNotNullOrEmpty]
+ public virtual string ResourceId { get; set; }
+
+ [Parameter(
+ Mandatory = true,
+ ValueFromPipeline = true,
+ HelpMessage = "The Virtual Network Appliance capability object.",
+ ParameterSetName = InputObjectParameterSet)]
+ [ValidateNotNullOrEmpty]
+ public PSVirtualNetworkApplianceCapability InputObject { get; set; }
+
+ [Parameter(
+ Mandatory = false,
+ HelpMessage = "Do not ask for confirmation.")]
+ public SwitchParameter Force { get; set; }
+
+ [Parameter(Mandatory = false)]
+ public SwitchParameter PassThru { get; set; }
+
+ [Parameter(Mandatory = false, HelpMessage = "Run cmdlet in the background")]
+ public SwitchParameter AsJob { get; set; }
+
+ public override void Execute()
+ {
+ base.Execute();
+
+ if (ParameterSetName.Equals(ResourceIdParameterSet))
+ {
+ ParseCapabilityResourceId(this.ResourceId, out string parsedResourceGroupName, out string parsedApplianceName, out string parsedCapabilityName);
+ this.ResourceGroupName = parsedResourceGroupName;
+ this.VirtualNetworkApplianceName = parsedApplianceName;
+ this.Name = parsedCapabilityName;
+ }
+ else if (ParameterSetName.Equals(InputObjectParameterSet))
+ {
+ this.ResourceGroupName = this.InputObject.ResourceGroupName;
+ this.VirtualNetworkApplianceName = this.InputObject.VirtualNetworkApplianceName;
+ this.Name = this.InputObject.Name;
+ }
+
+ ConfirmAction(
+ Force.IsPresent,
+ string.Format(Properties.Resources.RemovingResource, Name),
+ Properties.Resources.RemoveResourceMessage,
+ Name,
+ () =>
+ {
+ this.VirtualNetworkApplianceCapabilitiesClient.Delete(this.ResourceGroupName, this.VirtualNetworkApplianceName, this.Name);
+ if (PassThru)
+ {
+ WriteObject(true);
+ }
+ });
+ }
+ }
+}
diff --git a/src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs b/src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs
new file mode 100644
index 000000000000..f78d996384c8
--- /dev/null
+++ b/src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs
@@ -0,0 +1,203 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+using Microsoft.Azure.Commands.Network.Models;
+using Microsoft.Azure.Management.Network;
+using Microsoft.Azure.Management.Network.Models;
+using System;
+using System.Management.Automation;
+using System.Net;
+
+namespace Microsoft.Azure.Commands.Network
+{
+ public abstract class VirtualNetworkApplianceCapabilityBaseCmdlet : NetworkBaseCmdlet
+ {
+ public IVirtualNetworkApplianceCapabilitiesOperations VirtualNetworkApplianceCapabilitiesClient
+ {
+ get
+ {
+ return NetworkClient.NetworkManagementClient.VirtualNetworkApplianceCapabilities;
+ }
+ }
+
+ public bool IsVirtualNetworkApplianceCapabilityPresent(string resourceGroupName, string virtualNetworkApplianceName, string name)
+ {
+ try
+ {
+ GetVirtualNetworkApplianceCapability(resourceGroupName, virtualNetworkApplianceName, name);
+ }
+ catch (Microsoft.Rest.Azure.CloudException exception)
+ {
+ if (exception.Response.StatusCode == HttpStatusCode.NotFound)
+ {
+ // Resource is not present
+ return false;
+ }
+ throw;
+ }
+ return true;
+ }
+
+ public PSVirtualNetworkApplianceCapability GetVirtualNetworkApplianceCapability(string resourceGroupName, string virtualNetworkApplianceName, string name)
+ {
+ var capability = this.VirtualNetworkApplianceCapabilitiesClient.Get(resourceGroupName, virtualNetworkApplianceName, name);
+ return ToPsVirtualNetworkApplianceCapability(capability, resourceGroupName, virtualNetworkApplianceName);
+ }
+
+ public PSVirtualNetworkApplianceCapability ToPsVirtualNetworkApplianceCapability(VirtualNetworkApplianceCapability capability, string resourceGroupName, string virtualNetworkApplianceName)
+ {
+ return new PSVirtualNetworkApplianceCapability
+ {
+ Name = capability.Name,
+ Id = capability.Id,
+ Type = capability.Type,
+ Kind = GetCapabilityKind(capability),
+ IpVersion = capability.Properties?.IPVersion,
+ LinkedResourceId = capability.Properties?.LinkedResourceId,
+ ProvisioningState = capability.Properties?.ProvisioningState,
+ ResourceGroupName = resourceGroupName,
+ VirtualNetworkApplianceName = virtualNetworkApplianceName
+ };
+ }
+
+ // The capability is a discriminated resource: the concrete SDK subtype maps one-to-one to the
+ // wire-level "kind". The generated base type does not surface "kind" as a settable property, so it is
+ // derived from the runtime subtype here. Exposed for unit testing (no service dependency).
+ public static string GetCapabilityKind(VirtualNetworkApplianceCapability capability)
+ {
+ switch (capability)
+ {
+ case PLGatewayFastpathCapability _:
+ return VirtualNetworkApplianceCapabilityKind.PLGatewayFastpath;
+ case PLGatewayCapability _:
+ return VirtualNetworkApplianceCapabilityKind.PLGateway;
+ case PlipForwardersCapability _:
+ return VirtualNetworkApplianceCapabilityKind.PlipForwarders;
+ case Nat64Capability _:
+ return VirtualNetworkApplianceCapabilityKind.Nat64;
+ default:
+ return null;
+ }
+ }
+
+ // Builds the kind-specific create-or-update payload. "kind" selects the concrete subtype (which the
+ // serializer emits as the top-level discriminator). The Private-Link kinds carry an "ipVersion" (the
+ // service validates it against the kind: PLGatewayFastpath -> DualStack; PLGateway / PLIPForwarders ->
+ // IPv6). NAT64 is property-less and must not carry an ipVersion. Exposed for unit testing (no service dependency).
+ public static VirtualNetworkApplianceCapability BuildCapabilityParameters(string kind, string ipVersion)
+ {
+ bool isNat64 = string.Equals(kind, VirtualNetworkApplianceCapabilityKind.Nat64, StringComparison.OrdinalIgnoreCase);
+ bool ipVersionProvided = !string.IsNullOrEmpty(ipVersion);
+
+ if (isNat64 && ipVersionProvided)
+ {
+ throw new ArgumentException("The -IpVersion parameter is not supported for the 'NAT64' capability kind, which is property-less.", nameof(ipVersion));
+ }
+
+ if (!isNat64 && !ipVersionProvided)
+ {
+ throw new ArgumentException($"The -IpVersion parameter is required for the '{kind}' capability kind.", nameof(ipVersion));
+ }
+
+ if (isNat64)
+ {
+ // NAT64 is property-less; the wire contract still carries an empty "properties" object
+ // (no ipVersion). An empty properties bag serializes to "properties": {} to match the service contract.
+ return new Nat64Capability { Properties = new VirtualNetworkApplianceCapabilityProperties() };
+ }
+
+ var properties = new VirtualNetworkApplianceCapabilityProperties
+ {
+ IPVersion = NormalizeIpVersion(ipVersion)
+ };
+
+ // Enforce the per-kind ipVersion contract client-side (the service also validates it), so a
+ // documented-invalid combination fails fast without a network round-trip. NAT64 already returned
+ // above, so it is never evaluated here. The value compared is the normalized (canonical-cased) one.
+ bool invalidIpVersion =
+ (string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PLGatewayFastpath, StringComparison.OrdinalIgnoreCase)
+ && !string.Equals(properties.IPVersion, VirtualNetworkApplianceCapabilityIpVersion.DualStack, StringComparison.Ordinal))
+ || ((string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PLGateway, StringComparison.OrdinalIgnoreCase)
+ || string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PlipForwarders, StringComparison.OrdinalIgnoreCase))
+ && !string.Equals(properties.IPVersion, VirtualNetworkApplianceCapabilityIpVersion.IPv6, StringComparison.Ordinal));
+
+ if (invalidIpVersion)
+ {
+ throw new ArgumentException($"The -IpVersion value '{ipVersion}' is not valid for the '{kind}' capability kind. PLGatewayFastpath requires DualStack; PLGateway and PLIPForwarders require IPv6.", nameof(ipVersion));
+ }
+
+ if (string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PLGatewayFastpath, StringComparison.OrdinalIgnoreCase))
+ {
+ return new PLGatewayFastpathCapability { Properties = properties };
+ }
+
+ if (string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PLGateway, StringComparison.OrdinalIgnoreCase))
+ {
+ return new PLGatewayCapability { Properties = properties };
+ }
+
+ if (string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PlipForwarders, StringComparison.OrdinalIgnoreCase))
+ {
+ return new PlipForwardersCapability { Properties = properties };
+ }
+
+ throw new ArgumentException($"Unsupported virtual network appliance capability kind '{kind}'.", nameof(kind));
+ }
+
+ // Canonicalizes the IP version to the exact wire value the service expects, since the cmdlet's
+ // ValidateSet accepts case-insensitive input.
+ private static string NormalizeIpVersion(string ipVersion)
+ {
+ if (string.Equals(ipVersion, VirtualNetworkApplianceCapabilityIpVersion.IPv6, StringComparison.OrdinalIgnoreCase))
+ {
+ return VirtualNetworkApplianceCapabilityIpVersion.IPv6;
+ }
+
+ if (string.Equals(ipVersion, VirtualNetworkApplianceCapabilityIpVersion.DualStack, StringComparison.OrdinalIgnoreCase))
+ {
+ return VirtualNetworkApplianceCapabilityIpVersion.DualStack;
+ }
+
+ return ipVersion;
+ }
+
+ // Parses a capability ARM resource id of the fixed 10-segment form
+ // /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworkAppliances/{appliance}/capabilities/{capability}
+ // Every structural token is validated positionally and the resource group, appliance, and capability
+ // names are read from fixed positions, so a resource NAME that happens to equal a type keyword
+ // (e.g. an appliance literally named "resourceGroups" or "capabilities") cannot be mis-parsed.
+ // Exposed for unit testing (no service dependency).
+ public static void ParseCapabilityResourceId(string resourceId, out string resourceGroupName, out string virtualNetworkApplianceName, out string capabilityName)
+ {
+ var segments = (resourceId ?? string.Empty).Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
+
+ bool valid = segments.Length == 10
+ && string.Equals(segments[0], "subscriptions", StringComparison.OrdinalIgnoreCase)
+ && string.Equals(segments[2], "resourceGroups", StringComparison.OrdinalIgnoreCase)
+ && string.Equals(segments[4], "providers", StringComparison.OrdinalIgnoreCase)
+ && string.Equals(segments[5], "Microsoft.Network", StringComparison.OrdinalIgnoreCase)
+ && string.Equals(segments[6], "virtualNetworkAppliances", StringComparison.OrdinalIgnoreCase)
+ && string.Equals(segments[8], "capabilities", StringComparison.OrdinalIgnoreCase);
+
+ if (!valid)
+ {
+ throw new PSArgumentException($"'{resourceId}' is not a valid virtual network appliance capability resource id. Expected the form '/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/virtualNetworkAppliances/{{applianceName}}/capabilities/{{capabilityName}}'.", nameof(resourceId));
+ }
+
+ resourceGroupName = segments[3];
+ virtualNetworkApplianceName = segments[7];
+ capabilityName = segments[9];
+ }
+ }
+}
diff --git a/src/Network/Network/help/Az.Network.md b/src/Network/Network/help/Az.Network.md
index c820821ae396..1162af20e3d8 100644
--- a/src/Network/Network/help/Az.Network.md
+++ b/src/Network/Network/help/Az.Network.md
@@ -814,6 +814,9 @@ Gets a virtual network in a resource group.
### [Get-AzVirtualNetworkAppliance](Get-AzVirtualNetworkAppliance.md)
Gets a Virtual Network Appliance (VNA) resource.
+### [Get-AzVirtualNetworkApplianceCapability](Get-AzVirtualNetworkApplianceCapability.md)
+Gets a capability of a Virtual Network Appliance (VNA), or lists all capabilities on an appliance.
+
### [Get-AzVirtualNetworkAvailableEndpointService](Get-AzVirtualNetworkAvailableEndpointService.md)
Lists available endpoint services for location.
@@ -1709,6 +1712,9 @@ Creates a virtual network.
### [New-AzVirtualNetworkAppliance](New-AzVirtualNetworkAppliance.md)
Creates a new Virtual Network Appliance (VNA) resource.
+### [New-AzVirtualNetworkApplianceCapability](New-AzVirtualNetworkApplianceCapability.md)
+Creates a capability on a Virtual Network Appliance (VNA).
+
### [New-AzVirtualNetworkGateway](New-AzVirtualNetworkGateway.md)
Creates a Virtual Network Gateway
@@ -2208,6 +2214,9 @@ Removes a virtual network.
### [Remove-AzVirtualNetworkAppliance](Remove-AzVirtualNetworkAppliance.md)
Removes a Virtual Network Appliance (VNA) resource.
+### [Remove-AzVirtualNetworkApplianceCapability](Remove-AzVirtualNetworkApplianceCapability.md)
+Removes a capability from a Virtual Network Appliance (VNA).
+
### [Remove-AzVirtualNetworkGateway](Remove-AzVirtualNetworkGateway.md)
Deletes a Virtual Network Gateway
diff --git a/src/Network/Network/help/Get-AzVirtualNetworkApplianceCapability.md b/src/Network/Network/help/Get-AzVirtualNetworkApplianceCapability.md
new file mode 100644
index 000000000000..faf33db2e42d
--- /dev/null
+++ b/src/Network/Network/help/Get-AzVirtualNetworkApplianceCapability.md
@@ -0,0 +1,136 @@
+---
+external help file: Microsoft.Azure.PowerShell.Cmdlets.Network.dll-Help.xml
+Module Name: Az.Network
+online version: https://learn.microsoft.com/powershell/module/az.network/get-azvirtualnetworkappliancecapability
+schema: 2.0.0
+---
+
+# Get-AzVirtualNetworkApplianceCapability
+
+## SYNOPSIS
+Gets a capability of a Virtual Network Appliance (VNA), or lists all capabilities on an appliance.
+
+## SYNTAX
+
+### ResourceNameParameterSet (Default)
+```
+Get-AzVirtualNetworkApplianceCapability [-Name ] -VirtualNetworkApplianceName
+ -ResourceGroupName [-DefaultProfile ] []
+```
+
+### ResourceIdParameterSet
+```
+Get-AzVirtualNetworkApplianceCapability -ResourceId [-DefaultProfile ]
+ []
+```
+
+## DESCRIPTION
+The Get-AzVirtualNetworkApplianceCapability cmdlet gets a single capability of a Virtual Network Appliance by name, or lists all capabilities on the appliance when -Name is omitted. A capability can also be retrieved by its full resource ID.
+
+## EXAMPLES
+
+### Example 1: Get a capability by name
+```powershell
+Get-AzVirtualNetworkApplianceCapability -ResourceGroupName "myResourceGroup" -VirtualNetworkApplianceName "myVNA" -Name "pl-gateway"
+```
+
+Gets the capability named "pl-gateway" on the appliance "myVNA".
+
+### Example 2: List all capabilities on an appliance
+```powershell
+Get-AzVirtualNetworkApplianceCapability -ResourceGroupName "myResourceGroup" -VirtualNetworkApplianceName "myVNA"
+```
+
+Lists every capability on the appliance "myVNA".
+
+## PARAMETERS
+
+### -DefaultProfile
+The credentials, account, tenant, and subscription used for communication with Azure.
+
+```yaml
+Type: Microsoft.Azure.Commands.Common.Authentication.Abstractions.Core.IAzureContextContainer
+Parameter Sets: (All)
+Aliases: AzContext, AzureRmContext, AzureCredential
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Name
+The capability name.
+
+```yaml
+Type: System.String
+Parameter Sets: ResourceNameParameterSet
+Aliases: ResourceName
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: True (ByPropertyName)
+Accept wildcard characters: False
+```
+
+### -ResourceGroupName
+The resource group name.
+
+```yaml
+Type: System.String
+Parameter Sets: ResourceNameParameterSet
+Aliases:
+
+Required: True
+Position: Named
+Default value: None
+Accept pipeline input: True (ByPropertyName)
+Accept wildcard characters: False
+```
+
+### -ResourceId
+The resource Id of the capability.
+
+```yaml
+Type: System.String
+Parameter Sets: ResourceIdParameterSet
+Aliases:
+
+Required: True
+Position: Named
+Default value: None
+Accept pipeline input: True (ByPropertyName)
+Accept wildcard characters: False
+```
+
+### -VirtualNetworkApplianceName
+The name of the parent Virtual Network Appliance.
+
+```yaml
+Type: System.String
+Parameter Sets: ResourceNameParameterSet
+Aliases: ApplianceName
+
+Required: True
+Position: Named
+Default value: None
+Accept pipeline input: True (ByPropertyName)
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+### System.String
+
+## OUTPUTS
+
+### Microsoft.Azure.Commands.Network.Models.PSVirtualNetworkApplianceCapability
+
+## NOTES
+
+## RELATED LINKS
diff --git a/src/Network/Network/help/New-AzVirtualNetworkApplianceCapability.md b/src/Network/Network/help/New-AzVirtualNetworkApplianceCapability.md
new file mode 100644
index 000000000000..c0d40f103cbd
--- /dev/null
+++ b/src/Network/Network/help/New-AzVirtualNetworkApplianceCapability.md
@@ -0,0 +1,247 @@
+---
+external help file: Microsoft.Azure.PowerShell.Cmdlets.Network.dll-Help.xml
+Module Name: Az.Network
+online version: https://learn.microsoft.com/powershell/module/az.network/new-azvirtualnetworkappliancecapability
+schema: 2.0.0
+---
+
+# New-AzVirtualNetworkApplianceCapability
+
+## SYNOPSIS
+Creates a capability on a Virtual Network Appliance (VNA).
+
+## SYNTAX
+
+```
+New-AzVirtualNetworkApplianceCapability -Name -VirtualNetworkApplianceName
+ -ResourceGroupName -Kind [-IpVersion ] [-Force] [-AsJob]
+ [-DefaultProfile ] [-WhatIf] [-Confirm] [-AcquirePolicyToken]
+ [-ChangeReference ] []
+```
+
+## DESCRIPTION
+The New-AzVirtualNetworkApplianceCapability cmdlet creates a capability child resource on an existing Virtual Network Appliance.
+The capability kind is selected with the -Kind parameter. The three Private Link kinds (PLGatewayFastpath, PLGateway, PLIPForwarders) require an -IpVersion; NAT64 is property-less and does not accept -IpVersion. The parent appliance must be dual-stack.
+
+## EXAMPLES
+
+### Example 1: Create a Private Link Gateway FastPath capability
+```powershell
+New-AzVirtualNetworkApplianceCapability -ResourceGroupName "myResourceGroup" -VirtualNetworkApplianceName "myVNA" -Name "pl-fastpath" -Kind "PLGatewayFastpath" -IpVersion "DualStack"
+```
+
+Creates a PLGatewayFastpath capability. This kind requires the DualStack IP version.
+
+### Example 2: Create a Private Link Gateway capability
+```powershell
+New-AzVirtualNetworkApplianceCapability -ResourceGroupName "myResourceGroup" -VirtualNetworkApplianceName "myVNA" -Name "pl-gateway" -Kind "PLGateway" -IpVersion "IPv6"
+```
+
+Creates a PLGateway capability. This kind requires the IPv6 IP version (as does PLIPForwarders).
+
+### Example 3: Create a NAT64 capability
+```powershell
+New-AzVirtualNetworkApplianceCapability -ResourceGroupName "myResourceGroup" -VirtualNetworkApplianceName "myVNA" -Name "nat64" -Kind "NAT64"
+```
+
+Creates a NAT64 capability. NAT64 is property-less and must not be given an -IpVersion.
+
+## PARAMETERS
+
+### -AcquirePolicyToken
+Acquire an Azure Policy token automatically for this resource operation.
+
+```yaml
+Type: System.Management.Automation.SwitchParameter
+Parameter Sets: (All)
+Aliases:
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -AsJob
+Run cmdlet in the background
+
+```yaml
+Type: System.Management.Automation.SwitchParameter
+Parameter Sets: (All)
+Aliases:
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ChangeReference
+The change reference resource ID for this resource operation.
+
+```yaml
+Type: System.String
+Parameter Sets: (All)
+Aliases:
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DefaultProfile
+The credentials, account, tenant, and subscription used for communication with Azure.
+
+```yaml
+Type: Microsoft.Azure.Commands.Common.Authentication.Abstractions.Core.IAzureContextContainer
+Parameter Sets: (All)
+Aliases: AzContext, AzureRmContext, AzureCredential
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Force
+Do not ask for confirmation if you want to overwrite a resource
+
+```yaml
+Type: System.Management.Automation.SwitchParameter
+Parameter Sets: (All)
+Aliases:
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IpVersion
+The IP version the capability applies to. Required for the Private Link kinds: PLGatewayFastpath requires DualStack; PLGateway and PLIPForwarders require IPv6. Must not be set for NAT64 (property-less). Possible values: IPv6, DualStack.
+
+```yaml
+Type: System.String
+Parameter Sets: (All)
+Aliases:
+Accepted values: IPv6, DualStack
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: True (ByPropertyName)
+Accept wildcard characters: False
+```
+
+### -Kind
+The capability kind. Possible values: PLGatewayFastpath, PLGateway, PLIPForwarders, NAT64.
+
+```yaml
+Type: System.String
+Parameter Sets: (All)
+Aliases:
+Accepted values: PLGatewayFastpath, PLGateway, PLIPForwarders, NAT64
+
+Required: True
+Position: Named
+Default value: None
+Accept pipeline input: True (ByPropertyName)
+Accept wildcard characters: False
+```
+
+### -Name
+The capability name.
+
+```yaml
+Type: System.String
+Parameter Sets: (All)
+Aliases: ResourceName
+
+Required: True
+Position: Named
+Default value: None
+Accept pipeline input: True (ByPropertyName)
+Accept wildcard characters: False
+```
+
+### -ResourceGroupName
+The resource group name.
+
+```yaml
+Type: System.String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: Named
+Default value: None
+Accept pipeline input: True (ByPropertyName)
+Accept wildcard characters: False
+```
+
+### -VirtualNetworkApplianceName
+The name of the parent Virtual Network Appliance.
+
+```yaml
+Type: System.String
+Parameter Sets: (All)
+Aliases: ApplianceName
+
+Required: True
+Position: Named
+Default value: None
+Accept pipeline input: True (ByPropertyName)
+Accept wildcard characters: False
+```
+
+### -Confirm
+Prompts you for confirmation before running the cmdlet.
+
+```yaml
+Type: System.Management.Automation.SwitchParameter
+Parameter Sets: (All)
+Aliases: cf
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -WhatIf
+Shows what would happen if the cmdlet runs.
+The cmdlet is not run.
+
+```yaml
+Type: System.Management.Automation.SwitchParameter
+Parameter Sets: (All)
+Aliases: wi
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+### System.String
+
+## OUTPUTS
+
+### Microsoft.Azure.Commands.Network.Models.PSVirtualNetworkApplianceCapability
+
+## NOTES
+
+## RELATED LINKS
diff --git a/src/Network/Network/help/Remove-AzVirtualNetworkApplianceCapability.md b/src/Network/Network/help/Remove-AzVirtualNetworkApplianceCapability.md
new file mode 100644
index 000000000000..ae2d8c1fb49d
--- /dev/null
+++ b/src/Network/Network/help/Remove-AzVirtualNetworkApplianceCapability.md
@@ -0,0 +1,264 @@
+---
+external help file: Microsoft.Azure.PowerShell.Cmdlets.Network.dll-Help.xml
+Module Name: Az.Network
+online version: https://learn.microsoft.com/powershell/module/az.network/remove-azvirtualnetworkappliancecapability
+schema: 2.0.0
+---
+
+# Remove-AzVirtualNetworkApplianceCapability
+
+## SYNOPSIS
+Removes a capability from a Virtual Network Appliance (VNA).
+
+## SYNTAX
+
+### ResourceNameParameterSet (Default)
+```
+Remove-AzVirtualNetworkApplianceCapability -Name -VirtualNetworkApplianceName
+ -ResourceGroupName [-Force] [-PassThru] [-AsJob] [-DefaultProfile ]
+ [-WhatIf] [-Confirm] [-AcquirePolicyToken] [-ChangeReference ] []
+```
+
+### ResourceIdParameterSet
+```
+Remove-AzVirtualNetworkApplianceCapability -ResourceId [-Force] [-PassThru] [-AsJob]
+ [-DefaultProfile ] [-WhatIf] [-Confirm] [-AcquirePolicyToken]
+ [-ChangeReference ] []
+```
+
+### InputObjectParameterSet
+```
+Remove-AzVirtualNetworkApplianceCapability -InputObject [-Force]
+ [-PassThru] [-AsJob] [-DefaultProfile ] [-WhatIf] [-Confirm] [-AcquirePolicyToken]
+ [-ChangeReference ] []
+```
+
+## DESCRIPTION
+The Remove-AzVirtualNetworkApplianceCapability cmdlet deletes a capability child resource from a Virtual Network Appliance. The capability can be identified by name, by resource ID, or by piping a capability object.
+
+## EXAMPLES
+
+### Example 1: Remove a capability by name
+```powershell
+Remove-AzVirtualNetworkApplianceCapability -ResourceGroupName "myResourceGroup" -VirtualNetworkApplianceName "myVNA" -Name "pl-gateway" -Force
+```
+
+Removes the capability named "pl-gateway" from the appliance "myVNA".
+
+### Example 2: Remove a capability via pipeline
+```powershell
+Get-AzVirtualNetworkApplianceCapability -ResourceGroupName "myResourceGroup" -VirtualNetworkApplianceName "myVNA" -Name "nat64" | Remove-AzVirtualNetworkApplianceCapability -Force
+```
+
+Gets the "nat64" capability and removes it.
+
+## PARAMETERS
+
+### -AcquirePolicyToken
+Acquire an Azure Policy token automatically for this resource operation.
+
+```yaml
+Type: System.Management.Automation.SwitchParameter
+Parameter Sets: (All)
+Aliases:
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -AsJob
+Run cmdlet in the background
+
+```yaml
+Type: System.Management.Automation.SwitchParameter
+Parameter Sets: (All)
+Aliases:
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ChangeReference
+The change reference resource ID for this resource operation.
+
+```yaml
+Type: System.String
+Parameter Sets: (All)
+Aliases:
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DefaultProfile
+The credentials, account, tenant, and subscription used for communication with Azure.
+
+```yaml
+Type: Microsoft.Azure.Commands.Common.Authentication.Abstractions.Core.IAzureContextContainer
+Parameter Sets: (All)
+Aliases: AzContext, AzureRmContext, AzureCredential
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Force
+Do not ask for confirmation.
+
+```yaml
+Type: System.Management.Automation.SwitchParameter
+Parameter Sets: (All)
+Aliases:
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -InputObject
+The Virtual Network Appliance capability object.
+
+```yaml
+Type: Microsoft.Azure.Commands.Network.Models.PSVirtualNetworkApplianceCapability
+Parameter Sets: InputObjectParameterSet
+Aliases:
+
+Required: True
+Position: Named
+Default value: None
+Accept pipeline input: True (ByValue)
+Accept wildcard characters: False
+```
+
+### -Name
+The capability name.
+
+```yaml
+Type: System.String
+Parameter Sets: ResourceNameParameterSet
+Aliases: ResourceName
+
+Required: True
+Position: Named
+Default value: None
+Accept pipeline input: True (ByPropertyName)
+Accept wildcard characters: False
+```
+
+### -PassThru
+```yaml
+Type: System.Management.Automation.SwitchParameter
+Parameter Sets: (All)
+Aliases:
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ResourceGroupName
+The resource group name.
+
+```yaml
+Type: System.String
+Parameter Sets: ResourceNameParameterSet
+Aliases:
+
+Required: True
+Position: Named
+Default value: None
+Accept pipeline input: True (ByPropertyName)
+Accept wildcard characters: False
+```
+
+### -ResourceId
+The resource Id of the capability.
+
+```yaml
+Type: System.String
+Parameter Sets: ResourceIdParameterSet
+Aliases:
+
+Required: True
+Position: Named
+Default value: None
+Accept pipeline input: True (ByPropertyName)
+Accept wildcard characters: False
+```
+
+### -VirtualNetworkApplianceName
+The name of the parent Virtual Network Appliance.
+
+```yaml
+Type: System.String
+Parameter Sets: ResourceNameParameterSet
+Aliases: ApplianceName
+
+Required: True
+Position: Named
+Default value: None
+Accept pipeline input: True (ByPropertyName)
+Accept wildcard characters: False
+```
+
+### -Confirm
+Prompts you for confirmation before running the cmdlet.
+
+```yaml
+Type: System.Management.Automation.SwitchParameter
+Parameter Sets: (All)
+Aliases: cf
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -WhatIf
+Shows what would happen if the cmdlet runs.
+The cmdlet is not run.
+
+```yaml
+Type: System.Management.Automation.SwitchParameter
+Parameter Sets: (All)
+Aliases: wi
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+### Microsoft.Azure.Commands.Network.Models.PSVirtualNetworkApplianceCapability
+
+## OUTPUTS
+
+### System.Boolean
+
+## NOTES
+
+## RELATED LINKS