Azure PowerShell: instalar el módulo Az, conectarse y comandos útiles

Azure PowerShell: la cabina de una torre de control de aeropuerto, con su radar y sus antenas, rodeada de nubes, como un solo punto desde el que se gobierna todo lo que hay en la nube

Azure PowerShell es el conjunto de módulos oficiales de Microsoft para administrar Azure desde la consola: crear y apagar máquinas virtuales, revisar discos, etiquetar recursos, cambiar de suscripción o saber quién tiene permisos. Esta guía explica cómo instalar Azure PowerShell, cómo conectarse con Connect-AzAccount, cómo moverse entre suscripciones con Set-AzContext, qué comandos se usan a diario, cuándo conviene elegir entre Azure CLI vs PowerShell y cómo dejar un script funcionando sin nadie delante. Además, lo que no viene de la documentación de Microsoft lo medimos el 28 de octubre de 2026 en un Windows 11 sin permisos de administrador, con Windows PowerShell 5.1 y con PowerShell 7.6.9.

La guía tiene dos niveles. Si solo quiere ejecutar unos comandos, lea los apartados de instalación, conexión y comandos comunes. En cambio, si administra varias suscripciones o quiere automatizar, siga hasta la autenticación sin intervención y los escenarios. Por último, para un primer contacto con la consola, antes conviene leer nuestra guía de PowerShell y la de módulos de PowerShell.

Qué es Azure PowerShell

En primer lugar, Azure PowerShell es el nombre del producto; el módulo que se instala se llama Az. Según la documentación de Microsoft, Az es un módulo «contenedor»: no trae comandos propios, sino que agrupa un submódulo por servicio, como Az.Compute para las máquinas virtuales o Az.Network para las redes. Todos dependen de Az.Accounts, que se encarga del inicio de sesión. Por otra parte, cada comando llama a la API de Azure Resource Manager, la misma que usa el portal, y devuelve objetos de .NET, no texto.

El día de la prueba, en concreto, la Galería de PowerShell publicaba Az 16.4.0, del 6 de octubre de 2026, con 102 submódulos. Por eso conviene distinguirlo de otros módulos que aparecen en internet con nombres parecidos:

NombreQué esEstado
AzAzure PowerShell actual: recursos de AzureVigente (16.4.0)
AzPreviewAz más los módulos en versión preliminar (207 en total)No recomendado en producción
AzureRMLa generación anterior de Azure PowerShellRetirado el 29 de febrero de 2024
AzureMódulo para el modelo clásico (Azure Service Manager)Heredado, solo para recursos clásicos
AzureAD y MSOnlineUsuarios y licencias de Entra ID y Microsoft 365Retirados; se usa Microsoft Graph

Ojo con AzureRM, que Microsoft dio por retirado: medimos que la Galería todavía lo encuentra (versión 6.13.2, de marzo de 2021), así que Install-Module AzureRM sigue funcionando aunque Microsoft ya no lo mantenga. AzureAD, en cambio, ya no aparece. Si su tarea es de usuarios o licencias de Microsoft 365, la herramienta es otra, y la explicamos en la guía de Microsoft 365 PowerShell.

Para qué sirve Azure PowerShell: usos comunes y beneficios

El portal de Azure es cómodo para ver un recurso. Sin embargo, se vuelve lento cuando hay que repetir la misma tarea en cuarenta máquinas o en cinco suscripciones. Ahí, precisamente, es donde Azure PowerShell ahorra tiempo:

  • Inventarios: qué máquinas hay, en qué región, de qué tamaño y si están encendidas, en todas las suscripciones a la vez.
  • Costos: encontrar discos sin conectar, direcciones IP públicas sin uso o máquinas que nadie apaga.
  • Orden: revisar y poner etiquetas, mover recursos de grupo, borrar entornos de prueba completos.
  • Permisos: saber quién es Propietario de qué, y dar o quitar roles.
  • Automatización: tareas programadas o runbooks de Azure Automation que se ejecutan solos, sin pasar por el portal.
  • Copias y recuperación: las guías de Azure Backup y Azure Site Recovery usan comandos de este mismo módulo.

