- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近开始创建一个包含 GUI 的 powershell 脚本。
为了防止 GUI 卡住,我创建了一个后台作业,其中运行我的函数“xyz”...
我想捕获特定的窗口标题。如果此窗口关闭,则应触发 if。
现在我对该脚本的问题如下:
如果我运行脚本而不将其放入后台作业,它会注意到 if 语句并返回我想要的值。
如果我运行脚本并将任务放入后台作业,该作业将不会停止并且无法识别 if 语句。
有人能解决这个问题吗?
Function xyz {
$global:TitleArray = @("Termius - Hosts","Some Window Title","...")
$global:WindowClosed = $false
$global:TitleArray | Out-Host
$global:Job = start-job -Name FindGame {
Do {
(Get-Process | Where-Object {$_.MainWindowTitle -ne ""} | Select-Object MainWindowTitle) | % {
if($_.MainWindowTitle -in $global:TitleArray){
$global:WindowFound = $true
$global:FoundWindowName = $_.MainWindowTitle
do {
$WindowArray = @()
(Get-Process | Where-Object {$_.MainWindowTitle -ne ""} | Select-Object MainWindowTitle) | % {
$WindowArray += $_.MainWindowTitle
}
if($global:FoundWindowName -notin $WindowArray){
$global:WindowClosed = $true
}
Sleep 1
} while ($global:WindowClosed -ne $true)
}
if($global:WindowClosed){
$Global:FoundWindowName | Out-Host
exit
}
Sleep 1
}
} while ($true)
}
}
xyz
最佳答案
PowerShell 作业(PSJob 类型)在单独的进程中运行,因此它们无法访问调用程序的环境,甚至无法访问全局范围中的变量。
要将信息获取到作业中,您应该在作业的脚本 block 中定义一个 param()
block ,然后使用 -ArgumentList
Start-Job
的参数来发送值。请注意,这将是一次值的传入。
要从作业返回数据,您只需像往常一样通过管道将其发送出去,并且要访问数据,您需要使用 Get-Job
来确定作业是否“具有额外的data”,如果存在,您可以使用 Receive-Job 来检索该数据。
不幸的是,这一切意味着您仍然需要主线程来管理后台作业,从而达不到目的。
你可能look into Register-ObjectEvent
instead ,并将其与某种可以引发事件的 .Net 对象配对。看起来它们确实在进程内运行,但更重要的是,它们可以根据您可能真正感兴趣的事件触发,而无需管理循环。
因此,最简单的情况是,也许只是为了熟悉一下,您可以 look at a timer example where a timer object fires the event on an interval:
$timer = new-object timers.timer
$action = {write-host "Timer Elapse Event: $(get-date -Format ‘HH:mm:ss’)"}
$timer.Interval = 3000 #3 seconds
Register-ObjectEvent -InputObject $timer -EventName elapsed –SourceIdentifier thetimer -Action $action
$timer.start()
#to stop run
$timer.stop()
#cleanup
Unregister-Event thetimer
但是 Microsoft 页面上的示例甚至包括从 WMI 监视进程创建事件,因此和/或进程退出事件(?)可能值得研究。
关于arrays - Powershell -notin 数组不会触发 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54206385/
在 Symfony2 中,用户和角色之间存在多对多关系。我正在尝试获取未链接到 ROLE_SUPER_ADMIN 的所有用户的列表。角色。 在迁移到 Symfony2/Doctrine 之前,我通过简
我想选择不在特定服务中的成员。我有 3 张 table : 成员 服务 membre_service(membre与service的关系) 我正在使用学说 2,在 SQL 中我的查询是: SELECT
我最近开始创建一个包含 GUI 的 powershell 脚本。 为了防止 GUI 卡住,我创建了一个后台作业,其中运行我的函数“xyz”... 我想捕获特定的窗口标题。如果此窗口关闭,则应触发 if
在 Symfony2 中,用户和角色之间存在多对多关系。我正在尝试获取未链接到 ROLE_SUPER_ADMIN 角色的所有用户的列表。 在迁移到 Symfony2/Doctrine 之前,我已经通过
是否有 NotIn LINQ 方法? // A: 1,2,3,4,5 // B: 4,5,6,7,8 C = A.NotIn(B); // C: 1,2,3 最佳答案 IEnumerable.Exce
我在我的数据库中存储了一个字符串数组(数据库列类型是 JSON)。有一种形式允许用户向这个数组添加一个值。我想确保这个数组中没有重复项。 notIn验证规则似乎是防止重复的最简单解决方案,但它区分大小
你好,我有一个 mysql 查询,它在 sequelize.query 中工作正常,查询是 select list_name from lists l where l.list_id not in (
我有以下 Subsonic 3.0 查询,其中包含一个嵌套的 NotIn 查询: public List GetRandomOrdersForNoReason(int shopId, int type
我希望 Sequelize 将 ID 不在数组中的所有值返回给我。 如果 $notIn 的值是一个空数组,Sequelize 不会返回任何内容,但如果数组包含一个空值,它会返回我。 这不会给我任何返回
我是一名优秀的程序员,十分优秀!