3

Чтобы преодолеть досадную ошибку в Windows 10, я нашел решение. Проблема в том, что это много нажатий, и я хотел бы автоматизировать шаги (сценарий?) если возможно. Вот контекст из Reddit:

Однако исправить это проще, чем перезапустить, если перейти в диспетчер устройств, а затем в разделе « Звуковые, видео и игровые контроллеры» найти: Intel Display Audio и отключить, а затем снова включить, и оно должно это исправить.

Существует ответ, показывающий, как сделать это в командной строке с помощью стороннего инструмента (devcon). Но я не рад установить / поддерживать его и даже не уверен, что он работает в Windows 10. Я хотел бы иметь возможность сделать это без каких-либо сторонних инструментов.

Это не обязательно должен быть скрипт командной строки. Я просто хотел бы иметь возможность сделать это одним жестом (двойной щелчок по значку на рабочем столе - это хорошо, может быть, команда Cortana может это сделать?).

3 ответа3

2

На основании моих исследований и того, как команда работает для вас (согласно вашему комментарию), вот последний сценарий, который может работать как «один жест». В начале я добавил несколько инструкций для автоматического запуска от имени администратора (само поднялся). Конечно, это будет работать, только если пользователь является администратором компьютера.

Окончательный сценарий вы можете сохранить как файл «.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
1

Это простое решение сработало для меня.

  • Создайте ярлык 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 для получения дополнительной информации.

0

У меня были некоторые проблемы с получением скрипта @ 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .