当我的脚本启动时,它会将文件从一个目录移动到另一个目录。文件完全下载后,我启动了一个应用程序
这一切都有效,但我想要的是在移动文件时出现的弹出窗口(大文件)。
当我调试我的代码一旦它到达Move-Item Cmdlet时,它会一直等到该命令完成后再继续运行。我想要做的是在Move-Item Cmdlet运行时,弹出一个信息窗口。
我知道如何做弹出窗口和Move-Item,我只是不知道如何让它以我想要的方式工作。有什么想法吗?
弹出代码
#pop up window letting mechanic know we are waiting for the files to be downloaded before opeing the SMT application
$wshell = New-Object -ComObject Wscript.Shell
$wshell.Popup("The EAFR file is still being moved to the correct directory, please wait.",0,"SMT Status",0)
#Move-Item
$MLMoveDir = "C:\move\data\AutoUpload\"
Move-Item -LiteralPath ($filePath) $MLMoveDir
答案 0 :(得分:1)
一种选择是使用WinForms显示请等待对话框,而不是必须由用户解散的弹出窗口。类似的东西:
Add-Type -AssemblyName System.Windows.Forms
$Form = New-Object system.Windows.Forms.Form
$Label = New-Object System.Windows.Forms.Label
$Form.Controls.Add($Label)
$Label.Text = "Copying file, please wait."
$Label.AutoSize = $True
$Form.Visible = $True
$Form.Update()
#Move-Item
$MLMoveDir = "C:\move\data\AutoUpload\"
Move-Item -LiteralPath ($filePath) $MLMoveDir
#Hide popup
$Form.Close()
答案 1 :(得分:0)
所以你可以做的是将Move-Item作为一个工作,然后做一个While((get-job“jobname”)。state -ne completed){do popup}。我会看起来像这样:
#Move-Item
$MLMoveDir = "C:\move\data\AutoUpload\"
$MoveJob = Start-Job -scriptblock {Move-Item -LiteralPath ($filePath) $MLMoveDir}
#Show Popup
While($movejob.state -ne "Completed"){
$wshell = New-Object -ComObject Wscript.Shell
$wshell.Popup("The EAFR file is still being moved to the correct directory, please wait.",1,"SMT Status",0)
}
这样弹出窗口显示1秒钟,如果移动仍然发生,它会再次显示。我不知道它甚至会消失/重新显示,所以它可能是无缝的。