Используйте приведенный ниже сценарий в Configuration Manager 2007 как часть последовательности задач для автоматизации настройки фильтров записи в Windows Embedded, когда Configuration Manager 2007 используется для установки пакетов и обновлений программного обеспечения на клиентские компьютеры. Сведения об использовании этого сценария см. в разделе Управление фильтрами записи в Windows Embedded при помощи Configuration Manager 2007.

Важно!
Данный сценарий протестирован на компьютерах с Windows XP Embedded. Перед использованием этого сценария в других операционных системах его необходимо тщательно протестировать.

Пример сценария

  Скопировать код
Option Explicit On Error Resume Next '#-------------------------------------------------------------------------------------------- '# '#  Этот сценарий VBScript используется для разрешения установки ПО и обновления на клиенте Windows Embedded '#, использующем защиту диска EWF или FBWF. '# '#  Полную документацию по использованию этого сценария VBScript см. в отдельном документе. '# '#--------------------------------------------------------------------------------------------

Dim gWshShell										'WScript.Shell object Dim strProtectedDrive : strProtectedDrive = null	 'Отображается диск, защищенный EWF или FBWF, Dim gSystemDrive									 'Содержит системный диск (например диск C:). Dim strDisableCommand : strDisableCommand = null	 'Команда EWF или FBWF для отключения фильтра записи. Dim strEnableCommand  : strEnableCommand = null	 'Команда EWF или FBWF для включения фильтра записи. Dim bIsWFEnabled : bIsWFEnabled = false			'Включение/выключение логической переменной для фильтра записи. Dim bIsEWFInstalled  : bIsEWFInstalled = false	 'Логическая переменная для EWF установлена. Dim bIsFBWFInstalled : bIsFBWFInstalled = false	'Логическая переменная для FBWF установлена. Dim strCommand : strCommand = null				 'Строка размещения аргументов командной строки.

Set gWshShell = WScript.CreateObject("WScript.Shell")	 '# Создание объекта оболочки.

CheckWindowsEmbedded			'# Проверка того, что сценарий выполняется под управлением Windows Embedded.

' Проверка наличия переданного аргумента командной строки, обработка. If WScript.Arguments.Count = 1 Then strCommand = UCase(WScript.Arguments.Item(0)) Select Case strCommand Case "DISABLE" CheckWhichWF DisableWF Case "ENABLE" CheckWhichWF EnableWF Case Else WScript.Quit (0) End Select

Else WScript.Echo "Недопустимая командная строка: отсутствует параметр действия" WScript.Echo "USAGE:" WScript.Echo "EWF-FBWF.vbs [Disable|Enable]" (0) WScript.Quit End If


WScript.Quit (0)


'-------------------------------------------------------------------------------------------- '   CheckWindowsEmbedded ' '   Проверка того, что сценарий запущен под управлением Windows Embedded; если нет, то выход. '	 Если нет ошибок при поиске ключа, чтение значений строк из ключа. '	 Если строка "EmbeddedNT" найдена, это XPe. '	 В прочих случаях bIsXPe остается ложным, что приводит к выходу. '-------------------------------------------------------------------------------------------- Sub CheckWindowsEmbedded() Dim arrValues, bIsXPe bIsXPe = FALSE

	arrValues = gWshShell.RegRead(XPE_REG_KEY)

	If Err.Number = 0 then For Each strValue in arrValues if strValue = "EmbeddedNT" then bIsXPe = True end if Next End If Err.Clear
   
	if not bIsXPe then WScript.Quit (0) end if End Sub


