【发布时间】:2021-01-02 16:20:07
【问题描述】:
我正在创建一个带有 GUI 的 PowerShell 脚本,它将用户配置文件从选定的源磁盘复制到目标磁盘。我已经使用 VS Community 2019 在 XAML 中创建了 GUI。
我的复制函数是从运行空间调用的并且工作正常。我想在此运行空间中放置一个进度条,以便复制的每个文件夹都会增加进度条,但我不知道如何。
这是我的运行空间:
function RunspaceBackupData {
$Runspace = [runspacefactory]::CreateRunspace()
$Runspace.ApartmentState = "STA"
$Runspace.ThreadOptions = "ReuseThread"
$Runspace.Open()
$Runspace.SessionStateProxy.SetVariable("syncHash",$syncHash)
$Runspace.SessionStateProxy.SetVariable("SelectedFolders",$global:SelectedFolders)
$Runspace.SessionStateProxy.SetVariable("SelectedUser",$global:SelectedUser)
$Runspace.SessionStateProxy.SetVariable("ReturnedDiskSource",$global:ReturnedDiskSource)
$Runspace.SessionStateProxy.SetVariable("ReturnedDiskDestination",$global:ReturnedDiskDestination)
$code = {
foreach ($item in $global:SelectedFolders) {
copy-item -Path "$global:ReturnedDiskSource\Users\$global:SelectedUser\$item" -Destination "$global:ReturnedDiskDestination\Users\$global:SelectedUser\$item" -Force -Recurse
}
}
$PSinstance = [powershell]::Create().AddScript($Code)
$PSinstance.Runspace = $Runspace
$job = $PSinstance.BeginInvoke()
}
这是我的事件处理程序:
$var_btnStart.Add_Click( {
RunspaceBackupData -syncHash $syncHash -SelectedFolders $global:SelectedFolders -SelectedUser $global:SelectedUser -ReturnedDiskSource $global:ReturnedDiskSource -ReturnedDiskDestination $global:ReturnedDiskDestination
})
你能帮帮我吗?
【问题讨论】:
-
我的理解是运行空间没有用户界面。它被设计成非交互式的,所以没有地方显示你的进度条。如果你想这样显示,你需要手动设置运行空间和主线程之间的某种通信。
-
是的,这正是重点:/
-
那么“运行空间内的进度条”是什么意思?您想在您的 GUI 中添加一个进度条来反映运行空间中代码的进度吗?
-
是的。对不起,如果我没有更好地解释
-
@OscarLoret - 搜索
powershell runspace return data以了解从运行空间获取信息的方法。
标签: wpf powershell progress-bar runspace