Problema con VBScript per rilevare quando viene inserito un usb e verificare se è crittografato


0

Sto provando a scrivere un vbscript che può essere inviato tramite Kace K1000 ed eseguito in background sui computer che abbiamo nella nostra rete per rilevare ogni volta che un utente collega la propria unità flash / unità esterna e controlla se sono crittografati.

Se l'unità non è crittografata, inviare un messaggio / messaggio che dice all'utente di crittografare l'unità. Se l'unità è già crittografata, non eseguire alcuna operazione, procedere normalmente. Il sistema operativo con cui sto lavorando è Windows 7 e 10.

La sceneggiatura che ho finora è:

    strComputer = "." 

//check instant event for usb detection

    Set wmi = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set wmiEvent = wmi.ExecNotificationQuery("select * from __InstanceOperationEvent within 1 where TargetInstance ISA 'Win32_PnPEntity' and TargetInstance.Description='USB Mass Storage Device'")

//check to see if the drive is encrypted 

    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2\Security\MicrosoftVolumeEncryption") 
    Set colItems = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_EncryptableVolume",,48) 

    While True

    Case "__InstanceCreationEvent"  

    For Each objItem in colItems 

    If objItem.ProtectionStatus = 0 then

    Wscript.Echo "Unencrypted drive is detected, please encrypt drive " & objItem.DriveLetter

    else 
        end if 
    Next
    Wend

Capisco che al momento non funziona e sono molto nuovo su vbscript e wmi, quindi qualsiasi aiuto sarebbe fantastico. Ho ottenuto la sceneggiatura fino ad ora cercando su Google prima di decidere di chiedere aiuto.

Se avete altri modi per fare ciò che sto cercando di fare, sarebbe fantastico. Usiamo kace k1000 per gestire le nostre macchine, quindi devo essere in grado di inviare lo script.

Grazie


Stiamo facendo più o meno la stessa cosa ma utilizzando BitLocker e Criteri di gruppo, non sono necessari script in esecuzione. Richiede che l'unità sia crittografata prima di poter scrivere qualsiasi file su di essa: technet.microsoft.com/en-us/library/…
music2myear

questo è un modo per affrontarlo, ma la politica del gruppo AD è gestita dal nostro team aziendale con il quale non ho il diritto di sbagliare. Ecco perché sto ricorrere a script e kace k1000 per spingerlo fuori. Grazie comunque
scriptingnewb il

Ah, sì, sarebbe problematico.
music2myear il

Risposte:


0

Lo script seguente (parzialmente commentato) funziona in ambiente Windows e non posso prevedere l' interazione di kace k1000 :

option explicit
On Error GoTo 0
Dim strResult, strComputer, wmi, wmiEvent , objWMIService, objItem, colItems, objEventObject
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer _
  & "\ROOT\CIMV2\Security\MicrosoftVolumeEncryption")       ' requires elevation
Set wmi = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
' //check instant event for Logical Disk detection
Set wmiEvent = wmi.ExecNotificationQuery( _
    "select * from __InstanceOperationEvent within 1 " _
  & "where TargetInstance ISA 'Win32_LogicalDisk'")
While True
    ''  tell the script to wait until the next event of interest occurs
    Set objEventObject = wmiEvent.NextEvent()
    Select Case objEventObject.Path_.Class
        Case "__InstanceCreationEvent"
          '//check to see if the drive is encrypted 
          Set colItems = objWMIService.ExecQuery( _
              "SELECT * FROM Win32_EncryptableVolume",,48) 
          For Each objItem in colItems 
            If objItem.ProtectionStatus = 0 then
              strResult = strResult & vbNewLine & ":" & _
                objEventObject.TargetInstance.Description & _
                  ": Unencrypted drive " & objItem.DriveLetter
            End If 
          Next
        Case "__InstanceDeletionEvent"     '' merely for debugging
          strResult = strResult & vbNewLine & ":" & _
            objEventObject.TargetInstance.Description & ": An event was just deleted" 
    End Select
    If strResult <> "" Then Wscript.Echo Wscript.ScriptName & vbNewLine & strResult
    strResult = ""
 Wend

'' REMARK ''
'' //check instant event for usb detection
'' -- unsuccessful as `TargetInstance.Description` could vary for different drives
' Set wmiEvent = wmi.ExecNotificationQuery( _
'     "select * from __InstanceOperationEvent within 1 " _
'   & "where TargetInstance ISA 'Win32_PnPEntity'" _
'   & " and ( TargetInstance.Description='USB Mass Storage Device'" _
'   & "    or TargetInstance.Description='USB Flash Memory'" _ 
'   & "    or TargetInstance.Description='Disk drive')")

Ecco una spiegazione esauriente: Come posso monitorare diversi tipi di eventi con un solo script e come posso determinare quando un'unità rimovibile viene connessa


Grazie mille. Questo mi aiuta immensamente. Non sono sicuro di come non ho trovato quelle pagine quando cercavo su Google.
scriptingnewb,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.