:: Начало метки 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