{"id":2451,"date":"2025-07-31T07:29:00","date_gmt":"2025-07-31T07:29:00","guid":{"rendered":"https:\/\/www.mainmind.com\/blog\/?p=2451"},"modified":"2025-10-23T07:50:25","modified_gmt":"2025-10-23T07:50:25","slug":"powershell-limpiar-modulos-obsoletos","status":"publish","type":"post","link":"https:\/\/www.mainmind.com\/blog\/powershell-limpiar-modulos-obsoletos\/","title":{"rendered":"Powershell: limpiar m\u00f3dulos obsoletos"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Microsoft tiene predilecci\u00f3n por cambiar de nombres programas comerciales y tambi\u00e9n m\u00f3dulos. Los anteriores m\u00f3dulos AzureRM, Az, AzureAD, MSOnline&#8230; dejan pasado a Microsoft.Graph pero en los terminales se van acumulando y acaban dando problemas. Vamos a hacer limpieza de los que tengamos instalados y utilizar la API m\u00e1s moderna (por ahora)&#8230;<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Lo primero es arrancar en propio PowerShell sin ning\u00fan perfil y como administrador, desde el cl\u00e1sico CMD por ejemplo, cualquier de estos dos atajos es correcto:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npwsh -NoProfile\npowershell.exe -NoProfile\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n vamos a descarga de memoria, listar los posible m\u00f3dulos de usuario y m\u00e1quina para desinstalar y eliminar carpetas (C:\\Program Files\\WindowsPowerShell\\Modules):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# 1) Descarga m\u00f3dulos cargados en memoria (por si acaso)\nGet-Module Az*,Azure*,MSOnline |\n  Remove-Module -Force\n\n# 2) Rutas de m\u00f3dulos (PS5\/PS7, usuario y m\u00e1quina)\n$paths = ($env:PSModulePath -split &#039;;&#039; | Where-Object { $_ -and (Test-Path $_) }) + @(\n  &quot;$env:ProgramFiles\\WindowsPowerShell\\Modules&quot;,\n  &quot;$env:ProgramFiles\\PowerShell\\Modules&quot;,\n  &quot;$env:USERPROFILE\\Documents\\WindowsPowerShell\\Modules&quot;,\n  &quot;$env:USERPROFILE\\Documents\\PowerShell\\Modules&quot;,\n  &quot;${env:ProgramFiles(x86)}\\WindowsPowerShell\\Modules&quot;\n) | Select-Object -Unique\n\n# 3) Localiza carpetas candidatas (Az.*, AzureRM.*, AzureAD, AzureADPreview, MSOnline)\n# $regex = &#039;^(Az(\\.|$)|AzureRM(\\.|$)|AzureAD(Preview)?$|MSOnline$)&#039;\n$regex = &#039;^(Az($|\\.))|(Azure($|\\.))|(AzureRM($|\\.))|(AzureAD(Preview)?$)|(MSOnline$)&#039;\n$candidates = foreach ($p in $paths) {\n  Get-ChildItem -Path $p -Directory |\n    Where-Object { $_.Name -match $regex }\n}\n\n# 4) Muestra lo que se va a borrar\n$candidates | Select-Object FullName, Name\n\n# 5) Elimina carpetas\n$candidates | Remove-Item -Recurse -Force -WhatIf\n# &amp;lt;- vuelve a ejecutar la misma l\u00ednea SIN -WhatIf para borrar de verdad\n\n# 6) Confirma que no queda nada\nGet-Module -ListAvailable | Where-Object { $_.Name -match &#039;Az|Azure|AzureAD|MSOnline&#039; }\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ya puedes instalar el \u00faltimo entorno disponible:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\nInstall-Module Microsoft.Graph -Scope AllUsers -Force\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Microsoft tiene predilecci\u00f3n por cambiar de nombres programas comerciales y tambi\u00e9n m\u00f3dulos. Los anteriores m\u00f3dulos AzureRM, Az, AzureAD, MSOnline&#8230; dejan pasado a Microsoft.Graph pero en los terminales se van acumulando y acaban dando problemas. Vamos a hacer limpieza de los que tengamos instalados y utilizar la API m\u00e1s moderna (por ahora)&#8230;<\/p>\n","protected":false},"author":1,"featured_media":2454,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[1014,1015,1012,1013,123],"class_list":["post-2451","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software","tag-azuread","tag-cmdlet","tag-microsoft-graph","tag-msonline","tag-powershell"],"_links":{"self":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts\/2451","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/comments?post=2451"}],"version-history":[{"count":3,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts\/2451\/revisions"}],"predecessor-version":[{"id":2455,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts\/2451\/revisions\/2455"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/media\/2454"}],"wp:attachment":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/media?parent=2451"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/categories?post=2451"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/tags?post=2451"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}