Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Открыть новую тему     Написать ответ в эту тему

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Старые и смежные темы: по CMD и в Программах | по PowerShell | В помощь системному администратору | Прикладное программирование

PowerShell
Версии | Ассоциация и подпись сценариев
Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
Прочее
Расширение возможностей
Функции
Write-Color
Output-DebugString
Провайдеры
Готовые скрипты
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?
Книги в PDF
Cheat Sheets
 

Cmd
Для перекодирования кириллицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы
 
Готовые решения и частые вопросы
 
Описания работы команд и символов участниками темы:
setlocal enabledelayedexpansion и переменные окружения
символы & и && в командной строке
Переменная %0
 
Полезные ссылки и утилиты

WSH (VBScript, JScript)
Программирование "удобняшек" на VBScript

Примечания:
• Большие куски кода заключайте в тэг [ more ]
• Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте код без пробелов иначе сценарий может работать неправильно. Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

Всего записей: 11062 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS 2, 08:24 19-06-2021
PhoenixUA



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT
Get-WindowsVersion
если ещё интересно...
 

Всего записей: 2184 | Зарегистр. 17-11-2005 | Отправлено: 00:08 04-01-2019
DarkMasterW

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все те же проверки на валидность...
Переменная должна содержать органиченный набор символов [a-zA-Z0-9]{1,32} (латиницу верхнего и/или нижнего регистра и/или цифры, длина от 1 до 32 символов)

Всего записей: 284 | Зарегистр. 17-04-2010 | Отправлено: 12:09 07-01-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, DarkMasterW

Код:
 
@echo off
set "var=12369012345678901234566"
if "%var%"=="" echo Too Short
if not "%var:~-32%"=="%var%" echo Too long
echo."%var%"| findstr /r /i "[<>&%%|]" >nul && echo Forbidden chars1 || (
echo.%var%| findstr /r /i /c:"[^0-9A-Z]" >nul && echo Forbidden chars2 )
 

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 12:28 07-01-2019
DarkMasterW

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
падает при:
& и "
пропускает:

 
И дурацкий вопрос, а как этот конвеер в if корректно запихать?

Всего записей: 284 | Зарегистр. 17-04-2010 | Отправлено: 14:08 07-01-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
DarkMasterW
Да, при кавычках падает. Заменить кавычки на другой запрещенный символ.
& | ^ - отрабатывает нормально.

Код:
 
@echo off
set "var=123690123^45678901234566"
 
set "var=%var:"=?%"
if "%var%"=="" echo Too Short & goto :err
if not "%var:~-32%"=="%var%" echo Too long & goto :err
echo."%var%"| findstr /r /i "[<>&%%()|^]" > nul && (echo Forbidden chars1 & goto :err)  
if errorlevel 1 echo.%var%| findstr /r /i /c:"[^0-9A-Z]" > nul && (echo Forbidden chars2 & goto :err)
rem Здесь код
exit /b
:err
pause
 

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 14:37 07-01-2019
DarkMasterW

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
№ по-прежнему считает валидным символом.

Цитата:
& | ^ - отрабатывает нормально.  

Теперь да)
Раньше падало при вводе единичного символа &:

Код:
@echo off
set /P var="input data"
if "%var%"=="" echo Too Short
if not "%var:~-32%"=="%var%" echo Too long
echo."%var%"| findstr /r /i "[<>&%%|]" >nul && echo Forbidden chars1 || (
echo.%var%| findstr /r /i /c:"[^0-9A-Z]" >nul && echo Forbidden chars2 )
pause

 
Спасибо вам огромное, что возитесь со мной.

Всего записей: 284 | Зарегистр. 17-04-2010 | Отправлено: 15:01 07-01-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
DarkMasterW

Цитата:
№ по-прежнему считает валидным символом.

Увидел. Зависит от кодировки.  
Вариант 1 - chcp 1251 - тогда его никто не захочет вводить
Вариант 2 - прямо указать его в запрещенных.

Код:
 
chcp 1251
set /p "var=1234567890"
set "var=%var:"=?%"
set "allowedChars=0-9A-Za-Z"
set "deniedChars=<>&%%()|^&#9571;№"
if "%var%"=="" echo Too Short & goto :err
if not "%var:~-32%"=="%var%" echo Too long& goto :err
echo."%var%"| findstr /r /i "[%deniedChars%]" > nul && (echo Forbidden chars1 & goto :err)  
if errorlevel 1 echo.%var%| findstr /r /c:"[^%allowedChars%]" > nul && (echo Forbidden chars2 & goto :err)
 

UPD: &#9571; - это № - в неправильной кодировке, покоцанный форумом.

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 15:15 07-01-2019 | Исправлено: Alex_Piggy, 15:17 07-01-2019
DarkMasterW

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Вариант 1 - chcp 1251 - тогда его никто не захочет вводить

Почему не захочет?

Цитата:
A-Za-Z

не очепятка?

Код:
@echo off
chcp 1251
 
:: Папка в которую будут складываться новые песочницы.
:: Путь может быть абсолютным или относительным
:: "\" в конце адреса и кавычки не нужны.  
:: Пример путей:
:: e:\box
:: f:\my_folder\box
:: Если нужен отностиельный путь,
:: то поставьте %CD%.
:: set prefix=%CD%
set prefix=%CD%
 
 
set "prefix=%prefix:"=%"
if "%prefix:~-1%"=="\" set "prefix=%prefix:~0,-1%"  
 
:input  
set /P name=Name of new box:  
 
 
if exist "%prefix%\%name%" (
   echo "%prefix%\%name%" already exist. Input another name.
   goto input
)
 
if "%name%"=="" echo You need input name. & goto :err
 
set "name=%name:"=?%"
set "allowedChars=0-9A-Za-z"
set "deniedChars=<>&%%()|^№"
if not "%name:~-32%"=="%name%" echo Name is too long& goto :err
echo."%name%"| findstr /r /i "[%deniedChars%]" > nul && (echo Forbidden char. & goto :err)  
if errorlevel 1 echo.%name%| findstr /r /c:"[^%allowedChars%]" > nul && (echo Forbidden char. & goto :err)  
 
echo Creating...  
:: Создаем новую песочницу.
"C:\Program Files\Sandboxie\SbieIni.exe" set %name% Enabled y
:: Устанавливаем путь для новой песочницы.
:: И часть дефолтных параметров.
:: Прописываемые поумолчанию шаблоны для увелечения безопасности не генерируются.
"C:\Program Files\Sandboxie\SbieIni.exe" set %name% FileRootPath "%prefix%\%name%"
"C:\Program Files\Sandboxie\SbieIni.exe" set %name% ConfigLevel 7
"C:\Program Files\Sandboxie\SbieIni.exe" set %name% BlockNetworkFiles y
"C:\Program Files\Sandboxie\SbieIni.exe" set %name% BorderColor #00FFFF,ttl
"C:\Program Files\Sandboxie\SbieIni.exe" set %name% DropAdminRights y
 
:: Перезагружаем конфигруацию, чтобы она вступила в силу.
:: (работает только для сервиса, интерфейс не обновится)
"C:\Program Files\Sandboxie\Start.exe" /reload
:: Запускаем cmd.exe внутри новой песочницы, чтобы создались служебные файлы.
"C:\Program Files\Sandboxie\Start.exe" /box:%name% cmd /c
 
:: Создаем для удобства папки с дисками.
for /f "delims=" %%a in ("%prefix%") do set letter=%%~da  
mkdir "%prefix%\%name%\drive\%letter:~0,1%\"
::mkdir "%prefix%\%name%\drive\E\"
 
:: Перезапускаем интерфейс, чтобы обновить в нем список песочниц.
taskkill /F /IM SbieCtrl.exe > nul
start "" "C:\Program Files\Sandboxie\SbieCtrl.exe"  
 
exit /b
 
:err
echo You must use only A-Za-z0-9 in name.
echo Dont use spaces and names longer than 32 characters.
goto input
 

Как-то так получилось.
if "%name%"=="" перетащил выше, чтобы не крашило.
Так и не придумал, что вызывать вместо cmd из стандартных виндовых приложений, чтобы быстро, ничего не делало и хлопалось.

Всего записей: 284 | Зарегистр. 17-04-2010 | Отправлено: 16:27 07-01-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
DarkMasterW

Цитата:
chcp 1251 - тогда его никто не захочет вводить  
Почему не захочет?

Кроказябы.

Цитата:
Цитата: A-Za-Z  
 не очепятка?

Очепятка. Спасибо.

Цитата:
 быстро, ничего не делало и хлопалось.

mshta "javascript:close();"

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 17:05 07-01-2019 | Исправлено: Alex_Piggy, 17:05 07-01-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Массовое создание VPN-подключений как пример использования:
 
1) ValueFromPipelineByPropertyName (потому что Add-VpnConnection предусматривает такое использование)
2) filter (разновидность функции)
3) разных комплектов свойств у объектов в трубе
4) "читабельного скриптования" (с)
Параметры настройки, без изменения которых нифига не заработает - отправляются наверх скрипта.  

Код:
 
#параметры подключений отражаем в CSV прямо в тексте скрипта
$properties = @"
Connection,vpn.domain.ru,l2tp
Connection1,vpn1.domain.ru,sstp
"@
$L2tpPsk = 'T0pSecRet'
$DnsSuffix = 'corp.domain.ru'  
 
$inputObj = $properties | ConvertFrom-Csv -Header Name, ServerAddress, TunnelType
 
#в фильтре можно сделать что угодно с отдельными объектами в передаваемом по трубе массиве -
#но тут предполагается что у всех подключений типа l2tp должно стать больше на одно свойство L2tpPsk, c одинаковым значением
filter Add-L2tpPSk([string]$Value)
{
    if ($_.TunnelType -eq 'l2tp') {
        $_ | Add-Member -MemberType NoteProperty -Name L2tpPsk -Value $Value
    }  
    $_
}
 
#динамический параметр -L2tpPsk валиден только для l2tp подключений  
$inputObj = $inputObj | Add-L2tpPSk -Value $L2tpPsk
 
#для меняющихся параметров пользуем ValueFromPipelineByPropertyName, остальные задаём прямо тут
$inputObj | Add-VpnConnection -DnsSuffix $DnsSuffix -AllUserConnection -RememberCredential -SplitTunneling -Force
 

 
ЗЫ. Если кто не понял: всё это написано вместо пары команд Add-VpnConnection с длинным хвостом параметров каждая
Решаемая задача - не добавить два каких-то подключения, а продемонстрировать читабельный скрипт, поддающийся изменениям в считаных очевидных местах.
 
То же самый результат с использованием автоматического выбора VPN-протокола:
Код:
 
#параметры подключений отражаем в CSV прямо в тексте скрипта
$properties = @"
Connection,vpn.domain.ru
Connection1,vpn1.domain.ru
"@
$L2tpPsk = 'T0pSecRet'
$DnsSuffix = 'corp.domain.ru'  
 
$inputObj = $properties | ConvertFrom-Csv -Header Name, ServerAddress
 
#для меняющихся параметров пользуем ValueFromPipelineByPropertyName, остальные задаём прямо тут
$inputObj | Add-VpnConnection -L2tpPsk $L2tpPsk  -DnsSuffix $DnsSuffix -AllUserConnection -RememberCredential -SplitTunneling -Force
 

 
 
 
Добавлено:
 
ЗЫ. До сих пор всё относилось к коробочной винде, в которой учётные данные созданных ВПН подключений надо будет однократно вбить ручками.
Для автоматизации этого занятия есть модуль https://www.powershellgallery.com/packages/VPNCredentialsHelper
 

Код:
 
Find-PackageProvider -ForceBootstrap #заглушка чтобы обойти интерактивный вопрос и автоматом поставить nuget dll, нужную для менеджера пакетов
 
Install-Module VPNCredentialsHelper -Force    
 
$param = @{
    domain = 'corp'
    username = 'VPupkin'
    password = '123'
}
 
$inputObj | Foreach -Process {Set-VpnConnectionUsernamePassword -connectionname $_.Name @param}
 

 
Оставлять в скриптах учётные данные в текстовом виде вообще-то некомильфо...


----------
Проект Либген v2 //
Обсуждение

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 20:02 07-01-2019 | Исправлено: LevT, 19:53 09-01-2019
dialmak



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT нудота.. не..

Всего записей: 14007 | Зарегистр. 27-04-2013 | Отправлено: 00:25 08-01-2019
FedorSumkins2009



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вроде как решил проблему с неубиваемыми файловыми ассоциациями встроенных программ(воевал с edge и pdf). нагуглил следующий скрипт. https://yadi.sk/d/ZCTX4QluVMwCkg
Есть вопрос к местным умельцам - интересует возможность его доработки в плане устранения другого стандартного софта(фото, кино и тв, музыка и т.д), с возможностью отката естественно на крайний случай.
edge перестал пролазить полностью, нет ни в программах по умолчанию, ни в открыть с помощью? только с ярлыка запускается из пуска. pdf открывается чем душе угодно. обратно edge лезть пока не пытается.

Всего записей: 564 | Зарегистр. 26-12-2009 | Отправлено: 09:01 08-01-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FedorSumkins2009
 
Сам себе не поможешь - никто не поможет.
Например, сформулировать то, что конкретно нужно сделать.
 
Скрипт ведь на почти человеческом языке.
Запускайте построчно и проясняйте формулировку задачи.
"Вот тут выдаёт вот что, а мне нужно вот что"
 
Я например сейчас сижу на 2019 сервере - тут нет ежа и прочих UWP ассоциаций  
Так что могу помочь, но не "пойди и сделай за меня", а иначе.

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 10:07 08-01-2019
FedorSumkins2009



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT
есть еще uwp софт с теми же проблемами - музыка, кино и тв, фотографии,paint.  
1. скрипт по идее если правильно указать имя пакета(вместо edge) может то же проделать с любым из них путем добавления ключей реестра, это я понял правильно?  
максимум надо конец скрипта немного подправить под конкретные программы(добавив нужные имена веток реестра для добавления туда ключей, убрав лишнее для конкретных программ).  
 
2. интересует возможность обратного действия- возврата ассоциаций на стандартные(отмена всех действий скрипта)  
3. я просто идею подкинул, может еще кому понадобится. кто захочет тот, доработает. не прошу делать, просто предлагаю желающим посмотреть.
 
лучше чем ругаться с техподдержкой мелких, где вместо решения проблемы всякую чушь несут про обратитесь к разработчику программы по любому багу.  
 p/s у самого 8.1 дома, 10 так попадаются иногда, так что uwp не вижу в обычной жизни, и видеть не планирую уж лучше linux поставить и забыть про кучу геморроя(поменять на новый геморрой).

Всего записей: 564 | Зарегистр. 26-12-2009 | Отправлено: 13:52 08-01-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FedorSumkins2009
 
Сравнивать надо
Желательно с тем же билдом, но настроенным желаемым образом.
Если речь об удалении UWP-ассоциаций, то с LTSC или серверной виндой.

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 13:58 08-01-2019
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как можно выполнить сверку по if, если конечное значение выдернутое из wmic пустое, точнее с переводом строки ? Пока вот получилось только через такой костыль
Код:
for /f "usebackq delims== tokens=2" %%a in (`wmic cdrom where "Drive='I:'" get VolumeName /value^|findstr VolumeName`) do for /f "delims=" %%b in ('echo %%a') do if "%%b"=="Режим вывода команд на экран (ECHO) включен." (goto open)
есть более изящное решение ?

Всего записей: 2080 | Зарегистр. 19-09-2011 | Отправлено: 05:52 09-01-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, Baltazar500
А что нужно? По приведенному выше фрагменту - использовать проверку в WMIC.
wmic cdrom where "Drive='I:' AND VolumeName IS NOT NULL" get VolumeName /value |findstr VolumeName && goto open
Если именно получить значение - варианты  
1. Использовать свой формат - например переделанный %systemroot%\wbem\textvaluelist.xsl  чтобы после Value выводилось еще один знак "="
2. Использовать csv формат - но помните про проверку wmic на наличие значения - например
for /f "usebackq delims=, tokens=2" %%a in (`wmic cdrom where "Drive='I:' AND VolumeName IS NOT NULL" get VolumeName,VolumeSerialNumber /format:csv ^|findstr "%COMPUTERNAME%"`)  do echo %%a
3. Вывод в файл и чтение через type.

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 07:10 09-01-2019
NIKZZZZ



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Baltazar500
 
Примерно так

Код:
@echo off
set "name="
for /f "usebackq tokens=2 delims==" %%a in (`wmic cdrom where "Drive='I:'" get VolumeName /value 2^>nul`) do set "name=%%a" && goto _loop
goto _error
:_loop
echo.%name%

for игнорирует пустые строки, так что findstr не нужен.
К стати, чтобы echo не выводило "Режим вывода команд на экран (ECHO) включен." , можно использовать echo. , пробел после точки не нужен.
 
Еще непонятно, что нужно проверять, присутствие CD или пустое VolumeName ?
CD диск может быть и с пустым именем.
 
 

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 09:18 09-01-2019 | Исправлено: NIKZZZZ, 09:38 09-01-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy

Цитата:
Использовать свой формат - например переделанный %systemroot%\wbem\textvaluelist.xsl  чтобы после Value выводилось еще один знак "="  

 
При всём уважении...
Править системные файлы плохая затея.
Не знаю, можно ли задать для wmic формат откуда-то из пользовательского файла.
 
Вот в PS аналогичная проблема решена комплексно: текстовое представление любого объекта может быть задано/изменено через Update-FormatData

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 11:09 09-01-2019 | Исправлено: LevT, 11:11 09-01-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, LevT
Спасибо, за то, что обратили внимание на недостаточно корректное выражение.
Следует читать "переделанную копию %systemroot%\wbem\textvaluelist.xsl" .  
Да, путь к пользовательскому файлу формата задается в том же ключе "/format" ; textvaluelist.xsl - это только "Value" остальные форматы в виде xsl хранятся в %systemroot%\wbem и его подпапках.

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 17:57 09-01-2019
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru