在Powershell中使用弹出窗口收集用户输入

问题描述 投票:0回答:1

所以我正在尝试准备一个简单的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的方式):用[void] [Reflection.Assembly] :: LoadWithPartialName( 'Microsoft.VisualBasic')

,并没有使其变得更好。 具有以上两个选项,PowerShell在第三次运行后会挂起。第一次运行后有时会挂起。奇怪的是,它成功运行并运行了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,这会使用户感到困惑,导致点击复制并等待某些操作发生(因为目的是传输文件…)

另一个消极的事情是,您可以使用什么文本和标题(或者至少当我尝试使用空格时可以使用什么,但在术语上非常有限,但是无论用引号还是双引号都不会识别出来)报价)。但是我可以忍受这样的化妆品骗局。

我无法添加任何其他模块,因此,例如showui不幸地不是一个选项。

关于如何做到这一点的任何想法?

提前感谢

所以我正在尝试准备一个简单的robocopy脚本。该脚本将由近500个用户使用,因此我正在尝试使其尽可能简单和用户友好。收集信息,例如...

powershell input robocopy
1个回答
0
投票
有一些针对此类事物的预构建脚本,您可以按需使用或进行调整。

The AutoCopier - PowerShell File Copy Utility w/GUI

© www.soinside.com 2019 - 2024. All rights reserved.