在 Do...Until 内部调用时,应用程序不会从 Powershell 脚本触发

如何解决在 Do...Until 内部调用时,应用程序不会从 Powershell 脚本触发

我正在尝试构建自定义 Windows 系统实用程序脚本,该脚本提供了一些具有相关按键选择的任务。

对于清理任务,我试图从这个脚本调用 CCleaner64.exe,它的正确开关如here 所述。到目前为止,我构建的脚本如下:

$ScriptDir = Split-Path $MyInvocation.MyCommand.Path
if (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
    if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) {
        $CommandLine = "-File `"" + $MyInvocation.MyCommand.Path + "`" " + $MyInvocation.UnboundArguments
        Start-Process -FilePath PowerShell.exe -Verb Runas -ArgumentList $CommandLine
        Exit
    }
}
Set-Location $ScriptDir; Echo 'Current Directory: ' + (Get-Location | Out-String)

function SysUtilMenu {
    param (
        [string]$Title = 'Windows System Utility'
    )
    Clear-Host
    Write-Host "============ $Title ==========="
    Write-Host "1: Do task 1 here."
    Write-Host "2: Cache/Temp Files Cleanup."
    Write-Host "Q: Exit this Application."
}

Do
{
    SysUtilMenu
    $selection = Read-Host "Press key to run given task..."
    switch ($selection)
    {
        '1' {
            ## Do task 1 here...
        } '2' {
            $CclnrApp64 = "$Env:ProgramFiles\CCleaner\CCleaner64.exe"
            Start-Process $CclnrApp64 -ArgumentList '/Clean'
            Start-Process $CclnrApp64 -ArgumentList '/Registry'
        }
    }
}
Until($selection -eq 'q')

但是当我按“2”时,它不会调用我检查过的任务栏中的 CCleaner64.exe。

我不明白,为什么相同的 Start-Process 行在该脚本中不起作用,但如果我单独打开 Powershell 终端并逐一运行以下命令,它会完美运行吗?

>
$CclnrApp64 = "$Env:ProgramFiles\CCleaner\CCleaner64.exe"
Start-Process $CclnrApp64 -ArgumentList '/Clean'

是不是因为脚本的自提升,我已经负责设置脚本的位置而不是C:\Windows\System32

非常感谢提供详细解释的建议...

解决方法

从您添加的链接,CCleaner 操作窗格焦点的命令行参数 下的文档来看,它说开关应该是 /CLEANER,而不是 /Clean,并且由于您的代码还显示了开关 /Registry,我认为这就是您想要的(在特定标签页上打开应用)。

我最初的想法是:

  • 您可能需要添加 -Wait 开关,以便 PowerShell 在第一个命令完成后才启动第二个命令。
    所以完整的命令将是 Start-Process -FilePath "$CclnrApp64" -ArgumentList '/Cleaner' -Wait

  • 尝试使用 call 运算符 & 而不是像 & "$CclnrApp64" "/CLEANER" 那样的 Start-Process

以上两者都在引号之间包含变量 $CclnrApp64 中的路径,因为 $env:programfiles 通常会扩展为 C:\Program Files,其中路径中有一个空格。

CCleaner Business and Technician Edition 的命令行参数下,还有一个名为 /Clean 的开关 如果您有该版本,则开关应使用 ccleaner.ini 中定义的任何规则进行清理,并可选择将结果放入 log_filename.txt

然而,在同一个 CCleaner 页面上,还有其他参数的列表,尤其是在命令行中使用,并且您已经尝试使用 /AUTO 开关,看起来这就是您所追求的: CCleaner 以静默方式自动运行,使用当前保存的选项集来清洁 PC。 CCleaner 然后退出。

关于 /AUTO 开关的注意事项: 当您使用 /AUTO 参数运行 CCleaner.exe 时,CCleaner 不会运行注册表清理器。您当前无法通过命令行参数运行注册表清理器

所有这一切意味着您可以在 CCleaner 中使用多个开关,但它们都有不同的用途。

  • /CLEANER/REGISTRY/TOOLS/OPTIONS 用于在特定窗格中打开应用程序
  • /AUTO(带有可选的 /SHUTDOWN)、/EXPORT/DELETE(带有可选的 /METHOD)让应用程序执行清理/删除操作立>

商业和技术人员版也有

  • /analyze/clean/update

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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-