Bom dia,
Criei um grupo de trabalho aqui na rede que administro chamado pendrivers aonde os membros ficariam com o uso de pen drivers bloqueado.
Isso foi feito através de uma GPO e com o script que segue abaixo:
Set wshNet = CreateObject("WScript.Network")
Set objSysInfo = CreateObject("ADSystemInfo")
Set objNetwork = CreateObject("Wscript.Network")
Set CurrentUser =_
GetObject("WinNT://dominio/" & wshNet.Username & ",user")
Dim objShell, WSHShell
Const HKEY_LOCAL_MACHINE = &H80000002
For Each grp In CurrentUser.Groups
MapDrive grp.Name
Next
Sub MapDrive(byval strGroupname)
If InStr(strGroupName, "PenDrivers") Then
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start",4 ,"REG_DWORD"
Set WSHShell = nothing
Wscript.quit
Else
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet\Services\USBStor"
oReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, _
arrValueNames, arrValueTypes
x=0
For i=0 To UBound(arrValueNames) ' verificando condição específica
If arrValueNames(i) = "Block" Then
x=x+1
End If
Next
If x=0 Then
Set wshNet = CreateObject("WScript.Network")
Set CurrentUser =_
GetObject("WinNT://dirap/" & wshNet.Username & ",user")
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start",3 ,"REG_DWORD"
Set WSHShell = Nothing
End If
End If
End Sub
A verificação da condição específica foi necessária porque algumas estações tiveram o uso de pen drivers bloqueados para todos os usuários e isso é feito quando ocorrem muitos incidentes em uma determinada estação através de um script rodado remotamente e de forma manual.
Para evitar que essas estações tenham o uso de pen drivers liberados novamente por essa GPO, durante o bloqueio manual é criado uma chave no registro dessas estações para que o script acima possa diferenciar uma estação da outra.
Abaixo está o script que utilizo para ativar ou desativar essas estações manualmente:
Dim WSHShell,FileLog,colServiceList, objService, objWMIService, objDom, soft, objShell, objFSO, WshNetwork, ObjFileAppending, ActionList, FileSysObj,objTextFile
Const OverwriteExisting = TRUE
Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = Inputbox("Digite O Nome do Computador","Desativar - Ativar USB")
If strComputer= "" then
WScript.Echo "É Necessário Digitar O Nome de um Computador - Script Finalizado"
Wscript.quit
Else
Set WshNetwork = WScript.CreateObject("WScript.Network")
FileLog = "
\\servidor\compartilhamento\"& strComputer &".txt"
Set ObjFSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
Dim Retorno
retorno=msgbox ("Clique em Sim para desativar USB ou não para ativá-la",vbyesnocancel,"Desativa USB remotamente")
Set objShell = CreateObject("WScript.Shell")
If retorno=6 then
dim Motivo
Motivo = Inputbox("digite o motivo para desativação da USB","Desativar USB")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet\Services\USBSTOR"
strValueName = "Start"
dwValue =4
oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet\Services\USBStor\"
strValueName = "Block"
arrStringValues = Array("USB Bloqueada")
oReg.SetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath, _
strValueName,arrStringValues
WriteLog " USB desabilitada na estação de trabalho "& ""& strComputer &""& " em " & now() & " pelo usuário " & WshNetwork.UserName
WriteLog "Motivo da desativação: " & ""& Motivo &""
Else
If retorno=7 then
Motivo = Inputbox("digite o motivo para ativação da USB","Ativar USB")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet\Services\USBSTOR"
strValueName = "Start"
dwValue =3
oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet\Services\USBStor\"
strStringValueName = "Block"
oReg.DeleteValue HKEY_LOCAL_MACHINE,strKeyPath,strStringValueName
WriteLog " USB habilitada na estação de trabalho "& ""& strComputer &""& " em " & now() & " pelo usuário " & WshNetwork.UserName
WriteLog "Motivo da ativação: " & ""& Motivo &""
Else
WScript.Echo "Nenhum Computador Teve As Portas USB Alteradas"
Wscript.quit
End If
End If
End If
Function WriteLog (Text)
ObjFileAppending.WriteLine Text
End Function
A principal questão é a seguinte:
Nesse script implementado via GPO, aonde os usuários membro do grupo PenDrivers tem o acesso aos pen drivers desabilitados durante o logon, eu notei um problema que tem ocorrido.
Caso o pen driver seja conectado durante o login de um usuário com acesso liberado, esse usuário faça logoff, mas com o pen driver ainda conectado e logo a seguir um usuário sem acesso faça o logon, ele continuará acessando o pen driver conectado no login do usuário anterior.
Para contornar essa situação, criei um outro script que roda no logoff de cada usuário e que ejeta os pen drivers conectados. Esse script precisa de um executável chamado devcon que achei em uma busca pela internet.
O script segue abaixo:
Set wshNet = CreateObject("WScript.Network")
Set objSysInfo = CreateObject("ADSystemInfo")
Set objNetwork = CreateObject("Wscript.Network")
strComputer = "."
Set objShell = CreateObject("WScript.Shell")
objShell.Run "
\\servidor\compartilhamento\devcon remove @usb\VID*"
Só que esse script só funciona quando o usuário que faz o logoff possui direitos administrativos na estação.
Alguém tem alguma sugestão?