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

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

James Marsh 02-12-2010 23:00 1557060

Правка файла hosts c правами администратора
 
Ситуация.

Нужно на 63 компах в файл hosts дописать сайт интрасети. Как вызвать консоль с правами администратора понятно. А как все впихнуть в один cmd?

1й кусок:
Код:

runas /profile /user:SMCMD\time_adm 12345 cmd
2й кусок:
Код:

echo 192.168.2.252 smcmd.net >> c:\windows\system32\drivers\etc\hosts
Заранее спасибо.

Busla 03-12-2010 20:27 1557706

напиши между кусками /k

для справки:
Код:

cmd /?

NiOl 06-12-2010 23:36 1559886

Цитата:

Цитата James Marsh
Нужно на 63 компах в файл hosts дописать сайт интрасети. Как вызвать консоль с правами администратора понятно. А как все впихнуть в один cmd? »

1. Ну лично мне, к превеликому сожалению, непонятно как запустить консоль с правами админа, указывая пароль через скрипт (да и не безопасно это).

2. Предполагаю, что команду запуска "RunAs" Вы подправите, так же не забудте подправить содержимое переменной "AddText", ну и на выходе имеете рядом со скриптом текстовик со списком компов, где скрипт попытался внести корекции.

3. Скрипт проверяет на наличие в файле "hosts" добавляемой строки (чтобы не добавлять их по десять раз), но при этом делает весьма посредственное сравнение и замена пробела на табулятор или на несколько пробелов приведут к тому, что строка найдена не будет и заново добавится, но уже с другими разделителями.

4. Список компов берется перебором всех IP имеющихся на компе подсетей.

Код:

@Echo off
if "%1"=="proceed" goto :Proceed
runas /profile /user:SMCMD\time_adm 12345 ""%ComSpec%" /c "%~0" proceed"
exit

:Proceed
setLocal EnableExtensions

rem ===============================
set AddText=192.168.2.252 smcmd.net
rem ===============================


set LAN=0&set Mask=0&set Addr=0&set Max=0
set tmp="%TEMP%\%~n0%random%%time:~-2%.tmp"

rem Ищем подсети:
(for /f "tokens=1,2,4" %%A in ('route print^|findstr /rc:"^ "^|findstr /vc:" 0.0.0.0" /c:"255.255.255.255" /c:"240.0.0.0" /c:"127.0.0.1"') do echo %%A %%B %%C)>%tmp%
for /f "tokens=1-3" %%A in ('findstr /rc:"[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\ [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\ [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" %tmp%') do call :ChkIP %%A %%B %%C
del %tmp%
exit

rem Проверяем найденные адреса и пингуем подсети (ищем компы)
:ChkIP
set LAN=%1
set Mask=%2
set Addr=%3
call :AddrStr2Bin LAN %LAN:.= %
call :AddrStr2Bin Mask %Mask:.= %
call :AddrStr2Bin Addr %Addr:.= %
set /a "A=Addr & Mask"
if not "%A%"=="%LAN%" exit /b
rem echo %LAN% %Mask%
set /a "Max=(Mask^-1)-1"

for /l %%A in (1,1,%Max%) do call :Ping %%A
exit /b

rem Пингуем комп, при этом на пинг он может не отвечать, но его MAC появится в Arp-таблице
:Ping
set /a Addr=%LAN%+%1
call :AddrBin2Str Addr %Addr%
title Look for %Addr%
arp -d
ping -n 1 -w 100 %Addr%>nul 2>nul
for /f "tokens=1 delims=" %%R in ('arp -a %Addr%^|findstr /c:"%Addr%"^|findstr /vc:"00-00-00-00-00-00"') do call :ChkPC
exit /b

rem Пытаемся добраться до файла "hosts" на найденном ресурсе, если он есть - добавляем строку %AddText%
:ChkPC
pushd "\\%Addr%\ADMIN$\system32\drivers\etc\"||exit /b
if exist hosts for /f "tokens=2 delims=:" %%C in ('find /c "%AddText%" hosts') do if /i %%C equ 0 (
echo %AddText%>>hosts
echo Proceed %Addr%>>"%~dpn0.txt"
)
popd
exit /b

:AddrStr2Bin
set AddrStr2BinV=%1
set %AddrStr2BinV%=0
:AddrStr2Bin1
shift
if "%1"=="" exit /b
set /a "%AddrStr2BinV%=(%AddrStr2BinV%<<8)+%1"
goto :AddrStr2Bin1

:AddrBin2Str
set AddrBin2StrV=%1
set /a "AddrBin2StrV4=%2&255,AddrBin2StrV3=(%2>>8)&255,AddrBin2StrV2=(%2>>16)&255,AddrBin2StrV1=(%2>>24)&255"
set %AddrBin2StrV%=%AddrBin2StrV1%.%AddrBin2StrV2%.%AddrBin2StrV3%.%AddrBin2StrV4%
exit /b



Время: 14:30.

Время: 14:30.
© OSzone.net 2001-