PDA

Показать полную графическую версию : [решено] Восстановление файла Hosts или очистка от внесённых записей


BKPB
14-10-2017, 12:04
Нужен vbs(предпочтительней) или cmd для очистки ранее внесённых в hosts адресов для блокировки
Пожалуйста помогите

cameron
14-10-2017, 17:40
так как файл пустой, то смысла из него что-то удалять нет - проще перезаписать

del c:\windows\system32\drivers\etc\hosts /F /Q
@echo off > c:\windows\system32\drivers\etc\hosts

или
copy %path_to_original_hosts_file%\hosts c:\windows\system32\drivers\etc\hosts /Y

Iska
14-10-2017, 17:57
Удалять бы я не стал — сменится владелец. Просто:
>nul copy nul "%SystemRoot%\system32\drivers\etc\hosts"
или:
>nul copy "Путь к ранее сохранённому оригинальному файлу\hosts" "%SystemRoot%\system32\drivers\etc\hosts"

В старых ОС, до Vista, там ещё не был закомментирован localhost.

BKPB
14-10-2017, 19:10
del c:\windows\system32\drivers\etc\hosts /F /Q
@echo off > c:\windows\system32\drivers\etc\hosts

После этой команды файл hosts стал пустым.

Извините за вопрос.
А как выполнить эту команду: >nul copy nul "%SystemRoot\system32\drivers\etc\hosts"
это сценарий или скрипт. Пробовал как .cmd, результата нет.

Вот файл .vbs с помощью которого я вношу изменения:
Domains = Split("www.facebook.com facebook.com vkontakte.ru www.vkontakte.ru vk.com www.vk.com www.rutube.ru rutube.ru www.youtube.com youtube.com")

With CreateObject("Scripting.FileSystemObject")
Set F = .GetFile(.GetSpecialFolder(1) & "\drivers\etc\hosts")
End With : A = F.Attributes
All = F.OpenAsTextStream(1).ReadAll
If (A And 1) = 1 Then F.Attributes = A - 1 : T = 1

With New RegExp
.MultiLine = True : .IgnoreCase = True
For Each Dom In Domains
.Pattern = "^(0\.0\.0\.0|121\.0\.0\.1)[\t ]" & Replace(Dom, ".", "\.") & "\b"
If Not .Test(All) Then _
With F.OpenAsTextStream(8) .WriteLine "121.0.0.1 " & Dom : .Close : End With
Next
End With : If T Then F.Attributes = A

Может можно сделать такой же, но для отката или очистки hosts

Iska
14-10-2017, 19:25
Пробовал как .cmd, результата нет. »
Я пропустил второй символ «%». Поправил предыдущее сообщение.

Может можно сделать такой же, но для отката или очистки hosts »
BKPB, коллега cameron уже сказала, что оригинальный файл hosts — пустой (в новых ОС), за исключением комментариев. На WSH можно тупо открыть его для записи как TextStream и сразу же закрыть. Можно взять оригинальное содержимое в конкретной ОС и записывать его. Как угодно.

cameron
14-10-2017, 19:36
После этой команды файл hosts стал пустым. »
он и был пустым ;)
там всё с # начиналось.

BKPB
14-10-2017, 19:47
Теперь >nul copy nul "%SystemRoot%\system32\drivers\etc\hosts" отработал нормально

он и был пустым
там всё с # начиналось. »

Я и имел ввиду # , просто, что он может быть совершенно чистым без # я не знал (Windows 10)

BKPB
14-10-2017, 20:09
Помогите ещё, если это не слишком сложно.
Можно как нибудь конвертировать .cmd в .vbs
Суть в том, что нужно с помощью .vbs снять защиту с hosts
и после внесения изменений с помощь фрагмента .vbs
снова восстановить защиту.
У меня есть для этого два .cmd
Снимает защиту:
@echo off
cd /d "%windir%\system32\drivers"
cd etc

Call :GrantAccess hosts
attrib -R hosts
goto :eof

:GrantAccess
takeown /f "%~1"
echo y|cacls "%~1" /g %username%:f
exit /b
Восстанавливает защиту:
@echo off
cd /d "%windir%\system32\drivers"
cd etc

Call :GrantAccess hosts
attrib +R hosts
goto :eof

:GrantAccess
takeown /f "%~1"
echo y|cacls "%~1" /g %username%:f
exit /b
а мне нужно в .vbs т.к изменения вносятся с помощью .vbs
Domains = Split("www.facebook.com facebook.com vkontakte.ru www.vkontakte.ru vk.com www.vk.com www.rutube.ru rutube.ru www.youtube.com youtube.com")

With CreateObject("Scripting.FileSystemObject")
Set F = .GetFile(.GetSpecialFolder(1) & "\drivers\etc\hosts")
End With : A = F.Attributes
All = F.OpenAsTextStream(1).ReadAll
If (A And 1) = 1 Then F.Attributes = A - 1 : T = 1

With New RegExp
.MultiLine = True : .IgnoreCase = True
For Each Dom In Domains
.Pattern = "^(0\.0\.0\.0|121\.0\.0\.1)[\t ]" & Replace(Dom, ".", "\.") & "\b"
If Not .Test(All) Then _
With F.OpenAsTextStream(8) .WriteLine "121.0.0.1 " & Dom : .Close : End With
Next
End With : If T Then F.Attributes = A
поэтому хочется чтобы это было одним файлом

Iska
14-10-2017, 20:37
Я и имел ввиду # »
Это и есть комментарии, они просто пропускаются обработчиком.

У меня есть для этого два .cmd
Снимает защиту:

Восстанавливает защиту:
»
Первый снимает атрибут ReadOnly с файла, второй — устанавливает. Плюс оба сбрасывают текущего владельца и разрешения безопасности и пытаются устанавливать владельцем текущего пользователя и дать ему полные права. Никакой «защитой» там и не пахнет.

У меня под Windows 7 атрибута ReadOnly на файле нет, владельцем является «NT AUTHORITY\SYSTEM», право на изменение есть у данной учётной записи и у встроенной группы Администраторы. Категорически не вижу никакого смысла что-либо здесь трогать, особенно в том виде, как это сделано в приведённом Вами коде, ибо ничего из описанного для правки не требуется. Совсем. Как в более новых ОС, кто там владелец, какие там права — не знаю, коллеги подскажут, если что изменилось, тогда и будем смотреть.

Ответ по существу — да, сделать можно. Смысла делать — пока не вижу.

BKPB
15-10-2017, 14:04
Спасибо за помощь.
Вопрос решён.




© OSzone.net 2001-2012