Некоторые картинки не загружаются из РФ и РК, используйте VPN.
Показаны сообщения с ярлыком CMD. Показать все сообщения
Показаны сообщения с ярлыком CMD. Показать все сообщения

понедельник, 3 июня 2024 г.

CMD Объем носителей и свободное пространство

На просторах можно найти полный красивый скрипт, но мне достаточно вот этой строки для оценки

WMIC LogicalDisk WHERE "DriveType='3'" GET FreeSpace^, Name^, Size

суббота, 20 апреля 2024 г.

Keepass клик по URL - открытие SCP соединения с автоматической авторизацией в WinSCP

В 4ый раз делать скрин мне лень, логика та же

Отталкиваясь от описания можно заставить KeePass открывать SCP соединение с автоматической авторизацией в WinSCP. Cтрочка "URL override":

cmd://%systemdrive%\progra~2\WinSCP\WinSCP.exe {BASE:RMVSCM} /newinstance /username={USERNAME} /password={PASSWORD} 

У WinScp отдельного параметра для порта нет, поэтому без извращений

пятница, 26 января 2024 г.

CMD Симлинки в профиле пользователя

Как посмотреть симовлические ссылки в Windows

dir /AL /S "C:\Users\%username%"

А это список ссылок, которые есть в профиле пользователя (пысы, случайно грохнул содержимое своей папки пользователя О_О)

mklink /j "C:\Users\%username%\Application Data" "C:\Users\%username%\AppData\Roaming"
mklink /j "C:\Users\%username%\Cookies" "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Cookies"
mklink /j "C:\Users\%username%\Local Settings" "C:\Users\%username%\AppData\Local"
mklink /j "C:\Users\%username%\NetHood" "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Network Shortcuts"
mklink /j "C:\Users\%username%\PrintHood" "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Printer Shortcuts"
mklink /j "C:\Users\%username%\Recent" "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Recent"
mklink /j "C:\Users\%username%\SendTo" "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\SendTo"
mklink /j "C:\Users\%username%\Главное меню" "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu"
mklink /j "C:\Users\%username%\Мои документы" "C:\Users\%username%\Documents"
mklink /j "C:\Users\%username%\Шаблоны" "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Templates"

mklink /j "C:\Users\%username%\AppData\Local\Application Data" "C:\Users\%username%\AppData\Local"
mklink /j "C:\Users\%username%\AppData\Local\History" "C:\Users\%username%\AppData\Local\Microsoft\Windows\History"
mklink /j "C:\Users\%username%\AppData\Local\Temporary Internet Files" "C:\Users\%username%\AppData\Local\Microsoft\Windows\Temporary Internet Files"


mklink /j "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Программы" "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs"
mklink /j "C:\Users\%username%\Documents\Мои видеозаписи" "C:\Users\%username%\Videos"
mklink /j "C:\Users\%username%\Documents\Мои рисунки" "C:\Users\%username%\Pictures"
mklink /j "C:\Users\%username%\Documents\Моя музыка" "C:\Users\%username%\Music"

четверг, 21 сентября 2023 г.

Keepass клик по URL - открытие Filezilla

Отталкиваясь от описания можно заставить FileZille открывать FTP соединение с автоматической авторизацией. Cтрочка "URL override":

cmd://%systemdrive%\progra~1\Filezi~1\filezilla.exe ftp://{USERNAME}:{PASSWORD}@{BASE:RMVSCM}

суббота, 9 сентября 2023 г.

Удаление данных пользователя при выходе

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

Сразу, это длинопост, в котором нет конкретного решения, есть мой путь к моему решению в самом конце

понедельник, 4 сентября 2023 г.

CMD/Posh create scheduled tasks with trigger on logon

СБИС по прежнему не умеет запускать плагин с remoteapp, а мне уж порядком поднадоело ручками создавать задачу в планировщике. Я попробовал сделать задачу при помощи CMD:

set "nameuser=%USERDOMAIN%\%username%"
set "nametask=SBIS Plugin %nameuser%"
schtasks /create /sc ONLOGON /ru %nameuser% /it /tn "%nametask%" /tr "C:\PROGRA~2\TENSOR~1\SBIS3Plugin\sbis3plugin.exe --autostart"

И потерпел фиаско по двум пунктам

  1. schtasks требует прав админа на добавление задачи, а как мы помним задача должна запускаться от имени того, кто вошел в систему
  2. любая добавленная задача через cmd с параметром /sc ONLOGON будет иметь триггер "При входе любого пользователя". Параметр /it в данном случае ничего не решает. Задача выполнится, но для любого пользователя (проверено)
Вариант с XML также не подходит, так как в Principals->Principal->UserId помещается ID пользователя, от чьего имени надо запускать задачу. Да, это можно сделать, но средствами CMD это пустая трата времени.
Промежуточный вариант создать в cmd, экспорт в XML, правка, импорт также не рассматривается из-за громоздкости решения.
В итоге было решено использовать PowerShell и получился вот такой короткий скрипт:
$name = Read-Host -Prompt "Enter your name"
$TaskName = "SBIS PLUGIN for $name"
$username ="$env:USERDOMAIN\$name"
 
#create a scheduled task with powershell
$Action = New-ScheduledTaskAction -Execute "C:\PROGRA~2\TENSOR~1\SBIS3Plugin\sbis3plugin.exe" -Argument "--autostart"
$Trigger = New-ScheduledTaskTrigger -AtLogOn -User $username

Register-ScheduledTask -TaskName $TaskName -Action $action -Trigger $trigger -User $username 

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

Стоит отметить, что параметр --autostart не обязателен

пятница, 1 сентября 2023 г.

CMD Path without space

 dir /X ~1 "c:\" - отобразит короткие имена каталогов, удобно, когда нельзя использовать пробелы. Логика проста - первые 6 символов + тильда + порядковый номер, понятно, что это условно, но в большинстве случаев нет каталогов с одинаковыми именами.

Например: C:\PROGRA~2\TENSOR~1\SBIS3Plugin\sbis3plugin.exe

воскресенье, 4 июня 2023 г.

Batch Script logoff users

Для корректности бэкапа требуется выгнать всех пользователей из системы, году еще в 17ом написал скрипт, сегодня немного подпилил. В этом скрипте стоит отметить как заметку - использование "функции". Скрипт проверен и на Windows server 2008 и на Windows server 2019. Для работы требует повышения прав, поэтому в лучше запихать в планировщик задач.

@echo off
:://Скрипт логофа пользователей всех кроме заданного или текущего
::// logoff.bat name_exclude path_log_file
cd %~dp0
set tmp=tmp.txt
set nprg=%~nx0
set pprg=%~dp0
set ver=0.2
set logout=%systemroot%\System32\logoff.exe
set sys32=%systemroot%\system32\

if "%~1" == "help" (  
echo -------------------------------------------------
echo.
echo 	Batch-script '%nprg% ver %ver%'
echo.
echo -------------------------------------------------
echo Use %nprg% name_user_exclude path_log_file
echo.
echo Example:
echo		%nprg% admin C:\logFile.log
echo.
echo If run without param, exluded is user runed script, without log
echo.
echo If run
echo		%nprg% "" path_log_file
echo exluded is user runed script, with your logFile
exit /b 0
)

echo %date%	Batch-script '%nprg% ver %ver%' is on
echo %date%	Use %nprg% help

:://Если параметр не передан, то юзенэйм равно текущий юзер
if "%~1" == "" (  set usern=%username%) else (  set usern=%~1 )
if "%~2" == "" (  Call :Log "Log file not specifed!" ) else (  set log_file=%~2 )
Call :Log "-------------------------------------------------"
Call :Log "Exclude %usern%"
echo.
cd %pprg%
Setlocal EnableDelayedExpansion

%sys32%\query.exe user | %sys32%\findstr.exe /v /i %usern%> %tmp%

