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

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



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

Цитата:
Похоже, никак не проверить

ну, если залезть в реестр с правами системы... что, сам понимаешь, далеко небезопасно. Чуть, что не так - виноватым останется автор скрипта

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 13:01 29-06-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
Да уж. Я вчера 6 часов удаленно сидел у итальянца на затвиканной ОС. Нет, спасибо, я не голодный больше.

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 13:52 29-06-2020
Gdnight

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Похоже тут проход только для избранных, извините что потревожил.
Заходишь пару дней, смотришь, чтобы увидеть что ты невидимка.

Всего записей: 32 | Зарегистр. 20-06-2020 | Отправлено: 16:35 29-06-2020 | Исправлено: Gdnight, 16:36 29-06-2020
Jonmey

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

Цитата:
Похоже тут проход только для избранных, извините что потревожил.  Заходишь пару дней, смотришь, чтобы увидеть что ты невидимка.

Ну, во первых, вы, видимо, не знаете (до сих пор), что вам тут или где-либо еще в интернетах - никто ничего не должен, ну и, тем более, по команде "делай - раз, делай - два". Но вы можете всегда изменить данное положение вещей, наняв специального человека за вознаграждение.
Во-вторых, что-то мне подсказывает, что если бы вы, не скромничали, а обращались сюда под своим основным акком (а не под лево-новоиспеченным, как сейчас), то шанс того, что вам уделили бы внимание был бы повыше. Если вы не догадываетесь, то поясню, что тут среди помощников, как правило, взрослые дяди и очень взрослые. То есть, школьный, да и студенческий возраст у них давно пройден. Вы же полагаете, что здесь обитает какая-то "глупо-умная детвора", которую можно шпынять, как вам вздумается, "беря ее на вонючку". Это не так, уверяю вас. Как вы к ним - так и они к вам. Третий закон Ньютона.
И наконец, если бы вы, вместо жонглирования акками и недовольствами, минут на 15 побороли бы свою лень и почитали местные топики по интересующему вас вопросу (рекомендую, в частности, блокбастер "Командная строка, батники\сценарии (bat, cmd)" [все пять сезонов] вышедший на экраны форума), то с удивлением для себя обнаружили, что ваш вопрос далеко не уникален и герои указанного сериала неоднократно его муссировали.
 
Ну это, не считая того, что при поиске в Гугле ответ на ваш вопрос ищется комбинацией из трех пальцев.
 
З.Ы. Благодарить за разъяснения не нужно. Вы - не первый и не последний с аналогичным набором проблем. Поэтому и написано это не только для вас.

Всего записей: 1316 | Зарегистр. 17-01-2011 | Отправлено: 17:31 29-06-2020
YuS 2



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

Цитата:
Заходишь пару дней, смотришь, чтобы увидеть что ты невидимка.

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

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 19:56 29-06-2020
iNNOKENTIY21



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

Цитата:
Прошу помощи в создании батника и/или пшелла для добавления строк в конец файла hosts из простого текстового файла.
 
Шаги которые должны быть:
1. Создать бэкап файла hosts (%SystemRoot%\system32\drivers\etc\hosts) добавив ему расширение .bak
2. Проверить существуют ли строки которые нужно добавить и если нет то добавить их.
3. Выполнить в cmd команду ipconfig /flushdns
 
Текстовых файлов может быть 1 и более, находятся в одной папке, имена любые, а содержимое принимает вид:
# block all
0.0.0.0 board.com
0.0.0.0 alltimes.net #ssaa  

как то так?:

Код:
param(
   [IO.FileInfo] $PathHosts = 'C:\Users\admin\Desktop\hosts',
   [IO.FileInfo] $PathBlock = 'C:\Users\admin\Desktop\Block.txt'
)

function ConvertFrom-Hosts([IO.FileInfo] $Path) {
   [string[]]$lines = Get-Content -Path $Path
   $pattern = '^(?<IP>[0-9a-f.:]+)\s+(?<HostName>[^\s#]+)(?<Tail>.*)$'

   foreach ($line in $lines) {
       if ($line.Trim() -match $pattern) {
           [PSCustomObject] @{
               IP   = $matches["IP"]
               Host = $matches["HostName"]
               Tail = $matches["Tail"].Trim()
           }
       }
   }
}

$Hosts  = @(ConvertFrom-Hosts $PathHosts)
$Block  = @(ConvertFrom-Hosts $PathBlock)
$append = $Block | ? {$Hosts.IP -notcontains $_.IP}

if ($append) {
   $BakFileDir = $PathHosts.Directory
   $BakFileName = $PathHosts.Name + '.bak'
   $BakFile = Join-Path -Path $BakFileDir -ChildPath $BakFileName

   Copy-Item -Path $PathHosts -Destination $BakFile

   $append | % { "`t{0}`t`t{1}`t`t{2}" -f $_.IP, $_.Host, $_.Tail } |
       Add-Content -Path $PathHosts -PassThru

   [void] {ipconfig /flushdns}
}


Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 20:25 29-06-2020
iNNOKENTIY21



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

Код:
param(
   # Полный путь к файлу hosts
   [ValidateScript({[IO.File]::Exists($PSItem)})]
   [IO.FileInfo] $PathHosts = 'C:\Users\admin\Desktop\hosts',

   # Полный путь к директории, где лежат файлы в формате hosts
   [ValidateScript({[IO.Directory]::Exists($PSItem)})]
   [IO.DirectoryInfo] $PathBlock = 'C:\Users\admin\Desktop\Block',

   # Директория для резервной копии
   [string] $BakFileDir = $PathHosts.Directory,

   # Имя файла резервной копии
   [string] $BakFileName = $PathHosts.Name + '.bak',

   # Регулярное выражение для разбора строк
   # https://github.com/webmd-health-services/Carbon/blob/develop/Carbon/Functions/Set-HostsEntry.ps1
   [regex] $Pattern = '^(?<IP>[0-9a-f.:]+)\s+(?<HostName>[^\s#]+)(?<Tail>.*)$'
)

filter ConvertFrom-Hosts {
   $ip = $null

   if ($_.Trim() -match $pattern) {
       if ([ipaddress]::TryParse($matches["IP"], [ref] $ip)){
           [PSCustomObject] @{
               IP   = $ip
               Host = $matches["HostName"]
               Tail = $matches["Tail"].Trim()
           }
       }
   }
}

filter ConvertTo-Hosts {
   "`t{0}`t`t{1}`t`t{2}" -f $_.IP, $_.Host, $_.Tail
}

$hosts = Get-Content -Path $PathHosts -ErrorAction Stop | ConvertFrom-Hosts
$block = ls -file -path $PathBlock | Get-Content | ConvertFrom-Hosts | ? ip -NotIn $hosts.ip

if ($block) {
   $BakFile = Join-Path -Path $BakFileDir -ChildPath $BakFileName

   Copy-Item -Path $PathHosts -Destination $BakFile

   Add-Content -Path $PathHosts ''

   $block | ConvertTo-Hosts | Add-Content -Path $PathHosts -PassThru

   [void] {ipconfig /flushdns}
}

<#
   .SYNOPSIS
   Добавление строк в hosts из файлов
   .DESCRIPTION
   Добавляет в файл типа hosts строки с ip адресами, из файлов в указанной директории.
   Проверяет правильность записи ip, неправильные игнорируются в hosts не добавляются.
   Проверяет добавляемые ip с уже имеющимеся в hosts.
   Нет проверки на дубли (одинаковые) ip в файлах.
   Нет ротации bak файла.
   Автор:          iNNOKENTIY21
#>


Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 09:16 30-06-2020 | Исправлено: iNNOKENTIY21, 22:41 30-06-2020
Gdnight

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

Всего записей: 32 | Зарегистр. 20-06-2020 | Отправлено: 09:32 30-06-2020
Xant1k



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Gdnight
Относись проще - да да, нет нет и жить станет проще)
А так, можно попробовать через неделю-другую повторить запрос если не срочно.
 
iNNOKENTIY21
Спасиб. Сходу выглядит "жутковато", подробнее позже.

Всего записей: 2918 | Зарегистр. 20-02-2009 | Отправлено: 14:12 01-07-2020
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xant1k
Цитата:
выглядит "жутковато"

Вот так вот раз, и стал "жутким писакой"    
А LevT оценит, тут тебе и фильтры, и трубы, и без циклов, почти, в трубе не считается

Цитата:
подробнее позже

Ну а пока, ашо вариант.. scritpt.ps1    
    Скрипту по умолчанию нужны
  • Админские права из за  windows\system32\drivers\etc\hosts, или указывать свой файл, не трубующий для редактирвания повышенных прав. Ключ -PathHosts
  • Директория в папке пользователя Documents\Hosts\BlockIP, создать, поместить туда нужные файлы, или указывайте свою папку. Ключ -PathBlock
  • Директория в папке пользователя Documents\Hosts\Backups, создать, или указывайте свою папку. Ключ -BakFileDir

Запуск с ключём -Silent, тихий режим, без вывода.
 
Добавлено:
Кстати по фильтры, четвёртый фильтр, а-ля RemoveDuplicates не выходит... апчему? а как бы

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 22:25 01-07-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно ли избавиться от шифрования, чтобы некоторые антивирусы не ругались? Как бы варианты кавычек ни использовал — все равно не так передается в задачу, и все ломается.
 
https://pastebin.com/vTpvrjVT (146 строка)

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 09:59 03-07-2020 | Исправлено: farag, 10:00 03-07-2020
YuS 2



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

Цитата:
Можно ли избавиться от шифрования, чтобы некоторые антивирусы не ругались?

Это проблема не powershell, а пользователей, которые используют параноидальные антивирусы... наличие ножа на кухне ещё не делает человека убийцей.
 

Цитата:
Как бы варианты кавычек ни использовал — все равно не так передается в задачу, и все ломается.

Попробуй скриптблок:

Код:
$a = {
echo one
echo two
}
&$a

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 11:28 03-07-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
Еще больше ошибок даже стало. Да я и пробовал.

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 11:45 03-07-2020
Smitis



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

Цитата:
Как бы варианты кавычек ни использовал — все равно не так передается в задачу, и все ломается.

Похоже, дело не в кавычках, а в том, что -EncodedCommand, так же, как и -Command ожидает однострочный скрипт, а ему передаётся многострочный.

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

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 11:50 03-07-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis
Ну, я думал об этом, но... Просто меня бомбят иностранцы, которые запускают все не глядя, как сказал их бог-блоггер.

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 11:54 03-07-2020
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
farag
Попробовать оформить в одну строку. Для начала, я бы убрал переменную PS1Script, а сам скрипт поместил бы в конец основного скрипта после exit (чтобы не выполнялся) - это позволит использовать возможности редактора (подсветку синтаксиса и пр.). Перед этой частью скрипта поместил бы уникальную метку, например #SCHEDULER-PART. Далее, подготовил бы все строки для склеивания в одну - добавил бы ; везде, где нужно. Избавился бы от многострочных @" ", собрав каждую в одну (там вроде ничего такого, xml и вставки c#). И, наконец, финт ушами - перед созданием задачи скрипт сканирует сам себя до строки #SCHEDULER-PART и все следующие строки, кроме строк-комментариев, склеивает в одну, кодирует в base64 и добавляет задачу.

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

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 12:25 03-07-2020
farag



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

Цитата:
кодирует в base64

Звучит жутко... Но от кодирования бы и надо избавиться. Иначе для чего все это?)

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 12:27 03-07-2020
Smitis



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

Цитата:
Но от кодирования бы и надо избавиться.

Зачем? Кодирование решает проблему с кавычками в кавычках, пробелами и прочими специальными символами и прочими фокусами связанными с разбором командной строки, передаваемой powershell. Я, например, так выполнение команд PS в командной строке в FAR-е сделал. Отлично получилось.
 
Добавлено:

Цитата:
Звучит жутко

А что же тогда в строке 146?

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

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 12:41 03-07-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis
Я-то хотел избавиться от кодирования, так как жалуются. Не смогу я объяснить людям, почему их некро-антивирус удаляет файл при попытке скачивания.

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 12:58 03-07-2020
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
farag
Был не прав, многострочные скрипты прекрасно кодируются и с кавычками и даже с комментариями

Код:
$scr = {
$v = @"
текст на русском
для проверки
"@
# тестовая функция
function test($s) {
    echo $s # просто выводим текст
}
test $v
}
$b64 = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($scr))
echo $b64
 
powershell -EncodedCommand $b64
 


Цитата:
Не смогу я объяснить людям, почему их некро-антивирус удаляет файл при попытке скачивания.

Так антивирус срабатывает на ToBase64String в скрипте? Или может просто на пересылаемый ps1?

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

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 13:12 03-07-2020
Открыть новую тему     Написать ответ в эту тему

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