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

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



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

Код:
 
 [string]$Version = (cmd /c ver)
 $Version .Substring(28,$Version .IndexOf(']')-28)
 

 
но это мне тоже не нравится
лучше было бы что-то вроде
 

Код:
 
$Version -match [regex]::Escape('Microsoft Windows [Version (?<Ver>.*)]')
$Matches.Ver
 

 
но у меня не получается уговорить именованную группу в паттерне заработать
Кто-то научит?
 
 
Добавлено:
ну а проще всего  
 

Код:
 
$Pattern =  'Image Version: '
$result = dism /online /? | Select-String -Pattern $Pattern
 

только с более подходящим паттерном.

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 21:17 01-12-2018 | Исправлено: LevT, 21:31 01-12-2018
westlife



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

Цитата:
но у меня не получается уговорить именованную группу в паттерне заработать
Кто-то научит?  

[regex]::Escape все спец символы экранирует, его только для чего то конкретного наверно можно использовать. Группу так не получить.
Задача не особо ясна, но вот так можно.

Код:
 
[string] $Version = (cmd /c ver)  
$Version -match 'Microsoft Windows \[Version (?<Ver>.*)]'
$Matches.ver
 

Всего записей: 1482 | Зарегистр. 12-12-2006 | Отправлено: 22:41 01-12-2018
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу помощи в доработке скрипта.
Есть скрипт для обновления FlashPlayer'a на компьютерах:
Подробнее...
 
Т.к. у меня домен, то пытаюсь доработать под свои нужды. А именно скрипт будет расположен на контроллере домена, для последующего запуска в составе logon скриптов, а дистрибутивы будут на другой машине.  
Подробнее...
Но т.к. у может возникнуть ситуация, что у конкретного пользователя диск b уже замаплен, поэтому как можно, перед тем как размапиливать диск, проверить занят ли он и если он занять то сохранить путь в переменную, потому отключаем его от диска b, выполняем скрипт, а потом примапливаем его обратно.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 13:09 04-12-2018
LevT



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

Код:
 
$mappings = (net use)  | Select-String 'Windows Net' |  ConvertFrom-String -PropertyNames Status,Letter,Path
$path = $mappings.Where({$_.Letter -eq 'b:'}).Path
 

 
Если интересно переписать всё в том духе, готов помогать
 
 
Добавлено:
westlife
 
Почему у меня не ловит группу?
 

Код:
 
PS C:\windows\system32> (net use y:) -match '\\(?<Path>.*)'
Remote name       \\localhost\N$
PS C:\windows\system32> $Matches
 


Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 14:11 04-12-2018 | Исправлено: LevT, 14:13 04-12-2018
Smitis



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

Цитата:
Почему у меня не ловит группу?

Там массив

Код:
(net use y:)[1] -match '\\\\(?<Path>.*)'  



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

Всего записей: 3452 | Зарегистр. 09-02-2003 | Отправлено: 14:42 04-12-2018 | Исправлено: Smitis, 14:43 04-12-2018
Falcon99



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

Цитата:
 
Если интересно переписать всё в том духе, готов помогать  

 
Увы, у меня 80% парка на Windows XP, там по умолчанию PowerShell нет, поэтому максимум WSH.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 14:45 04-12-2018 | Исправлено: Falcon99, 14:47 04-12-2018
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis
 
мда, с учётом экранирования и невозможностью ::Escape для групп
 они не столь полезны для чтения, как могли бы быть
 

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 15:04 04-12-2018 | Исправлено: LevT, 15:08 04-12-2018
westlife



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

Цитата:
Почему у меня не ловит группу?  

Вам уже ответил Smitis.
Суть, если массив, то match только выводит список подходящих строк,
а если одна строка, то $true или $false, при этом может назначать именованные группы или свои автоматические.  
Поэтому сначала отбор [string[]] $allstring = [string[]] $list -match "..."
а затем или сразу: foreach ( $i in $allstring ) {...}
пример

Код:
 
[string[]] $list = 1,1,2,2,3,3,4,4
[string[]] $allstring = [string[]] $list -match "1|4"
foreach ( $i in $allstring )
{
    if ( $i -match "(?<Ver>1)|(?<Ver>4)" )
    {
        "Ver: $($Matches.Ver)"
    }
}
 
# Или так
[string[]] $list = 1,1,2,2,3,3,4,4
foreach ( $i in $list )
{
    if ( $i -match "(?<Ver>1)|(?<Ver>4)" )
    {
        "Ver: $($Matches.Ver)"
    }
}
 
 

 

Всего записей: 1482 | Зарегистр. 12-12-2006 | Отправлено: 15:22 04-12-2018 | Исправлено: westlife, 15:24 04-12-2018
LevT



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

Код:
 
switch -regex ($allstring)
{
    "(?<Ver>1)" {"Ver: $($Matches.Ver)"}
    "(?<Ver>4)" {"Ver: $($Matches.Ver)"}
}
 

 
цЫклы - Зло  
рукописные, я имею в виду
 

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 15:53 04-12-2018 | Исправлено: LevT, 15:55 04-12-2018
LevT



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

Цитата:
Мне не нравятся командлеты для dism, так как не воспроизводят все возможности дисма, да и другие есть такие же не полноценные.

 
Как ни странно, командлеты предназначены не только для скриптов, но и для интерактивного использования, внутри повершел-хоста с поддержкой Intellesence (подсказками)  
 
Для многих применений командлетов достаточно, с ними не надо запоминать синтаксис и экономятся нажатия клавиш - это одно из преимуществ интерактивного использования повершел.
 
А внутри повторно используемых инструментов (отдаваемых консольному юзеру в виде командлетов) можно использовать что угодно
(но если это не одноразовая задача, желательно заботиться о читаемости. В случае dism хорошо хотя бы то, что родные его скрипты вполне читаемы - чего не скажешь о большинстве консольных утилит с их зоопарком ключей)
И тем более внутри таких интерактивных монстров, как ваши сценарии.

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 21:24 04-12-2018 | Исправлено: LevT, 21:30 04-12-2018
westlife



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT
У дисма есть 2 команды:  /Get-ImageInfo для wim и vhd
и /Get-WimInfo для  wim  vhd и esd (причем в общей справке по дисму у MS ее нет в описании, но dism ее отображает в /?)
А для PS сделали только аналог /Get-ImageInfo, по любому просто запарили про esd.,
и нельзя в PS заставить вывод выполнения делать в консоль, а не интерактивно.
 
Добавлено:
Проверил.
Сжал файл в install22.esd c  /Compress:recovery
Get-WindowsImage -ImagePath install22.esd -Index 1  -  Ошибка
Переименовал это файл в wim и все, показывает, вот портяночники
Так вот и делают командлеты: "и так сайдет".
Если дисму подсунуть такой файл с /Get-ImageInfo, то показывает ошибку, не прокатывает.

Всего записей: 1482 | Зарегистр. 12-12-2006 | Отправлено: 22:04 04-12-2018
LevT



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

Цитата:
и нельзя в PS заставить вывод выполнения делать в консоль, а не интерактивно.  

 
не уверен, что правильно понял о чём речь.
Проверьте в 1809: по некоторым сведениям, это исправили.
И заодно поломали существующие сторонние модули не делающие [void] или | Out-Null... внутрях: хорошо если разрабы активны на гитхабе.

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 00:09 05-12-2018 | Исправлено: LevT, 00:10 05-12-2018
NIKZZZZ



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

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 00:29 05-12-2018
westlife



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

Цитата:
мда, с учётом экранирования и невозможностью ::Escape для групп
 они не столь полезны для чтения, как могли бы быть  

 
Вот такое в голову пришло, работает, если принципиально нужен ::Escape
Пример:

Код:
 
[string] $Version = (cmd /c ver)  
$Version -match ([regex]::Escape('Microsoft Windows [Version @]')).Replace('@','(?<Ver>.*)')
$Matches.Ver
 
# или так, хотел трубу сделать, но лепить ее тут некуда =)
[string] $(cmd /c ver) -match ([regex]::Escape('Microsoft Windows [Version @]')).Replace('@','(?<Ver>.*)') > $null ; $Matches.Ver
 

 
Добавлено:

Цитата:
не уверен, что правильно понял о чём речь.
Проверьте в 1809: по некоторым сведениям, это исправили.  

Я пока в нее не лезу, чтобы нервы не портить, хотя разок глянул =)
Глянул, так как писали, что там в PS буквы не вводятся заглавные кириллические некоторые, я ставил .107,  
потом перекачал образ оригинальный .1, так как этот 107 и новее не нужны для обработки.
Так вот все буквы вводились нормально, и с шифтом и с капслоком. В общем хз, что там было с этим.
 
Я имею в виду вывод, который с зеленой полоской отображает процент выполнения,  
как в приложениях win32, забыл как называется правильно это по стандарту.  
Не нашел как заставить выводить вместо этой полоски в консоль, как у дисма.  
 
В итоге просто решил использовать везде сам дисм, и ни каких проблем, кроме необходимости смены кодировки вывода на OEM866 перед получением данных для кириллицы и парсить дополнительно вывод, но это не существенно.

Всего записей: 1482 | Зарегистр. 12-12-2006 | Отправлено: 00:59 05-12-2018 | Исправлено: westlife, 01:43 05-12-2018
YuS_2



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

Цитата:
они не столь полезны для чтения, как могли бы быть

Не тебе решать, что полезно, а что нет... а в целях повышения самообразования, чтобы не задавать подобные вопросы:

Цитата:
Почему у меня не ловит группу?

почитай:

Код:
man about_automatic_variables
man about_comparison_operators

 
Добавлено:
westlife

Цитата:
Я имею в виду вывод, который с зеленой полоской отображает процент выполнения,  
как в приложениях win32, забыл как называется правильно это по стандарту.

прогрессбар?
Если о нем речь, то:

Цитата:
Не нашел как заставить выводить вместо этой полоски в консоль, как у дисма.


Код:
man write-progress -full

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 10:18 05-12-2018
LevT



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

Цитата:
$Version -match ([regex]::Escape('Microsoft Windows [Version @]')).Replace('@','(?<Ver>.*)')  

 
Спасибо, здорово!
С этим привлечение регэкспа не тянет за собой возвращения к ручной обработке текста, да ещё и искорёженного эскейпами.
 
 
Добавлено:

Цитата:
[string] $(cmd /c ver) -match ([regex]::Escape('Microsoft Windows [Version @]')).Replace('@','(?<Ver>.*)') > $null ; $Matches.Ver  

 
символ ; не труба, а конец предыдущей и начало новой трубы
он именно для интерактивного администрирования, чтобы одним нажатием запускать однострочники
В предназначенных для чтения примерах лучше его не использовать
 
А на выходе первой трубы булевое значение.
Если [regex] настроить на поиск AllMatches - кстати, как? - то будет булевый массив, если нужен именно он на входе следующей функции в трубе.
Печаль, что не видно способа достать массив значений группы, если нужен таки он.
 
 
 
Добавлено:
 
Кстати, насколько я понимаю
> $null  
 
автоматически переписывается PS движком так
| Out-Default > $null
 
то есть сначала генерируется форматированный текст, а потом он игнорится
чтобы этого избежать, пишем сразу  
| Out-Null

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 11:37 05-12-2018 | Исправлено: LevT, 12:25 05-12-2018
westlife



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT
Я проверял замером скорости, | Out-Null тупит по сравнению с  > $null
> $null самый быстрый, ну или $null = ..., поэтому везде использую только его, я сам сначала думал, зачем иногда в коде используют именно его, так как в батниках так делают, а я хотел все делать на PS, пока не проверил.
Я вам поставил в коде ';' просто чтобы было в одну строку.
 
Добавлено:
YuS_2

Цитата:
прогрессбар?  

Да, наверно, гляну, благодарю.

Всего записей: 1482 | Зарегистр. 12-12-2006 | Отправлено: 12:53 05-12-2018
LevT



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

Цитата:
Я проверял замером скорости, | Out-Null тупит по сравнению с  > $null  
> $null самый быстрый, ну или $null = ...,

 
Если Вы уверены в выводах, то это отличный вопрос для этого форума.
 
Там отвечают разработчики и гуруи, написавшие o PS книги.

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 14:16 05-12-2018
Coelty1989

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги, привет! Помогите, плиз, с созданием батника через cmd такого типа:  
Разработать командный файл, создающий, копирующий или удаляющий
файл, указанный в параметре строки при запуске командного файла,
в зависимости от выбранного ключа /n , /c , /d
 
На просторах интернета нашел такой:
@echo off
If "%1"=="/n" echo. > "%2"
If "%1"=="/c" copy /y "%2" "%~n2_new%~x2"
If "%1"=="/d" del /a /f /q "%2"
exit
 
Корректен ли он?

Всего записей: 1 | Зарегистр. 08-12-2015 | Отправлено: 17:31 05-12-2018
BorlandIMHO

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

Цитата:
Корректен ли он?

Зависит от уровня, на котором должна решаться задача и придирчивости проверяющего...
Если домашка в строительном колледже - вполне нормально.
Если лабораторка в институте на примате/физмате - я бы лично докопался...

----------
http://www.imho.ws

Всего записей: 2638 | Зарегистр. 12-10-2006 | Отправлено: 17:59 05-12-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 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