Сбор пользовательского ввода с помощью всплывающего окна в Powershell - PullRequest
0 голосов
/ 26 мая 2020

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

для сбора такой информации, как источник и место назначения, я хотел, чтобы всплывающее окно окно, предлагающее пользователям ввести информацию. Я проверил на других форумах и здесь, пока что нашел несколько альтернатив, к сожалению, ни одна из них не «помогает»

Вариант 1 (мой любимый, кроме PowerShell, зависает, когда я его использую):


Add-Type -AssemblyName Microsoft.VisualBasic

$title = 'Your Current File Shares (Source)'
$msg   = 'Please enter the EEX file share you want to copy from ( please make sure the format is \\server\share\...) :'

$source = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)

Add-Type -AssemblyName Microsoft.VisualBasic

$title = 'Your new drive (Destination)'
$msg   = 'Please enter to where you want to copy your files (please make sure you choose the full destination) :'

$destination = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)



Robocopy $source $Destination /log:N:\logfile.txt 

Вариант 2 (похоже на вариант, только другой способ вызова VB, кажется): ответ на первую строку Add-Type -AssemblyName Microsoft.VisualBasi c с [void ] [Reflection.Assembly] :: LoadWithPartialName ('Microsoft.VisualBasi c') , ничуть не лучше.

с обоими двумя вариантами выше PowerShell зависает после 3-го запуска. Иногда после первого запуска зависает. Странно то, что он работает успешно и выполняет команду robocopy, но после этого перестает отвечать через несколько минут. Не уверены, что VB зацикливается в фоновом режиме и его нужно остановить?

Вариант 3:

$source = Read-Host 'Enter Your current file share:' -AsSecureString
$destination = Read-Host 'Enter Your new file share:' -AsSecureString

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

Вариант 4:

function copy_files {
    param (
        [string]$Copy_from,
        [string]$Copy_to
    )
    [pscustomobject]@{
        copy_from = $Copy_from
        copy_to = $copy_to
    }
}

$result = Invoke-Expression (Show-Command Copy_files -PassThru )

$result 

имеет форму, которая действительно нежелательно, с «копией» посередине внизу (внизу формы можно увидеть ok / copy / cancel), что может сбить с толку пользователей, заставляя нажимать копию и ждать, пока что-то произойдет (так как цель состоит в том, чтобы передать files…)

еще одна отрицательная вещь заключается в том, что он очень ограничен в терминах того, какой текст и заголовок вы можете использовать (или, по крайней мере, то, что я могу использовать, поскольку я пытался использовать пробелы, но он не распознал бы это независимо от если поместить их в кавычки или двойные кавычки). Но с таким cosmeti c con я могу жить.

Я не могу добавлять дополнительные модули, поэтому showui, например, не вариант.

Есть идеи, как это можно сделать?

Заранее спасибо

1 Ответ

0 голосов
/ 26 мая 2020

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

AutoCopier - Утилита копирования файлов PowerShell с GUI

Утилита PowerShell GUI для копирования файлов на компьютеры на основе предоставленного текстового файла с именами хостов / IP-адресами. Пожалуйста, прочтите ниже для получения более подробной информации, и отзывы будут признательны!

Скачать: AutoCopier.ps1

...