Powershell显示弹出窗口,并在循环时保持更新弹出窗口的主体

如何解决Powershell显示弹出窗口,并在循环时保持更新弹出窗口的主体

我正在尝试使体内的一些数据弹出以显示Powershell。
虽然,我测试了一些方法可以正确地做到这一点。但是在更新弹出消息时,我找不到任何方法来保持循环进度。

请选中下面的消息框。

powershell.png

尽管如此,我不明白为什么png文件没有正确上传。.
因此,我在下面添加了我的powershell代码。

PowerShell代码如下。

$msgBoxTitle = "i value"
$i = 0
while(1){
    $msgBoxBody = "
        current i value is : $i
    "
    $i++;
    [System.Windows.MessageBox]::Show($msgBoxBody,$msgBoxTitle)
}

在这种情况下,我想使循环不会在循环进行时停止,并且味精盒体的值会得到更新。

有没有办法做到这一点? 谢谢。

解决方法

这并非微不足道,因为(简单地说)PowerShell在窗体上不能很好地工作。 This anwer解释了原因,并给出了如何显示非阻止表单或消息框的解决方案:

$ps = [PowerShell]::Create()
[void]$ps.AddScript({
    param($Caption,$Text)
    Add-Type -AssemblyName System.Windows.Forms
    [System.Windows.Forms.MessageBox]::Show($Text,$Caption)
})
[void]$ps.AddArgument($msgBoxTitle)
[void]$ps.AddArgument($msgBoxBody)
[void]$ps.BeginInvoke()

但是... 更新表单很棘手,而且我不确定是否有简单的方法。

This的答案提到了showui,这是一个PowerShell模块,但我对此一无所知,这可能对您的问题有些过分。

在PowerShell中显示进度的最佳做法Write-Progress。对您的代码进行一些更新:

$msgBoxTitle = "i value"
$i = 0
while (1) {
    $msgBoxBody = "current i value is : $i"
    $i++;
    Write-Progress -Activity $msgBoxTitle -Status $msgBoxBody
}

(当然,Write-Progress在您知道操作将花费多长时间并且可以指定一个百分比之后会显示进度条,但是效果最好。 )

,

您可以创建自己的弹出表单,而不必使用ShowDialog()方法,而只需使用Show()。 然后,在脚本的其余部分中,更新标签并在处理完成后将其丢弃。

为方便起见,我将代码放在函数中创建示例表单

function Show-MyPopup {
    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing

    $form = New-Object System.Windows.Forms.Form
    $form.Size = New-Object System.Drawing.Size(400,200)
    $form.FormBorderStyle = 'FixedSingle'
    $form.StartPosition = 'CenterScreen'
    $form.TopMost = $true
    $form.ControlBox = $False
    $form.Text = 'i value'

    $label = New-Object System.Windows.Forms.Label
    $label.Size = New-Object System.Drawing.Size(360,22)  # or write '360,22'
    $label.Left = ($form.Width - $label.Width) / 2
    $label.Top = ($form.Height - $label.Height * 2) / 2
    $label.Text = 'Current i value is: 0'
    # in order to address this control later,you must Name it
    $label.Name = 'Label1'
    $form.Controls.Add($label)

    $button = New-Object System.Windows.Forms.Button 
    $button.Size = New-Object System.Drawing.Size(75,24)
    $button.Left = $form.Width - $button.Width - 20
    $button.Top = $form.Height - $button.Height * 3
    $button.Text = 'Exit'
    $button.Add_Click({ $form.Close() })
    $form.Controls.Add($button)
    $form.AcceptButton = $button
    $form.Show()
    # return the form object to the calling script
    $form
}

将其放置在适当的位置,然后在其下面编写控制表单的其余脚本:

# call the function to show the popup and capture the form itself in a variable
$popup = Show-MyPopup
for ($i = 1; $i -le 10; $i++) {
    # update the label using the form's Controls collection
    $popup.Controls.Item('Label1').Text = "Current i value is: $i"
    # do what needs to be done here.
    # for demo,just sleep for one second
    Start-Sleep -Seconds 1
}

# very important! remove the form from memory when done
$popup.Dispose()
$popup = $null

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-