::// Вариации: токен 1 или 2 - это имя пользователя; токен 2 или 3 - ID
for /f "skip=1 tokens=1-3" %%a in ( 'cmd /c type %tmp%') DO ( 
	echo.
	echo -------------------------------------------------
	echo.
	Call :FindToken "%%c"
	if !errorlevel!==0 ( 
	  set "user=%%a"
	  rem Удаляем ">" из имени текущего пользователя, если не удалить, то функция лога не отработает
	  set "user=!!user:>=!!" 
	  set "ID=%%c"
	) else ( 
	  set "user=%%a"
	  set "ID=%%b" 
	)
	Call :Log "Found user=!user! ID=!ID!"	
	if "!usern!" neq "!user!" ( 
		start /WAIT !logout! !ID!
		if !errorlevel! equ 0 (
			set "stateLogOff=succesfully"
		) else (
			set "stateLogOff=FAILED"
		)
		Call :Log "     Session user '!user!' ended !stateLogOff!"
	)
)
Endlocal
echo.
Call :Log "-------------------------------------------------"
del /Q %tmp%
Exit
 
:://Возвращает 1, если в токене № 3 есть нечисловые символы - "^" заворачивает условие в другую сторону О_О
:FindToken
echo.%~1|>nul %sys32%\findstr.exe /R "[^0-9]" && exit /b 1
echo.%~1|>nul %sys32%\findstr.exe /R "[^0-9]" || exit /b 0

:://Функция логирования
:Log
set ech=%~1
echo %time%	%ech%
if defined log_file ( echo %date% %time%	%ech% >>%log_file% )
exit /b 0


понедельник, 15 мая 2023 г.

Keepass клик по URL - открытие SSH соединения в PUTTY с авторизацией

В 4ый раз делать скрин мне лень, логика та же

Отталкиваясь от описания можно заставить KeePass открывать SSH соединение с автоматической авторизацией в PUTTY. Это конечно не best practics, ибо эту же проблему решают ssh ключи, но такое возможно, строчка "URL override":

cmd://Putty.exe -ssh {USERNAME}@{BASE:RMVSCM} -pw {PASSWORD}

Обновление 12/10/2023. Вылез косяк с нестандартными портами, новый вариант выглядит так:

cmd://Putty.exe -ssh {BASE:HOST} -l {USERNAME} -pw {PASSWORD} -P {T-REPLACE-RX:#{BASE:PORT}#-1#22#}

Конструкция в конце говорит, что если порт не найден (не указан в url через ":"), то вставить 22

среда, 19 апреля 2023 г.

Keepass клик по URL - открытие RDP соединения с авторизацией

 
Отталкиваясь от описания можно заставить KeePass открывать RDP соединение с автоматической авторизацией. Вообще сам mstsc не поддерживает, но можно заранее записать креды, а потом удалить, собственно эта строчка именно это и делает

cmd://powershell.exe "cmdkey /add:{BASE:RMVSCM} /user:{USERNAME} /pass:{PASSWORD}; mstsc /v:{BASE:RMVSCM}; timeout 10; cmdkey /delete:{BASE:RMVSCM}"

Вариант с подстановкой адреса сервера как домена для имени пользователя

cmd://powershell.exe "cmdkey /add:{BASE:RMVSCM} /user:{BASE:RMVSCM}\{USERNAME} /pass:{PASSWORD}; mstsc /v:{BASE:RMVSCM}; timeout 10; cmdkey /delete:{BASE:RMVSCM}"

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

Скорее всего не прокатит для тех, у кого стоит запрет сохранения пароля на стороне сервера и также не поддерживается шлюз

Up

Да, не прокатит, а вот со шлюзом тоже  можно настроить.

cmd://powershell.exe "cmdkey /add:{BASE:RMVSCM} /user:{USERNAME} /pass:{PASSWORD}; cmdkey /add:{S:rdpGateway} /user:{USERNAME} /pass:{PASSWORD}; mstsc /v:{BASE:RMVSCM} /g:{S:rdpGateway}; timeout 10; cmdkey /delete:{BASE:RMVSCM};cmdkey /delete:{S:rdpGateway}"

