Saltar al contenido

Powershell falla con la actualización

Nuestro equipo de trabajo ha estado horas investigando la resolución a tu búsqueda, te dejamos la respuestas por eso nuestro objetivo es resultarte de gran apoyo.

Solución:

solución alterna:

Update-Help -Verbose -Force -ErrorAction SilentlyContinue 

-verbose dará salida a cualquier comando que esté haciendo,
-force completará con fuerza el script incluso si se produce un error en el medio,
-ErrorAction SilentlyContinue Hará cosas similares a las anteriores.

En resumen, los módulos aún no se actualizarán y no se actualizaron antes.

TL; DR y solución alternativa

Años más tarde, esto sigue siendo un problema para la mayoría de los usuarios. Pensé en dar una explicación detallada aquí.

Dos problemas:

  1. Update-Help necesita PowerShell con Ejecutar como administrador
  2. Microsoft tiene enlaces de actualización rotos, lo que arroja errores en todos los sistemas. Hasta el día de hoy, ciertos módulos que ha mencionado continúan arrojando errores

Su primer error es evidente y directo, y esta salida se incluye directamente en su primera salida de error:

Access is denied. The command could not update Help topics for the Windows PowerShell core modules, or for any modules in the $pshomeModules directory. To update these Help 
topics, start Windows PowerShell by using the "Run as Administrator" command, and try running Update-Help again.

Para reprimir los errores, pero aún así descargar todo lo que puede, puede ejecutar lo siguiente (dentro de una consola de PowerShell iniciada a través de Ejecutar como administrador):

Update-Help -Verbose -Force -ErrorAction SilentlyContinue

O

Update-Help -Verbose -Force -ErrorAction SilentlyContinue -ErrorVariable UpdateErrors

Explicación de la solución alternativa

De la documentación de ayuda para Update-Help, esta es la razón por la que se necesitan privilegios de administrador:

Update-Help requiere privilegios administrativos.

Debe ser miembro del grupo de administradores en la computadora para actualizar los archivos de ayuda para los módulos de PowerShell Core.

Para descargar o actualizar los archivos de ayuda de los módulos en el directorio de instalación de PowerShell ($ PSHOME Modules), incluidos los módulos de PowerShell Core, inicie PowerShell mediante la opción Ejecutar como administrador. Por ejemplo: Start-Process powershell.exe -Verb RunAs.

También puede actualizar los archivos de ayuda mediante el elemento de menú Actualizar ayuda de Windows PowerShell en el menú Ayuda en el entorno de scripting integrado (ISE) de Windows PowerShell.

El elemento de Ayuda de actualización de Windows PowerShell ejecuta un cmdlet Update-Help sin parámetros. Para actualizar la ayuda de los módulos en el directorio $ PSHOME, inicie Windows PowerShell ISE mediante la opción Ejecutar como administrador.

En cuanto a los parámetros utilizados:

  • -Force significa algunas cosas, también como se cita directamente en la documentación para Update-Help:

Indica que este cmdlet no sigue la limitación de una vez al día, omite la comprobación de la versión y descarga archivos que superan el límite de 1 GB.

Sin este parámetro, Update-Help se ejecuta solo una vez en cada período de 24 horas. Las descargas están limitadas a 1 GB de contenido sin comprimir por módulo y los archivos de ayuda solo se instalan cuando son más nuevos que los archivos existentes en la computadora.

El límite de una vez al día protege los servidores que alojan los archivos de ayuda y le permite agregar un comando Actualizar-Ayuda a su perfil de PowerShell sin incurrir en el costo de recursos de las conexiones o descargas repetidas.

  • -Verbose solo significa que proporcionará un muro de texto amarillo que describe qué módulos están intentando actualizarse, URI que se están resolviendo, etc.
  • -ErrorVariable UpdateErrors guarda errores en una variable que se pueden recuperar a través de la $UpdateErrors variable
  • -ErrorAction SilentlyContinue significa simplemente ignorar cualquier error y pasar al siguiente módulo que se puede actualizar

Puede que te preguntes por qué suprimiendo un error se considera una solución. Es porque:

  • Si tiene una secuencia de comandos que ejecuta este comando y no desea que la secuencia de comandos se cierre debido a estos errores.
  • Suprime los errores solo para los módulos para los que no puede descargar la ayuda, y aún así descarga la ayuda para todos los demás módulos que puede.
  • Si los errores aún desean ser investigados, al menos están disponibles dentro del $UpdateErrors variable y puede guardarse en un archivo o tratarse de alguna otra manera.
  • Para resolver realmente los errores que se producen, Microsoft tiene que hacer algo para arreglar sus propios puntos finales de documentación de ayuda.

Espera, pero ¿por qué es el problema de Microsoft?

A continuación, se muestra un ejemplo del último sistema Windows 10 (a partir del cuarto trimestre de 2019 / primer trimestre de 2020):

$PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.18362.145
PSEdition                      Desktop
PSCompatibleVersions           1.0, 2.0, 3.0, 4.0...
BuildVersion                   10.0.18362.145
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
Get-WmiObject win32_operatingsystem | select Caption, Version
Caption                  Version
-------                  -------
Microsoft Windows 10 Pro 10.0.18363

Para aquellos tanto nuevos como experimentados con PowerShell en Windows, ver estos Update-Help Los errores durante los primeros pasos de la actualización de la documentación de ayuda son un gran desvío y un punto de confusión. La mayoría de los errores no son algún tipo de configuración incorrecta por parte del usuario, pero desafortunadamente ha sido la expectativa predeterminada y continua de la salida del comando durante los últimos años.

Sí, el comando de solución alternativa funciona. Pero, si las personas se están moviendo hacia la ejecución de un comando incorporado suprimiendo la salida de error y avanzando, esa es una mala experiencia para el cliente (¿y tal vez no sea la mejor práctica para enseñar a las personas, en caso de que se produzcan otros errores?). Suprimir los errores es lo único que le queda a la gente. Incluso aquí desde 2016, donde es la respuesta más votada:

  • PowerShell (5) Update-Help arroja un error después de instalar la actualización de aniversario de Windows 10

Tenga en cuenta que el marcado aceptado respuesta (que debería NO ser la respuesta aceptada) para el error de actualización relacionado con el HelpInfoUri aquí dice:

Creo que deberá ponerse en contacto con el soporte de MS para esto.

El problema es con su máquina y su instalación y necesitará obtener soporte para ayudarlo. Creo que la única sugerencia que podemos hacer es reinstalar Windows. (!!)

¡Cosas locas! ¡NO LO VUELVA A INSTALAR SI CONSIGUE ESTE ERROR! Espero que el usuario no haya realizado alguna reinstalación debido a un HelpInfoUri estar equivocado.

Como dijo SamB en este problema de GitHub enfocado directamente en tratar de resolver este problema continuo, el HelpInfoURI los valores establecidos por Microsoft en sus archivos de manifiesto de PowerShell tienen la culpa:

Bueno, el manifiesto del módulo para WindowsUpdateProvider en esta máquina no da ninguna atribución más allá de “Microsoft Corporation”, pero especifica un HelpInfoUri de https://go.microsoft.com/fwlink/?linkid=390794, por lo que en realidad no hay necesidad de averiguar de dónde viene el módulo y de alguna manera argumentar que esto justifica la emisión de un parche para WindowsUpdateProvider, es solo necesario para que esa redirección apunte a algún lugar apropiado.

Si ejecuta lo siguiente en un sistema donde estos Update-Help aparecen errores, debería ver el resultado:

Import-Module WindowsUpdateProvider
Get-Module WindowsUpdateProvider | select HelpInfoURI,Version                                                                                                                                                                                      
HelpInfoUri                                    Version
-----------                                    -------
https://go.microsoft.com/fwlink/?linkid=390794 1.0.0.2

