Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs-mslearn/TOC.yml
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,8 @@
href: toolkit/powershell/data/open-data-commands.md
- name: Get-FinOpsPricingUnit
href: toolkit/powershell/data/get-finopspricingunit.md
- name: Get-FinOpsRecommendationType
href: toolkit/powershell/data/get-finopsrecommendationtype.md
- name: Get-FinOpsRegion
href: toolkit/powershell/data/get-finopsregion.md
- name: Get-FinOpsResourceType
Expand Down
5 changes: 5 additions & 0 deletions docs-mslearn/toolkit/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ The following section lists features and enhancements that are currently in deve
### Documentation improvements


### [Open data](open-data.md) v13

- **Added**
- Added [RecommendationTypes.csv](open-data.md#recommendation-types) open data file with Azure Advisor recommendation type metadata including recommendation IDs, categories, impact levels, service names, and learn more links.

### [Power BI reports](power-bi/reports.md) v13

- **Fixed**
Expand Down
26 changes: 26 additions & 0 deletions docs-mslearn/toolkit/open-data.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,32 @@ Convert resource type values to lowercase before mapping. This helps reduce dupl

<br>

## Recommendation types

Azure Advisor provides recommendations to help you optimize your Azure deployments. The Recommendation types file includes metadata about each recommendation type to help you organize and provide additional context in your reports and dashboards.

Sample data:

<!-- cSpell:disable -->

| RecommendationTypeId | Category | Impact | ServiceName | ResourceType | DisplayName | LearnMoreLink |
| ------------------------------------ | --------------------- | ------ | -------------------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| a06456ed-afb7-4d16-86fd-0054e25268ed | Performance | Medium | Virtual Machines | microsoft.compute/virtualmachines | Enable Accelerated Networking to improve network performance and latency | https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms |
| 9c0c3708-17f6-4108-9aff-f0e052c3cd41 | OperationalExcellence | Low | Azure App Service | microsoft.subscriptions/subscriptions | Eliminate replica staging environments and ship new versions and features with zero downtime using deployment slots | https://docs.microsoft.com/azure/app-service/deploy-staging-slots |
| a205074f-8049-48b3-903f-556f5e530ae3 | Cost | High | ReservedInstances | microsoft.subscriptions/subscriptions | Buy reserved instance | https://aka.ms/rirecommendations |
| 94aea435-ef39-493f-a547-8408092c22a7 | Cost | High | Virtual Machine Scale Sets | microsoft.compute/virtualmachinescalesets | Shut down or resize your virtual machine scale sets | https://aka.ms/aa_lowusagerec_vmss_learnmore |
| afdf4c1a-e46b-4817-a5d6-4b9909f58e2a | Cost | Low | Azure Synapse Analytics | microsoft.synapse/workspaces | Consider enabling automatic pause feature on spark compute | https://aka.ms/EnableSynapseSparkComputeAutoPauseGuidance |
| ed651749-cd37-4fd5-9897-01b416926745 | HighAvailability | Medium | Site Recovery | microsoft.compute/virtualmachines | Enable virtual machine replication | https://aka.ms/azure-site-recovery-dr-azure-vms |

<!-- cSpell:enable -->

Convert resource type values to lowercase before mapping. This helps reduce duplication and speed up the mapping process.

> [!div class="nextstepaction"]
> [Download](https://github.com/microsoft/finops-toolkit/releases/latest/download/RecommendationTypes.csv)

<br>

## Services

In Microsoft Cost Management, `ConsumedService` represents the primary service or resource provider of the resource you used. It's roughly the same as `ServiceName` in [FOCUS](../focus/what-is-focus.md). In some cases, multiple services share the same resource provider, so we're using the `ConsumedService` and `ResourceType` columns to map to `ServiceName` and `ServiceCategory` values for use within FOCUS.
Expand Down
119 changes: 119 additions & 0 deletions docs-mslearn/toolkit/powershell/data/get-finopsrecommendationtype.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
---
title: Get-FinOpsRecommendationType command
description: Get metadata for Azure Advisor recommendation types using the Get-FinOpsRecommendationType command in the FinOpsToolkit module.
author: flanakin
ms.author: micflan
ms.date: 10/10/2025
ms.topic: reference
ms.service: finops
ms.subservice: finops-toolkit
ms.reviewer: micflan
#customer intent: As a FinOps user, I want to understand how to use the Get-FinOpsRecommendationType command in the FinOpsToolkit module.
---

<!-- markdownlint-disable-next-line MD025 -->
# Get-FinOpsRecommendationType command

The **Get-FinOpsRecommendationType** command returns metadata about Azure Advisor recommendation types based on the specified filters. This data helps organize and provide additional context for Azure Advisor recommendations in FinOps reports and dashboards.

The recommendation type metadata includes:

- RecommendationTypeId - Unique GUID identifier
- Category - Cost, HighAvailability, OperationalExcellence, Performance, or Security
- Impact - High, Medium, or Low
- ServiceName - Name of the Azure service
- ResourceType - Azure resource type (lowercase)
- DisplayName - Human-readable description
- LearnMoreLink - URL to documentation

<br>

## Syntax

```powershell
Get-FinOpsRecommendationType `
[[-RecommendationTypeId] <string>] `
[[-Category] <string>] `
[[-Impact] <string>] `
[-ServiceName <string>] `
[-ResourceType <string>]
```

<br>

## Parameters

| Name | Description |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `‑RecommendationTypeId` | Optional. The recommendation type ID (GUID) to filter by. Accepts wildcards. Default = \* (all). |
| `‑Category` | Optional. The recommendation category to filter by. Accepts wildcards. Default = \* (all). Expected values: Cost, HighAvailability, OperationalExcellence, Performance, Security. |
| `‑Impact` | Optional. The impact level to filter by. Accepts wildcards. Default = \* (all). Expected values: High, Medium, Low. |
| `‑ServiceName` | Optional. The service name to filter by. Accepts wildcards. Default = \* (all). |
| `‑ResourceType` | Optional. The resource type to filter by. Accepts wildcards. Default = \* (all). |

<br>

## Examples

The following examples demonstrate how to use the Get-FinOpsRecommendationType command to retrieve recommendation type metadata.

### Get all recommendation types

```powershell
Get-FinOpsRecommendationType
```

Returns all recommendation types.

### Get cost recommendations

```powershell
Get-FinOpsRecommendationType -Category Cost
```

Returns all cost-related recommendation types.

### Get high-impact cost recommendations

```powershell
Get-FinOpsRecommendationType -Impact High -Category Cost
```

Returns all high-impact cost recommendation types.

### Get virtual machine recommendations

```powershell
Get-FinOpsRecommendationType -ResourceType "microsoft.compute/virtualmachines"
```

Returns all recommendation types that apply to virtual machines.

<br>

## Give feedback

Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources.

> [!div class="nextstepaction"]
> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK/bladeName/PowerShell/featureName/OpenData.GetRecommendationType)

If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes.

> [!div class="nextstepaction"]
> [Vote on or suggest ideas](https://github.com/microsoft/finops-toolkit/issues?q=is%3Aissue%20is%3Aopen%20label%3A%22Tool%3A%20PowerShell%22%20sort%3A"reactions-%2B1-desc")

<br>

## Related content

Related products:

- [Azure Advisor](/azure/advisor/advisor-overview)

Related solutions:

- [FinOps toolkit Power BI reports](../../power-bi/reports.md)
- [FinOps toolkit open data](../../open-data.md)

<br>
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ The FinOps toolkit open data PowerShell commands help you integrate datasets int
## Commands

- [Get-FinOpsPricingUnit](Get-FinOpsPricingUnit.md) – Gets an Azure region ID and name.
- [Get-FinOpsRecommendationType](Get-FinOpsRecommendationType.md) – Gets metadata for Azure Advisor recommendation types.
- [Get-FinOpsRegion](Get-FinOpsRegion.md) – Gets an Azure region ID and name.
- [Get-FinOpsResourceType](Get-FinOpsResourceType.md) – Gets details about an Azure resource type.
- [Get-FinOpsService](Get-FinOpsService.md) – Gets the name and category for a service, publisher, and cloud provider.
Expand Down
40 changes: 40 additions & 0 deletions src/open-data/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,46 @@ If you run into any issues with the script that gets the data, you can look at e

<br>

## 📋 Recommendation types

<sup>
📅 Updated: Oct 10, 2025<br>
➡️ Source: Azure Advisor Recommendation Metadata API + MicrosoftDocs/SelfHelpContent repo<br>
</sup>

<br>

The [RecommendationTypes.csv](./RecommendationTypes.csv) file contains metadata about Azure Advisor recommendation types. This data provides context for recommendations to help organize and describe them in reports and dashboards.

The data is sourced from two locations:

1. **Azure Advisor Recommendation Metadata API** - Provides recommendation type IDs and display names
2. **MicrosoftDocs/SelfHelpContent repo** (private, FTE-only) - Provides additional metadata like category, impact, service name, resource type, and learn more links

To update the recommendation metadata from the API:

```powershell
# Authenticate to Azure
Connect-AzAccount

# Run the script to fetch metadata
./src/scripts/Get-AdvisorRecommendationTypes.ps1
```

The script retrieves the basic metadata (ID and DisplayName) from the Azure Advisor API. Additional columns should be manually populated or sourced from the SelfHelpContent repository.

**Columns:**

- **RecommendationTypeId** - Unique GUID identifier for the recommendation type
- **Category** - Recommendation category (Cost, Performance, HighAvailability, OperationalExcellence, Security)
- **Impact** - Impact level (High, Medium, Low)
- **ServiceName** - Azure service name
- **ResourceType** - Azure resource type (lowercase)
- **DisplayName** - Human-readable description of the recommendation
- **LearnMoreLink** - URL to documentation for more information

<br>

## 🎛️ Services

<sup>
Expand Down
7 changes: 7 additions & 0 deletions src/open-data/RecommendationTypes.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
RecommendationTypeId,Category,Impact,ServiceName,ResourceType,DisplayName,LearnMoreLink
a06456ed-afb7-4d16-86fd-0054e25268ed,Performance,Medium,Virtual Machines,microsoft.compute/virtualmachines,Enable Accelerated Networking to improve network performance and latency,https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms
9c0c3708-17f6-4108-9aff-f0e052c3cd41,OperationalExcellence,Low,Azure App Service,microsoft.subscriptions/subscriptions,Eliminate replica staging environments and ship new versions and features with zero downtime using deployment slots,https://docs.microsoft.com/azure/app-service/deploy-staging-slots
a205074f-8049-48b3-903f-556f5e530ae3,Cost,High,ReservedInstances,microsoft.subscriptions/subscriptions,Buy reserved instance,https://aka.ms/rirecommendations
94aea435-ef39-493f-a547-8408092c22a7,Cost,High,Virtual Machine Scale Sets,microsoft.compute/virtualmachinescalesets,Shut down or resize your virtual machine scale sets,https://aka.ms/aa_lowusagerec_vmss_learnmore
afdf4c1a-e46b-4817-a5d6-4b9909f58e2a,Cost,Low,Azure Synapse Analytics,microsoft.synapse/workspaces,Consider enabling automatic pause feature on spark compute,https://aka.ms/EnableSynapseSparkComputeAutoPauseGuidance
ed651749-cd37-4fd5-9897-01b416926745,HighAvailability,Medium,Site Recovery,microsoft.compute/virtualmachines,Enable virtual machine replication,https://aka.ms/azure-site-recovery-dr-azure-vms
15 changes: 15 additions & 0 deletions src/powershell/Private/Get-OpenDataRecommendationType.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

function Get-OpenDataRecommendationType
{
param()
return [PSCustomObject]@(
[PSCustomObject]@{ RecommendationTypeId = 'a06456ed-afb7-4d16-86fd-0054e25268ed'; Category = 'Performance'; Impact = 'Medium'; ServiceName = 'Virtual Machines'; ResourceType = 'microsoft.compute/virtualmachines'; DisplayName = 'Enable Accelerated Networking to improve network performance and latency'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; }
,[PSCustomObject]@{ RecommendationTypeId = '9c0c3708-17f6-4108-9aff-f0e052c3cd41'; Category = 'OperationalExcellence'; Impact = 'Low'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.subscriptions/subscriptions'; DisplayName = 'Eliminate replica staging environments and ship new versions and features with zero downtime using deployment slots'; LearnMoreLink = 'https://docs.microsoft.com/azure/app-service/deploy-staging-slots'; }
,[PSCustomObject]@{ RecommendationTypeId = 'a205074f-8049-48b3-903f-556f5e530ae3'; Category = 'Cost'; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; DisplayName = 'Buy reserved instance'; LearnMoreLink = 'https://aka.ms/rirecommendations'; }
,[PSCustomObject]@{ RecommendationTypeId = '94aea435-ef39-493f-a547-8408092c22a7'; Category = 'Cost'; Impact = 'High'; ServiceName = 'Virtual Machine Scale Sets'; ResourceType = 'microsoft.compute/virtualmachinescalesets'; DisplayName = 'Shut down or resize your virtual machine scale sets'; LearnMoreLink = 'https://aka.ms/aa_lowusagerec_vmss_learnmore'; }
,[PSCustomObject]@{ RecommendationTypeId = 'afdf4c1a-e46b-4817-a5d6-4b9909f58e2a'; Category = 'Cost'; Impact = 'Low'; ServiceName = 'Azure Synapse Analytics'; ResourceType = 'microsoft.synapse/workspaces'; DisplayName = 'Consider enabling automatic pause feature on spark compute'; LearnMoreLink = 'https://aka.ms/EnableSynapseSparkComputeAutoPauseGuidance'; }
,[PSCustomObject]@{ RecommendationTypeId = 'ed651749-cd37-4fd5-9897-01b416926745'; Category = 'HighAvailability'; Impact = 'Medium'; ServiceName = 'Site Recovery'; ResourceType = 'microsoft.compute/virtualmachines'; DisplayName = 'Enable virtual machine replication'; LearnMoreLink = 'https://aka.ms/azure-site-recovery-dr-azure-vms'; }
)
}
103 changes: 103 additions & 0 deletions src/powershell/Public/Get-FinOpsRecommendationType.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

<#
.SYNOPSIS
Gets metadata for Azure Advisor recommendation types.

.PARAMETER RecommendationTypeId
Optional. The recommendation type ID (GUID) to filter by. Accepts wildcards. Default = * (all).

.PARAMETER Category
Optional. The recommendation category to filter by. Accepts wildcards. Default = * (all).
Expected values: Cost, HighAvailability, OperationalExcellence, Performance, Security.

.PARAMETER Impact
Optional. The impact level to filter by. Accepts wildcards. Default = * (all).
Expected values: High, Medium, Low.

.PARAMETER ServiceName
Optional. The service name to filter by. Accepts wildcards. Default = * (all).

.PARAMETER ResourceType
Optional. The resource type to filter by. Accepts wildcards. Default = * (all).

.DESCRIPTION
The Get-FinOpsRecommendationType command returns metadata about Azure Advisor recommendation types
based on the specified filters. This data helps organize and provide additional context for
Azure Advisor recommendations in FinOps reports and dashboards.

The recommendation type metadata includes:
- RecommendationTypeId - Unique GUID identifier
- Category - Cost, HighAvailability, OperationalExcellence, Performance, or Security
- Impact - High, Medium, or Low
- ServiceName - Name of the Azure service
- ResourceType - Azure resource type (lowercase)
- DisplayName - Human-readable description
- LearnMoreLink - URL to documentation

.EXAMPLE
Get-FinOpsRecommendationType

Returns all recommendation types.

.EXAMPLE
Get-FinOpsRecommendationType -Category Cost

Returns all cost-related recommendation types.

.EXAMPLE
Get-FinOpsRecommendationType -Impact High -Category Cost

Returns all high-impact cost recommendation types.

.EXAMPLE
Get-FinOpsRecommendationType -ResourceType "microsoft.compute/virtualmachines"

Returns all recommendation types that apply to virtual machines.

.LINK
https://aka.ms/ftk/Get-FinOpsRecommendationType
#>
function Get-FinOpsRecommendationType()
{
param(
[Parameter(Position = 0)]
[string]
$RecommendationTypeId = "*",

[Parameter(Position = 1)]
[string]
$Category = "*",

[Parameter(Position = 2)]
[string]
$Impact = "*",

[string]
$ServiceName = "*",

[string]
$ResourceType = "*"
)

return Get-OpenDataRecommendationType `
| Where-Object {
$_.RecommendationTypeId -like $RecommendationTypeId `
-and $_.Category -like $Category `
-and $_.Impact -like $Impact `
-and $_.ServiceName -like $ServiceName `
-and $_.ResourceType -like $ResourceType
} `
| ForEach-Object {
[PSCustomObject]@{
RecommendationTypeId = $_.RecommendationTypeId
Category = $_.Category
Impact = $_.Impact
ServiceName = $_.ServiceName
ResourceType = $_.ResourceType
DisplayName = $_.DisplayName
LearnMoreLink = $_.LearnMoreLink
}
}
}
Loading