:: Начало метки A @Echo Off @Title Password Check/Change Script Setlocal :: Указание местоположения файла ввода. Пробелы в путях разрешены. :: В файле ввода информация для каждого сервера (имя сервера, имя учетной записи администратора и пароль) :: располагается на отдельной строке. Разделяйте имя сервера, имя учетной записи администратора :: и пароль запятыми Set ServerList=D:AdminPasswordChangerServerList.csv :: Указание местоположения файла вывода. Пробелы в путях разрешены. Set Outputfile=D:AdminPasswordChangerPWlog.csv :: Указание местоположения утилиты Pspasswd. Пробелы в путях разрешены. Set PspasswdLoc=Server1PSToolspspasswd.exe :: Указание местоположения утилиты Local. Пробелы в путях разрешены. Set LocalLoc=Server1Reskitlocal.exe :: конец метки A :: *** Ниже этой точки настройки не нужны. *** If /I ?%1?==?-Change? Echo This script is about to change the passwords in the input list you have specified. If you want to launch the script in check mode, remove the -Change argument.&Set Change=1&Pause If /I Not ?%1?==?-Change? Echo This script is about to check the passwords in the input list you have specified. No passwords will be changed — only checked. If you want to launch the script in a mode to change the passwords, use the -Change argument. &Set Change=0&Pause Echo %DATE%>»%Outputfile%» Echo %TIME%>>»%Outputfile%» Echo.>>»%Outputfile%» If «%Change%»==»1» Echo Script Run in PW Change Mode>>»%Outputfile%» If «%Change%»==»0» Echo Script Run in PW Check Mode — No passwords were changed>>»%Outputfile%» Echo.>>»%Outputfile%» Echo Servername,Admin Acct Name,PW,Result>>»%Outputfile%» :: начало метки B For /f «tokens=1,2,3 usebackq delims=,» %%i in («%ServerList%») Do (Set Server=%%i) & (Set AdminName=%%j) & (Set Password=%%k) & (Call :Pingit) :: конец метки B :: начало метки C Echo Run complete! View Outputfile for results. Endlocal Goto :EOF :: конец метки C :: начало метки D :: Проверка доступности сервера командой Ping. Если недоступен, производится запись ошибки в журнал. :Pingit Echo Contacting %Server% For /F «tokens=1» %%i in (?Ping -n 1 -w 5000 %Server% ^| Find «Reply»?) Do (Call :PWChange) & (Goto :skip) Echo %Server%,N/A,N/A,Offline!>>»%Outputfile%» Echo %Server% Offline! :Skip Goto :EOF :: Если сервер доступен, пытаемся изменить или проверить пароль. :: В случае неудачи выполняется запись ошибки в журнал. :PWChange If «%Change%»==»1» For /F «tokens=*» %%i in (?%PspasswdLoc% \%Server% %AdminName% %Password%?) Do Echo %Server%,%AdminName%,»%Password%»,PW Change Success,>>»%Outputfile%»&Goto :Last If «%Change%»==»0» Net Use \%Server%IPC$ /D >NUL 2>NUL If «%Change%»==»0» Net Use \%Server%IPC$ «%Password%» /USER:%Server%\%AdminName%&& Echo %Server%,%AdminName%,%Password%,PW Checked and Confirmed>>»%Outputfile%» && Goto :Last :: конец метки D :: начало метки E Set Aname= For /F «tokens=*» %%i in (?%LocalLoc% Administrators \%Server% ^| Find /I «\%AdminName%»?) Do (Set Aname=%%i) If Not Defined Aname Echo %Server%,%AdminName%,N/A,User account not found>>»%Outputfile%»&Goto :Last Echo %Server%,%AdminName%,%Password%,PW Check/Change Failure>>»%Outputfile%» :: конец метки E :Last Goto :EOF