daniel61
Goto Top

VBScript einer gewissen Partition zuweisen )

Hi hallo,

ich habe eine Frage. Ich muss auf verschiedenen Notebooks den Bitlockerstatus abfragen. Bei den meisten ist die C Partition verschlüsselt (ist aber auch nicht 100%), die D Partition ist in der Regel unverschlüsselt. Um rauszufinden bei welchen Maschinen das der Fall ist muss ich auf jedenfall auf beide Partitionen prüfen.

Ich habe das bisher so realsiert: WMI Abfrage auf den Verschlüsselungsgrad, prüfe ob verschlüsselungsgrad < 100, dann schreib rechnername + laufwerk in eine txt und lege sie an ort xyz ab.

Das funktioniert soweit auch, allerdings hab ich bisher keine Ahnung, wie ich das jetzt für beide Partition hinkriege.
Die WMI Ausgabe wird einfach für beide Partitionen durchgeführt, allerdings nicht einzelnd deklariert. Wenn ich dem Script dann sage prüfe bitte ob die Verschlüsselung vorhanden ist, schnappt er sich nur den zuletzt geprüften Laufwerksbuchstaben.

C überspringt er dann logischerweise. Ich müsste es also irgendwie hinbekommen, dass die Abfrage 1x für C und 1x für D ausgeführt wird ... und da komm ich aktuell leider nicht weiter face-sad das was ich habe, poste ich mal unten, hat jmd ne Idee ??


'Hinweis: Script benötigt Administratorrechte!


strComputer = "."
Const pro = 100 'Fester Wert für maximalen Verschlüsselungsgrad
Dim fso, MyFile


Set wshShell = WScript.CreateObject ("Wscript.Shell")
strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2\Security\MicrosoftVolumeEncryption")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_EncryptableVolume",,48)


For Each objItem in colItems

protection= ProtectionStatus 'Aktuellen Verschlüsseungsgrad auslesen
Next


Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2\Security\MicrosoftVolumeEncryption")
Set strLW = objWMIService.ExecQuery( _
"SELECT * FROM Win32_EncryptableVolume",,48)
For Each objItem in strLW
strLW = objItem.DriveLetter 'Laufwerksbuchstaben auslesen


if protection < pro then 'Prüfung aktueller Status gegen maximalen Verschlüsselungswert


Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("\\mgmt\Verteiler\log\" &strComputerName & ".txt", true) 'Dateiname besteht aus Computernamen, richtigen Pfad angeben!
MyFile.WriteLine ("Das Laufwerk " &strLW & " auf " &strComputername & " ist nicht verschluesselt.") 'schreibt Laufwerk und Maschinenname in Datei
MyFile.Close
end if


next

Content-Key: 193865

Url: https://administrator.de/contentid/193865

Printed on: May 5, 2024 at 00:05 o'clock

Member: rubberman
rubberman Nov 07, 2012 at 20:18:25 (UTC)
Goto Top
Hallo daniel61, willkommen im Forum.

Da du die Textdatei innerhalb der For Each Schleife immer wieder neu erstellst bzw überschreibst, kannst du nur jeweils den letzten Wert darin finden.
Ergo:
Das Instanziieren des fso Objekts und das Öffnen der Datei vor vor die Schleife setzen, das Schließen der Datei dahinter.

Grüße
rubberman
Member: daniel61
daniel61 Nov 08, 2012 updated at 11:50:09 (UTC)
Goto Top
hi,

danke für deine Antwort. Auf den Trichter kam ich gestern auch noch ;) Ich hab es dann erstmal so gelöst, dass er 2 textdateien schreibt, wenn die if bedingung greift. Das hatte soweit auch funktioniert.

Nur fiel mir irgendwann ein, dass ich der funktion ja das Laufwerk richtig mitgeben muss. Also habe ich folgendes gemacht:

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2\Security\MicrosoftVolumeEncryption")
Set strLW1 = objWMIService.ExecQuery( _
"SELECT * FROM Win32_EncryptableVolume WHERE DriveLetter = 'C:'",,48)
For Each objItem in strLW1
strLW1 = objItem.DriveLetter 'Laufwerksbuchstaben auslesen


