在设备管理器中禁用/启用设备的单手势解决方案(无需第三方工具)?

在设备管理器中禁用/启用设备的单手势解决方案(无需第三方工具)?

为了解决 Windows 10 中一个烦人的错误,我找到了一个解决方案。问题是,它需要大量点击,如果可能的话,我想自动执行这些步骤(脚本?)。以下是语境来自 Reddit:

不过,有一个比重启更简单的解决方法,如果你去装置经理,然后在声音、视频和游戏控制器, 寻找:英特尔显示音频禁用然后重新启用它应该可以修复它。

有一个回答展示如何使用第三方工具 (devcon) 在命令行上执行此操作。但我不太愿意安装/维护它,甚至不确定它是否适用于 Windows 10。我希望能够在没有任何第三方工具的情况下做到这一点。

它不必是命令行脚本。我只是希望能够通过一个手势来完成此操作(双击桌面图标就可以了,也许 Cortana 命令也可以?)。

答案1

根据我的研究,并且由于该命令对您有效(根据您的评论),以下是可能作为“一个手势”工作的最终脚本。我在开头添加了一些指令,以自动以管理员身份运行(自我提升)。当然,这只有在用户是计算机管理员时才有效。

最终的脚本,您可以将它保存为“.ps1”文件,然后使用 PowerShell 执行:

# Get the ID and security principal of the current user account
$myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)

# Get the security principal for the Administrator role
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator

# Check to see if we are currently running "as Administrator"
if ($myWindowsPrincipal.IsInRole($adminRole))
{
    # We are running "as Administrator" - so change the title and background color to indicate this
    $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)"
    $Host.UI.RawUI.BackgroundColor = "DarkBlue"
    clear-host
}
else
{
    # We are not running "as Administrator" - so relaunch as administrator

    # Create a new process object that starts PowerShell
    $newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";

    # Specify the current script path and name as a parameter
    $newProcess.Arguments = $myInvocation.MyCommand.Definition;

    # Indicate that the process should be elevated
    $newProcess.Verb = "runas";

    # Start the new process
    [System.Diagnostics.Process]::Start($newProcess);

    # Exit from the current, unelevated, process
    exit
}
Get-PnpDevice -FriendlyName "Intel(R) Display Audio" | Disable-PnpDevice -confirm:$false
Get-PnpDevice -FriendlyName "Intel(R) Display Audio" | Enable-PnpDevice -confirm:$false

答案2

这个简单的解决方案对我有用。

  • 使用此目标创建 Windows 快捷方式: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "Get-PnpDevice -FriendlyName \"Intel(R) Display Audio\" | Disable-PnpDevice -confirm:$false; Get-PnpDevice -FriendlyName \"Intel(R) Display Audio\" | Enable-PnpDevice -confirm:$false"
  • 在里面快捷方式的属性 > 快捷方式 > 高级属性,勾选“以管理员身份运行”在此处输入图片描述

这最终需要两个手势,因为你必须允许权限提升。当我尝试@Ob1lan 的回答,我还必须单击以允许提升(第二个手势)。因此,根据原始问题,这不是理想的答案。注意:手动禁用/启用设备(如问题中所述)不需要提升。

我避免使用脚本文件 (.ps1) 的原因是,出于安全考虑,它需要一组额外的解决方法,尽管对管理员进行了大量检查,但它并没有比勾选快捷方式“以管理员身份运行”选项更有价值。请参阅https://stackoverflow.com/questions/4037939/powershell-says-execution-of-scripts-is-disabled-on-this-system了解更多信息。

答案3

我在让@Ob1lan 的脚本正常工作时遇到了一些麻烦,因为为了使它工作(即允许脚本提升自身),Powershell 执行策略必须允许这样做。一种方法是使用以下方法全局设置它Set-ExecutionPolicy。不过我还是倾向于保持全局策略不变,并在需要时绕过它使用该-ExecutionPolicy ByPass参数。

以下是经过稍微修改的脚本,我现在用它来禁用我的触摸屏。除了添加旁路之外,我还添加了参数-WindowStyle hidden以防止太多窗口污染我的屏幕。(提示:如果脚本无法按预期工作,我建议您首先用参数替换该参数-noexit以查看任何错误消息。)

# Get the ID and security principal of the current user account
$myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)

# Get the security principal for the Administrator role
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator

# Check to see if we are currently running "as Administrator"
if ($myWindowsPrincipal.IsInRole($adminRole))
{
    # We are running "as Administrator" - so change the title and background color to indicate this
    $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + " (Elevated)"
    $Host.UI.RawUI.BackgroundColor = "DarkBlue"
    clear-host
}
else
{
    # We are not running "as Administrator" - so relaunch as administrator

    # Create a new process object that starts PowerShell
    $newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";

    # Specify the current script path and name as a parameter, hide window and bypass execution policy (in case it has not been disabled globally)
    $newProcess.Arguments = '-ExecutionPolicy ByPass -WindowStyle hidden ' + $myInvocation.MyCommand.Definition + '" ';
    # Here are the changes   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    # Indicate that the process should be elevated
    $newProcess.Verb = "runas";

    # Start the new process
    [System.Diagnostics.Process]::Start($newProcess);

    # Exit from the current, unelevated, process
    exit
}

 Get-PnpDevice | Where-Object {$_.FriendlyName -like '*touch screen*'} | Enable-PnpDevice -Confirm:$false

相关内容