Con el manifiesto del módulo fuente para WindowsUpdateProvider, a modo de ejemplo, estando ubicado aquí:

C:WINDOWSsystem32WindowsPowerShellv1.0ModulesWindowsUpdateProviderWindowsUpdateProvider.psd1

Microsoft definitivamente podría redirigir el enlace a un HelpInfoUri, lo que significaría un cambio cero en el extremo del cliente.

En una nota al margen, las personas que usan -ErrorAction SilentlyContinue Por lo general, faltan que varios otros módulos tienen su ayuda rota. A partir de hoy, estos están rotos en un escritorio estándar de Windows 10:

$TestModules = @("Microsoft.PowerShell.ODataUtils", "Microsoft.PowerShell.Operation.Validation", "UEV", "Whea", "WindowsDeveloperLicense", "defender", "configdefender",  "appvclient")
Import-Module $TestModules
$BorkedHelp = Get-Module $TestModules | select Name, Version, HelpInfoUri
$BorkedHelp
Name                                      Version   HelpInfoUri
----                                      -------   -----------
appvclient                                1.0.0.0   https://go.microsoft.com/fwlink/?LinkId=403112
configdefender                            1.0       https://go.microsoft.com/fwlink/?linkid=390762
defender                                  1.0       https://go.microsoft.com/fwlink/?linkid=390762
Microsoft.PowerShell.ODataUtils           1.0       https://go.microsoft.com/fwlink/?LinkId=509916
Microsoft.PowerShell.Operation.Validation 1.0.1     https://go.microsoft.com/fwlink/?LinkId=808399
UEV                                       2.1.639.0 https://go.microsoft.com/fwlink/?LinkId=826061
Whea                                      2.0.0.0   https://go.microsoft.com/fwlink/?linkid=390848
WindowsDeveloperLicense                   1.0.0.0   https://go.microsoft.com/fwlink/?linkid=285578
foreach ($uri in $BorkedHelp.helpinfouri) Invoke-WebRequest $uri

Bienvenido a un mar rojo 404 - File or directory not found. errores, con todos los puntos finales que necesitan ser redirigidos. Algunos puntos finales se han roto durante años, en este momento, mientras que otros lo han hecho quizás por menos.

Microsoft debería poder corregirlos, con cualquier herramienta que tengan en torno a su reenvío de enlaces, a menos que, en su lugar, actualicen los manifiestos del módulo para apuntar a los nuevos usuarios. HelpInfoURI endpoints, que sería la opción menos amigable para todos los usuarios.

Si el problema para Microsoft es que no hay documentación descargable para estos de forma predeterminada, y que los enlaces quizás sean reservas generadas automáticamente para usar más adelante cuando haya documentación para descargar, al menos deberían tener un mínimo indispensable. HelpInfoURI punto final en lugar de uno roto.

Ayudando a que Microsoft sea consciente

Los usuarios que se encuentren con este problema y hayan encontrado útil esta explicación deben visitar este problema en GitHub: MicrosoftDocs / windows-powershell-docs: Update-Help falla para WindowsUpdateProvider

Una solución alternativa

Para cualquier módulo PowerShell conocido que tenga puntos finales de documentación de ayuda rotos, también puede comentar el HelpInfoURI value en el manifiesto de PowerShell. Update-Help solo intenta descargar actualizaciones para módulos donde HelpInfoURI tiene un valor. Esto podría ser útil para saber si ha surgido un nuevo error debido a un problema con el punto final (como un HelpInfoURI alojar su propia documentación del módulo).

Update-Help falló inicialmente, pero cuando se ejecutó como administrador, tuvo éxito.

Sección de Reseñas y Valoraciones

Si te sientes impulsado, tienes el poder dejar una crónica acerca de qué le añadirías a esta crónica.

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *