【问题标题】:How to run an action/command based on a result of a previous command如何根据先前命令的结果运行操作/命令
【发布时间】:2023-04-11 08:02:02
【问题描述】:

我有一个安装驱动程序的部署,我想提供卸载功能。

我正在利用 PNPU​​TIL.exe 工具。

我知道删除和卸载驱动程序的语法,例如:

pnputil.exe /delete-driver oem103.inf /uninstall /force

但我的问题是 oem*.inf 编号指定在每台机器上是随机的,因此我无法将 .inf 硬编码到命令中并收工。

pnputil 有/enum-driver 开关,它将为您提供DriverStore 中所有驱动程序的详细信息。行项目中有 .inf 的原始名称(我可以使用的东西)和与之关联的 oem#。

所以我需要帮助的是编写一些脚本来枚举驱动程序将结果传递给命令,以便能够使用run /delete-drive/uninstall 开关

我尝试弄乱FindFindSTR 命令,但它只返回了一行,即原始.inf 的名称。我需要将与 .inf 的原始名称关联的 OEM# 传送到命令。

【问题讨论】:

    标签: cmd scripting driver sccm


    【解决方案1】:

    pnputil 的输出中,所需的oemXX.inf 是原始名称上方的一行。 因此计算输出,查找原始名称并从行号中减去 1。这是您找到 oemXX.inf 的行号。

    然后找到该行并提取oemXX 字符串。 (for %%b 是去掉前导空格)

    @echo off
    setlocal 
    set "Orig=rt640x64.inf"
    pnputil /enum-drivers |findstr /n "^" > pnputil.txt
    for /f "delims=:" %%a in ('findstr /c:" %Orig%" pnputil.txt') do set /a line=%%a-1
    for /f "tokens=3 delims=:" %%a in ('findstr /b "%line%:" pnputil.txt') do for %%b in (%%a) do set "oem=%%b"
    echo "%oem%"
    

    注意:pnputil 的输出取决于语言,但此代码不查找单词(当然“原始名称”除外)而是查找行号,因此它应该适用于所有语言。

    【讨论】:

    • 老兄!谢谢你,我有正确的想法,但离这个很远。真的很感激!这成功了!
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 2022-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多