Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/29: Рейтинг темы: голосов - 29, средняя оценка - 4.83
50 / 16 / 11
Регистрация: 27.03.2013
Сообщений: 788
1

Функция с таймером выбора действия или выполнение действия по умолчанию

15.09.2017, 12:28. Просмотров 5318. Ответов 5
Метки нет (Все метки)


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

Ниже приведен пример:

Происходит запрос значения в переменную, если пользователь нажал просто Enter и значение переменной осталось
пустым, тогда подставляется значение по умолчанию.
Если введено значение, то тогда введенное значение подставляется в функцию.

Кликните здесь для просмотра всего текста
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function  timer_custom {
 
$a =""
$a = $(read-host "Введите путь к файлу")
write-host
#wait-event $a -timeout 7
$script:path = Switch ($a){
{$a }{ $a}
Default {"D:\script-ps"} 
           } 
 
                      } 
 
timer_custom
 
$path
write-host


Возможно ли сделать так, чтобы пользователь не нажимал вообще клавиш, если не собирается вводить значение,
а скрипт сам, по истечении заданного периода времени, закроет интерактивное окно и введет значение по умолчанию, и продолжит свою работу ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2017, 12:28
Ответы с готовыми решениями:

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

Выполнение действия на странице после срабатывания действия в другом скрипте
В теле страницы есть скрипт такого вида: <script>(function(d,a,b){let...

Как ускорить выполнение кода? (Получение цвета пикселя, сравнение и выполнение действия)
Всем привет. Нужна консультация экспертов) Программа такая. Есть пиксель на экране, в нем то...

Калькулятор. Как осуществить при повторном нажатии на "+" или другой знак, выполнение действия
Есть хоть идея у кого-нибудь???:wall:

__________________
Помогаю в написании курсовых работ и дипломов здесь.
Записывайтесь на профессиональные курсы DevOps-инженеров
5
1877 / 1102 / 425
Регистрация: 22.01.2016
Сообщений: 3,050
15.09.2017, 14:29 2
Цитата Сообщение от masli Посмотреть сообщение
Возможно ли сделать так, чтобы пользователь не нажимал вообще клавиш, если не собирается вводить значение
Может это поможет в реализации задуманного - read-HostTimeout
0
50 / 16 / 11
Регистрация: 27.03.2013
Сообщений: 788
19.09.2017, 17:14  [ТС] 3
Данный скрипт выбивает ошибки

Кликните здесь для просмотра всего текста
PowerShell
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
Function read-HostTimeout {
###################################################################
##  Description:  Mimics the built-in "read-host" cmdlet but adds an expiration timer for
##  receiving the input.  Does not support -assecurestring
##
##  This script is provided as is and may be freely used and distributed so long as proper
##  credit is maintained.
##
##  Written by: [email]thegeek@thecuriousgeek.org[/email]
##  Date Modified:  10-24-14
###################################################################
 
# Set parameters.  Keeping the prompt mandatory
# just like the original
param(
    [Parameter(Mandatory=$true,Position=1)]
    [string]$prompt,
    
    [Parameter(Mandatory=$false,Position=2)]
    [int]$delayInSeconds
)
    
    # Do the math to convert the delay given into milliseconds
    # and divide by the sleep value so that the correct delay
    # timer value can be set
    $sleep = 250
    $delay = ($delayInSeconds*1000)/$sleep
    $count = 0
    $charArray = New-Object System.Collections.ArrayList
    Write-host -nonewline "$($prompt):  "
    
    # While loop waits for the first key to be pressed for input and
    # then exits.  If the timer expires it returns null
    While ( (!$host.ui.rawui.KeyAvailable) -and ($count -lt $delay) ){
        start-sleep -m $sleep
        $count++
        If ($count -eq $delay) { "`n"; return $null}
    }
    
    # Retrieve the key pressed, add it to the char array that is storing
    # all keys pressed and then write it to the same line as the prompt
    $key = $host.ui.rawui.readkey("NoEcho,IncludeKeyUp").Character
    $charArray.Add($key) | out-null
    Write-host -nonewline $key
    
    # This block is where the script keeps reading for a key.  Every time
    # a key is pressed, it checks if it's a carriage return.  If so, it exits the
    # loop and returns the string.  If not it stores the key pressed and
    # then checks if it's a backspace and does the necessary cursor 
    # moving and blanking out of the backspaced character, then resumes 
    # writing. 
    $key = $host.ui.rawui.readkey("NoEcho,IncludeKeyUp")
    While ($key.virtualKeyCode -ne 13) {
        If ($key.virtualKeycode -eq 8) {
            $charArray.Add($key.Character) | out-null
            Write-host -nonewline $key.Character
            $cursor = $host.ui.rawui.get_cursorPosition()
            write-host -nonewline " "
            $host.ui.rawui.set_cursorPosition($cursor)
            $key = $host.ui.rawui.readkey("NoEcho,IncludeKeyUp")
        }
        Else {
            $charArray.Add($key.Character) | out-null
            Write-host -nonewline $key.Character
            $key = $host.ui.rawui.readkey("NoEcho,IncludeKeyUp")
        }
    }
    ""
    $finalString = -join $charArray
    return $finalString
}


Выбивает ошибки и бесконечный цикл этих ошибок

Кликните здесь для просмотра всего текста
Исключение при вызове "ReadKey" с "1" аргументами: "Метод или операция не реализована."
строка:66 знак:4
+ $key = $host.ui.rawui.readkey("NoEcho,IncludeKeyUp")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : NotImplementedException

Исключение при вызове "ReadKey" с "1" аргументами: "Метод или операция не реализована."
строка:66 знак:4
+ $key = $host.ui.rawui.readkey("NoEcho,IncludeKeyUp")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : NotImplementedException


Этот пример наглядно показывает что проблема в аргументах передаваемых методу readkey

Кликните здесь для просмотра всего текста
PowerShell
1
2
3
4
5
6
7
8
Write-Host "Нажмите любую клавишу для продолжения … или Ctrl+C для отмены"
$x = $host.ui.rawui.readkey("NoEcho")
$a = "Скрипт"
$b = "успешно"
$c = "выполнен !!!"
Write-Host
Write-Host $a $b $c
Write-Host


Отчего такие ошибки ?

Добавлено через 25 минут
PowerShell
1
(!$host.ui.rawui.KeyAvailable)
Что имеется ввиду в этом условии
$host.ui.rawui.KeyAvailable – содержит булево значение true или false

Проверяет было ли нажатие клавиши или нет ?
А для чего знак отрицания - "!" ?

Например это условие

PowerShell
1
(!$host.ui.rawui.KeyAvailable) -and ($count -lt $delay)
объединены логическим оператором -and.
В результате все выражение (заключенное в фигурные скобки) будет истинным лишь при выполнении обоих условий.

$count -количество нажатий
$delay - время задержки

($count -lt $delay) - это условие понятно

А как это "читать"?

(!$host.ui.rawui.KeyAvailable) -and ($count -lt $delay)

PowerShell
1
(!$host.ui.rawui.KeyAvailable) -and ($count -lt $delay)
Добавлено через 18 минут
Уточнение - ошибки появляются при выполнении в PowerShell ise ?

Но почему ?

Добавлено через 7 минут
При запуске скрипта через консоль и указание в скрипте , вызова функциии вот так

PowerShell
1
read-HostTimeout
появляется запрос на ввод данных и так строка остается, пока что нибудь не будет введено.

Если передаю 2 параметра, то 1-й подставляется сразу и мне не предлагается что-либо ввести

PowerShell
1
read-HostTimeout 'Строка' 10
Но ведь по логике, в начале должен выйти запрос на ввод данных и если по истечении срока пользователь ничего не ввел, только тогда подставляется значение, тогда что здесь не так ?
0
1877 / 1102 / 425
Регистрация: 22.01.2016
Сообщений: 3,050
19.09.2017, 17:28 4
masli,

PowerShell
1
2
3
$a = read-HostTimeout -prompt 'Y/[N]' -delayInSeconds 5
if ($a[-1] -eq $null){$a[-1] = 'N'}
Write-host "`nВыбрано:" $a[-1]
PS C:\> $a = read-HostTimeout -prompt 'Y/[N]' -delayInSeconds 5; if ($a[-1] -eq
$null){$a[-1] = 'N'}; Write-host "`nВыбрано:" $a[-1]
Y/[N]:
Выбрано: N
PS C:\> $a = read-HostTimeout -prompt 'Y/[N]' -delayInSeconds 5; if ($a[-1] -eq
$null){$a[-1] = 'N'}; Write-host "`nВыбрано:" $a[-1]
Y/[N]: Y
Выбрано: Y
0
50 / 16 / 11
Регистрация: 27.03.2013
Сообщений: 788
20.09.2017, 12:36  [ТС] 5
Кликните здесь для просмотра всего текста
PowerShell
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
clear
Function read-HostTimeout {
 
<# Описание: Имитация встроенного командлета "read-host" 
 но добавляет окончание
 времени для получения ввода информации. 
 Не поддерживает -  asSecureString
 Этот скрипт предоставляется как есть и может быть свободно использован
 и распространен до тех пор, пока свойсвтенной разрешение на передачу
 поддерживается
      Написано: [email]thegeek@thecuriousgeek.org[/email]
    Дата изменения:  10-24-14
 
   Установка параметров.  Сохранение запроса обязательно
 как оригинал.
 параметрам вызова функции можно жестко приписать
 определенный тип значения. Для этого нужно просто указать
 имя соответствующего .NET-типа в квадратных скобках 
 перед именем параметра в определении функции
 например так - [string]$prompt
 Дополнительные параметры функции
 Mandatory – Принимает два значения True обязательный для заполнения 
 и False необязательный;
 Position – Позиция переменной при вызове функции; #>
 
param(
    [Parameter(Mandatory=$true,Position=1)]
    [string]$prompt,
    
    [Parameter(Mandatory=$false,Position=2)]
    [int]$delayInSeconds
)
 
<# $prompt  –  обязательная переменная при вызове функции
$delayInSeconds   – не обязательная переменная при вызове функции
$sleep = 250
$delay = ($delayInSeconds*1000)/$sleep
 Но если ее не указать, тогда переменная $delay , будет иметь значение 0.
   Выполнить математическое преобразование установленного времени задержки
в миллисекундах и деленное на значение времени ожидания, для того чтобы было 
установлено правильное время задержки таймера
#>
 
    $sleep = 250
    $delay = ($delayInSeconds*1000)/$sleep
    $count = 0
 
<#  Класс ArrayList  -  Реализует интерфейс IList с помощью 
    массива с динамическим изменением размера по требованию; 
     предназначен для хранения однородных коллекций объектов
  Интерфейс IList - Представляет необобщенную коллекцию объектов,
  к каждому из которых можно получить индивидуальный доступ по индексу. #>
 
    $charArray = New-Object System.Collections.ArrayList
    Write-host -nonewline "$($prompt):  "
 
 
 }
 
read-HostTimeout 'Строка' 10
 
$a = read-HostTimeout -prompt 'Y/[N]' -delayInSeconds 5
if ($a[-1] -eq $null){$a[-1] = 'N'}
Write-host "`nВыбрано:" $a[-1]
write-host


Не удается индексировать в массив NULL.


Кликните здесь для просмотра всего текста
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
Строка:  Y/[N]:  Не удается индексировать в массив NULL.
D:\script-ps\scripts\read-HostTimeout.ps1:63 знак:5
+ if ($a[-1] -eq $null){$a[-1] = 'N'}
+     ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray
 
Не удается индексировать в массив NULL.
D:\script-ps\scripts\read-HostTimeout.ps1:64 знак:1
+ Write-host "`nВыбрано:" $a[-1]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray


Добавлено через 1 час 7 минут
Цитата Сообщение от masli Посмотреть сообщение
Что имеется ввиду в этом условии
А вопросы по коду, полупуста прокомментируйте кто может...
0
50 / 16 / 11
Регистрация: 27.03.2013
Сообщений: 788
21.09.2017, 14:51  [ТС] 6
и почему в powershell ise , не работает $host.ui.rawui.KeyAvailable
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.09.2017, 14:51

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Отмена действия по умолчанию
Здравствуйте! есть кнопка типа submit. я хочу, чтоб при нажатии на неё отменялось действие по...

Выполнение действия
Доброго времени суток, форумчане! Возникла такая проблемка, есть сайт, на нём есть картинка при...

Постоянное выполнение действия
если я выполнение рисования на канве делаю через onmousemove все отлично работает $( &quot;#games&quot;...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.