Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Восстановление файла Hosts или очистка от внесённых записей (http://forum.oszone.net/showthread.php?t=330499)

BKPB 14-10-2017 12:04 2770473

Восстановление файла Hosts или очистка от внесённых записей
 
Нужен vbs(предпочтительней) или cmd для очистки ранее внесённых в hosts адресов для блокировки
Пожалуйста помогите

cameron 14-10-2017 17:40 2770548

так как файл пустой, то смысла из него что-то удалять нет - проще перезаписать

Код:

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 2770552

Удалять бы я не стал — сменится владелец. Просто:
Код:

>nul copy nul "%SystemRoot%\system32\drivers\etc\hosts"
или:
Код:

>nul copy "Путь к ранее сохранённому оригинальному файлу\hosts" "%SystemRoot%\system32\drivers\etc\hosts"
В старых ОС, до Vista, там ещё не был закомментирован localhost.

BKPB 14-10-2017 19:10 2770571

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 2770575

Цитата:

Цитата BKPB
Пробовал как .cmd, результата нет. »

Я пропустил второй символ «%». Поправил предыдущее сообщение.

Цитата:

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

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

cameron 14-10-2017 19:36 2770581

Цитата:

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

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

BKPB 14-10-2017 19:47 2770587

Теперь >nul copy nul "%SystemRoot%\system32\drivers\etc\hosts" отработал нормально

Цитата:

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

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

BKPB 14-10-2017 20:09 2770595

Помогите ещё, если это не слишком сложно.
Можно как нибудь конвертировать .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 2770597

Цитата:

Цитата BKPB
Я и имел ввиду # »

Это и есть комментарии, они просто пропускаются обработчиком.

Цитата:

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

Восстанавливает защиту:
»

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

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

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

BKPB 15-10-2017 14:04 2770731

Спасибо за помощь.
Вопрос решён.


Время: 13:05.

Время: 13:05.
© OSzone.net 2001-