Usar Azure PowerShell en lugar del portal tiene, además, beneficios claros:

  1. Se repite igual: un script hace lo mismo hoy y dentro de un año, sin clics olvidados.
  2. Trabaja con objetos: se filtra con Where-Object, se ordena con Sort-Object y se exporta a CSV sin copiar a mano.
  3. Queda escrito: el script sirve como documentación de lo que se hizo.
  4. Permite probar antes: muchos comandos admiten -WhatIf, que muestra el cambio sin aplicarlo.

Azure CLI vs PowerShell: cuál usar

La duda de Azure CLI vs PowerShell aparece pronto, porque Azure tiene dos herramientas de línea de comandos y, además, una consola en el navegador. La comparativa de Microsoft lo resume así: Azure CLI se parece a Bash y Azure PowerShell sigue la forma Verbo-Sustantivo de PowerShell y devuelve objetos. Ambas sirven en Windows, Linux y macOS, pero no siempre cubren las mismas funciones de cada servicio.

AspectoAzure PowerShellAzure CLI
Qué esUn módulo de PowerShell (Az)Un programa, az
Dónde se ejecutaWindows PowerShell 5.1 o PowerShell 7Cmd, Bash, Windows PowerShell o PowerShell
Forma de los comandosGet-AzVMaz vm list
Qué devuelveObjetos de .NETTexto JSON (o tabla)
Mejor paraQuien ya trabaja con Windows y PowerShellQuien trabaja con Linux y Bash

Las mismas tareas, en una y otra:

TareaAzure CLIAzure PowerShell
Iniciar sesiónaz loginConnect-AzAccount
Ver las suscripcionesaz account listGet-AzSubscription
Elegir una suscripciónaz account set --subscription '<id>'Set-AzContext -Subscription '<id>'
Ver las regionesaz account list-locationsGet-AzLocation
Ver la versiónaz --versionGet-InstalledModule -Name Az

En resumen, en Azure CLI vs PowerShell no hay una ganadora: gana la que ya conoce su equipo. Por otra parte, Azure Cloud Shell no es una tercera herramienta, sino un lugar donde ejecutar las otras dos. Es una consola que se abre desde el portal o desde shell.azure.com, ya con sesión iniciada y con Azure PowerShell y Azure CLI instalados. Según Microsoft, corre en un contenedor de Linux, se cierra tras 20 minutos sin actividad y guarda sus archivos en un recurso compartido de 5 GB, que se cobra como almacenamiento normal. Es la forma más rápida de probar un comando, pero no sirve para lo que dependa de Windows.

Requisitos para instalar Azure PowerShell

RequisitoPowerShell 7 (recomendado)Windows PowerShell 5.1
VersiónUna versión con soporte de PowerShell 75.1, con .NET Framework 4.7.2 o posterior
Gestor de módulosPSResourceGet, incluido desde la 7.4PowerShellGet actualizado (el 1.0.0.1 de fábrica no sirve)
Directiva de ejecuciónNo hace falta cambiarla en la mayoría de equiposRemoteSigned para el usuario actual
PermisosNinguno, si se instala para su usuarioNinguno, si se instala para su usuario

Antes de instalar Azure PowerShell, conviene saber que los 103 manifiestos que descargamos declaran compatibilidad con las dos consolas y piden como mínimo PowerShell 5.1 y .NET Framework 4.7.2. Aun así, Microsoft recomienda PowerShell 7, y más adelante verá por qué. Para comprobar qué tiene el equipo:

$PSVersionTable.PSVersion
Get-Module -Name Az.Accounts -ListAvailable | Select-Object Name, Version, ModuleBase
Get-Module -Name AzureRM* -ListAvailable

Si el último comando devuelve algo, hay AzureRM instalado. En ese caso, por tanto, lea antes el apartado de errores: Microsoft no admite tener AzureRM y Az en la misma consola de Windows PowerShell 5.1.

Cómo instalar Azure PowerShell

Hay tres formas de instalar Azure PowerShell y, como verá, no tardan lo mismo. Para compararlas, las medimos descargando Az 16.4.0 completo a una carpeta temporal, con la misma conexión:

MétodoTiempoQué se descargó
Save-PSResource (PSResourceGet, motor de Install-PSResource)145,8 s103 módulos, 2.730 archivos, 620,4 MB
Save-Module (PowerShellGet 2.2.5, motor de Install-Module)236,9 s103 módulos, 2.730 archivos, 620,4 MB
Save-PSResource solo de Az.Compute y Az.Resources12,2 s3 módulos (con Az.Accounts), 77,9 MB

La diferencia tiene explicación: según la guía de instalación optimizada, Install-Module descarga Az.Accounts una vez por cada submódulo, y PSResourceGet lo descarga una sola vez. Por eso la forma recomendada en PowerShell 7 es esta:

Install-PSResource -Name Az -Scope CurrentUser -TrustRepository

En Windows PowerShell 5.1, o si prefiere el comando clásico, la instalación para su usuario es esta otra. Antes, eso sí, actualice PowerShellGet, como explicamos en la guía de módulos de PowerShell.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Install-Module -Name Az -Repository PSGallery -Scope CurrentUser -Force

Instalar solo lo que necesita

Instalar Azure PowerShell completo trae 102 submódulos, aunque use tres. En cambio, para inventariar máquinas virtuales, redes y almacenamiento basta con esto, y Az.Accounts se instala solo:

Install-PSResource -Name Az.Compute, Az.Network, Az.Resources, Az.Storage -Scope CurrentUser -TrustRepository

Es la opción que recomendamos en equipos de trabajo: ocupa una fracción, se actualiza antes y, sobre todo, carga mucho más rápido, como verá en el apartado de rendimiento.

El instalador MSI

Además, Microsoft publica un instalador MSI en GitHub, pensado para instalar Azure PowerShell en equipos sin acceso a la Galería. El de la 16.4.0 para 64 bits pesa 130,6 MB. Sin embargo, tiene dos límites: solo sirve para Windows PowerShell 5.1 y, además, se desinstala desde Configuración, no con Uninstall-Module.

Conectarse a Azure con Connect-AzAccount

Después de instalar Azure PowerShell, el primer comando de cada sesión es Connect-AzAccount:

Connect-AzAccount

Sin embargo, en Windows 10, Windows 11 y Windows Server 2019 o posterior, desde Az 12.0.0, Connect-AzAccount no abre el navegador: usa el Administrador de cuentas web de Windows (WAM), un componente del sistema que gestiona el inicio de sesión y admite Windows Hello y llaves FIDO. Además, si la cuenta tiene varias suscripciones, Connect-AzAccount muestra una lista numerada y pide elegir una; la próxima vez marca con un asterisco la última elegida.

Las variantes más útiles de Connect-AzAccount:

SituaciónComando
Inicio de sesión normalConnect-AzAccount
La cuenta pertenece a varios inquilinosConnect-AzAccount -Tenant 'contoso.onmicrosoft.com'
Equipo sin navegador o ventana que no apareceConnect-AzAccount -UseDeviceAuthentication
Entrar directamente en una suscripciónConnect-AzAccount -Subscription 'Producción'
Sesión que no se guarda al cerrar la consolaConnect-AzAccount -Scope Process
Nube soberana (por ejemplo, China)Connect-AzAccount -Environment AzureChinaCloud

La autenticación multifactor ya es obligatoria

Microsoft exige autenticación multifactor obligatoria (MFA) para crear, cambiar o borrar recursos desde Azure PowerShell, Azure CLI y la API de Azure desde el 1 de octubre de 2025. Las organizaciones que lo pidieron pudieron aplazarlo, como mucho, hasta el 1 de julio de 2026; ese plazo ya terminó. Leer recursos no lo exige. En la práctica, esto significa dos cosas:

  1. Un script que inicia sesión con usuario y contraseña (Connect-AzAccount -Credential) ya no sirve para cambiar nada, porque ese método no admite MFA. Si la cuenta tiene la MFA exigida al iniciar sesión, ni siquiera entra: Microsoft documenta el error UsernamePasswordCredential authentication failed.
  2. Si inicia sesión sin MFA e intenta crear algo, Azure responde Users must authenticate with multi-factor authentication to create or update resources. y pide volver a entrar con -ClaimsChallenge.

Por eso, para recibir esos mensajes completos, Microsoft pide Az 14.3.0 o posterior. Con versiones anteriores, el error es el poco claro SharedTokenCacheCredential authentication unavailable.

