Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] подключение/отключение томов TrueCrypt

Ответить
Настройки темы
VBS/WSH/JS - [решено] подключение/отключение томов TrueCrypt

Пользователь


Сообщения: 93
Благодарности: 2

Профиль | Отправить PM | Цитировать


Прошу помощи в переводе данного скрипта BAT на VBS.
Код: Выделить весь код
@echo off
	set letr=w
	set "file=w.tc"
	set "TrCt=C:\Program Files\TrueCrypt\TrueCrypt.exe"
if exist "%letr%:" goto ds
	"%TrCt%" /l%letr% /v %file% /hn /cn /mrm /q
	exit
:ds
	"%TrCt%" /d%letr% /q /s /w
	if exist "%letr%:" goto :ds
	exit
Единственным отличием хочется видеть автоматическую подстановку буквы диска (берется из имени файла) при перетаскивании нужного файла на скрипт.
Слишком много файлов набралось и иметь для каждого собственный BAT уже не целесообразно, а один для всех случаев, как BAT не получится.

Отправлено: 23:33, 24-01-2015

 
mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата pzh2393:
автоматическую подстановку буквы диска (берется из имени файла) при перетаскивании нужного файла на скрипт. »
Цитата pzh2393:
а один для всех случаев, как BAT не получится »
Почему не получится – при ваших требованиях?
Пишем батник, который ниже, и кладём ярлык к нему на рабочий стол. Нужный файл бросаем на этот ярлык.
Код: Выделить весь код
@echo off
setlocal
::Если батник запущен без параметра (например, просто щелчком по ярлыку), то завершаем его работу
	if "%1" == "" goto fin
::Иначе во временную переменную вводим путь/имя того файла, который бросили на ярлык к этому батнику
	set tempvar1=%1
::и вытаскиваем из неё букву диска, на котором лежит этот файл
	set letr=%tempvar1:~0,1%
::после чего продолжение (в которое я не вчитывался) вашего батника,
::к которому дописан выход на случай отсутствия параметра %1
	set "file=w.tc"
	set "TrCt=C:\Program Files\TrueCrypt\TrueCrypt.exe"
if exist "%letr%:" goto ds
	"%TrCt%" /l%letr% /v %file% /hn /cn /mrm /q
	exit
:ds
	"%TrCt%" /d%letr% /q /s /w
	if exist "%letr%:" goto :ds
	exit
:fin
exit

-------
Mikhail Zhilin


Последний раз редактировалось mwz, 25-01-2015 в 01:50.

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:43, 25-01-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Мой вариант в виде пакетного файла:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sContainerFile=%~1

if defined sContainerFile (
	if exist "%sContainerFile%" (
		if exist "%ProgramFiles%\TrueCrypt\TrueCrypt.exe" (
			if not exist "%~n1:\." (
				start "" "%ProgramFiles%\TrueCrypt\TrueCrypt.exe" /letter %~n1 /volume "%sContainerFile%" /history n /cache n /mountoption removable /quit
			) else (
				start "" "%ProgramFiles%\TrueCrypt\TrueCrypt.exe" /dismount %~n1 /wipecache /silent /quit
			)
		) else (
			echo Can't find [TrueCrypt.exe] in [%ProgramFiles%\TrueCrypt].
			exit /b 3
		)
	) else (
		echo Can't find TrueCrypt container file [%sContainerFile%].
		exit /b 2
	)
) else (
	echo Usage: %~nx0 ^<TrueCrypt container file^>
	exit /b 1
)

endlocal
exit /b 0

и на WSH:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strContainerFile

Dim strPath2TrueCrypt
Dim strDriveLetter


If WScript.Arguments.Count = 1 Then
	strContainerFile = WScript.Arguments.Item(0)
	
	With WScript.CreateObject("Scripting.FileSystemObject")
		If .FileExists(strContainerFile) Then
			strPath2TrueCrypt = .BuildPath(WScript.CreateObject("Shell.Application").NameSpace("shell:ProgramFiles").self.Path, "TrueCrypt\TrueCrypt.exe")
			
			If .FileExists(strPath2TrueCrypt) Then
				strDriveLetter = .GetBaseName(strContainerFile) & ":"
				
				If Not .DriveExists(strDriveLetter) Then
					WScript.CreateObject("WScript.Shell").Run """" & strPath2TrueCrypt & """ /letter " & strDriveLetter & " /volume """ & strContainerFile & """ /history n /cache n /mountoption removable /quit", 1, False
				Else
					WScript.CreateObject("WScript.Shell").Run """" & strPath2TrueCrypt & """ /dismount " & strDriveLetter & " /wipecache /silent /quit", 1, False
				End If
			Else
				WScript.Echo "Can't find [" & strPath2TrueCrypt & "]."
				WScript.Quit 3
			End If
		Else
			WScript.Echo "Can't find TrueCrypt container file [" & strContainerFile & "]."
			WScript.Quit 2
		End If
	End With
