Búsqueda de sitios web

Módulo MSOnline: instalación y solución de problemas


El módulo MSOnline para PowerShell ofrece una API conveniente para automatizar la administración de recursos de Azure AD, como usuarios y licencias.

Instalarlo es bastante sencillo. Y el fracaso es bastante frecuente.

Esta publicación lo guiará a través de los errores más comunes observados durante la instalación del módulo MSOnline.

Para simplificar enormemente la administración híbrida de Office 365 y ahorrar toneladas de tiempo, eche un vistazo a Easy365Manager:

Cómo instalar el módulo MSOnline

Para instalar el módulo MSOnline, inicie PowerShell de 64 bits en modo administrativo y ejecute el siguiente comando:

Install-Module MSOnline

Su módulo MSOnline se recupera de PSGallery y se instala en un minuto (sujeto al ancho de banda de Internet) si todo funciona bien.

Sin embargo, si el resultado de ejecutar este comando es un completo y absoluto fracaso, continúe leyendo.

Las siguientes secciones cubrirán las razones más típicas por las que el módulo MSOnline no le funciona.

Compruebe que esté ejecutando PowerShell 5.1 o posterior

Es una pérdida de tiempo examinar todos los rincones de tu casa si lo que está roto son todos los cimientos.

Si está ejecutando Windows Server 2012 R2 o una versión anterior o si está ejecutando una versión anterior de Windows 10 o una versión anterior, dedique unos segundos a verificar su versión de PowerShell:

PS C:\> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      18362  628

Suponga que está ejecutando PowerShell 5.0 o una versión anterior; asegúrese de actualizar. Lea este artículo para obtener instrucciones sobre cómo instalar PowerShell 5.1 en su sistema.

Verifique sus proveedores de paquetes

Al instalar módulos de PSGallery, utiliza proveedores de paquetes para recuperar el código del módulo. Los proveedores de paquetes ofrecen una forma sencilla de instalar y actualizar el código automáticamente.

PSGallery depende de dos proveedores de paquetes, NuGet y PowerShellGet. Verifique la disponibilidad de estos usando el comando Get-PackageProvider:

PS C:\> Get-PackageProvider

Name                     Version          DynamicOptions
----                     -------          --------------
msi                      3.0.0.0          AdditionalArguments
msu                      3.0.0.0
NuGet                    3.0.0.1          Destination, ExcludeVersion, Scope, SkipDependencies, Headers,
                                          FilterOnTag, Contains, AllowPrereleaseVersions, ConfigFile, SkipValidate
PowerShellGet            1.0.0.1          PackageManagementProvider, Type, Scope, AllowClobber, SkipPublisherCheck,
                                          InstallUpdate, NoPathUpdate, Filter, Tag, Includes, DscResource, ...
Programs                 3.0.0.0          IncludeWindowsInstaller, IncludeSystemComponent

Si falta NuGet en su sistema, instálelo usando el cmdlet Install-PackageProvider:

Install-PackageProvider NuGet

Compruebe que está ejecutando como administrador

Ejecutar su secuencia de comandos en un indicador elevado de PowerShell no es un requisito como tal. Sin embargo, instalar módulos en un mensaje no elevado colocará los módulos en su perfil de usuario.

Es posible que desee o no almacenar módulos de PowerShell en su perfil de usuario, pero definitivamente puede generar confusión con respecto a la carga de módulos. Lo cubriré más adelante en esta publicación.

En caso de duda, verifique su estado de administrador usando estas dos líneas:

$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

Si el resultado es "verdadero", el mensaje actual se eleva.

El comando 'Install-Module' se encontró en el módulo 'PowerShellGet', pero el módulo no se pudo cargar

A veces puedes ver un mensaje de error similar a este:

Install-Module : The 'Install-Module' command was found in the module 'PowerShellGet', but the module
  could not be loaded. For more information, run 'Import-Module PowerShellGet'.
At line:1 char:1
+ Install-Module MSOnline
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Install-Module:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CouldNotAutoloadMatchingModule

Esto significa que su política de ejecución de PowerShell está bloqueando la ejecución de scripts.

Verifique su política de ejecución usando el siguiente comando:

PS C:\> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser      Restricted
 LocalMachine      Restricted

El resultado anterior indica que no puede ejecutar scripts y esto debe cambiar.

Como mínimo, configure el proceso actual para permitir la ejecución de scripts firmados remotamente usando el siguiente comando:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

Si no desea ejecutar esto cada vez que inicia una nueva consola PowerShell, puede establecer el alcance en CurrentUser o LocalMachine, según su temperamento.

El paquete 'MSOnline' no se pudo descargar

Algunos casos pueden llevar a este mensaje de error:

WARNING: Source Location 'https://www.powershellgallery.com/api/v2/package/MSOnline/1.1.183.57' is not valid.
PackageManagement\Install-Package : Package 'MSOnline' failed to download.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1772 char:21
+ ...          $null = PackageManagement\Install-Package @PSBoundParameters
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (C:\Users\adm.ad...\MSOnline.nupkg:String) [Install-Package], Exception
    + FullyQualifiedErrorId : PackageFailedInstallOrDownload,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage

Este error se debe a que Microsoft deshabilitó la compatibilidad con TLS 1.0 y 1.1 en PSGallery a finales de marzo de 2020.