Suscripciones y contexto con Set-AzContext

Todo comando de Azure PowerShell se ejecuta contra una suscripción: la del contexto activo. Es decir, el contexto guarda la cuenta, la suscripción, el inquilino y una referencia a los tokens. Por eso, antes de cambiar algo, conviene mirar dónde está:

Get-AzContext
Get-AzSubscription | Select-Object Name, Id, State, TenantId
Set-AzContext -Subscription 'Producción'

Set-AzContext cambia de suscripción sin volver a pedir la contraseña. Además, acepta el nombre o el identificador; con varias suscripciones de nombre parecido, use siempre el identificador. Además, si siempre trabaja en la misma, puede fijarla para que Connect-AzAccount no pregunte:

Update-AzConfig -DefaultSubscriptionForLogin 'Producción'

Sin embargo, hay un detalle que confunde a muchos: los contextos se guardan entre sesiones. Según la página de los objetos de contexto, Azure PowerShell los almacena en la carpeta .Azure de su perfil, así que al abrir otra consola puede seguir conectado a la última suscripción usada. De hecho, en nuestra prueba bastó con cargar Az.Accounts, sin iniciar sesión, para que aparecieran ocho archivos en esa carpeta, entre ellos AzureRmContext.json y una caché de claves. Por eso, en un equipo compartido o en un servidor de saltos, conviene una de estas tres opciones:

Qué quiereComando
Que la sesión no se guardeConnect-AzAccount -Scope Process
Cerrar la sesión de la cuenta actualDisconnect-AzAccount
Borrar todos los contextos y tokens guardadosClear-AzContext -Force

Comandos más comunes de Azure PowerShell

Los comandos de Azure PowerShell siguen la forma Verbo-AzSustantivo: Get-AzVM, New-AzResourceGroup, Remove-AzDisk. Por eso, si sabe cómo se llama el recurso, casi puede adivinar el comando. Esta es la lista que más se usa en soporte y administración:

ÁreaComandoPara qué sirveMódulo
SesiónConnect-AzAccountIniciar sesiónAz.Accounts
SesiónGet-AzContext / Set-AzContextVer o cambiar la suscripción activaAz.Accounts
SesiónGet-AzSubscriptionListar las suscripciones de la cuentaAz.Accounts
RecursosGet-AzResourceGroup / New-AzResourceGroupVer o crear grupos de recursosAz.Resources
RecursosGet-AzResourceListar recursos de cualquier tipoAz.Resources
RecursosUpdate-AzTagAñadir, reemplazar o quitar etiquetasAz.Resources
RecursosRemove-AzResourceGroupBorrar un grupo con todo lo que contieneAz.Resources
Máquinas virtualesGet-AzVMListar máquinas; con -Status, su estadoAz.Compute
Máquinas virtualesStart-AzVM / Stop-AzVM / Restart-AzVMEncender, apagar o reiniciarAz.Compute
DiscosGet-AzDiskListar discos administradosAz.Compute
RedesGet-AzVirtualNetwork / Get-AzPublicIpAddressRedes y direcciones IP públicasAz.Network
AlmacenamientoGet-AzStorageAccountCuentas de almacenamientoAz.Storage
PermisosGet-AzRoleAssignment / New-AzRoleAssignmentVer o asignar rolesAz.Resources
ConsultasSearch-AzGraphConsultar todas las suscripciones a la vezAz.ResourceGraph
RegionesGet-AzLocationVer las regiones disponiblesAz.Resources

Para descubrir el resto, en cambio, PowerShell trae sus propias herramientas:

Get-Command -Module Az.Compute -Verb Get
Get-Help Get-AzVM -Examples

Dos parámetros merecen un aviso. Primero, Stop-AzVM desasigna la máquina por defecto, que es lo que deja de cobrar el cómputo; con -StayProvisioned la apaga sin desasignarla y, según Microsoft, «la cuenta sigue pagando la máquina detenida». Segundo, Search-AzGraph devuelve 100 resultados si no se indica otra cosa, y como mucho 1.000 por llamada con -First: un inventario de 340 recursos hecho sin -First trae solo los primeros 100.

Configuración de Azure PowerShell con Update-AzConfig