Здесь мы добавляем учетку сразу для шлюза и для сервера, если они совпадают. При этом адрес шлюза записан на вкладке Advanced в String Fields

Лично я сделал отдельную схему для вариантов со шлюзом - grdp

UP

Есть косяк с паролями, которые содержат знак $

Обновление 12/10/2023. Вылез косяк с нестандартными портами, новый вариант выглядит так:

cmd://powershell.exe -NoProfile -WindowStyle Hidden -Command "$user=\"{T-REPLACE-RX:#{BASE:HOST}\{USERNAME}#(.*)\\(.*)\\(.*)#$2\$3#}\"; cmdkey /add:{BASE:HOST} /user:$user /pass:\"{PASSWORD}\"; mstsc /v:{BASE:RMVSCM}; timeout 10; cmdkey /delete:{BASE:HOST}"

И

cmd://powershell.exe -NoProfile -WindowStyle Hidden -Command "$user=\"{T-REPLACE-RX:#{BASE:HOST}\{USERNAME}#(.*)\\(.*)\\(.*)#$2\$3#}\"; cmdkey /add:{BASE:HOST} /user:$user /pass:\"{PASSWORD}\"; cmdkey /add:{S:rdpGateway} /user:$user /pass:\"{PASSWORD}\"; mstsc /v:{BASE:RMVSCM} /g:{S:rdpGateway}; timeout 10; cmdkey /delete:{BASE:HOST};cmdkey /delete:{S:rdpGateway};"

Поясню, конструкция:

"{T-REPLACE-RX:#{BASE:HOST}\{USERNAME}#(.*)\\(.*)\\(.*)#$2\$3#}"

Обманка, подставляет хост как домен, в том случае, если домен не указан в имени пользователя. Я до сих пор не понимаю почему оно работает, я вышел на нее случайным образом.

А конструкция:

-NoProfile -WindowStyle Hidden -Command

Скрывает окно сразу, в диагностических целях можно не добавлять

P.S. даже в кавычках, пароль не принимается со знаком $

четверг, 9 февраля 2023 г.

Keepass клик по URL - открытие Anydesk

Отталкиваясь от описания можно заставить KeePass открывать Anydesk с указанным ID, ID просто передается первым параметром для anydesk.exe.

cmd://"%PROGRAMFILES(x86)%\AnyDesk\AnyDesk.exe" {BASE:RMVSCM}

А как ему еще и пароль воткнуть?

cmd://cmd.exe /C "echo  {PASSWORD}  | "%PROGRAMFILES(x86)%\AnyDesk\AnyDesk.exe" {BASE:RMVSCM} --with-password"

Но, у этого варианта есть косяк - окно консоли будет висеть до тех пор, пока процесс anydesk не будет завершен

Но, если использовать не CMD, а powershell, то окно закроется сразу после отправки команды

cmd://powershell.exe "echo  {PASSWORD}  | "C:\progra~2\AnyDesk\AnyDesk.exe" {BASE:RMVSCM} --with-password"

При этом ExecutionPolicy корректировать не надо

Отмечу, что Anydesk устанавливается в "C:\Programm Files (x86)" и из-за пробелов такая конструкция вызовет ошибку:

cmd://powershell.exe -NoProfile -WindowStyle Hidden -Command "echo  {PASSWORD}  | %PROGRAMFILES(x86)%\anydesk\anydesk.exe {BASE:RMVSCM} --with-password"

UP январь 2024 года. После переустановки ОС и установки последней версии KeePass, перестал работать предыдщуий вариант. Выдавал ошибку:

Выражения допускаются только в качестве первого элемента конвейера.

Вот такой вариант работает

cmd://powershell.exe -NoProfile -WindowStyle Hidden -Command "Write-Output  {PASSWORD}  | &"$Env:ProgramFiles\AnyDesk\AnyDesk.exe" {BASE:RMVSCM} --with-password"

пятница, 27 января 2023 г.

CMD Script Добавить правила файервола по маске 1cv*.exe

Говорят, если запретить 1С выход в интернет, то она работает быстрее. Сервисами чел не пользуется, так что решил на нем потренироваться и описал такой скрпит:

@echo off
set Prg="%systemdrive%\progra*"
SETLOCAL EnableDelayedExpansion
FOR /D %%i in ("!Prg!") do (
	FOR /D %%j in ("%%i\1cv8\8*") do (
		echo %%j
		set pathProg=%%j\bin
		set ver=!pathProg:*1cv8\=!
		FOR /F "tokens=*" %%k in ('dir /b "!pathProg!\1cv*.exe"') do (
			echo. %%k
			set nameEXE=!pathProg!\%%k
			set nameFW="Block1C_%%k_!ver!"
			netsh advfirewall firewall show rule name=!nameFW! >null && set RuleExist=1 || set RuleExist=0
			if  !RuleExist! EQU 0 (
				netsh advfirewall firewall add rule name="!nameFW!" dir=out program="!nameEXE!" profile=any action=block
			) else (
				echo.   Rule !nameFW! are exist
			)
		)
		echo.
	)
	echo.
)
SETLOCAL DisableDelayedExpansion

Что он делает - проверяет на наличие (по имени сформированному им самим) и добавляет, при отсутствии, правила блокировки для \Progra*\1cv8\8*\bin\1cv*.exe, т.е. неважно какая платформа, какая разрядность или какой клиент.

Вот так просто получаем список правил:


Как видим, задача решена простым перебором во вложенных циклах. Данный скрипт оставляю на память:

  1. Использование EnableDelayedExpansion для передачи значения перебора в/за цикл
  2. Программное добавление правил брандмауера Windows
  3. Костыльная передача результата команды в переменную (конструкция && ||)
  4. Циклы (перебор директории и результата программы)
  5. Cmd replace (!pathProg:*1cv8\=!) с подстановкой значений

вторник, 10 января 2023 г.

CMD script мониторинг DNS записи

Простенький однострочный скрипт для мониторинга обновления dns записи. Для мониторинга SOA записи не очень подходит, т.к. на днс яндекса записи некоторое время бесятся, а вот верификация - да

FOR /L %N IN () DO nslookup -type=soa domen.ru 77.88.8.8 2> NULL |findstr /i "dns-hosting.yandex.ru" && (echo OK && ping -t 127.0.0.1 ) || (echo not && ping -n 10 127.0.0.1 > NULL && cls)

С человеческим таймаутом

FOR /L %N IN () DO nslookup -type=soa domen.ru 77.88.8.8 2> NULL |findstr /i "dns-hosting.yandex.ru" && (echo OK && ping -t 127.0.0.1 ) || (echo not && timeout 10 && cls)

Пока не появится фраза "dns-hosting.yandex.ru" в выдаче команды nslookup будет выдаваться not, как только появится - пойдет непрекращающийся пинг. Открывает в пол отдельного монитора и смотрим крайем глаза. Пример цикла пока истина

понедельник, 24 августа 2020 г.

CMD Удаляем и подключаем шару

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

cmdkey /add:nas /user:USERNAME /pass:USER_PASS
net use /DELETE Z:
net use /DELETE Y:
net use Z: \\nas\SharedFolder /persistent:yes
net use Y: \\nas\Skan /persistent:yes

Совсем простенько, первая строка добавляет запись в "Учетные данные Windows", если у пользователя локального имя и пароль совпадают с шарой, то необязательно.

Вторая и третья удаляют текущие занятые диски, можно использовать net use /DELETE *

Последние добавляют шары, можно использовать имя ресурса, а не IP.

IP привязывать на роутере. У Mikrotik для этого нужно использовать домен (иначе не будет резловить за пределами роутера):

Если речь идет о сервере (я подключал NAS через туннель), то сопоставить можно в файле hosts