Esto se puede resolver habilitando TLS 1.2:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Después de ejecutar este comando, vuelva a intentar la instalación desde PSGallery.

PackageManagement\Install-Package: ya está disponible un comando con el nombre 'Get-MsolUser'

Si los comandos del módulo MSOnline entran en conflicto con los comandos existentes en su sistema, verá un mensaje de error similar a este:

**PackageManagement\Install-Package : A command with name 'Get-MsolUser' is already available on this system.
  This module 'MSOnline' may override the existing commands. If you still want to install this module 'MSOnline',
  use -AllowClobber parameter.**

El mensaje de error es bastante claro: para resolver este problema, utilice el modificador -AllowClobber. Esto permitirá que los comandos del módulo MSOnline anulen cualquier comando que ya exista en su sistema:

Install-Module MSOnline -AllowClobber

Instalación en paralelo del módulo PowerShell

Los módulos PowerShell se pueden instalar uno al lado del otro y en diferentes ubicaciones.

En general, se dirige a dos carpetas diferentes al instalar módulos de PowerShell en su sistema:

  • La instalación de módulos desde una consola PowerShell no elevada colocará los módulos en su perfil de usuario:

    • $env:Perfil de usuario\Documentos\WindowsPowerShell\Modules

      • (reemplace "Documentos" con el nombre traducido si no está en inglés)
  • La instalación de módulos desde una consola PowerShell elevada colocará los módulos en archivos de programa:

    • $env:Archivos de programa\WindowsPowerShell\Modules

Esto significa que puede, por ejemplo, tener instaladas las versiones 1.0 y 1.1.166.0 de MSOnline en su perfil de usuario Y las versiones 1.1.183.8 y 1.1.183.57 instaladas en los archivos de programa. Como es exactamente el caso que se ve aquí:

PS C:\> Get-Module -ListAvailable -Name MSOnline


    Directory: C:\Users\SOGP50\Documents\WindowsPowerShell\Modules


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   1.1.166.0  MSOnline                            {Get-MsolDevice, Remove-MsolDevice, ...}
Manifest   1.0        MSOnline                            {Get-MsolDevice, Remove-MsolDevice, ...}


    Directory: C:\Program Files\WindowsPowerShell\Modules


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   1.1.183.57 MSOnline                            {Get-MsolDevice, Remove-MsolDevice, ...}
Manifest   1.1.183.8  MSOnline                            {Get-MsolDevice, Remove-MsolDevice, ...}

Y ahora, la pregunta de los 10.000$es, por supuesto:

¿Cuál es el orden de carga del módulo PowerShell?

Para comprender el orden de carga del módulo de PowerShell, primero debe examinar la variable de ruta del módulo, $env:PSModulePath. En mi sistema, se parece a esto:

PS C:\> $env:PSModulePath
C:\Users\JaneDoe\Documents\WindowsPowerShell\Modules;
C:\Program Files\WindowsPowerShell\Modules;
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\;
C:\Program Files (x86)\Microsoft SQL Server\120\Tools\PowerShell\Modules\;
C:\Program Files (x86)\Microsoft SQL Server\130\Tools\PowerShell\Modules\;
C:\Program Files\SharePoint Online Management Shell\

(Las dos primeras rutas de módulo son las más interesantes ya que aquí es donde volcamos los módulos que instalamos desde PSGallery).

De forma predeterminada, PowerShell cargará el número de versión más alto del módulo en la primera carpeta en la ruta del módulo donde se encuentra el módulo.

Hagamos una pequeña prueba:

Tenemos cuatro versiones de MSOnline instaladas en dos carpetas diferentes:

PS C:\> Get-Module -ListAvailable -Name MSOnline | ft Name,Version,Path

Name     Version    Path
----     -------    ----
MSOnline 1.1.166.0  C:\Users\SOGP50\Documents\WindowsPowerShell\Modules\MSOnline\1.1.166.0\MSOnline.psd1
MSOnline 1.0        C:\Users\SOGP50\Documents\WindowsPowerShell\Modules\MSOnline\1.0\MSOnline.psd1
MSOnline 1.1.183.57 C:\Program Files\WindowsPowerShell\Modules\MSOnline\1.1.183.57\MSOnline.psd1
MSOnline 1.1.183.8  C:\Program Files\WindowsPowerShell\Modules\MSOnline\1.1.183.8\MSOnline.psd1

Cargamos el módulo MSOnline explícitamente ejecutando el siguiente comando:

Import-Module MSOnline

La primera carpeta en la ruta del módulo PS es: "C:\Users\SOGP50\Documents\WindowsPowerShell\Modules".

La versión más alta de MSOnline en la primera ruta es 1.1.166.0.

Y si verificamos los identificadores de archivos generados para el módulo MSOnline, por ejemplo, usando Process Explorer, podemos confirmar que este es el caso:

Tómate un momento para dejar que se asimile:

Aunque acabo de instalar el último módulo de MSOnline mediante un mensaje elevado, la versión anterior de MSOnline en mi perfil de usuario todavía se está cargando.

¡Así que asegúrese de ordenar diferentes versiones de sus módulos si desea controlar qué versiones se cargan!

Artículos relacionados