Por otra parte, Azure PowerShell tiene su propia configuración, separada de la de PowerShell. Se consulta con Get-AzConfig y se cambia con Update-AzConfig. Estos son los ajustes que más conviene conocer:

AjusteQué haceCuándo cambiarlo
DefaultSubscriptionForLoginSuscripción que Connect-AzAccount elige al entrarSi siempre trabaja en la misma
EnableLoginByWamInicio de sesión con WAM en WindowsPonerlo en $false si la ventana no aparece o usa Windows PowerShell ISE
LoginExperienceV2La lista para elegir suscripción al entrarOff en scripts que no deben preguntar
EnableDataCollectionEnvío de telemetría de uso a Microsoft$false si su política lo exige
DisplayBreakingChangeWarningAvisos de cambios que vienen$false en scripts, para limpiar la salida
CheckForUpgradeAviso de versión nueva al cargarSegún prefiera

En el equipo de prueba, con Az.Accounts 5.5.3 recién descargado, Get-AzConfig mostró EnableLoginByWam en True, LoginExperienceV2 en On, DisplayBreakingChangeWarning en True y CheckForUpgrade en True, sin suscripción predeterminada. Para revisarlo y cambiarlo:

Get-AzConfig | Select-Object Key, Value, Scope
Update-AzConfig -EnableDataCollection $false
Update-AzConfig -DisplayBreakingChangeWarning $false -Scope Process

Con -Scope Process el cambio dura solo hasta cerrar la consola; sin él, queda guardado para su usuario. Asimismo, Microsoft desaconseja cambiar la configuración desde varias consolas a la vez, salvo con -Scope Process.

Autenticación sin intervención: entidades de servicio e identidades administradas

Un script programado no puede responder un código de verificación. Por eso, con la MFA obligatoria, Microsoft explica en su página sobre el impacto de la MFA en la automatización que cualquier automatización que inicie sesión con una cuenta de usuario «requiere actualización». Las alternativas son dos:

IdentidadQué esCuándo usarla
Identidad administradaUna identidad ligada a un recurso de Azure; Azure guarda y rota sus credencialesScripts que corren dentro de Azure: una máquina virtual, Azure Automation, Functions
Entidad de servicioUna aplicación registrada en Entra ID, con secreto o certificadoScripts que corren fuera de Azure: un servidor de la oficina, un equipo de administración

Así, dentro de Azure, iniciar sesión con la identidad del propio recurso no exige guardar nada:

Connect-AzAccount -Identity

En cambio, fuera de Azure lo recomendable es una entidad de servicio con certificado, instalado en el almacén del equipo que ejecuta el script:

$inquilino = '00000000-0000-0000-0000-000000000000'
$aplicacion = '11111111-1111-1111-1111-111111111111'
Connect-AzAccount -ServicePrincipal -ApplicationId $aplicacion -Tenant $inquilino -CertificateThumbprint 'A1B2C3D4E5F60718293A4B5C6D7E8F9012345678'

Qué rol recibe una entidad de servicio nueva

Aquí, sin embargo, la documentación de Microsoft se contradice. La guía para crear entidades de servicio dice, primero, que desde Az 7 New-AzADServicePrincipal ya no asigna el rol Colaborador y, unas líneas más abajo, que el rol predeterminado de una entidad con contraseña es Colaborador. La referencia del comando, por su parte, da el parámetro -Role sin valor predeterminado. Lo seguro es no suponer nada: asigne el rol mínimo de forma explícita y compruébelo después. Además, el secreto que crea el comando vence, de fábrica, al año.

$sp = New-AzADServicePrincipal -DisplayName 'kh-inventario-azure'
$ambito = '/subscriptions/' + (Get-AzContext).Subscription.Id
New-AzRoleAssignment -ApplicationId $sp.AppId -RoleDefinitionName 'Reader' -Scope $ambito
Get-AzRoleAssignment -ServicePrincipalName $sp.AppId | Select-Object RoleDefinitionName, Scope

Para un inventario basta Lector (Reader). Reserve Colaborador para lo que de verdad cambie recursos, y limítelo a un grupo de recursos cuando pueda.

Rendimiento: lo que tarda en cargar Azure PowerShell

Este fue el hallazgo más llamativo de la prueba. Para ello, con Az completo descargado, medimos cuánto tarda cada consola en cargar los módulos:

Qué se cargóPowerShell 7.6.9Windows PowerShell 5.1
Import-Module Az.Accounts4,4 s2,4 s
Import-Module Az.Compute5,8 s1,0 s
Import-Module Az (los 102 submódulos)552,7 s (9 min 13 s)338,5 s (5 min 39 s)
Comandos disponibles tras cargar Az7.2107.210
Memoria añadida a la consola1.596 MB1.577 MB

Medimos una sola pasada por consola, así que tome las cifras como orden de magnitud. Además, la 5.1 mostró 16 avisos de verbos no aprobados al cargar submódulos como Az.Cdn. La conclusión práctica, en cualquier caso, es sencilla: no escriba Import-Module Az al principio de un script. No hace falta, porque PowerShell carga cada submódulo solo al usar su primer comando, y así un script que usa Get-AzVM carga Az.Accounts y Az.Compute en segundos. Si quiere dejarlo explícito, importe solo los submódulos que usa.

Escenarios de ejemplo

Los seis escenarios usan comandos de lectura, salvo donde se indica. Todos suponen que ya ejecutó Connect-AzAccount con una cuenta que tiene, como mínimo, el rol Lector.

1. Inventario de máquinas virtuales de todas las suscripciones

Recorre cada suscripción activa, lista las máquinas con su estado y lo guarda en un CSV que Excel abre bien en Colombia (punto y coma, y UTF-8 con BOM para las tildes):

$filas = foreach ($sub in Get-AzSubscription | Where-Object State -eq 'Enabled') {
    Set-AzContext -Subscription $sub.Id | Out-Null
    Get-AzVM -Status | Select-Object @{ n = 'Suscripcion'; e = { $sub.Name } }, ResourceGroupName, Name, Location, PowerState,
        @{ n = 'Tamano'; e = { $_.HardwareProfile.VmSize } }, @{ n = 'SO'; e = { $_.StorageProfile.OsDisk.OsType } }
}
$filas | Export-Csv -Path '.\inventario-vm.csv' -NoTypeInformation -Delimiter ';' -Encoding utf8BOM

En Windows PowerShell 5.1, cambie utf8BOM por UTF8, que allí ya escribe el BOM.

2. Apagar por la noche las máquinas de prueba

Apaga y desasigna las máquinas encendidas que tienen la etiqueta apagado con el valor noche. Este sí cambia recursos, así que pruébelo primero con -WhatIf:

Get-AzVM -Status |
    Where-Object { $_.Tags -and $_.Tags['apagado'] -eq 'noche' -and $_.PowerState -eq 'VM running' } |
    ForEach-Object { Stop-AzVM -ResourceGroupName $_.ResourceGroupName -Name $_.Name -Force -WhatIf }

Quite -WhatIf cuando la lista sea la esperada. Si prefiere programarlo en un servidor de la oficina, siga nuestra guía de tareas programadas con PowerShell y use una entidad de servicio con certificado. Si lo programa dentro de Azure Automation, empiece el runbook con Connect-AzAccount -Identity y dé a esa identidad el rol Colaborador de máquinas virtuales solo sobre el grupo de recursos de pruebas.

3. Discos sin conectar y direcciones IP públicas sin uso

Por ejemplo, un disco que quedó suelto al borrar una máquina se sigue cobrando, y lo mismo pasa con una IP pública que no está asociada a nada:

Get-AzDisk | Where-Object DiskState -eq 'Unattached' |
    Select-Object ResourceGroupName, Name, DiskSizeGB, @{ n = 'Sku'; e = { $_.Sku.Name } }, TimeCreated
Get-AzPublicIpAddress | Where-Object { -not $_.IpConfiguration } |
    Select-Object ResourceGroupName, Name, IpAddress, @{ n = 'Sku'; e = { $_.Sku.Name } }

Aun así, revise la lista con quien conozca los proyectos antes de borrar nada: a veces un disco suelto es la única copia de algo. Además, una IP que usa una puerta de enlace NAT también aparece sin configuración IP, porque el objeto que devuelve el comando no trae esa relación; compruébelo en el portal antes de quitarla.

4. Recursos sin la etiqueta de centro de costo

