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

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

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



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag  Отслеживание закрытия процесса и автоматический запуск .BAT

Код:
 
@echo off
set executable=C:\Windows\System32\calc.exe
set process=calculator.exe
 
:begin
tasklist |>nul findstr /b /l /i /c:%process% || start "" "%executable%"
timeout /t 3 /nobreak >nul
goto :begin
 

 
Некоторые пояснения:
    Первым делом, мы получаем с помощью команды tasklist список всех процессов, которые выполняются на компьютере.
    Вывод данной команды перенаправляем команде findstr, которая осуществляет поиск заданного процесса по его имени. Обратите внимание, что имя процесса (set process) и имя исполняемого файла (set executable) могут не совпадать.
    Если наш процесс ещё не запущен (не найден в выводе команды tasklist), то происходит его запуск || start "" "%executable%".
    Далее идёт задержка (timeout /t 3 /nobreak) на 3 секунды (задаётся параметром /t) и весь цикл повторяется с начала.
    Прервать выполнение командного файла, в данном случаи, можно нажатием Ctrl+C.
 
Подрихтуй под свои нужды.  


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

Всего записей: 11735 | Зарегистр. 10-12-2003 | Отправлено: 08:41 15-04-2020 | Исправлено: ipmanyak, 08:43 15-04-2020
westlife



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
Если запущен калькулятор, ждет пока закроется, когда закроется запускает блокнот и выходит из цикла.
Если не запущен калькулятор просто выходит из цикла.

Код:
@Echo off
chcp 65001 >nul
set "Process=win32calc.exe"
set "Execute=C:\Windows\System32\notepad.exe"
set "Found=0"
:WaitProcess
tasklist /fi "IMAGENAME eq %Process%" /FO TABLE /NH | find "%Process%" >nul
if "%errorlevel%"=="0" echo. Ждем завершения %Process% .... & timeout /t 1 /nobreak >nul & set "Found=1" & goto :WaitProcess
if "%Found%"=="0" echo.&echo.  Процесс %Process% не был запущен, пропуск запуска.
if "%Found%"=="1" echo.&echo.  Процесс %Process% завершился, запускаем "%Execute%" & start "" "%Execute%"
echo.
pause
exit

Всего записей: 1390 | Зарегистр. 12-12-2006 | Отправлено: 12:31 15-04-2020
farag



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

Код:
 
%~dp0TeamViewer.exe
 

 
Что должно отработаться после закрытия

Код:
 
takeown /F %~dp0rolloutfile.tv13
icacls %~dp0rolloutfile.tv13 /grant:r %username%:F
DEL %~dp0rolloutfile.tv13 /F /Q
 
reg delete HKCU\Software\TeamViewer /F
RMDIR %LOCALAPPDATA%\TeamViewer /S /Q
RMDIR %APPDATA%\TeamViewer /S /Q
 

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 19:16 15-04-2020
westlife



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

Цитата:
не могу совладать с синтаксисом...  


Код:
@Echo off
chcp 65001 >nul
set "Process=TeamViewer.exe"
set "Found=0"
:WaitProcess
tasklist /fi "IMAGENAME eq %Process%" /FO TABLE /NH | find "%Process%" >nul
if "%errorlevel%"=="0" echo. Ждем завершения %Process% .... & timeout /t 1 /nobreak >nul & set "Found=1" & goto :WaitProcess
if "%Found%"=="0" echo.&echo.  Процесс %Process% не был запущен, пропуск запуска.
if "%Found%"=="1" call :Run
echo.
pause
exit
:Run
echo.&echo.  Процесс %Process% завершился, выполняем очистку
takeown /F %~dp0rolloutfile.tv13
icacls %~dp0rolloutfile.tv13 /grant:r %username%:F
DEL %~dp0rolloutfile.tv13 /F /Q
 reg delete HKCU\Software\TeamViewer /F
RMDIR %LOCALAPPDATA%\TeamViewer /S /Q
RMDIR %APPDATA%\TeamViewer /S /Q  
exit /b

Всего записей: 1390 | Зарегистр. 12-12-2006 | Отправлено: 21:00 15-04-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
westlife
Добавил сверху, чтобы запускался TeamViewer, но не отрабатывается код после закрытия.

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 10:27 16-04-2020
westlife



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

Цитата:
Добавил сверху, чтобы запускался TeamViewer, но не отрабатывается код после закрытия.

 
Добавьте паузу на 2 секунды, может не успевает процесс появиться:
 

Код:
start "" "C:\Windows\System32\win32calc.exe"
timeout /t 2 /nobreak

 
Вот как должно быть: https://i.imgur.com/qPomMX2.gif
 
Можно так

Всего записей: 1390 | Зарегистр. 12-12-2006 | Отправлено: 11:50 16-04-2020 | Исправлено: westlife, 12:12 16-04-2020
Simvol09

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
 
Спасибо большое за код, работает как надо. Очень меня выручили! Мир Вам и Вашему дому. СПАСИБО ОГРОМНОЕ!

Всего записей: 15 | Зарегистр. 03-12-2019 | Отправлено: 22:13 16-04-2020
gntix



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

Цитата:

Код:
 
start "" "C:\Windows\System32\win32calc.exe"

Должно помочь:

Код:
start /wait %~dp0TeamViewer.exe

И далее уже зачистка хвостов TeamViewer.

Всего записей: 665 | Зарегистр. 07-12-2004 | Отправлено: 01:30 18-04-2020
farag



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

Код:
 
@echo off
chcp 65001 >nul
 
start /wait %~dp0TeamViewer.exe
 
set "Process=teamviewer.exe"
set "Found=0"
 
:WaitProcess
timeout /t 3 /nobreak >nul
tasklist /fi "IMAGENAME eq %Process%" /FO TABLE /NH | find "%Process%" >nul
if "%errorlevel%"=="0" set "Found=1" & goto :WaitProcess
if "%Found%"=="1" call :Run
pause
exit
 
:Run
takeown /F %~dp0rolloutfile.tv13
icacls %~dp0rolloutfile.tv13 /grant:r %username%:F
DEL %~dp0rolloutfile.tv13 /F /Q
reg delete HKCU\Software\TeamViewer /F
RMDIR %LOCALAPPDATA%\TeamViewer /S /Q
RMDIR %APPDATA%\TeamViewer /S /Q
exit /b
 

Был кишечный грипп. Только сейчас дополз... Ни так, ни эдак не работает.

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 13:30 18-04-2020
westlife



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

Цитата:
Был кишечный грипп. Только сейчас дополз... Ни так, ни эдак не работает.

Подробнее

Всего записей: 1390 | Зарегистр. 12-12-2006 | Отправлено: 14:14 18-04-2020 | Исправлено: westlife, 14:39 18-04-2020
newhk



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, привет!
Снова прошу помощи, вновь.
 
Есть скрипт.
Он должен передать переменную $pass в команду Start-Process с запуском 1Ски.

Код:
 
$path_1c = 'C:\Program Files\1cv8\8.3.15.1830\bin\1cv8.exe'
$bases = @(
    'база1'
    'база2'
    'база3'
    'база4'
    'база5'
    'база6'
    'база7'
    )
 
$i = 1
Write-Host "Список баз:"
foreach ($base in $bases) {
   "`t$i.`t$($base)"
   $i++
}
[int] $number = Read-Host 'Делаем выбор и нажмаем ENTER'
 
$pass = Read-Host "Введите пароль" –AsSecureString
 
function config_pass {
    Start-Process -FilePath $path_1c -ArgumentList "config /s db-1c\$basename /n admin /p $pass"
    }
 
function config {
    Start-Process -FilePath $path_1c -ArgumentList "config /s db-1c\$basename"
    }
 
if (($number -gt 0) -and ($number -lt (4))) # если номер больше 0, и если номер меньше $i
{
    $basename = @($bases)[$number-1]
    & config_pass
} elseif (($number -gt 3) -and ($number -lt ($i)))
{
    $basename = @($bases)[$number-1]
    & config
} else {
   "неправильно введён номер"
}
 

 
Но, по факту, зашифрованная строка не передается.
Как проверить?

Всего записей: 400 | Зарегистр. 02-02-2009 | Отправлено: 18:13 18-04-2020 | Исправлено: newhk, 18:18 18-04-2020
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
newhk
 
Комментарий не по сути вопроса:  
 
1. для вызова именованной функции амперсенд не нужен.
Он нужен для вызова безымянной функции-скриптблока через переменную, которой та присвоена
 
2. @($bases)[1]  
  - достаточно $bases[1]  

Всего записей: 17149 | Зарегистр. 14-10-2001 | Отправлено: 20:45 18-04-2020 | Исправлено: LevT, 21:42 18-04-2020
VladimirErshoff

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




Aka Grachevsky, DavidRechneev и тд.

Всего записей: 16 | Зарегистр. 09-04-2020 | Отправлено: 21:00 18-04-2020
newhk



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT
За комментарий спасибо.  
 
Переменная не отрабатывает в функции

Код:
 
