You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell检测软件未安装时创建计划任务执行安装脚本问题求助

核心问题出在判断逻辑错误

你代码里给$installed32赋值的语句末尾带了-ne $null,这会让这个变量最终的取值是布尔值($true代表检测到已安装,$false代表未检测到),不可能等于$null,所以If ($installed32 -eq $null)这个判断条件永远不会触发,计划任务当然不会创建。

其他需要修正的问题

  • 你用了-Like匹配但是没有加通配符,和直接用-eq效果完全一致,如果要做模糊匹配建议改成"*$software*";如果是精确匹配直接换-eq逻辑更清晰
  • 目前只检测了32位程序的注册表路径,缺少64位程序的检测逻辑,64位系统下如果安装的是64位版本的软件会出现漏判
  • 注册计划任务的时候可以直接传入-Principal参数和密码,不需要再额外调用Set-ScheduledTask修改,减少冗余操作

修正后代码

$software = "Screen Capture Module - 15.2.8.747";
# 同时检测32位和64位注册表路径
$paths = @(
    "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*",
    "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*"
)
$installed = $false
foreach ($path in $paths) {
    $match = Get-ItemProperty -Path $path -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -eq $software }
    if ($null -ne $match) {
        $installed = $true
        break
    }
}
$taskName = "ScreenCaptureInsScript"
$taskAction = New-ScheduledTaskAction -Execute 'C:\XXXXXX\Verint-SC\Install-script.bat'
$taskTrigger = New-ScheduledTaskTrigger -Once -At 7:00
$taskPrincipal = New-ScheduledTaskPrincipal -UserId "XXXXXXX\XXXXXXXX" -RunLevel Highest
$taskSettings = New-ScheduledTaskSettingsSet `
    -Compatibility Win8 `
    -AllowStartIfOnBatteries `
    -DontStopIfGoingOnBatteries `
    -StartWhenAvailable

# 未检测到安装时执行注册操作
If (-not $installed) {
    # 直接注册时传入所有参数,不需要后续修改
    Register-ScheduledTask `
    -TaskName $taskName `
    -Action $taskAction `
    -Trigger $taskTrigger `
    -Description "Verint Screen Capture Installation Script Task" `
    -Settings $taskSettings `
    -Principal $taskPrincipal `
    -User $taskPrincipal.UserID `
    -Password 'xxXxxxXXXXx' `
    -Force
}

调试的时候可以先单独输出$installed变量的值,确认检测逻辑是否符合预期,再跑完整流程。

内容的提问来源于stack exchange,提问作者Dezirdt Uzurnaim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:48:00