Показаны сообщения с ярлыком scripts. Показать все сообщения
Показаны сообщения с ярлыком scripts. Показать все сообщения
суббота, 26 октября 2013 г.

Windows 2003 Time Synchronization

В одной из организаций стоял выделенный сервер 1С с отключенным авто-обновлением, брэндмауэром, неправильно проинициализированным рейдом, невероятно замусоренный, со “сдохшей” батарейкой на системной плате, плохо работающими драйверами сетевой карты и печати, огромным количеством ошибок и предупреждений в журналах событий - работы там было “непочатый край”. Как обычно, делать пришлось не останавливая работу организации.

По этому серверу можно было бы написать много заметок…  Т.к. у меня в блоге была статья по синхронизации времени в локальной сети на основе рабочей группы - Date Time In My Network Синхронизация времени компьютеров сети, то подумал, что описание будет более полным, если добавить настройку времени для Windows 2003.

Попытка на этом сервере выполнить обычный набор  команд настройки sntp сервера и обновить текущее время успехом не увенчались, сервер сообщал об ошибке.

net time /querysntp
net time /setsntp:"ntp.time.in.ua"
net stop w32time
net start w32time

Оказалось все просто – служба времени была не сконфигурирована.

Конфигурируем службу времени Windows 2003:

w32tm /config /manualpeerlist:ntp.time.in.ua /syncfromflags:manual /reliable:yes /update

С этого момента команды net time начинают отрабатываться нормально.

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

w32tm /resync /rediscover

Или остановкой-запуском службы w32time, как в первом примере этой заметки

Мой рабочий батник выглядит так:

	@echo off
	cls
::	запускать от Администратора
rem	net time /querysntp
rem	net time /setsntp:"ntp.time.in.ua"
rem	net stop w32time
rem	net start w32time
	w32tm /config /manualpeerlist:ntp.time.in.ua /syncfromflags:manual /reliable:yes /update
::	после выполнения вышеприведенной команды, w2k3 стала нормально реагировать на все
::	команды net time
	w32tm /resync /rediscover
	echo.
	pause
пятница, 28 сентября 2012 г.

Пропинговать подсеть или IP диапазон

По сути эта заметка продолжение статьи Axis P1344 Настройка IP-адреса при помощи ARP / Ping.

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

Этот же простейший подход может быть использован и в иных случаях.

Итак, посещая первый раз площадку потенциального клиента (партнера) по трансляции, уже без удивления узнаю, что админа нет. Был знакомый, друг, “недавно уволился”, “просто пропал”, “у нас удаленная поддержка была, но сейчас ее нет” и т.д и т.п. В этом случае сразу необходимо осмотреть их главный кабельный ввод и состояние концентраторов (свичей, хабов, маршрутизаторов) в сети. С большой долей вероятности Вас ожидают “удивительные открытия”.

серверный шкаф благотворительного фонда Прокаевой кабельный ввод компании Исток медиаконвертер и Quidway S2300 switch клуба Prime

Следующим шагом необходимо попросить выполнить простейшую диагностику их сети с не менее, чем 2-х рабочих станций. Вообщем-то здесь тоже ничего нового я не скажу, могу лишь обратить внимание на несколько моментов, при этом оценку состояния их канала с площадки к провайдеру, пока опускаю, на это необходима отдельная заметка (статья).

С большой долей вероятности на рабочих станциях (компьютерах), диагностику с которых Вам разрешат выполнить, будет стоять WindowsXP “затвиканная до смерти”, с отключенным автообновлением и брэндмауэром, входящая в состав рабочей группы и пользователем работающим с правами локального администратора, поэтому дальнейшее изложение касается именно Windows XP SP3 ru.

Собственно задача:

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

Для этого – просим сопровождающего Вас представителя компании включить по возможности все компьютеры, принтеры, точки доступа, кассовые аппараты и т.д.  их клубной сети. С 2-х (по возможности более) рабочих станций в окне командной строки выполнить и записать на листочек результат вывода нескольких команд:

  • ipconfig
  • route print
  • netsh inter ip show address
  • netsh inter ipv6 show address
  • net view

Почему именно этих? Конечно можно установить хорошую утилиту диагностики и получить полную информацию о сети. Просто использование встроенных команд операционной системы исключит ваше вмешательство в работу их  компьютеров и исключит недоразумения вида “а он там что-то настраивал”

