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

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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Artem_Butenko
Другой вариант - экранировать цифру 3 символом "^":
Код:
Echo Mode Con Cols=52 Lines=^3>> "MyScript.cmd"

Всего записей: 289 | Зарегистр. 19-05-2006 | Отправлено: 18:22 08-01-2024 | Исправлено: virjokk, 18:22 08-01-2024
Artem_Butenko



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
 
Спасибо Вам. Теперь разобрался.

Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 18:24 08-01-2024 | Исправлено: Artem_Butenko, 18:25 08-01-2024
Renua



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день, коллеги.
Помогите написать bat-файл для очистки Temp-папок для Windows7, 8.1, 10. За ПК сидят по 2-3 человека. Хочется запустить bat-файл для очистке на всех ПК Temp-каталогов под всеми пользователями, в том числе C:\Users\User\AppData\Local\Temp. Чтоб удалились  не только временные данные, но и временные папки хранящиеся в тех же  каталогах.  
Данный код удаляет временные данные, но не удаляет временные папки, только под УЗ активного пользователя:
del /s /f /q  %windir%\Temp\*.*
del /s /f /q %Temp%\*.*
del /s /f /q  %tmp%\*.*
rd /s /q  %windir%\Temp\*.*
rd /s /q  %tmp%\*.*
rd /s /q  %Temp%\*.*
pause
Помогите решить данный вопрос.

Всего записей: 62 | Зарегистр. 22-10-2014 | Отправлено: 19:04 11-01-2024
virjokk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Renua
Попробуйте так:
Код:
for %%a in ("%temp%" "%tmp%" "%windir%\Temp") do (
    if not %%a=="" (
         if exist %%~a\ (
             for /D %%b in ("%%~a\*") do rd /S /Q "%%~fb"
             del /F /Q "%%~fa\*"
         ) else (
             del /F /Q "%%~fa"
         )
    )
)

Всего записей: 289 | Зарегистр. 19-05-2006 | Отправлено: 21:54 12-01-2024 | Исправлено: virjokk, 06:16 13-01-2024
ipmanyak



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

Код:
 
SetLocal EnableExtensions                                                                                                                        
                                                                                                                                                 
For /F "Tokens=2*" %%I In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /V ProfilesDirectory') Do Set Profiles=%%J
Call Set Profiles=%Profiles%                                                                                                                    
For /F "Delims=" %%I In ('Dir /B /AD-S-H "%Profiles%" ^| FindStr /V /B /I /C:"All Users"') Do (                                                  
  if "%Profiles%\%%I" NEQ "%Profiles%\Public" (                                                                                                  
    Del /F /S /Q "%Profiles%\%%I\Local Settings\Temp\*.*"                                                                                          
    FOR /F %%a in ('DIR /AD /B  "%Profiles%\%%I\Local Settings\Temp" ') do (                                                                      
      RD  "%Profiles%\%%I\Local Settings\Temp\%%a"  /S /Q                                                                                          
     )                                                                                                                                            
   )                                                                                                                                            
  )                                                                                                                                              
exit                                                                                                                                  
 

 
Запускать от админа.
Список юзеров берется из реестра, каталог Public пропускаем,  но можешь и оставить для упрощения батника, остальные каталоги типа All users скрытые и батник их пропустит автоматом.
Если файл или каталог занят каким-то процессом, то само собой не удалится.  
 
P.S.
Батники обсуждаются в другой  ветке -     Командная строка, батники, сценарии - bat, cmd ( 1 2 3 4 5 ... 171 172 173 174 175 )
http://forum.ru-board.com/topic.cgi?forum=5&bm=1&topic=50615&start=3480#lt
Здесь powershell, vbs скрипты


----------
В сортире лучше быть юзером, чем админом...

Всего записей: 11743 | Зарегистр. 10-12-2003 | Отправлено: 10:32 13-01-2024 | Исправлено: ipmanyak, 10:36 13-01-2024
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Супербатник для реанимации бесхозной винды (внимание! шифровальщика вычистит, но файлы не расшифрует)
 