Else
	WScript.Echo "Usage: " & WScript.ScriptName & " <TrueCrypt container file>"
	WScript.Quit 1
End If

WScript.Quit 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:33, 25-01-2015 | #3


Пользователь


Сообщения: 93
Благодарности: 2

Профиль | Отправить PM | Цитировать


Большое спасибо!

Батники не пробовал, поскольку вариант с ярлыком не подходит, т.к. тома (файлы) располагаются на флешке и возможно подключение с разной буквой самой флешки.

А вот в скрипте VBS обнаружилась интересная "фича".
Если имя файла состоит больше чем с одной буквы - том монтируется под первой из них, жаль только при попытке отмонтирования выдает ошибку о том что том уже смонтирован.

Хотел бы дополнительно попросить, чтобы такое поведение осталось, но отмонтирование происходило нормально.

Отправлено: 16:10, 25-01-2015 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата pzh2393:
А вот в скрипте VBS обнаружилась интересная "фича". »
Какую логику заказывали, ту и получили. Никаких проверок на то, что базовое имя файла контейнера окажется длиннее одного символа, не делалось.

Цитата pzh2393:
жаль только при попытке отмонтирования выдает ошибку о том что том уже смонтирован. »
Это естественно — см. выше.

Цитата pzh2393:
Хотел бы дополнительно попросить, чтобы такое поведение осталось, но отмонтирование происходило нормально. »
Замените строку:
Код: Выделить весь код
strDriveLetter = .GetBaseName(strContainerFile) & ":"
на:
Код: Выделить весь код
strDriveLetter = Left(.GetBaseName(strContainerFile), 1) & ":"
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:02, 25-01-2015 | #5

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата pzh2393:
вариант с ярлыком не подходит, т.к. тома (файлы) располагаются на флешке и возможно подключение с разной буквой самой флешки »
Файлы и скрипт находятся на одной и той же флэшке? Если да – то ещё проще: небольшая модификация пакетного файла – и при его запуске (хоть двойным щелчком, хоть как) автоматом будет подставляться текущая буква флэшки, на которой лежит комплект:

Скрытый текст
Код: Выделить весь код
@echo off
setlocal
::Во временную переменную считываем букву диска/флэшки (например, H:), на котором лежит батник
	set tempvar1=%~d0
::и вытаскиваем из неё только букву
	set letr=%tempvar1:~0,1%
::после чего продолжение (в которое я не вчитывался) вашего батника,
	set "file=w.tc"
	set "TrCt=C:\Program Files\TrueCrypt\TrueCrypt.exe"
if exist "%letr%:" goto ds
	"%TrCt%" /l%letr% /v %file% /hn /cn /mrm /q
	exit
:ds
	"%TrCt%" /d%letr% /q /s /w
	if exist "%letr%:" goto :ds
	exit

-------
Mikhail Zhilin

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:09, 25-01-2015 | #6


Пользователь


Сообщения: 93
Благодарности: 2

Профиль | Отправить PM | Цитировать


Прошу не счесть за наглость, но может поможете перевести на WSH и этот пакетный скрипт?
Код: Выделить весь код
@echo off
    set letr=x
set "MYFILES=C:\Program Files\TrueCrypt\TrueCrypt.exe"
if exist "%letr%:" goto ds
    "%MYFILES%" /l%letr% /a devices /hn /cn /mts /mrm /q /w /s
        echo start Dexpot? (y/n)
        set /p varl=""
        if %varl%==y (start /b "" "%letr%:\sOft\Dexpot\Dexpot.exe")
        if %varl%==n (start /b "" "%letr%:\sOft\TotalCommander\TOTALCMD.EXE %letr% %letr%")
    exit
:ds
    taskkill.exe /fi "ImageName eq dexpot.exe"
