是否有安装和删除 Windows 驱动程序的 Powershell cmdlet?

alx*_*x9r 5 windows powershell cmdlets driver

注意:对于这个问题,当我提到“Windows 驱动程序”时,我指的是 .inf 和相关文件,否则可以通过右键单击 .inf 并在 Windows 资源管理器中单击“安装”来安装这些文件。我的意思不是任何可能安装驱动程序的 setup.exe 风格的可执行文件。


存在以下情况:

但是,我还没有找到支持在正在运行的系统上安装和卸载驱动程序的相应 Powershell Cmdlet 。我确信我可以包含dpinst.exe在一些 powershell 中,但是如果存在更多 Powershell 原生方法,我想避免映射命令行参数和解析输出。

是否存在可以在运行的系统上安装和卸载 Windows 驱动程序的 Powershell Cmdlet?是否有其他不涉及使用 Powershell 安装和卸载 Windows 驱动程序的方法dpinst.exe

bri*_*ist 6

不仅没有用于此的 PowerShell cmdlet,而且似乎在 .Net 框架中甚至没有托管代码来执行此操作(以下内容基本上是将该答案转换为 PowerShell)。

幸运的是,.Net 框架可以通过平台调用(p/invoke)调用 windows API,PowerShell 也可以这样做。

链接的答案显示了如何在 C# 中做到这一点。为此,我们将使用在该答案中生成的相同签名,并将其与Add-Typecmdlet(参见示例 5)一起使用,以使其可用于您的脚本。

$signature = @"
[DllImport("Setupapi.dll", EntryPoint="InstallHinfSection", CallingConvention=CallingConvention.StdCall)]
public static extern void InstallHinfSection(
    [In] IntPtr hwnd,
    [In] IntPtr ModuleHandle,
    [In, MarshalAs(UnmanagedType.LPWStr)] string CmdLineBuffer,
    int nCmdShow);
"@
$Win32Functions = Add-Type -MemberDefinition $signature -UsingNamespace System.Runtime.InteropServices -Name Win32SInstallHinfSection -Namespace Win32Functions -PassThru 

$Win32Functions::InstallHinfSection([IntPtr]::Zero, [IntPtr]::Zero, "<section> <mode> <path>", 0)
Run Code Online (Sandbox Code Playgroud)

有关参数(特别是字符串格式)的详细信息,请参阅InstallHinfSectionMSDN 文档

  • @alx9r 这是一个很好的问题,不幸的是我没有答案。我建议尝试强制抛出异常,也许是通过向它提供无效数据,然后看看它做了什么。 (2认同)
  • Windows API 调用不会生成 C++ 异常,因为它们可能是从其他语言(例如 C)调用的。(据猜测,如果发生错误,InstallHinfSection 会向用户显示一个对话框。) (2认同)