Lista lo que no tiene la etiqueta centro-de-costo y luego la añade a un recurso sin tocar sus otras etiquetas (-Operation Merge):

$sinEtiqueta = Get-AzResource | Where-Object { -not $_.Tags -or -not $_.Tags.ContainsKey('centro-de-costo') }
$sinEtiqueta | Select-Object ResourceGroupName, Name, ResourceType | Sort-Object ResourceGroupName
Update-AzTag -ResourceId $sinEtiqueta[0].ResourceId -Tag @{ 'centro-de-costo' = 'TI' } -Operation Merge

Con -Operation Replace, en cambio, se borran las etiquetas que no estén en la lista. Según la referencia, un recurso admite hasta 50 etiquetas.

5. Quién es Propietario

El rol Propietario puede hacerlo todo, incluso dar permisos a otros. Conviene revisar esta lista cada cierto tiempo:

Get-AzRoleAssignment -RoleDefinitionName 'Owner' |
    Select-Object DisplayName, SignInName, ObjectType, Scope | Sort-Object Scope

6. Cuántos recursos hay de cada tipo, en todas las suscripciones

Azure Resource Graph consulta todas las suscripciones de una vez, sin recorrerlas una por una. Recuerde el límite de 100 resultados que trae de fábrica:

$consulta = 'Resources | summarize recursos = count() by type | order by recursos desc'
Search-AzGraph -Query $consulta -First 1000

Actualizar y desinstalar Azure PowerShell

Microsoft publica una versión de Az casi cada mes: entre noviembre de 2025 y octubre de 2026 salieron 14 (de la 14.6.0 a la 16.4.0). Además, limita los cambios que rompen scripts a dos veces al año, y los anuncia con avisos en la consola. Para actualizar:

Update-PSResource -Name Az -Scope CurrentUser

O, si instaló con Install-Module:

Update-Module -Name Az -Force

Ojo: según Microsoft, Update-Module no borra las versiones anteriores. Con 620 MB por versión, tras tres actualizaciones sin limpiar quedan cuatro versiones, unos 2,5 GB en su perfil, y la carpeta Documentos de muchos equipos está dentro de OneDrive. Por eso, en la guía de módulos de PowerShell explicamos cómo ver y quitar las versiones viejas. Para desinstalar Az por completo, Microsoft solo da soporte a quitar todas las versiones a la vez, módulo por módulo.

Errores comunes de Azure PowerShell y cómo resolverlos

La mayoría de estos mensajes salen de la guía de solución de problemas de Microsoft; el segundo lo reprodujimos sin iniciar sesión.

Mensaje o síntomaCausaSolución
Get-AzVM no se reconoce como nombre de un cmdletEl módulo no está instalado en esta consolaInstale Az o el submódulo; recuerde que 5.1 y 7 tienen carpetas distintas
Run Connect-AzAccount to login. o, en Get-AzVM, No subscription found in the context.No hay sesión iniciada en esta consolaEjecute Connect-AzAccount
Could not find tenant id for provided tenant domainInquilino mal escrito o entidad de servicio que no existe en élRevise el identificador del inquilino y de la aplicación
The 'Connect-AzAccount' command was found in the module 'Az.Accounts', but the module could not be loaded.AzureRM y Az en la misma consolaDesinstale AzureRM; si lo necesita, solo en 5.1 para su usuario, y Az en PowerShell 7
UsernamePasswordCredential authentication failedScript con usuario y contraseña ante la MFA obligatoriaIdentidad administrada o entidad de servicio
Users must authenticate with multi-factor authentication to create or update resources.Sesión sin MFA intentando un cambioConnect-AzAccount con -ClaimsChallenge, o pedir que la MFA se exija al iniciar sesión
Unable to acquire token for tenant…Varios inquilinos, uno con MFAConnect-AzAccount con -TenantId
User canceled authentication o la ventana no apareceLimitaciones de WAM (por ejemplo, en Windows PowerShell ISE)Update-AzConfig -EnableLoginByWam $false o -UseDeviceAuthentication
Object reference not set to an instance of an objectEl recurso no existe o no tiene permiso sobre élCompruébelo con Get-AzResource -ResourceId
El comando trabaja en la suscripción equivocadaContexto guardado de una sesión anteriorGet-AzContext antes de cambiar nada
La carga de Az tarda minutosImport-Module Az en el scriptDeje la carga automática o importe solo los submódulos

