2 votos

Applescript la Validación de memoria USB de Coincidencia de la serie y el punto de montaje

Quiero estar seguro de que el dispositivo USB en 'usbMountPoint' es también el uno con el mismo 'usbSerialNumber'

-- Get Mount Point of script's USB host
tell application "Finder"
   try
       set usbMountPoint to text 1 thru -2 of POSIX path of (disk of (path to me) as alias)
       log usbMountPoint --> Output: /Volumes/usb-drive-name
   on error
       set usbMountPoint to POSIX path of (disk of (path to me) as alias) --> if file is on desktop, path: '/', can't have ' ' hence no removing
       log usbMountPoint --> Output: /Volumes/usb-drive-name
   end try
end tell

-- Set Serial Num of USB Stick
set usbSerialNumber to "C86000BDB9F2BFA04A31E8A1"

-- Check if usbMountPoint and usbSerialNumber exist
set sysProfileUSB to (do shell script "system_profiler SPUSBDataType") as text
if sysProfileUSB contains "Serial Number: " & usbSerialNumber and sysProfileUSB contains "Mount Point: " & usbMountPoint then
   log "USB Stick Found!"
else
   log "USB Stick Not found."
end if

A la hora de validar para comprobar si usbMountPoint y usbSerialNumber existen en system_profiler, el código debe comprobar si el dispositivo USB en 'usbMountPoint' tiene el número de serie de 'usbSerialNumber'. Sin esta "coincidencia/emparejamiento", el usuario puede simplemente tener dos USBs conectados uno con el número de serie correcto, el otro con el guión; mientras que el código de retorno "Encontrado" porque "contiene" lee toda la system_profiler sin validar que ambas variables vienen desde el mismo dispositivo.

Cualquier ayuda sería muy apreciada. Saludos.

1voto

user3439894 Puntos 5883

Por supuesto que no conoce el alcance total de lo que usted está tratando de lograr, sin embargo, porque a medida que en la actualidad tiene codificada la secuencia de comandos se puede ejecutar desde otro entonces el objetivo de la Unidad USB. Así que he escrito un poco diferente, sin embargo es el punto de montaje basado en el número de serie si el objetivo de la Unidad USB está montado. Usted puede, a continuación, de la sucursal de acuerdo a las condiciones, es decir, si el script se ejecuta desde la Unidad de destino USB o no y si el objetivo de la Unidad USB se monta o no, etc. Después de conseguir el punto de montaje en el código, he incluido otro bloque de código para probar en contra de si el objetivo de la Unidad USB se monta y donde la secuencia de comandos se ejecuta desde el. Obviamente, esto es sólo un ejemplo de la prueba y vas a tener que hacer como usted necesita. La línea de fondo aquí es, ¿cómo lo programé llegar el punto de montaje de la Unidad de destino USB basado en el número de serie y esto supongo que es lo que realmente estás buscando.

Aquí está mi opinión sobre el código y salida cuando se ejecuta desde el Escritorio y el objetivo de la Unidad USB:

  • Nota: Antes de usar, cambia el número de serie a continuación el valor apropiado.

AppleScript Código:

--    # Get the volume this script is located on.

tell application "Finder"
    try
        set theVolumeThisScriptIsLocatedOn to text 1 thru -2 of POSIX path of (disk of (path to me) as alias)
        log "The volume this script is located on is: " & quoted form of theVolumeThisScriptIsLocatedOn
    on error
        set theVolumeThisScriptIsLocatedOn to POSIX path of (disk of (path to me) as alias)
        log "The volume this script is located on is: " & quoted form of theVolumeThisScriptIsLocatedOn
    end try
end tell

--    # Set the Serial Number of the target USB Drive.

set usbSerialNumber to "200434112111BA425FA4"

--    # See if the USB Drive matching 'usbSerialNumber' is mounted and if so, get its mount point.
--    # The variable 'usbMountPoint' will contain either its mount point, e.g., '/Volumes/...', or '' as in nothing.

set usbMountPoint to (do shell script "system_profiler SPUSBDataType | awk '/" & usbSerialNumber & "/' RS= | awk -F': ' '/Mount Point: /{print $2}'") as text
log "The mount point is: " & quoted form of usbMountPoint
if usbMountPoint is equal to "" then
    log "The target USB Drive is not mounted!"
