gpt4 book ai didi

arrays - Powershell -notin 数组不会触发 if 语句

转载 作者:行者123 更新时间:2023-12-02 08:17:45 27 4
gpt4 key购买 nike

我最近开始创建一个包含 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com