web-dev-qa-db-ja.com

(サードパーティツールなしで)デバイスマネージャーでデバイスを無効/有効にする1つのジェスチャーソリューション?

Windows 10の厄介なバグを克服するために、私は解決策を見つけました。問題は、クリックが多いので、可能であれば手順(スクリプト?)を自動化したいということです。これが context Redditからです:

再起動するよりも簡単な修正があります。デバイスマネージャーに移動し、サウンド、ビデオ、およびゲームの下に移動します。コントローラー、検索:インテルディスプレイオーディオおよび無効次にre-enableすると、修正されるはずです。

サードパーティのツール(devcon)を使用してコマンドラインでこれを行う方法を示す answer があります。しかし、私はそれをインストール/保守することに満足しておらず、Windows10で動作するかどうかさえわかりません。サードパーティのツールなしでこれを実行できるようにしたいと思います。

コマンドラインスクリプトである必要はありません。これを1回のジェスチャーで実行できるようにしたいと思います(デスクトップアイコンをダブルクリックしても問題ありません。Cortanaコマンドで実行できるのではないでしょうか?)。

4
Fuhrmanator

私の調査に基づいて、コマンドが(コメントに従って)機能するので、これが「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
4
Ob1lan

この単純な解決策は私のために働いた。

  • このターゲットで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"
  • ショートカットのプロパティ>ショートカット>詳細プロパティで、[管理者として実行]にチェックマークを付けます enter image description here

許可の昇格を許可する必要があるため、最終的には2つのジェスチャーになります。 @ Ob1lanの回答 を試したとき、仰角を許可するためにクリックする必要もありました(2番目のジェスチャー)。したがって、これは元の質問によると理想的な答えではありません。注:(質問で説明されているように)デバイスを手動で無効化/有効化する場合、仰角は必要ありません。

スクリプトファイル(.ps1)を避けた理由は、セキュリティのために追加の回避策が必要であり、管理者のチェックがたくさんあるにもかかわらず、ショートカットの[管理者として実行]オプションにチェックマークを付けても価値がないためです。 。詳細については、 https://stackoverflow.com/questions/4037939/powershell-says-execution-of-scripts-is-disabled-on-this-system を参照してください。

3
Fuhrmanator

@ Ob1lanのスクリプトをそのまま使用できるようにするのに問題がありました。これは、スクリプトが機能するために(つまり、スクリプトがそれ自体を昇格できるようにするために)、 Powershell実行ポリシー で許可する必要があるためです。これを行う1つの方法は、 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
0
Christoph