Последней командой необходимо увидеть все MAC адреса подсети, а вместе с ними придет понимание “сколько и каких устройств в этой подсети”, т.е просканировать подсеть. Почему недостаточно просто пропинговать диапазон адресов подсети? Ответ прост – не все устройства ответят на ping, но при попытке пингования устройства по IP адресу MAC адрес сетевой карты попадет в локальный arp кэш рабочей станции. Его мы можем затем вывести командой arp –a. К сожалению MAC адреса в локальном кэше хранятся не более 1-2-х минут (если они не прописаны статически).

Итак, последней командой вводим:

@echo off & cls & for /l %i in (1,1,254) do ping -n 1 -w 400 -l 1 192.168.1.%i | arp -a 192.168.1.%i | findstr динам >> file.txt & echo 192.168.1.%i

В приведенном примере выше предполагается, что сеть 192.168.1.0 mask 255.255.255.0 (В вашем случае это могут быть иные значения).

Этой командой мы пингуем все адреса (сканируем подсеть) в диапазоне 192.168.1.1 по 192.168.1.254, после каждого ping-а выводим локальный arp кэш для каждого пропигованного адреса в файл file.txt и выводим в окно консоли текущий пингуемый адрес. Команда выполняется чуть более 1-й минуты. Открыв полученный файл, например Блокнотом Windows или выполнив -

type file.txt

в окне консоли, увидим все IP и MAC адреса подсети.

Вероятнее всего у Вас теперь будет совершенно достаточно информации для правильного конфигурирования видеокамеры.

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

Чтобы ускорить заполнение arp кэша в командном файле (батнике) выполняется “залп пингов” (каждый новый запуск команды ping не дожидается ответа предыдущей). Кроме того адрес подсети для сканирования выбирается автоматически и исходит из предположения, что это будет сеть вида 192.168.x.x/24 (Это не всегда бывает так, поэтому подкорректируйте батник при необходимости).

Батник неплохо документирован и может быть легко модифицирован Вами под собственные нужды. Скачать его можно по этой ссылке - Простой сканер подсети встроенными средствами Windows.

Если Вам повезло и Вы столкнулись со стабильно работающей сетью на основе рабочей группы, то еще простейшие командные файлы для сканирования подсети можете посмотреть на странице net view ping Пропинговать сетевое окружение. Для их корректной работы необходимо правильно функционирующая служба браузинга на рабочих станциях подсети.

суббота, 28 мая 2011 г.

net view ping Пропинговать сетевое окружение

Бывает необходимо быстро просмотреть “сетевое окружение” с какими-то заданными параметрами и иногда сохранить отчет в файл или выполнить какие-то действия над компьютерами доступными в “Сетевом окружении”. Два скрипта ниже, показывают простейшие примеры работы, модифицируйте их под свои нужды, при необходимости.

 

net-view-ping.cmd

