started - powershell scripts
Cómo comprobar si el complemento de PowerShell ya está cargado antes de llamar a Add-PSSnapin (5)
Debería poder hacerlo con algo como esto, donde consulta el Snapin pero le dice a PowerShell que no se equivoque si no puede encontrarlo:
if ( (Get-PSSnapin -Name MySnapin -ErrorAction SilentlyContinue) -eq $null )
{
Add-PsSnapin MySnapin
}
Tengo un grupo de scripts de PowerShell que a veces se ejecutan juntos, a veces de a uno por vez. Cada uno de los scripts requiere que se cargue un cierto complemento.
En este momento, cada script llama a Add-PSSnapin XYZ
al principio.
Ahora si ejecuto varias secuencias de comandos consecutivamente, las siguientes secuencias de comandos arrojan:
No se puede agregar el complemento de Windows PowerShell XYZ porque se agrega casi por completo. Verifique el nombre del complemento y vuelva a intentarlo.
¿Cómo puedo hacer que cada script se compruebe para ver si el complemento ya está cargado antes de llamar a Add-PSSnapin?
Intenté la muestra del código de @ScotSaad pero no funcionó para mí. No he descubierto exactamente por qué, pero el cheque no era confiable, a veces tenía éxito y otras no. Descubrí que el uso de un filtro Where-Object
en la propiedad Name
funcionó mejor:
if ((Get-PSSnapin | ? { $_.Name -eq $SnapinName }) -eq $null) {
Add-PSSnapin $SnapinName
}
Código cortesía de this .
Scott Saads funciona, pero esto me parece algo más rápido. No lo he medido, pero parece cargarlo un poco más rápido, ya que nunca produce un mensaje de error.
$snapinAdded = Get-PSSnapin | Select-String $snapinName
if (!$snapinAdded)
{
Add-PSSnapin $snapinName
}
Scott ya te dio la respuesta. También puede cargarlo de todos modos e ignorar el error si ya está cargado:
Add-PSSnapin -Name <snapin> -ErrorAction SilentlyContinue
Sorprendentemente, nadie mencionó la forma nativa para que los scripts especifiquen las dependencias: la #REQUIRES -PSSnapin Microsoft.PowerShell...
comment / preprocessor. De la misma manera, podría requerir elevación con -RunAsAdministrator
, módulos con -Modules Module1,Module2
, y una versión específica de Runspace.
Obtenga más información escribiendo Get-Help about_requires