https://www.reddit.com/r/TronScript/wiki/index/
 
Скомпилирован автором в полгигабайтный exe вместе с утилитами, которые запускает по ходу дела. Файл самораспаковываюшийся, так что можно посмотреть на творчество этого титана powershell-ненавистничеcтва.

Всего записей: 17168 | Зарегистр. 14-10-2001 | Отправлено: 16:06 22-01-2024 | Исправлено: LevT, 16:09 22-01-2024
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто-нибудь хочет сообща разобраться одновременнно  
 
1) с Windows Sandbox
2) в быстрой настройке винды (самостоятельной, а не чужими скриптами "всё-в-одном")
3) С# (опционально, для отважных)  
 
??  
 
Отвечайте тут.
 
По первым двум пунктам я сам кое-что знаю и умею, по третьему нашёл отличные исходники, им посвящённые. Смог настроить дотнет (там 3.1) и нугет и их скомпилировать.  
 
Хорошо бы изучить эти исходники - чтобы перевести их на повершел или на что угодно. Одновременно можно просто пользоваться скомпилированной прогой - и учиться "быстро настраивать" винду в виндовой песочнице (то есть с нуля).

Всего записей: 17168 | Зарегистр. 14-10-2001 | Отправлено: 15:58 26-01-2024 | Исправлено: LevT, 16:47 26-01-2024
kraeved



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

Цитата:
DeZz спрашивает:
Как послать текст из буфера обмена на любой сервис одноразовых секретов?


 
$ type shareSecret.ps1
# SPDX-FileCopyrightText: © 2024 kraeved (forum.ru-board.com)
# SPDX-License-Identifier: Apache-2.0
 
<#
.SYNOPSIS
    Скрипт передаёт сообщение из буфера обмена на сервер Pwpush.com,
    который позволяет посмотреть это сообщение ограниченное число раз
 
.NOTES
    2024-02-05
    * Написал скрипт, проверил на PowerShell 5.1 и 7.2.18
 
.LINK
    Pwpush API github.com/pglombardo/PasswordPusher/wiki/Password-API
#>
 
# Настраиваем условия сгорания сообщения
$days  = 7    # 1-30 дней
$views = 1    # 1-100 просмотров
 
# Получаем сообщение из буфера обмена
$message = Get-Clipboard -Raw
 
# Проверяем длину сообщения
if (($message.length -lt 1) -or ($message.length -gt 1048576)) {
    Throw "Ошибка. Сообщение может быть от 1 до 1048576 символов."
}
 
# Готовим сообщение и настройки сгорания в формате JSON
$body = @{
    "password" = @{
        "payload" = "$message"
        "expire_after_days" = $days
        "expire_after_views" = $views
        "deletable_by_viewer" = $false
    }
} | ConvertTo-Json
 
# Отправляем на сервер
$post_params = @{
    Uri = "https://pwpush.com/p.json"
    Method = "Post"
    ContentType = "application/json; charset=utf-8"
    Body = "$body"
}
$secret_id = (Invoke-RestMethod @post_params).url_token
 
# Проверяем ответ сервера
if ($secret_id.length -lt 1) {
    Throw "Ошибка. Сервер выдал что-то не то."
}
 
# Готовим ссылку (ru можно заменить на другой язык)
$secret_link = "https://pwpush.com/ru/p/$secret_id"
 
# Копируем ссылку в буфер обмена
Set-Clipboard -Value $secret_link
 
# Выводим ссылку на экран
Write-Host $secret_link -ForegroundColor green
 
$ powershell -f shareSecret.ps1
https://pwpush.com/ru/p/rpstdteyabyhga

Всего записей: 1000 | Зарегистр. 01-03-2003 | Отправлено: 02:57 05-02-2024 | Исправлено: kraeved, 21:22 06-02-2024
LevT



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

Наткнулся на изумительный пример "registry-oriented programming" хака
https://forums.mydigitallife.net/posts/1733596
 
