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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 226 227 228 229 230

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

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.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO, Bolenic, а можно ещё и так:

Код:
rundll32 ADVPACK.dll,DelNodeRunDLL32 "C:\Program Files\Opera Chromium\profile\data\Service Worker\CacheStorage",4

Всего записей: 102 | Зарегистр. 19-12-2021 | Отправлено: 16:36 27-09-2024
bratskij



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, а как, например, в моем случае удалить из OPERA GX через батник из File System не только подкаталоги, но и все папки? Это возможно? Может что то дописать?
del /q /f/s "D:\OPERA GX\profile\data\File System\*.*"

Всего записей: 710 | Зарегистр. 01-08-2009 | Отправлено: 18:35 27-09-2024
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bratskij
команда ровно та же, что чуть выше, только имя папки своё подставьте {D:\OPERA GX\profile\data\File System}.
 
Поясню: команда "rd /s /q ."  должна удалить текущую папку со всем содержимым (файлы и подпапки). С содержимым {не занятым другими процессами} она справляется, удалить саму текущую папку не сможет (поскольку та занята собственно самОй командой). Т.е. происходит именно очистка содержимого.

Всего записей: 2638 | Зарегистр. 12-10-2006 | Отправлено: 20:35 27-09-2024
bratskij



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

Цитата:
команда "rd /s /q ."  должна удалить текущую папку со всем содержимым

Да Вы волшебник! Спасибо, все работает и все удалила начисто в папке.

Всего записей: 710 | Зарегистр. 01-08-2009 | Отправлено: 21:46 27-09-2024
Artem_Butenko



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, пожалуйста подскажите, как правильно использовать переменные в New-ItemProperty.
Сценарий простой:

Код:
## Получаем SID текущего пользователя и вносим результат в переменную $CurrentUserSID.
$CurrentUserSID = ([System.Security.Principal.WindowsIdentity]::GetCurrent()).User.Value
## Установка фонового рисунка рабочего стола.
New-ItemProperty -LiteralPath 'Registry::\HKEY_USERS\S-1-5-21-3475239111-1563668608-962451802-1024\Control Panel\Desktop' -Name 'WallPaper' -Value 'c:\windows\web\wallpaper\theme1\img13.jpg' -PropertyType String -Force -ea SilentlyContinue | Out-Null;

Необходимо вместо "S-1-5-21-3475239111-1563668608-962451802-1024" записать значение из переменной $CurrentUserSID. Буду очень признателен Вам за помощь.

Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 20:37 28-09-2024 | Исправлено: Artem_Butenko, 20:38 28-09-2024
virjokk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так прямо в путь эту переменную и писать, только кавычки двойные использовать:
Код:
New-ItemProperty -LiteralPath "Registry::\HKEY_USERS\$CurrentUserSID\Control Panel\Desktop" -Name 'WallPaper' -Value 'c:\windows\web\wallpaper\theme1\img13.jpg' -PropertyType String -Force -ea SilentlyContinue | Out-Null

Всего записей: 328 | Зарегистр. 19-05-2006 | Отправлено: 21:06 28-09-2024
Artem_Butenko



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, в cmd получить SID текущего пользователя можно используя команду "wmic useraccount where name='%username%' get sid", либо "whoami /user". Подскажите, пожалуйста, каким образом, используя эти команды записать в переменную только сам SID, без служебной информации?

Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 03:54 29-09-2024
www_world

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

Цитата:
в cmd получить SID текущего пользователя можно используя команду "wmic useraccount where name='%username%' get sid", либо "whoami /user". Подскажите, пожалуйста, каким образом, используя эти команды записать в переменную только сам SID, без служебной информации?

Например:
FOR /F "tokens=1,2 delims==" %%s IN ('wmic path win32_useraccount where name^='%username%' get sid /value ^| findstr /c:"SID"') DO SET SID=%%t

Всего записей: 494 | Зарегистр. 04-11-2018 | Отправлено: 05:29 29-09-2024
Artem_Butenko



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
www_world
 
Большое Вам спасибо! Я также нашёл рабочий вариант сценария. Он основан на использовании "wmic.exe", как и Ваш вариант. Только вот говорилось, что Microsoft собираются "избавиться" от утилиты "wmic.exe". Может имеет смысл иметь вариант работающий на "whoami /user"?

Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 05:51 29-09-2024
www_world

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

Цитата:
вариант работающий на "whoami /user"?  

for /F "tokens=2" %%i in ('whoami /user /fo table /nh') do set usersid=%%i

Цитата:
 Только вот говорилось, что Microsoft собираются "избавиться" от утилиты "wmic.exe"

Они с равной вероятностью могут избавиться и от cmd.exe и Ко.
И оставить один powershell со встроенными функциями всех утилит.

Всего записей: 494 | Зарегистр. 04-11-2018 | Отправлено: 06:26 29-09-2024
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
www_world
 
wmic был написан лично Джефри Сновером за неделю
 
Потом тот же человек задумал Powershell, 20 лет назад выбил деньги на команду разработчиков, воевал с эффективными менеджерами в Редмонде... Выпустили, и уже 7-я версия на дворе.
 
wmic больше не нужен никому, кроме идейных некрофилов. cmd лично я бы тоже запретил - чтобы простимулировать авторов нечитаемых простынок (которые, частью, заслуживают серьёзного внимания) их переписать.  
 
У линуксоидов хотя бы https://explainshell.com есть.

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 02:47 30-09-2024 | Исправлено: LevT, 14:35 30-09-2024
Artem_Butenko



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, снова прошу Вашей помощи. Возникла задача быстрого применения файлов локальных политик для конкретной учётной записи. Суть действий казалось бы проста:
1. Из всех учётных записей отобрать только "User 12", "_$User.55" и "User10" и получить их SIDы в строковом формате, например S-1-5-21-3475239111-1563668608-962451802-1020, S-1-5-21-3475239111-1563668608-962451802-1021, S-1-5-21-3475239111-1563668608-962451802-1022.
2. Скопировать файлы из каталога "GPO\*" находящегося рядом с файлом сценария, в каталог "C:\Windows\System32\GroupPolicyUsers\SID каждой из указанных учётных записей\".
На CMD нашёл относительно рабочий вариант. Однако, если в имени учётной записи есть пробел, то сценарий работать не будет.
Вариант на PowerShell отрабатывает без ошибок, но копирование файлов не происходит.  
Если обрабатывать каждую учётную запись в отдельности, то CMD сценарий можно представить так, а PowerShell сценарий следующим образом. Однако, хочется более короткие варианты с записью обрабатываемых учётных записей "в одну строку".
Пожалуйста, помогите разобраться с данной задачей.
 
LevT

Цитата:
wmic больше не нужен никому, кроме идейных некрофилов. cmd лично я бы тоже запретил - чтобы простимулировать авторов нечитаемых простынок (которые, частью, заслуживают серьёзного внимания) их переписать.

 
Тогда случится неодназначная-неоднозначность. Для тех, кто привык к CMD это будет трагедией, для сторонников PowerShell, - большая радость. А "Полу-Незнайки-Дознавайки" вроде меня, наверное перестанут метаться из крайности в крайность.




Воду зачеркнул.

Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 13:30 05-10-2024 | Исправлено: KLASS, 17:24 05-10-2024
LevT



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




Затянул свою пластинку. Можно это не читать, вода.

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 16:35 05-10-2024 | Исправлено: KLASS, 17:22 05-10-2024
virjokk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Artem_Butenko
Не сработает, если в имени учетной записи есть запятая:

Код:
For /f "tokens=2,3 delims=, skip=2" %%a In ('wmic useraccount get Name^,SID /format:csv') Do (
   if "%%a"=="User 12" call :cp %%b
   if "%%a"=="_$User.55" call :cp %%b
   if "%%a"=="User10" call :cp %%b
)
goto :eof
:cp
XCopy /s "%~dp0GPO" "%SystemRoot%\System32\GroupPolicyUsers\%~1\" /f /i /y /e
exit /b
 

Всего записей: 328 | Зарегистр. 19-05-2006 | Отправлено: 18:17 05-10-2024 | Исправлено: virjokk, 18:19 05-10-2024
virjokk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Artem_Butenko
Так должно работать и с запятой в имени:
Код:
SetLocal EnableDelayedExpansion
for %%a in ("User 12" "_$User.55" "User10") do (
   for /f %%b in ('2^>nul wmic useraccount where name^='%%~a' get sid /value ^| find "SID"') do set "%%b"
   if defined SID call :cp !SID!
)
goto :eof
:cp
XCopy /s "%~dp0GPO" "%SystemRoot%\System32\GroupPolicyUsers\%1\" /f /i /y /e
exit /b
 

Всего записей: 328 | Зарегистр. 19-05-2006 | Отправлено: 07:44 06-10-2024 | Исправлено: virjokk, 11:45 06-10-2024
lorents



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

Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 14:44 10-10-2024 | Исправлено: lorents, 14:53 10-10-2024
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для тех кто с нами
Пользуется Windows PowerShell • Пишет-Использует модули • Переносит пользовательские папки

    Проблема
  • Windows 11 23H2. Папка «Документы» перенесена, через «Проводник», свойства папки, вкладка «Расположение»
  • Windows PowerShell, создаём свой модуль, в перенесённой папке «Документы» \WindowsPowerShell\Modules. Модуль не виден! Автоматически не подхватывается!
  • Оно ищет модули в папке «Документы», в домашней папке (папке профиля, $home\Documents\WindowsPowerShell\Modules), кладёт на новое расположение.
    Решение
  • Создать линк в папке профиля ($home\Documents) ссылающийся на новое расположение папки «Документы».



Тут могла быть моя подпись.

Всего записей: 3640 | Зарегистр. 16-08-2012 | Отправлено: 15:36 28-10-2024
Smitis



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

Цитата:
Решение

Проверить переменную среды PSModulePath. Если там всё нормально, использовать эту переменную для указания папок с модулями.

----------
Разум когда-нибудь победит

Всего записей: 3452 | Зарегистр. 09-02-2003 | Отправлено: 16:05 28-10-2024 | Исправлено: Smitis, 16:06 28-10-2024
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
 
А ещё есть динамические модули New-Module.
 
Честно говоря, я не знаю зачем они - с тех пор, как узнал что простейший модуль это как в питоне: Import-Module file.ps1  
 
 
psm1 это модуль с метадатой (psd1).  Метадата нужна только для того, чтобы искать и правильно импортировать где-то кем-то опубликованные модули.
 
Вывод: для личных модулей psm1/psd1 оверхед, а начинать с файла psd1 - карго-культ, ещё и обременительный.

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 18:28 28-10-2024
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis, или так, правильнее
 
В PSModulePath был жёсткий путь на C: — не доделали перенос папок.
pwsh при этом работал, в какой он PSModulePath смотрит?…
 


А можно ли Windows PowerShell настроить на другую версию runtime, .NET 8?  
 
Добавлено:
LevT, psd1 для себя, если не публикуешь, да, излишек.
А psm1 — хотя бы для отличия от ps1 и не запустилось что бы по ошибке.
В старину так и юзали . скрипт.ps1, типа импорт функций из скрипта, вызов через точку. И сейчас работает.

Всего записей: 3640 | Зарегистр. 16-08-2012 | Отправлено: 18:34 28-10-2024
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 226 227 228 229 230

Компьютерный форум 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