function config_pass {
    $pass = Read-Host "Введите пароль" –AsSecureString
    Start-Process -FilePath $path_1c -ArgumentList "config /s db-1c\$basename /n admin /p $pass"
    }
 

Если вместо зашифрованного пароля помещенного в переменную поставить сам пароль как строку, то все работает.
Есть идеи?

Всего записей: 400 | Зарегистр. 02-02-2009 | Отправлено: 22:54 18-04-2020 | Исправлено: newhk, 22:56 18-04-2020
westlife



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

Цитата:
Если вместо зашифрованного пароля помещенного в переменную поставить сам пароль как строку, то все работает.
Есть идеи?

Я не разу не разбирался и не требовался такой метод.
Но если делать как у вас, то там будет передана строка с типом переменной в $pass: System.Security.SecureString, а не сам пароль.
Эти данные передают по другому на подобии: Start-Process -Credential $pass
Только для этого используют: $Cred = Get-Credential
Можно попробовать: Start-Process -FilePath $path_1c -ArgumentList "config /s db-1c\$basename /n admin /p $($pass | ConvertFrom-SecureString)"
Но там будет тоже шифрованный.
   
Вот так можно достать именно пароль:
Код:
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass))


Код:
"config /s db-1c\$basename /n admin /p $([System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass)))"

 

Всего записей: 1390 | Зарегистр. 12-12-2006 | Отправлено: 23:16 18-04-2020 | Исправлено: westlife, 23:40 18-04-2020
newhk



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

Всего записей: 400 | Зарегистр. 02-02-2009 | Отправлено: 00:09 19-04-2020 | Исправлено: newhk, 00:28 19-04-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
westlife
не работает никак. наверное, лучше отложить...
Пока встала другая насущная проблема:

Код:
 
Write-Host "`nЧтобы добавить новую папку, введите букву Y"
$Prompt = Read-Host -Prompt " "
if ([string]::IsNullOrEmpty($Prompt))
{
    break
}
else
{
    switch ($Prompt)
    {
        "Y"
        {
            Add-Type -AssemblyName System.Windows.Forms
            $OpenFileDialog = New-Object -TypeName System.Windows.Forms.FolderBrowserDialog
            $OpenFileDialog.Description = "Select a folder"
            $OpenFileDialog.Description = "Select a folder"
            $OpenFileDialog.RootFolder = "MyComputer"
 
            $tmp = New-Object System.Windows.Forms.Form -Property @{TopMost = $true}
            $OpenFileDialog.ShowDialog($tmp)
            if ($OpenFileDialog.SelectedPath)
            {
                Add-MpPreference -ExclusionPath $OpenFileDialog.SelectedPath -Force
            }
        }
        Default
        {
            Write-Host "`nНеправильная буква." -ForegroundColor Yellow
        }
    }
}
 

не могу понять, как сделать так, чтобы после внесения папки в исключение, был опять запрос на добавление папки до тех пор, пока пользователь сам не выйдет из петли...

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 14:14 20-04-2020 | Исправлено: farag, 14:15 20-04-2020
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
Цитата:
пока пользователь сам не выйдет из петли...

Создать петлю

Код:
do {
    Write-Host "`nЧтобы добавить новую папку, введите букву Y"
    $Prompt = Read-Host -Prompt " "
 
    if ([string]::IsNullOrEmpty($Prompt)) { break } else {
        switch ($Prompt) {
            "Y"     { Write-Host "`nВы выбрали созать новую папку!" -ForegroundColor Green }
            'Q'     { Write-Host "`nВыход есть!" -ForegroundColor Cyan }
            Default { Write-Host "`nНеправильная буква." -ForegroundColor Red }
        }
    }
 
} while ($Prompt -ne 'Q') # 'Q' - кнопка выхода

Всего записей: 3519 | Зарегистр. 16-08-2012 | Отправлено: 14:52 20-04-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Проде, пашет. А я что-то мудрил не с тем...
При вводе Q, чтобы шло дальше исполнение по списку, continue же надо?

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 15:51 20-04-2020
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
Цитата:
При вводе Q, чтобы шло дальше исполнение по списку, continue же надо?

Зачем, Q прерывает цикл и сценарий идёт дальше

Код:
...урезано...
while ($Prompt -ne 'Q') # 'Q' - кнопка выхода
 
Write-Host "`nИдём дальше!!! "

 
Добавлено:

Код:
if ([string]::IsNullOrEmpty($Prompt)) { break }

пустая строка, тоже прерывает, надо ли оно...

Всего записей: 3519 | Зарегистр. 16-08-2012 | Отправлено: 16:05 20-04-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