Идея в том, что несохранённый на диск PS скрипт (по желанию, с C# вставками) исполняется по клику на пункт контекстного меню проводника.
 
Тут reg файл, который к папке проводника добавляет пункт MakeIso, по клику на который папка упаковывается в ISO.
 
 
-----
 
Если кто-то ещё не забыл батники и фокусы с проводником и регистром (всякое экранирование, например, на стыке языков), распишите пожалуйста как это работает. Да, мне лень всё это вспоминать, есть занятия приоритетней.
 
В случае появления такого мануала, я берусь дописать повершел часть и затем всё в целом разжевать до такого состояния, которое доступно массам "продвинутых юзеров".

Всего записей: 17168 | Зарегистр. 14-10-2001 | Отправлено: 12:58 05-02-2024
Smitis



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

Цитата:
Наткнулся на изумительный пример "registry-oriented programming" хака  

Как я понял, написать всё в одну строку автор банально "ниасилил".

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

Всего записей: 3218 | Зарегистр. 09-02-2003 | Отправлено: 15:14 05-02-2024
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis
 
Надо полагать, вы можете улучшить?

Всего записей: 17168 | Зарегистр. 14-10-2001 | Отправлено: 15:16 05-02-2024
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
LevT
Я бы делал так:
Один файл скрипта PowerShell для записи в реестр.
Скрипт, который, надо поместить в реестр, оформляется в виде командлета, с каким-нибудь характерным именем. При этом должны соблюдаться условия:
- Командлет отформатирован как положено, с отступами и прочим.
- Начинается с начала строки, скажем, так: function Invoke-Registry {
- Заканчивается } в начале строки.
- Не содержит строковых литералов, разбитых на несколько строк.
- Присутствуют ВСЕ разделители ; в конце каждого оператора, разделители элементов массивов и пр.
- Комментарии, если будут, не должны содержать символов #
Все эти условия можно адаптировать под себя.
Скрипт, получив при запуске, скажем, параметр -Install, сканирует сам себя, ищет Invoke-Registry. Далее склеивает все последующие строки до строки, начинающейся с }.
При склейке:
- Удаляет комментарии от последнего # до конца строки.
- Удаляет начальные и завершающие пробелы (пробельные символы) в строке.
Далее скрипт пишет всё это в реестр в виде команды запуска PowerShell -e полученная_строка_в_base64 с передачей параметров, всё как положено. Base64 - чтобы не возиться с кавычками и пробелами.
При этом данный скрипт можно будет использовать и для отладки, не записывая ничего в реестр.
Наверняка, не всё предусмотрел, но в целом как-то так.

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

Всего записей: 3218 | Зарегистр. 09-02-2003 | Отправлено: 15:47 05-02-2024 | Исправлено: Smitis, 15:55 05-02-2024
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis
 
В целом, горячо приветствую.
Меня тоже более всего там раздражает нечитаемость собственно скрипта.  
 
Но (побуду адвокатом автора), тот видел главную фишку своего решения в отсутствии "материализованного" в ФС скрипта.
 
 
Добавлено:
 
Вот ещё годные исходники
https://github.com/damienvanrobaeys/Run-in-Sandbox
 
Run PS1, VBS, CMD, EXE, MSI, Intunewin, MSIX, or extract ISO, ZIP in Windows Sandbox very quickly just from a right-click

Всего записей: 17168 | Зарегистр. 14-10-2001 | Отправлено: 15:53 05-02-2024 | Исправлено: LevT, 15:58 05-02-2024
virjokk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеется батник авторства Capushon для очистки хром-браузеров от рекламного мусора.  
Этот батник делает многократную замену hex-строк в бинарном chrome.dll с использованием SFK, однако это происходит очень медленно с учетом количества заменяемых строк (что-то около 100) и размера бинарника (под 200 мб).  
В попытке обойтись вместо SFK встроенными средствами (PS) я предложил такое решение по мотивам когда-то написанного Skipik скрипта.  
Это быстрее, но все еще очень медленно, т. к. переменная $data, в которой 200мб, перезаписывается каждую итерацию цикла.  
Более правильным было бы сначала найти все вхождения, запомнить, затем разом все заменить, для чего предлагалось вот это порождение искусственного разума, но заставить его работать я не смог.  
Сам по себе поиск/замена в бинарнике средствами PS кажется несложным, легко гуглится множество вариантов. Однако ж найти что-то подходящее с учетом размера бинарника и количества заменямых строк пока не получается.  
Так как же все-таки на PS быстро искать/заменять строки в бинарнике?

Всего записей: 289 | Зарегистр. 19-05-2006 | Отправлено: 16:49 06-02-2024 | Исправлено: virjokk, 17:11 06-02-2024
LevT



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

Код:

# Define your binary file
$filePath = "Path to your binary file"
 
# Read the binary file
$content = [System.IO.File]::ReadAllBytes($filePath)
 
# Define your pairs of hex patterns and corresponding replacements
$hexPairs = @{
    "0x123" = "0x789"
    "0xabc" = "0xdef"
    "0x456" = "0xghi"
}
 
# Convert the binary content to a hex string
$hexString = [System.BitConverter]::ToString($content) -replace '-',''
 
# Loop through each pair of hex pattern and its replacement and replace it in the hex string
foreach ($hexPair in $hexPairs.GetEnumerator()) {
    $hexString = $hexString -replace $hexPair.Key, $hexPair.Value
}
 
# Convert the modified hex string back to a byte array
$modifiedContent = [System.Linq.Enumerable]::Range(0, $hexString.Length - 1 | Where-Object { $_ % 2 -eq 0 } | ForEach-Object { [System.Convert]::ToByte($hexString.Substring($_, 2), 16) })
 
# Write the modified content back to the binary file
[System.IO.File]::WriteAllBytes($filePath, $modifiedContent)

 
 
Добавлено:
 
Последовательность запросов, уточняющих контекст:
 
--1  
powershell code.
provide several hex patterns to match exactly.
replace all matches with provided hex substitute in one run.
 
--2
use pairs of search patterns and corresponding replacements
 
--3
Modify binary file instead of fixed input string
 
 
Можете сами поиграться в своих болталках, интересно было бы сравнить результаты
 
 
Добавлено:
 
Гуглобард родил такое (с незначительными модификациями промптов)
 

Код:

$replacementPairs = @(
    ("0xAB12CD", "0xDEADBEEF"),
    ("0xEF3456", "0xCAFEBABE"),
    ("0x1A2B3C", "0xFEEDFACE")
)  # Define pattern-replacement pairs
 
$data = Get-Content "your_file.txt" -Raw
 
foreach ($pair in $replacementPairs) {
    $pattern = $pair[0] -replace "\\", "\\"  # Escape backslashes in pattern
    $substitute = $pair[1]
    $data = $data -replace $pattern, $substitute
}
 
Set-Content "your_file.txt" $modifiedData -NoNewline

 
 
 
Альтернативный ответ гуглобарда (все промпты я объединил в один, чуть-чуть перефразировав)
 

Код:

$replacementPairs = @(
    ("0xAB12CD", "0xDEADBEEF"),
    ("0xEF3456", "0xCAFEBABE"),
    ("0x1A2B3C", "0xFEEDFACE")
)
 
$data = [System.IO.File]::ReadAllBytes("your_binary_file.bin")
 
foreach ($pair in $replacementPairs) {
    $pattern = $pair[0].ToCharArray()  # Convert pattern to individual bytes
    $substitute = $pair[1].ToCharArray()  # Convert substitute to individual bytes
 
    $offset = 0
    while (($index = $data.IndexOf($pattern, $offset)) -ge 0) {
        $data[$index..($index + $pattern.Length - 1)] = $substitute
        $offset = $index + $pattern.Length
    }
}
 
[System.IO.File]::WriteAllBytes("your_binary_file.bin", $data)
 

 
 
Контексты у меня открыты, предлагайте свои уточнения
 
Добавлено:
 
Промпт:  

powershell code.
Modify a binary file  
provide several hex patterns to match exactly.
use pairs of search patterns and corresponding replacements
evaluate every single  match with provided hex substitute but  don't apply immediately
 
Combine all the replacements and apply them in a single pass

 
гуглобард:
 

Код:

$replacementPairs = @(
    ("0xAB12CD", "0xDEADBEEF"),
    ("0xEF3456", "0xCAFEBABE"),
    ("0x1A2B3C", "0xFEEDFACE")
)
 
$filePath = "your_binary_file.bin"  # Replace with the actual file path
 
$fileBytes = [System.IO.File]::ReadAllBytes($filePath)
$modifiedBytes = $fileBytes
 
$offset = 0
$replacementIndexes = @()
 
foreach ($pair in $replacementPairs) {
    $patternBytes = [System.Text.Encoding]::ASCII.GetBytes($pair[0])
    $substituteBytes = [System.Text.Encoding]::ASCII.GetBytes($pair[1])
 
    while ($offset -lt $fileBytes.Length) {
        $index = $fileBytes.IndexOf($patternBytes, $offset)
        if ($index -ge 0) {
            $replacementIndexes += $index
            $offset = $index + $patternBytes.Length
        } else {
            break
        }
    }
}
 
$replacementIndexes = $replacementIndexes | Sort-Object -Descending
foreach ($index in $replacementIndexes) {
    [Array]::Copy($substituteBytes, 0, $modifiedBytes, $index, $substituteBytes.Length)
}
 
[System.IO.File]::WriteAllBytes($filePath, $modifiedBytes)

 
 
бинг/копилот....  повис... пришлось сбросить контекст, в новом контексте задумалсо... и родил какую-то чушь, явно не поняв что от него теперь хотят
 
По идее, Array::Copy предложенное наконец гуглобардом должно быть самым быстрым из-за оптимизаций внутри .NET CLR  
 


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

Всего записей: 17168 | Зарегистр. 14-10-2001 | Отправлено: 18:07 06-02-2024 | Исправлено: LevT, 19:01 06-02-2024
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Итак, чатоботы генерят синтаксически правильный код, который можно запустить.
Лишь эксперты могут оценить меру его бредовости и предложить изменения по существу.
 
1) Увеличилась пропасть между экспертами и новичками.
 
2) Для экспертов - утрачен смысл в написании "красивого" кода (привет kraeved которым я восхищаюсь) и вообще в опыте с синтаксисом языка.
 
Выданная "чатом гопоты" кривая  шняга может быть малыми усилиями поправлена, и делать то, что от неё требуется. И плевать на идиоматичность и прочую лирику.
 
 
Можно попросить ГоПоТу "transpile that (powershell code) to Scala 3" (скажем), и получить рабочий код с ровно той же семантикой и 1:1 синтаксисом. Можно попросить выдать более идиоматичный вариант, и получить код с flatMap, slice, zipWithIndex, вплоть до кастомных монад для интеллектуального самоудовлетворения (ценою производительности, разумеется).
 
Горе недоучкам!
 
 
Добавлено:
 
Традиционно большинству мастеров требовалась обратная связь от продвинутых пользователей-тестеров - иначе резко падали производительность и вообще мотивация.  
 
Теперь достаточно диалога с гопотой, а недоучки получат просимое и идут лесом: нужны объяснения? пытайте ту же гопоту.
А гопота-то склонна к "галлюцинациям"...
 
 
Добавлено:
 
"Всякая достаточно развитая технология неотличима от магии"
 





Снова понес... пропасть между "экспертами и новичками" обсуждаем не в этом разделе. В этом разделе "эксперты" помогают новичкам без лирики, и тебе это (помогать) не грозит, стало-быть, выключил за ненадобностью.

Всего записей: 17168 | Зарегистр. 14-10-2001 | Отправлено: 21:07 06-02-2024 | Исправлено: KLASS, 08:38 07-02-2024
virjokk

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

Код:
$replacementPairs = @(
    ("0xAB12CD", "0xDEADBEEF"),
    ("0xEF3456", "0xCAFEBABE"),
    ("0x1A2B3C", "0xFEEDFACE")
)
 
$filePath = "your_binary_file.bin"  # Replace with the actual file path
 
$fileBytes = [System.IO.File]::ReadAllBytes($filePath)
$modifiedBytes = $fileBytes
 
$offset = 0
$replacementIndexes = @()
 
foreach ($pair in $replacementPairs) {
    $patternBytes = [System.Text.Encoding]::ASCII.GetBytes($pair[0])
    $substituteBytes = [System.Text.Encoding]::ASCII.GetBytes($pair[1])
 
    while ($offset -lt $fileBytes.Length) {
        $index = $fileBytes.IndexOf($patternBytes, $offset)
        if ($index -ge 0) {
            $replacementIndexes += $index
            $offset = $index + $patternBytes.Length
        } else {
            break
        }
    }
}
 
$replacementIndexes = $replacementIndexes | Sort-Object -Descending
foreach ($index in $replacementIndexes) {
    [Array]::Copy($substituteBytes, 0, $modifiedBytes, $index, $substituteBytes.Length)
}
 
[System.IO.File]::WriteAllBytes($filePath, $modifiedBytes)

Всего записей: 289 | Зарегистр. 19-05-2006 | Отправлено: 08:27 07-02-2024
UnnPacK

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я не знаю powershell, но предположу следующее:
зачем $modifiedBytes = $fileBytes дублируется?
$offset = 0 должен быть между циклами foreach и while

Код:
 
        if ($index -ge 0) {
            $replacementIndexes += $index
            $offset = $index + $patternBytes.Length
        } else {
            break
        }
проще так записать
        if ($index-eq -1){
        break
        }
       $replacementIndexes += $index
       $offset = $index + $patternBytes.Length
 

зачем создавать массив $replacementIndexes = @() ? можно прямо в цикле while делать замену
 
[Array]::Copy($substituteBytes, 0, $modifiedBytes, $index, $substituteBytes.Length) - где $substituteBytes находится за пределами цикла foreach ($pair - тогда, что-же заменяется?!
 
while ($offset -lt $fileBytes.Length) - зачем каждый раз вычисляется длина? $fileBytes.Length можно вынести в отдельную переменную еще до всяких циклов
 
в общем, понятно, ИИ нагенерил бред

Всего записей: 226 | Зарегистр. 26-01-2014 | Отправлено: 18:15 08-02-2024 | Исправлено: UnnPacK, 18:27 08-02-2024
BorlandIMHO

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

Цитата:
почему кодировка ASCII:

Ну, для HEX, по большому счёту, без разницы "кодировка" как таковая, если вы не собираетесь "смотреть глазами в виде  текста": значение байта в диапазоне от 0x00 до 0xFF {в десятичных - от 0 до 255, в двоичных от 00000000 до 11111111}, и от "кодировки" оно никоим образом не зависит. Т.е. вообще никак не зависит...
С тем же успехом можно использовать любую другую 8-бит кодировку (на самом деле - вообще абсолютно любую; от кодировки зависит интерпретация значения байта, но никак не само значение).

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

Всего записей: 2403 | Зарегистр. 12-10-2006 | Отправлено: 21:24 08-02-2024
UnnPacK

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
в:
    $patternBytes = [System.Text.Encoding]::ASCII.GetBytes($pair[0])
    $substituteBytes = [System.Text.Encoding]::ASCII.GetBytes($pair[1])
нет преобразования из hex в строку

Всего записей: 226 | Зарегистр. 26-01-2014 | Отправлено: 22:11 08-02-2024 | Исправлено: UnnPacK, 22:45 08-02-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

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