::  если выдернуть кабель из сетевой карты, пакетник не работает
::  у команды delims=\\ " наличие пробела после двух обратных
::  бэкслэшей - обязательно (задает разделители, для правильного
::  извлечения имен компьютеров, для послед передачи команде ping
  @echo off
  cls
  echo.
  echo проверяю доступность компьютеров
  echo.
  echo займет некоторое время, если часть станций выключена
  echo но masterbrowser еще не обновил списки 
  echo.
  echo.
  del 1.txt 2>nul
  net view | for /F "tokens=1 delims=\\ " %%c in ('@find "\\"') do @(
  ping -n 1 %%c | Find "TTL">NUL && Echo  ON  - %%c >>1.txt || Echo  OFF  - %%c>>1.txt
  )
  echo.
  echo.
  type 1.txt
  pause>>nul
  del /q 1.txt






net view-ip-ru.cmd

@ECHO OFF
cls
echo.
echo.
:: Выводит список компов в сети в виде Имя - Адрес - Доступные шары
:: Если имя share-ресурса состоит из двух и более слов, отображения нет.
:: Повторный запуск производить через 10-15сек, иначе сбоит.
FOR /F "tokens=1 delims=\ " %%n IN ('net view^|FIND "\\"') DO (
  FOR /F "tokens=2 delims=[]" %%i IN ('ping -a -n 1 -w 0 %%n^|FIND "["') DO (
    ECHO %%i  %%n
    REM ~ NET VIEW \\%%n|FIND "       "
    FOR /F "tokens=1,2,3,4 delims= " %%a IN ('net view \\%%n^|FIND "       "') DO IF "%%b"=="Диск" (ECHO               %%b: \\%%n\%%a) ELSE IF "%%b"=="Печать" (ECHO               %%b: \\%%n\%%a)
  )
)
echo.
echo.
echo Сканирование подсети завершено
pause >nul
пятница, 27 мая 2011 г.

list printer drivers перечислить принтеры установленные в системе

После перемещения системных блоков компьютеров или соответственно печатающих устройств, да и просто тестовых инсталляций-деинсталляций в системе остаются неиспользуемые драйвера принтеров. Удалить принтер, используя оснастку “Принтеры и факсы” недостаточно. Если, спустя продолжительное время, потребовалась вновь установка (возможно и версия драйвера к этому времени поновее и порт может быть иным), автоматически “подхватится” драйвер имеющийся в системе. Временами необходимо избежать этой ситуации и выполнить полную новую инсталляцию драйвера. Это несложно сделать с помощью prndrvr.vbs, как правило, он находится в папке WINDOWS\system32\. Скрипт имеет хорошую справку и позволяет просматривать и управлять драйверами принтеров в системе.

Его можно использовать и для удаленного просмотра-удаления принтеров. Особенностью приводимого ниже скрипта - предварительное отключение firewall рабочей станции (в своих локальных сетях их отключаю только для выполнения административных функций)

listprinterdrivers.cmd

  @echo off
  cls
  if "%~1"=="" goto HELP
  if "%~1"=="?" goto HELP
  if "%~1"=="/?" goto HELP
  if "%~1"=="-?" goto HELP
::  считываю букву диска, которую система присвоила Flash-disk,
::  с него запускаются эти командные файлы и на нем в каталоге
::  х:\tools лежат вспомогательные программы,
::  и добавляю к переменной %PATH% путь к этим программам
  set path=%~d0/tools;%path%
::  передать параметром имя рабочей станции
  psexec \\%1 netsh firewall set opmode mode=disable
  cscript C:\WINDOWS\system32\prndrvr.vbs -l -s %1
::  удалить не используемые принтера
rem  cscript C:\WINDOWS\system32\prndrvr.vbs -x -s %1
  psexec \\%1 netsh firewall set opmode mode=enable
  echo.
  echo.
  pause
goto :EOF
:HELP
  echo.
  echo.
  echo  Использование:
  echo.
  echo   listprinterdrivers.cmd [station] или ?, /?, -? 
  echo.
  echo   где [station] - имя станции
  echo.
  echo  запускать из-под учетной записи с правами администратора
  echo.
  echo.
  pause
:END
четверг, 26 мая 2011 г.

Date Time In My Network Синхронизация времени компьютеров сети

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

Для работы понадобится утилита PsExec.exe из набора Sysinternals PsTools Марка Руссиновича (англ. Mark Russinovich), она позволяет выполнить команду или запустить программу на удаленном компьютере.

Cобрать текущие показания времени со всех машин сети под управлением Windows XP, Vista, Windows 7.
Поможет нижеприведенный батник, у меня он сохранен под именем DateTimeInMyNetwork.cmd
@echo off
cls
::    считываю букву диска, которую система присвоила Flash-disk,
::    с него запускаются эти командные файлы и на нем в каталоге
::    x:\tools лежат вспомогательные программы,
::    и добавляю к переменной %PATH% путь к этим программам
set path=%~d0/tools;%path%
::    удаляю старый файл, если он есть
del "%TEMP%\networktime.log" 2>nul
set logfile="%TEMP%\networktime.log"
echo. >>%logfile%
echo #-------- %DATE% %TIME% --------# >>%logfile%
echo. >>%logfile%
::    выполняю команду для локального компьютера
Echo %date%    %time%    %ComputerName% >>%logfile%
::    создаю в текущей директории echotime.cmd который будет
::    скопирован на удаленный компьютер
>echotime.cmd Echo @Echo %%date%%    %%time%%    %%ComputerName%%
::    выполняю команду для всех компьютеров подсети
psexec \\* -c echotime.cmd >>%logfile%
del echotime.cmd
type %logfile% & echo. & pause
::    В некоторых сетях для локального компьютера считывать переменные не нужно.
::    Если браузинг в подсети работает плохо (net view - список в сети),
::    то pcexec с параметром \\* отработает только на тех компьютерах, которые
::    видны по net view в момент запуска командного файла содержащего
::    параметр \\*
Синхронизировать время по времени машины с которой запускается батник.

Обратите внимание, что для контроля правильности установки времени, вызывается вышеприведенный батник (командный файл, файл пакетной обработки)

@ECHO OFF
cls
if "%~1"=="" goto HELP
if "%~1"=="?" goto HELP
if "%~1"=="/?" goto HELP
if "%~1"=="-?" goto HELP
::    считываю букву диска, которую система присвоила Flash-disk,
::    с него запускаются эти командные файлы и на нем в каталоге
::    х:\tools лежат вспомогательные программы,
::    и добавляю к переменной %PATH% путь к этим программам
set path=%~d0/tools;%path%
::    сейчас настроена на синхронизацию сети с часами станции
::    где запускается этот командный файл
::    При пустом экране будет ожидать ввода пароля пользователя
::    В параметре передать имя учетной записи с административными правами
set mycomp=%computername%
echo.
echo Ведите пароль пользователя
echo.
echo Wating for account password
echo.
psexec.exe -u %1 -e \\*  NET TIME \\%mycomp% /SET /Y
ping -n 5 127.0.0.1 >nul
DateTimeInMyNetwork.cmd
goto :EOF
:HELP
echo.
echo.
echo  Использование:
echo.
echo   net_time_set.cmd USER
echo.
echo  где USER - имя учетной записи с правами администратора
echo.
echo.
echo.
pause>>nul
Проверить sntp на машинах:
@ECHO OFF
cls
::    считываю букву диска, которую система присвоила Flash-disk,
::    с него запускаются эти командные файлы и на нем в каталоге
::    х:\tools лежат вспомогательные программы,
::    и добавляю к переменной %PATH% путь к этим программам
set path=%~d0/tools;%path%
::    для всех станций подсети
psexec.exe \\*  NET TIME /querysntp | find "SNTP:"
::    для отдельной, имя передать в параметре.
rem    psexec.exe \\%1  NET TIME /querysntp
echo.
pause
Установить sntp для всех машин сети:
@ECHO OFF
cls
::    считываю букву диска, которую система присвоила Flash-disk,
::    с него запускаются эти командные файлы и на нем в каталоге
::    х:\tools лежат вспомогательные программы,
::    и добавляю к переменной %PATH% путь к этим программам
set path=%~d0/tools;%path%
::    До запуска убедиться, что UDP 123 порт открыт.
psexec.exe \\%1  NET TIME /setsntp:"ntp2.cs.wisc.edu ntp1.cs.wisc.edu"
::    пауза 5 сек
Ping -n 5 127.0.0.1
psexec.exe \\%1 net stop "Служба времени Windows"
Ping -n 5 127.0.0.1
psexec.exe \\%1 net start "Служба времени Windows"
Ping -n 5 127.0.0.1
psexec.exe \\%1 net time /querysntp | find "SNTP:"
Ping -n 5 127.0.0.1
psexec.exe \\%1 w32tm /resync /rediscover
echo.
pause

Последнее время в качестве sntp сервера, как правило использую наш ntp.time.in.ua Отличается хорошей доступностью и стабильностью.

среда, 25 мая 2011 г.

master browser - в локальной сети


Простейшие батники помогут работать c службой Computer Browser.

Одним архивом здесь - browsing.7z

get_master_browser.cmd
::    считываю букву диска, которую система присвоила Flash-disk,
::    с него запускаются эти командные файлы и на нем в каталоге
::    х:\tools лежат вспомогательные программы,
::    и добавляю к переменной %PATH% путь к этим программам
@echo off
cls
set path=%~d0/tools;%path%
::    получаю имя рабочей группы в переменную %%l, присваиваю переменной w_name значение равное %%l
For /f "tokens=1-4" %%i in ('net config workstation ^| findstr /C:"Домен рабочей станции"') do set w_name=%%l
::    выполняю команду
echo.
browstat gm 1 %w_name%
echo.
pause>>nul

getnameworkgroup.cmd
@echo off 
cls 
echo. 
For /f "tokens=1-4" %%i in ('net config workstation ^| findstr /C:"Домен рабочей станции"') do @echo %%l 
echo. 
pause>>nul

restart_browser.cmd
@echo off
cls
net stop BROWSER
net start BROWSER

restart_browser_in_network.cmd
::  в качестве параметра передать имя компьютера, 
::  который в данный момент является MS_BROWSER 
::  считываю букву диска, которую система присвоила Flash-disk, 
::  с него запускаются эти командные файлы и на нем в каталоге 
::  х:\tools лежат вспомогательные программы, 
::  и добавляю к переменной %PATH% путь к этим программам 
@echo off 
cls 
set path=%~d0/tools;%path% 
::  выполняю команду, подставив в виде параметра имя компьютера, 
::  где рестартую службу 
chcp 1251 
echo. 
psservice \\%1 restart browser 
echo. 
pause

вторник, 24 мая 2011 г.

Строки деинсталляции из реестра


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

Нижеприведенный батник использовался, как часть другого скрипта, для удаленной деинсталляции приложений в локальной сети.

Тестировался на Win XP Prof SP3 ru. Для x64 систем, возможно, есть необходимость его изменить.

Скачать можно архивом здесь: find uninst string in registry.7z


 
@echo off
cls

:: участник форума oszone - otsheln1k 23.05.2011
:: строка необходима для исключения ошибки возникающей на именах
:: разделов прописанных кириллицей например "Архивариус 3000_is1" в Win кодировке
:: выбор для поиска строки кириллицей НЕВОЗМОЖЕН

chcp 1251 >nul

:: от использования setlocal enabledelayedexpansion пришлось отказаться
:: из-за встречающихся "!" в именах разделов, парсинг их прерывался с ошибкой
:: например "NeroBackItUp!UninstallKey"


:: Можно сразу прописать имя программы, прописывать надо точно так, как она
:: прописана в ключе реестра DisplayName.
::
:: если имя в set prog=  не определено, будет выполнен подбор 
:: имен в соответствии с введенной пользователем строкой
:: имя раздела деинсталляции совпадает на всех станциях, достаточно выполнить 
:: поиск имени раздела и строки для локальной машины

:begin

echo.
set "key=hklm\software\microsoft\windows\currentversion\uninstall"
set prog=
rem set "prog=Gpu-z"
rem set "prog=adobe"
if not "%prog%" == "" goto :next
echo.
echo.
set /p "prog=Введите имя программы для деинсталляции:  "
echo.
FOR /F "usebackq tokens=3 delims=    " %%i IN (`reg query "%key%" /s ^| findstr /i /c:"%prog%" ^| findstr /i "displayname"`) do (
set "uninstprog=%%i" & call:look
)
if "%uninstprog%" == "" (
echo Ничего не найдено, повторите поиск
goto :begin
) else (
echo.
)
echo.
echo Если найдено более 1-й строки - уточните запрос повторным вводом.
echo (если продолжить, для деинсталляции будет выбрана последняя строка)
echo.
echo.
echo 0 - выйти   1 - повторить ввод имени   3 - продолжить  (Enter)
echo.
set /p  "case=Ваш выбор?  "
if "%case%" == "0" exit
if "%case%" == "1" goto :begin
if "%case%" LEQ 3 goto :next2

:next

set "uninstprog=%prog%"

:next2

echo.
echo Идет поиск в реестре
echo строки деинсталяции для:  %uninstprog%
echo.

FOR /F "usebackq tokens=7 delims=\" %%i IN (`REG QUERY "%key%"`) do ^
FOR /F "usebackq tokens=1,2*" %%l IN (`REG QUERY "%key%\%%i"`) do ^
if "%%l"=="DisplayName" if "%%n" == "%uninstprog%" set "keyi=%%i"

:: строка нужна при неточном предопределении имени деинстал. приложения
if "%keyi%" == "" (echo key not found & echo. & pause & exit) else (echo keyi = %keyi%)

echo.
reg query "%key%\%keyi%" /s | findstr /i "uninstallstring"

echo.
echo Скрипт закончил свою работу
pause>nul
exit

:look
echo Найдено имя: %uninstprog%