else
    log "The target USB Drive is mounted!"
end if

--    # See if the script is running from the target USB Drive or elsewhere.

if usbMountPoint is not equal to "" and theVolumeThisScriptIsLocatedOn is equal to usbMountPoint then
    log "This script is running from the target USB Drive!"
else
    log "This script is not running from the target USB Drive!"
end if

Las respuestas cuando se ejecuta desde la Unidad de destino USB:

tell current application
    path to current application
        --> alias "16GB-USB:USB Test.scpt"
end tell
tell application "Finder"
    get disk of alias "16GB-USB:USB Test.scpt"
        --> alias "16GB-USB:"
    (*The volume this script is located on is: '/Volumes/16GB-USB'*)
end tell
tell current application
    do shell script "system_profiler SPUSBDataType | awk '/200434112111BA425FA4/' RS= | awk -F': ' '/Mount Point: /{print $2}'"
        --> "/Volumes/16GB-USB"
    (*The mount point is: '/Volumes/16GB-USB'*)
    (*The target USB Drive is mounted!*)
    (*This script is running from the target USB Drive!*)
end tell

Las respuestas cuando se ejecuta desde el Escritorio con el objetivo de la Unidad USB conectado:

tell current application
    path to current application
        --> alias "Macintosh HD:Users:me:Desktop:USB Test.scpt"
end tell
tell application "Finder"
    get disk of alias "Macintosh HD:Users:me:Desktop:USB Test.scpt"
        --> alias "Macintosh HD:"
end tell
tell current application
    path to current application
        --> alias "Macintosh HD:Users:me:Desktop:USB Test.scpt"
end tell
tell application "Finder"
    get disk of alias "Macintosh HD:Users:me:Desktop:USB Test.scpt"
        --> alias "Macintosh HD:"
    (*The volume this script is located on is: '/'*)
end tell
tell current application
    do shell script "system_profiler SPUSBDataType | awk '/200434112111BA425FA4/' RS= | awk -F': ' '/Mount Point: /{print $2}'"
        --> "/Volumes/16GB-USB"
    (*The mount point is: '/Volumes/16GB-USB'*)
    (*The target USB Drive is mounted!*)
    (*This script is not running from the target USB Drive!*)
end tell

Las respuestas cuando se ejecuta desde el Escritorio sin la Unidad de destino USB conectado:

tell application "Finder"
    get disk of alias "Macintosh HD:Users:me:Desktop:USB Test.scpt"
        --> alias "Macintosh HD:"
end tell
tell current application
    path to current application
        --> alias "Macintosh HD:Users:me:Desktop:USB Test.scpt"
end tell
tell application "Finder"
    get disk of alias "Macintosh HD:Users:me:Desktop:USB Test.scpt"
        --> alias "Macintosh HD:"
    (*The volume this script is located on is: '/'*)
end tell
tell current application
    do shell script "system_profiler SPUSBDataType | awk '/200434112111BA425FA4/' RS= | awk -F': ' '/Mount Point: /{print $2}'"
        --> ""
    (*The mount point is: ''*)
    (*The target USB Drive is not mounted!*)
    (*This script is not running from the target USB Drive!*)
end tell

La comprensión de lo que el set usbMountPoint to (do shell script "...") as text de la línea de comandos está haciendo para establecer el valor de la usbMountPoint variable.

  • system_profiler SPUSBDataType | salidas de toda la información relacionada con el hardware USB y luego se transfiere a la primera aparición de awk en la línea de comandos.
  • awk '/" & usbSerialNumber & "/' RS= | busca el número de serie y salidas de todo, desde la primera línea en blanco antes de que el número de serie y la primera línea en blanco después de que el número de serie y su salida luego se transfiere a la segunda aparición de awk en la línea de comandos. Esto asegura que la única línea que contiene '/Mount Point:' en la salida está asociada con el número de serie (si la Unidad de destino USB está montado).
  • awk -F': ' '/Mount Point: /{print $2}' encuentra la línea que contiene 'Mount Point: ' , a continuación, utiliza ': ' como el separador de campo y se imprime el segundo campo que va a ser el POSIX ruta de acceso del punto de montaje de la Unidad de destino USB, o '' como en nada (porque no estaba montado).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X