:rp
    "%MYFILES%" /d%letr% /q /s /w
    @echo on
    if exist "%letr%:" goto rp
    exit
Поскольку подключается не контейнер, а раздел диска - по аналогии с предыдущим вариантом, букву для подключения брать из имени самого скрипта.

Последний раз редактировалось pzh2393, 31-01-2015 в 19:21.


Отправлено: 18:30, 31-01-2015 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Пробуйте (по понятным причинам — не проверялось):
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strPath2TrueCrypt
Dim strDriveLetter

Dim strPath2App


With WScript.CreateObject("Scripting.FileSystemObject")
	strPath2TrueCrypt = .BuildPath(WScript.CreateObject("Shell.Application").NameSpace("shell:ProgramFiles").self.Path, "TrueCrypt\TrueCrypt.exe")
	
	If .FileExists(strPath2TrueCrypt) Then
		strDriveLetter = Left(WScript.ScriptName, 1) & ":"
		
		If Not .DriveExists(strDriveLetter) Then
			WScript.CreateObject("WScript.Shell").Run """" & strPath2TrueCrypt & """ /letter " & strDriveLetter & " /auto devices /history n /cache n /mountoption removable /mountoption timestamp /quit", 1, True
			
			Select Case MsgBox("Yes:    start «Dexpot»" & vbLf & "No:     start «Total Commander»" & vbLf & "Cancel: nothing start", vbInformation + vbYesNoCancel, "Start application")
				Case vbYes
					strPath2App = .BuildPath(strDriveLetter, "sOft\Dexpot\Dexpot.exe")
					
					If .FileExists(strPath2App) Then
						WScript.CreateObject("WScript.Shell").Run """" & strPath2App & """", 1, False
					Else
						WScript.Echo "Can't find [" & strPath2App & "]."
						WScript.Quit 2
					End If
				Case vbNo
					strPath2App = .BuildPath(strDriveLetter, "sOft\TotalCommander\TOTALCMD.EXE")
					
					If .FileExists(strPath2App) Then
						WScript.CreateObject("WScript.Shell").Run """" & strPath2App & """", 1, False
					Else
						WScript.Echo "Can't find [" & strPath2App & "]."
						WScript.Quit 2
					End If
				Case vbCancel
					' Nothing to do
			End Select
		Else
			WScript.CreateObject("WScript.Shell").Run """" & strPath2TrueCrypt & """ /dismount " & strDriveLetter & " /wipecache /silent /quit", 1, True
		End If
	Else
		WScript.Echo "Can't find [" & strPath2TrueCrypt & "]."
		WScript.Quit 1
	End If
End With

WScript.Quit 0

Снятие процесса приложения виртуальных рабочих столов делать не стал. Проверку на то, что первый символ скрипта — буква, тоже не делал.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:33, 31-01-2015 | #8


Пользователь


Сообщения: 93
Благодарности: 2

Профиль | Отправить PM | Цитировать


не пойму в чем дело, но что-то явно не так...
вместо окна TrueCrypt с предложением ввести пароль, появляется окно с сообщением о том, что пароль не подошел или том не найден.
по идее, для подстановки пароля нужен ключ "/p", а мы его не используем, следовательно такого сообщения и не должны получать.

Отправлено: 15:56, 01-02-2015 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


pzh2393, Вы меня таки вынудили пожертвовать разделом для проверки .

У меня появляется:
Скрытый текст

Скрытый текст

Скрытый текст

При повторном запуске скрипта — диск отмонтируется (если, конечно, не был заблокирован каким-либо приложением).

Отправлено: 23:26, 01-02-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] подключение/отключение томов TrueCrypt

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Отключение и подключение интернет соединения drmodjo Скриптовые языки администрирования Windows 23 08-06-2018 14:05
HDD - Горячее подключение/отключение жёстких дисков SATA (Hot plug) BombJack Накопители (SSD, HDD, USB Flash) 9 31-10-2012 06:38
Любой язык - [решено] Автоматическое подключение/отключение интернет permas Скриптовые языки администрирования Windows 15 28-10-2011 02:14
CMD/BAT - Автоматическое подключение/отключение сетевого подключения DaFTSPiRiT Скриптовые языки администрирования Windows 7 21-08-2010 20:02
Подключение/Отключение локальной сети из коммандной строки Blast Microsoft Windows NT/2000/2003 9 29-10-2004 09:41




 
Переход