¿En qué contexto se ejecutan los scripts de detección de SCCM Powershell?


11

Finalmente tuve éxito al usar scripts de detección de PowerShell en clientes con AllSignedpolíticas de ejecución. (sugerencia: comenzó a funcionar después de instalar el último service pack y usar la solución alternativa de Adam Meltzer ).

Ahora que es práctico usar scripts de PowerShell para la detección de aplicaciones, me hace preguntarme lo siguiente:

  1. ¿En qué contexto el cliente SCCM ejecuta los scripts de detección de PowerShell? ¿Sistema? ¿Usuario?
  2. ¿El contexto depende de si selecciona "Instalar para usuario" o "Instalar para sistema" en el Tipo de implementación?

La documentación es bastante escasa sobre este tema. El mejor recurso que he encontrado para los scripts de detección de SCCM PowerShell es esta publicación de blog de Kloud , sin embargo, no dice nada sobre el contexto.

Respuestas:


13

Resultados empíricos

Escribí algunos PowerShell que, cuando se ejecutan como un script de detección, vuelcan las variables de entorno que el script de detección ve en un archivo de registro. Ese guión se encuentra al final de esta respuesta.

Luego hago que el cliente SCCM ejecute este script mediante la implementación de un Tipo de implementación con diferentes parámetros de "Comportamiento de instalación" y "Requisitos de inicio de sesión". Los resultados están en la tabla a continuación:

Test InstallationBehavior LogonRequirement                   DeployedTo LoggedOnUser ScriptRunAs
---- -------------------- ----------------                   ---------- ------------ -----------     
1.1a Install for user     Only when a user is logged on      un2        un2          un2        
1.1b Install for user     Only when a user is logged on      cn1        un2          un2        
1.1c Install for user     Only when a user is logged on      cn1        un1          un1        
1.2a Install for system   Only when a user is logged on      un2        un2          un2        
1.2b Install for system   Only when a user is logged on      cn1        un2          cn1        
1.2c Install for system   Only when a user is logged on      cn1        un1          cn1        
1.3a Install for system   Whether or not a user is logged on un2        un2          un2        
1.3b Install for system   Whether or not a user is logged on cn1        un2          cn1        
1.3c Install for system   Whether or not a user is logged on cn1        un1          cn1        
  • unX son nombres de usuario
  • cnX son nombres de computadora

Análisis

Los resultados anteriores son sorprendentes porque el contexto en el que se ejecuta un script de detección parece depender en parte de si la Aplicación se implementó en un usuario o en un sistema. Fue una sorpresa suficiente que corrí las pruebas por segunda vez. Los resultados fueron consistentes.

Podemos extraer tentativamente las siguientes hipótesis de la tabla anterior:

  1. Cuando una aplicación se implementa en un usuario, un script de detección de PowerShell para esa aplicación se ejecuta como ese usuario.
  2. Cuando se implementa una aplicación en un sistema y se instala el tipo de implementación para el sistema, se ejecuta un script de detección de PowerShell para esa aplicación como el sistema.
  3. Cuando una aplicación se implementa en un sistema y el tipo de implementación se instala para el usuario, se ejecuta un script de detección de PowerShell para esa aplicación como el usuario conectado.

Las tres hipótesis anteriores están respaldadas por los resultados de la prueba. Bien puede haber algunas otras variables que no se probaron donde estas hipótesis no son válidas. Son, al menos, un buen conjunto de supuestos iniciales cuando se usan scripts de detección de PowerShell.

Contextos incompatibles (¡Cuidado!)

Jason Sandys documentó una prueba similar de las reglas para el contexto de instalación. Si lees esa publicación detenidamente, podrías notar que las reglas para el contexto de instalación y el contexto del script de detección no son exactamente las mismas. Aquí están las reglas ofensivas:

Cuando el comportamiento de instalación de una aplicación se establece en "Instalar como sistema", el instalador se ejecuta como sistema [independientemente de la implementación para el usuario].

Cuando una aplicación se implementa en un usuario, un script de detección de PowerShell para esa aplicación se ejecuta como ese usuario [independientemente de si el comportamiento de instalación está configurado en "Instalar como sistema"].

Esto significa que una aplicación que tiene el comportamiento de instalación "Instalar como sistema" y se implementa en una colección de usuarios utilizará el contexto del sistema para la instalación, pero el contexto del usuario para la detección.

Alguien que escriba scripts de detección para Aplicaciones donde el comportamiento de instalación es "Instalar como sistema" debe tener cuidado de evitar depender de cualquier parte del entorno que cambie entre el sistema y los contextos del usuario. De lo contrario, la detección de una aplicación implementada en una colección del sistema puede tener éxito mientras falla la detección de la misma aplicación implementada en una colección de usuarios.

Guión

function Write-EnvToLog
{
    $appName = 'script-detect-test'

    $logFolderPath = "c:\$appName-$([System.Environment]::UserName)"

    if ( -not (Test-Path $logFolderPath -PathType Container) )
    {
        New-Item -Path $logFolderPath -ItemType Directory | Out-Null
    }

    if ( -not (Test-Path $logFolderPath -PathType Container ) )
    {
        return
    }

    $logFileName = "$appName`__$((Get-Date).ToString("yyyy-MM-dd__HH-mm-ss")).txt"

    $fp = "$logFolderPath\$logFileName"

    Get-ChildItem Env: | Out-File $fp | Out-Null

    return $true
}

try
{
    if ( Write-EnvToLog ) { "Detected!" }
    [System.Environment]::Exit(0)
}
catch
{
    [System.Environment]::Exit(0)
}

+1 para una pregunta y respuesta SCCM sólida. Espero que la comunidad SCCM crezca aquí, ya que es realmente lo único que busco (suscripción de correo electrónico para las etiquetas). Aquí, tenga un representante adicional como motivación para seguir viniendo.
MDMoore313

2
Gracias @ BigHomie. También estoy filtrando para SCCM ... pero extraño mucho porque no hay una forma práctica de obtener esa transmisión filtrada en el móvil .
alx9r

2
Excelente pregunta SCCM! Únase a @BigHomie y a mí, custodios de la etiqueta [sccm]. Hay literalmente un par de nosotros.

Maldición Skippy, @kce también tiene las mejores preguntas de este lado de la etiqueta de Windows.
MDMoore313
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.