'-------------------------------------------------------------------------------------------- '  CheckWhichWF ' '  Определение того, какой фильтр записи (EWF или FBWF) используется в системе, и задание '  переменной для использования в других разделах этого сценария. Поскольку в системе ' могут использоваться оба фильтра (EWF и FBWF)'  (однако защита системы не может контролироваться обоими фильтрами), простой проверки'  наличия исполняемого файла недостаточно. Без использования отдельной программы C++,'  обращающейся к интерфейсу API EWF или FBWF, единственным способом проверить, какой фильтр используется для защиты '  диска, является использование вывода программы в командной строке для проверки, какой фильтр ' активен и какой диск им защищен. ' '-------------------------------------------------------------------------------------------- Sub CheckWhichWF Dim oFSO, strFile, strPath, wsx Dim output, strLine Dim Status Set oFSO = CreateObject("Scripting.FileSystemObject") 
	
	strPath = gWshShell.ExpandEnvironmentStrings("%SystemRoot%") If IsEmpty(strPath) Then WScript.Quit (1) Else '============================================ '					EWF '============================================ 'Проверка наличия EWFMGR.EXE в системе. strFile = strPath + "\system32\EWFMGR.EXE" If oFSO.FileExists(strFile) Then 'Запуск EWF Manager для проверки того, защищен ли диск. set wsx = gWshShell.Exec("%comspec% /c " & strFile & " -all") Do Status = wsx.Status
		
				' Разбор вывода команды для проверки того, включен ли EWF ' и какой диск защищен (если есть защищенные диски). Обычно результат выполнения ' этой команды выглядит следующим образом: ' '   Protected Volume Configuration '	 Type			RAM '	 State		 DISABLED '	 Boot Command	ENABLE '	 Param1		0 '	 Param2		0 '	 Persistent Data "" '	 Volume ID	 A7 FA CA 34 00 7E 00 00 00 00 00 00 00 00 00 00 '	 Device Name	 "\Device\HarddiskVolume1" [C:] '	 Max Levels	1 '	 Clump Size	512 '	 Current Level   N/A ' output = split(wsx.Stdout.ReadAll(), vbNewLine) For Each strLine in output if InStr(strLine, "State") then ' Если выводом команды является текст, похожий на приведенный выше, это значит, что ' EWF установлен. Теперь проверим, включен он или выключен. bIsEWFInstalled = True if InStr(strLine, "DISABLED") then bIsWFEnabled = false elseif InStr(strLine, "ENABLED") then bIsWfEnabled = true end if End If
				
					' Проверка того, какой диск защищен, и получение буквы диска, ' так как эта буква требуется для командной строки. if (bIsEWFInstalled) AND (InStr(strLine, "Device Name")) Then strProtectedDrive = left(right(strLine, 3), 2) 'Задание стандартных команд, используемых в других частях сценария. strEnableCommand = strFile & " " & strProtectedDrive & " -enable" strDisableCommand = strFile & " " & strProtectedDrive & " -disable" End If Next

				If Status <> 0 Then Exit Do WScript.Sleep 10

			Loop End if
	
		'============================================ '					FBWF '============================================ 'Если включен EWF, FBWF не может быть также включен, поэтому если EWF включен, проверка FBWF пропускается. If (Not bIsWFEnabled) Then Dim bCurrentState : bCurrentState = false Dim intLoopNum : intLoopNum = 0

			'Проверка наличия FBWFMGR.EXE в системе . strFile = strPath + "\system32\FBWFMGR.EXE" If oFSO.FileExists(strFile) Then 'Запуск FBWF Manager для проверки того, какой диск защищен. set wsx = gWshShell.Exec("%comspec% /c " & strFile & " /displayconfig") Do Status = wsx.Status
				
					' Разбор вывода команды для проверки того, включен ли EWF ' и какой диск защищен (если есть защищенные диски). Обычно результат выполнения ' этой команды выглядит следующим образом: ' '   Файловая конфигурация фильтра записи для текущего сеанса: '	 состояние фильтра: выключен. ' '   Файловая конфигурация фильтра записи для следующего сеанса: '	 состояние фильтра: включен. '	 состояние сжатия данных кэша оверлея: выключено. '	 пороговое значение кэша оверлея: 64 МБ. '	 предварительное выделение кэша оверлея: включено. '	 список защищенных томов: '	 \Device\HarddiskVolume1 '	 список операций записи для каждого защищенного тома: '	 \Device\HarddiskVolume1: (нет) ' output = split(wsx.Stdout.ReadAll(), vbNewLine) For Each strLine in output if InStr(strLine, "текущий сеанс:") then ' Если выводом команды является текст, аналогичный приведенному выше, ' EWF установлен. Проверка того, включен он или выключен. bIsFBWFInstalled = True
						
						 ' Получение данных из текущего сеанса (не следующего сеанса). bCurrentState = true elseif InStr(strLine, "следующий сеанс:") then bCurrentState = false bNextState = true end if
				
						' Если Current State / filter state = enabled, FBWF включен. if (bCurrentState) AND (InStr(strLine, "состояние фильтра:")) then if (InStr(strLine, "включено")) then bIsWFEnabled = true else bIsWFEnabled = false end if Exit For end if Next If Status <> 0 Then Exit Do WScript.Sleep 10 Loop 'Задание стандартных команд, используемых в других частях сценария. if bIsFBWFInstalled then strEnableCommand = strFile & " /enable" strDisableCommand = strFile & " /disable" End if End if End if End If End Sub


'-------------------------------------------------------------------------------------------- '   DisableWF ' '   Эта процедура предназначена для отключения фильтра записи на диске (EWF или FBWF), чтобы можно было '   записать обновления на устройство хранения. ' '   Если защита диска уже отключена, эта процедура не выполняет никаких действий, только возврат. В противном случае '   она отключает EWF и перезагружает компьютер. ' '-------------------------------------------------------------------------------------------- Sub DisableWF Dim oExec

		'Если фильтр записи включен, его нужно отключить. if bIsWFEnabled then Set oExec = gWshShell.Exec(strDisableCommand) 'Ожидание завершения выполнения предыдущей команды. Do While oExec.Status = 0 WScript.Sleep 100 Loop
	
			'Перезагрузка компьютера для завершения операции. RebootEx 0 End If End Sub



'-------------------------------------------------------------------------------------------- '   EnableWF ' '   Эта процедура предназначена для включения фильтра записи диска (EWF или FBWF). ' '   Процедура включает EWF и перезагружает компьютер через две минуты, чтобы '   последовательность задач могла завершиться. ' '-------------------------------------------------------------------------------------------- Sub EnableWF Dim oExec

		' Если фильтр записи установлен, его нужно включить. if (bIsEWFInstalled OR bIsFBWFInstalled) then Set oExec = gWshShell.Exec(strEnableCommand) 'Ожидание завершения выполнения предыдущей команды. Do While oExec.Status = 0
		
				WScript.Sleep 100 Loop
	
			'Перезагрузка компьютера для завершения операции. RebootEx 120 End If End Sub


'-------------------------------------------------------------------------------------------- '	RebootEx ' '   Эта процедура выполняет перезагрузку системы. '-------------------------------------------------------------------------------------------- Sub RebootEx(intSeconds)

	 Dim strRebootCommandLine

	 strRebootCommandLine = "shutdown.exe -r -t " & intSeconds
	 
	Set oExec = gWshShell.Exec(strRebootCommandLine)

	Do While oExec.Status = 0 WScript.Sleep 100 Loop End Sub

См. также