takuo_maeda
@takuo_maeda (前田 卓大)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

次のエラーを解決したい

解決したいこと

発生しているエラーの解決

現在、
WindowsPowerShellでネットワークアダプターの一覧から選んで、
ネットワークアダプターのドライバーを抜いて、再起動させるプログラムを作っています。
CopilotなどのAIの補助を受けています。

発生している問題・エラー

Disable-PnpDevice : エラーです
発生場所 C:\Users\maedat\Desktop\無題1.ps1:3 文字:19
+ $networkAdapter | Disable-PnpDevice -Confirm:$false
+                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Win32_PnPEntity..._00348086&R...):ROOT\cimv2\Win32_PnPEntity) [Disable-Pn
   pDevice], CimException
    + FullyQualifiedErrorId : HRESULT 0x80041001,Disable-PnpDevice

Uninstall-PnpDevice : 用語 'Uninstall-PnpDevice' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログ
ラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを
確認してから、再試行してください。
発生場所 C:\Users\maedat\Desktop\無題1.ps1:4 文字:19
+ $networkAdapter | Uninstall-PnpDevice -Confirm:$false
+                   ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Uninstall-PnpDevice:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

スクリーンショット 2024-08-05 134151.png

該当するソースコード

# ネットワークアダプターの一覧を表示し、選択
$networkAdapter = Get-PnpDevice -Class Net | Out-GridView -Title "ネットワークアダプターを選択" -PassThru

# 選択したネットワークアダプターを無効化
$networkAdapter | Disable-PnpDevice -Confirm:$false

# 選択したネットワークアダプターをアンインストール
$networkAdapter | Uninstall-PnpDevice -Confirm:$false

# PCを再起動
Restart-Computer

自分で試したこと

管理者権限で開いて実行

0

4Answer

Comments

  1. @takuo_maeda

    Questioner

    Copilotででてきました

  2. 少なくとも、PnpDeviceのリファレンスにはUninstall-PnpDeviceは存在しないようなので、アンインストールについては別途処理を考える必要があるかと。
    PnPUtilを使ってみるのはいかがでしょうか?
    https://learn.microsoft.com/ja-jp/windows-hardware/drivers/devtest/pnputil-examples

    結構Copilotは嘘吐きなので、訊ねながらコードを書く際は気を付ける必要があります。

  3. Disable-PnpDevice の使い方もパイプで繋ぐのではなく Disable-PnpDevice -InputObject $networkAdapter が正しいようですね。

  4. うちの環境では該当のネットワークアダプターのデバイスの無効化とアンインストールができました。

    スクリプト例
    #-FriendlyNameは実際に削除したいものに置き換える
    $networkAdapter = Get-PnpDevice -Class Net -FriendlyName Intel* 
    $networkAapter |Disable-PnpDevice -Confirm:$false
    #InstanceIDだけ取得
    $UninstallDeviceId = ($networkAdapter).InstanceId
    #アンインストール処理はPnpUtilにまかせる
    pnputil.exe /remove-device $UninstallDeviceId
    Restart-Computer
    

    image.png

    追記:1行目は以下で選択する形式にした方がいいですね。-PassThruの使い方を知りませんでした…

    $networkAdapter = Get-PnpDevice -Class Net | Out-GridView -Title "ネットワークアダプターを選択" -PassThru
    
  5. @takuo_maeda

    Questioner

    別途処理が必要とは具体的には何の処理が必要でしょうか?

  6. @takuo_maeda

    Questioner

    #-FriendlyNameは実際に削除したいものに置き換える
    $networkAdapter = Get-PnpDevice -Class Net | Out-GridView -Title "ネットワークアダプターを選択" -PassThru
    
    $networkAapter |Disable-PnpDevice -Confirm:$false
    #InstanceIDだけ取得
    $UninstallDeviceId = ($networkAdapter).InstanceId
    #アンインストール処理はPnpUtilにまかせる
    pnputil.exe /remove-device $UninstallDeviceId
    pause
    Restart-Computer
    
    
  7. @takuo_maeda

    Questioner

    PS C:\Users\maedat> #-FriendlyNameは実際に削除したいものに置き換える
    PS C:\Users\maedat> $networkAdapter = Get-PnpDevice -Class Net | Out-GridView -Title "ネットワークアダプターを選択" -PassThru
    PS C:\Users\maedat>
    PS C:\Users\maedat> $networkAapter |Disable-PnpDevice -Confirm:$false
    Disable-PnpDevice : 入力オブジェクトをコマンドのパラメーターにバインドできません。コマンドがパイプライン入力を受け入れ
    ないか、または入力とそのプロパティが、パイプライン入力を受け入れるいずれのパラメーターにも一致しません。
    発生場所 行:1 文字:17
    + $networkAapter |Disable-PnpDevice -Confirm:$false
    +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidArgument: (:) [Disable-PnpDevice]、ParameterBindingException
        + FullyQualifiedErrorId : InputObjectNotBound,Disable-PnpDevice
    
    PS C:\Users\maedat> #InstanceIDだけ取得
    PS C:\Users\maedat> $UninstallDeviceId = ($networkAdapter).InstanceId
    PS C:\Users\maedat> #アンインストール処理はPnpUtilにまかせる
    PS C:\Users\maedat> pnputil.exe /remove-device $UninstallDeviceId
    Microsoft PnP ユーティリティ
    
    デバイスを削除できませんでした:  PCI\VEN_8086&DEV_9DF0&SUBSYS_00348086&REV_11\3&11583659&1&A3
    アクセスが拒否されました。
    
    
    
  8. @takuo_maeda

    Questioner

    スクリーンショット 2024-08-20 111942.png

    ①Disable-PnpDevice : 入力オブジェクトをコマンドのパラメーターにバインドできません。については回答コメントをもとに変更してみます。

    ②デバイスを削除できませんでした。のあとの PCI\VEN_8086&DEV_9DF0&SUBSYS_00348086&REV_11\3&11583659&1&A3は削除対象ファイルでしょうか?

    ③アクセスが拒否されました。
    これはファイルへのアクセスが拒否されたと言うことでしょうか?

  9. ③については管理者権限が足りてない気がしますので、管理者権限で実行してみてはいかがでしょうか?

  10. @takuo_maeda

    Questioner

    これは権限の問題なのですね。
    ご指摘ありがとうございます。

  11. @takuo_maeda

    Questioner

    スクリーンショット 2024-08-27 113154.png

    管理者で実行してみました。
    右上のWindowのフレームに管理者とあるので管理者権限で実行できていると思います。

    ですが

    DIsable-PopDevice : 入力オブジェクトをコマンドのパラメーターにバインドできません。コマンドがパイプライン受け入れないか、または入力とそのプロパティが、パイプライン入力を受け入れるいずれのパラメーターpにも一致しません。
    発生場所 行:3 文字:17
    + $networkAdaptoer |Disable-PopDevice -Comfirm:$false
    + CategoryInfo :InvalidArgument: (:)[Disable-PopDevice]、ParamenterBindingException
    + FullyQualifiedErrorID:InputObjectNotBound,Disable-PopDevice

    上記のエラーを解決する方法はありますでしょうか?

  12. 申し訳ございません。スペルミスがありましたので、これでいけると思います。
    ※管理者権限で実行する前提はそのままです。

    2行目の変数名の修正
    $networkAdapter = Get-PnpDevice -Class Net | Out-GridView -Title "ネットワークアダプターを選択" -PassThru
    $networkAdapter |Disable-PnpDevice -Confirm:$false
    #InstanceIDだけ取得
    $UninstallDeviceId = ($networkAdapter).InstanceId
    #アンインストール処理はPnpUtilにまかせる
    pnputil.exe /remove-device $UninstallDeviceId
    Restart-Computer
    
  13. @takuo_maeda

    Questioner

    Adaptorの後のaが一個多かったんですね。
    こちらこそ気づかずにすみません。

    きちんと動くようになりました。
    解決いたしました。

  14. 解決したようで良かったです。

  15. @takuo_maeda

    Questioner

    ご協力とっても感謝です。
    これからこれをもう少し、ipを画面入力して登録するように改良していく予定です。

CopilotなどのAIの補助を受けているのならその旨を質問元に書いておいて下さい。

あたかも自分でコードを書いてるように見せかけていると混乱します。


パイプで渡されたOut-GridViewは選択された内容をパイプで渡す以外無いかと思います。
システム的変数$_と遅延バインドを用いてNew-Variableで変数の新規作成&代入します。

Get-PnpDevice -Class "Net" | Out-GridView -PassThru | ? { New-Variable -Name dId -Value $_.InstanceId }
if ($dId) {
  Start-Process -FilePath "PnPUtil" -NoNewWindow -Wait -ArgumentList "/reboot /remove-device ""$dId"""
#  Restart-Computer
}

PnPUtilはOSが古いと/rebootオプションが効かないので代わりにRestart-Computerを書く必要があります。そのヒントについてはリンクを置いておきます。
当然ながらスクリプトは管理者権限で実行する必要があります。

PnPUtil のコマンド構文


既に指摘されてる部分は省きますが$networkAdapter = Get-PnpDevice -Class Netの部分はデバイスリストしか得てないのでDisable-PnpDeviceに渡した際におかしいことになってます(文字列で渡す必要がある)。

2Like

Comments

  1. @takuo_maeda

    Questioner

    皆様いろいろとアドバイスありがとうございます。
    コーディングしながら試させていただいて後、ご報告さしあげます。
    力不足なのでお時間いただきますが、何卒よろしくお願いいたします。

  2. @takuo_maeda

    Questioner

    こちらも行いましたが、

    Windows PowerShell
    Copyright (C) Microsoft Corporation. All rights reserved.
    
    新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows
    
    PS C:\Users\maedat> Get-PnpDevice -Class "Net" | Out-GridView -PassThru | ? { New-Variable -Name dId -Value $_.InstanceId }
    PS C:\Users\maedat> if ($dId) {
    >>   Start-Process -FilePath "PnPUtil" -NoNewWindow -Wait -ArgumentList "/reboot /remove-device ""$dId"""
    >> #  Restart-Computer
    >> }
    Microsoft PnP ユーティリティ
    
    デバイスを削除できませんでした:  PCI\VEN_8086&DEV_9DF0&SUBSYS_00348086&REV_11\3&11583659&1&A3
    アクセスが拒否されました。
    
    PS C:\Users\maedat>
    

    スクリーンショット 2024-08-20 113221.png

    これも削除できませんでした

  3. 削除できませんでした

    管理者権限で実行していますか?

    ベタ打ちでもいいのですが基本的にはps1ファイルにして、それを管理者権限で実行させた方が楽です。
    ただし、ps1ファイルファイルから実行させる場合、ポリシー変更をしないと動作しません。

    ポリシー変更方法については調べれば出てきますからご自身で実施した上で行って下さい。

  4. @takuo_maeda

    Questioner

    ps1ファイルにして、実行ですね。
    わかりました。ポリシーについては4つほどありますね。
    そのハードルは調べて超えようと思います。ありがとうございます。

WindowsPowerShellでネットワークアダプターの一覧から選んで

何を選びました?

scr5.png
0Like

Comments

  1. @takuo_maeda

    Questioner

    Intel(R)Wireless-AC9560 160MHzです。

  2. Disable-PnpDeviceのエラーは、管理者権限で実行していないときのエラーと同じです。

自分には解決方法は分かりませんが、 $PSVersionTableGet-Module -ListAvailable の出力を貼ると他の回答者の手がかりになるかもしれません。

0Like

Your answer might help someone💌