Recomendaciones

  1. Use PowerShell 7 y PSResourceGet: la descarga tardó un 38 % menos que con el motor de Install-Module.
  2. Instale solo los submódulos que usa en los equipos de trabajo, y Az completo solo donde haga falta.
  3. No escriba Import-Module Az en los scripts.
  4. Mire el contexto antes de cambiar nada: Get-AzContext cuesta un segundo y evita borrar en la suscripción equivocada.
  5. Pruebe con -WhatIf todo lo que modifique o borre.
  6. Nada de usuario y contraseña en los scripts: identidad administrada dentro de Azure y entidad de servicio con certificado fuera.
  7. Asigne el rol mínimo y compruébelo con Get-AzRoleAssignment; no dé por hecho qué rol trae una entidad de servicio.
  8. Actualice cada pocos meses y limpie las versiones viejas, y lea los avisos de cambios antes de cada versión mayor.
  9. Use -Scope Process en equipos compartidos, para no dejar sesiones guardadas.

Lo que medimos y lo que no

Medimos en un Windows 11 sin permisos de administrador, con Windows PowerShell 5.1.26100 y PowerShell 7.6.9: la versión y las dependencias que publicaba la Galería, la descarga con los dos gestores, el contenido de los 103 manifiestos, los tiempos de carga, la configuración de fábrica, los mensajes sin sesión iniciada y los parámetros y propiedades de cada comando del artículo, comprobados contra Az 16.4.0 en las dos consolas. Lo descargado se borró al terminar y el equipo quedó como estaba.

En cambio, no iniciamos sesión en ninguna suscripción de Azure: los resultados de los escenarios y los mensajes con MFA son los que publica Microsoft. Tampoco probamos Cloud Shell, el instalador MSI, Linux ni macOS.

Preguntas frecuentes

¿Azure PowerShell es gratis?

Sí. El módulo es gratuito y de código abierto. Lo que sí se paga, en cambio, son los recursos de Azure que crea o usa, y en Cloud Shell, el almacenamiento de sus archivos.

¿Sirve Azure PowerShell para administrar usuarios de Microsoft 365?

No es su función. Az trae algunos comandos de Entra ID, pero para usuarios, licencias y grupos de Microsoft 365 la herramienta de Microsoft es Microsoft Graph PowerShell.

¿Puedo seguir usando AzureRM?

Puede instalarse, pero Microsoft lo retiró el 29 de febrero de 2024 y no le da soporte. Además, no convive con Az en la misma consola de Windows PowerShell 5.1. Lo recomendable es migrar los scripts. Microsoft ofrece una herramienta que los actualiza de forma automática y, mientras tanto, un modo de compatibilidad con Enable-AzureRmAlias, que hace que los nombres antiguos funcionen sobre Az.

¿Necesito permisos de administrador para instalar Azure PowerShell?

No. Con -Scope CurrentUser se instala en su perfil, y así lo probamos. En cambio, solo hace falta elevar para instalarlo para todos los usuarios o con el MSI.

¿Por qué Connect-AzAccount no abre el navegador?

Porque desde Az 12.0.0 usa el inicio de sesión de Windows (WAM). Si prefiere el navegador, desactívelo con Update-AzConfig -EnableLoginByWam $false.

Azure PowerShell en la empresa

Ejecutar unos comandos es fácil. Lo difícil, en cambio, es que las suscripciones tengan dueño, que los permisos sigan el mínimo necesario, que los scripts no dependan de la cuenta de alguien que ya se fue y que nadie pague discos olvidados. En KHARONTE hacemos ese trabajo dentro de nuestros servicios administrados de Azure: suscripciones, consumo, infraestructura y Entra ID, atendidos desde nuestra mesa de ayuda TI y como parte de los servicios administrados de TI que prestamos. Si quiere conocer el resto de nuestros servicios de TI para empresas, escríbanos.

Hablemos de la TI de su empresa

Cuéntenos qué necesita su operación y le enviamos una propuesta por escrito. Cada línea del portafolio se contrata por separado.

Compartir este artículo

Últimas entradas

Escríbanos ahora