dann den Verschlüsselungsstatus geprüft, in eine Variable geschrieben, mit If then behandelt und dann ggf. textdatei.

Das funktionierte auch gut, zumindest auf meinem PC. Wenn ich probehalber die If Bedingung nicht erfüllt hab (wert festgelegt) hat das Script auch richtig reagiert und keine Textdatei erstellt (da Verschlüsselung vorhanden).

Der Test auf einem komplett verschlüsseltem Notebook hat dann leider nicht funktioniert. Er hat jede Partition als nicht verschlüsselt ausgegeben, obwohl diese definitiv verschlüsselt sind. hab auch nochmal geschaut, was mir eine WMI Abfrage ausgibt ... analog dazu hab ich ja dasselbe in meinem Script aber er macht es nicht .... ich häng mal das komplette Beispiel an für Laufwerk C:

strComputer = "."
Const pro = 1 'Fester Wert
Dim fso, MyFile


' Computernamen auslesen
'________________________________________________________________________________
Set wshShell = WScript.CreateObject ("Wscript.Shell")
strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
'________________________________________________________________________________


' Operation 1: Lese Verschlüsselungsstatus aus C aus
'____________________________________________________________________________________________________________
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2\Security\MicrosoftVolumeEncryption")
Set strLW1 = objWMIService.ExecQuery( _
"SELECT * FROM Win32_EncryptableVolume WHERE DriveLetter = 'C:'",,48)
For Each objItem in strLW1
strLW1 = objItem.DriveLetter 'Laufwerksbuchstaben auslesen
Next

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2\Security\MicrosoftVolumeEncryption")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_EncryptableVolume",,48)
For Each objItem in colItems
Protection1=objItem.ProtectionStatus 'Aktuellen Verschlüsseungsgrad auslesen

if protection1 <> pro then 'Prüfung aktueller Status gegen maximalen Verschlüsselungswert

Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("\\mgmt\Verteiler\log\" &strComputerName&"_P1" &".txt", true) 'Dateiname besteht aus Computernamen, richtigen Pfad angeben!
MyFile.WriteLine ("Das Laufwerk " &strLW1 & " auf " &strComputername & " ist nicht verschluesselt.") 'schreibt Laufwerk und Maschinenname in Datei
MyFile.Close
end if
Next


im obigen Bsp. habe ich die Konstante "pro" auf 100 gesetzt, weil ich irgendwie auf den Trichter kam, dass der WMI Filter auch 100 ausgibt, keine Ahnung wie ich darauf kam, is auch nich so schlimm ;) Der Filter liest 0 (=nicht verschlüsselt), 1(=verschlüsselt) und 2 (=kann er nicht drauf zugreifen, zB anderes OS dass ebenfalls verschlüsselt ist) aus.

Also prüfte ich mit <> auf 1 und dann solle er die txt schreiben ... er liest falsch aus .... wieso ??


Update:

Ich Blödi hab übersehen, dass ich mir die Abfrage auf das Laufwerk sowieso sparen kann. Ich hab das jetzt erstmal so gemacht:

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2\Security\MicrosoftVolumeEncryption")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_EncryptableVolume WHERE DriveLetter = 'C:'",,48)
For Each objItem in colItems
pro1=objItem.ProtectionStatus 'Aktuellen Verschlüsseungsgrad auslesen
strLW1=objItem.DriveLetter


if pro1 <> pro then 'Prüfung aktueller Status gegen Verschluesselungswert 1

Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("\\mgmt\Verteiler\log\" &strComputerName&"_P1" &".txt", true) 'Dateiname besteht aus Computernamen, richtigen Pfad angeben!
MyFile.WriteLine ("Das Laufwerk " &strLW1 & " auf " &strComputername & " ist nicht verschluesselt.") 'schreibt Laufwerk und Maschinenname in Datei
MyFile.WriteLine ("Verschluesselungswert: " &pro1)
MyFile.Close
end if
Next


In der Theorie klappt das auch ! Ich hab nur heute leider kein Bitlocker verschlüsseltes Notebook hier um das zu testen ... aber ich glaub das dürfte es gewesen sein;)