, поэтому я пытаюсь подготовить простой скрипт 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, например, не вариант.
Есть идеи, как это можно сделать?
Заранее спасибо