Detectar si se ha insertado una tarjeta SD a través de PowerShell

2

Me gustaría usar PowerShell para detectar si hay una tarjeta SD allí. Después de detectar una tarjeta SD, un script de PowerShell debe copiar automáticamente algunos archivos a la tarjeta SD.

Ya encontré y probé un script PS, pero solo detecta memorias USB.

Register-WmiEvent -Class win32_VolumeChangeEvent -SourceIdentifier volumeChange
write-host (get-date -format s) " Beginning script..."
do{
    $newEvent = Wait-Event -SourceIdentifier volumeChange
    $eventType = $newEvent.SourceEventArgs.NewEvent.EventType
    $eventTypeName = switch($eventType)
    {
        1 {"Configuration changed"}
        2 {"Device arrival"}
        3 {"Device removal"}
        4 {"docking"}
    }
    write-host (get-date -format s) " Event detected = " $eventTypeName
    if ($eventType -eq 2)
    {
        $driveLetter = $newEvent.SourceEventArgs.NewEvent.DriveName
        $driveLabel = ([wmi]"Win32_LogicalDisk='$driveLetter'").VolumeName
        write-host (get-date -format s) " Drive name = " $driveLetter
        write-host (get-date -format s) " Drive label = " $driveLabel
        # Execute process if drive matches specified condition(s)
        if ($driveLetter -eq 'E:' -and $driveLabel -eq 'Test 1')
        {
            write-host (get-date -format s) " Starting task in 3 seconds..."
            start-sleep -seconds 3
            start-process "E:test.bat"
        }
    }
    Remove-Event -SourceIdentifier volumeChange
} while (1-eq1) #Loop until next event
Unregister-Event -SourceIdentifier volumeChange
saygon
fuente
No tengo una tarjeta SD a mano, así que no puedo probar mi sugerencia. Pero trata de cambiar if ($eventType -eq 2)a if ($eventType -eq 4). La secuencia de comandos no busca la llegada del Dispositivo (¿se agregó una nueva letra de unidad?) Sino el acoplamiento del nuevo hardware. ¿También asumo que ya cambiaste if ($driveLetter -eq 'E:' -and $driveLabel -eq 'Test 1')a tus propias necesidades?
nixda
Hola nixda y gracias por tu respuesta. Ya he modificado el script pero aún no detecta la tarjeta SD. La razón principal (creo) por la que el script no funciona es si tiene un lector de tarjetas SD incorporado, y expulsa la tarjeta SD, aún puede encontrar el lector de tarjetas en Administración de discos con la letra asignada.
saygon
Creo que tienes razón sobre la letra de la unidad. Por eso pensé que la llegada del dispositivo no funcionaría. Ahora que leí MSDN nuevamente, dice que incluye cambios en la configuración del hardware (acoplamiento y desacoplamiento) . Por lo tanto, el acoplamiento probablemente tampoco funcionará. Hmmm
nixda

Respuestas:

0

Cuando abre una tarjeta USB o SD en Windows, registra el inicio del "Servicio de disco virtual" en el Registro de eventos del sistema en Windows.

Con eso en mente:

  1. Inserte su tarjeta SD y luego abra el registro del sistema en el Visor de eventos.
  2. En la parte superior (o cerca de la parte superior) habrá un "Servicio de disco virtual".
  3. Resalte esa entrada y luego haga clic en la pestaña "Detalles" a continuación.
  4. Si es necesario, haga clic en el signo más al lado de "Sistema".
  5. Dentro estará el "EventID" correcto para las tarjetas SD, así que úselo para su script.
  6. Ahora haga clic derecho en el mismo "Servicio de disco virtual" (del paso 2)
  7. Seleccione "Adjuntar tarea a este evento ..."
  8. Pase por el "Crear asistente de tareas básicas" a "Acción" y seleccione "Iniciar un programa".
  9. Ingrese la ruta a su script de PowerShell y seleccione Finalizar.
DBADon
fuente