none
Powershell: Disable NetBIOS over TCP/IP für ALLE Adapter

    Frage

  • Hi Leute

    Ich würde gerne per Powershell Script bei ALLEN vorhandenen Netzwerkadapter NetzBIOS over TCP/IP deaktivieren.

    Get-WmiObject win32_networkadapterconfiguration | ForEach-Object { $_.settcpipnetbios(2)} | Select ReturnValue

    Folgende Versuche habe ich unternommen:

    Mit diesem Befehl ist es möglich NetBIOS des AKTIVEN Netzwerkadapter zu deaktivieren. (Ethernet ReturnValue 0)

    Bei den inaktiven Netzwerkadapter (Wi-Fi, Cellular,...) erhalte ich den ReturnValue 84 (IP not enabled on adapter).

    Sobald ich einen Netzwerkadapter aktiviere, funktioniert er mit dem Befehl. Wie kann ich aber alle ändern (auch die inaktiven)?


    Dann habe ich versucht in der Registry alle Adapter auszulesen und den Wert "NetBiosOptions" von 0 auf 2 zu setzen. Dafür möchte ich alle Subkeys anzeigen und alle ausgeben, welche NetBios aktiviert haben (Wert 0).

    Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces' -Recurse | ForEach-Object {Get-ItemProperty $_.pspath} | Where-Object {$_.NetBiosOptions -eq 0}

    Dies funktioniert. Nur wie kann ich dann bei diesen Subkeys den Wert von 0 auf 2 abändern?

    Vielen Dank für die Unterstützung!

    ynick

    Mittwoch, 11. Oktober 2017 14:43

Antworten

  • Für "Spielereien" in der Registry sind Gruppenrichtlinien immer empfehlenswert. Dann lassen sich z.B. die gemachten Änderungen einfacher wieder rückstandsfrei revidieren.

    Registry-Werty mit der Powershell ändern kannst Du mit Set-ItemProperty.


    Best regards (79,108,97,102|%{[char]$_})-join''



    Mittwoch, 11. Oktober 2017 15:00

Alle Antworten

  • Für "Spielereien" in der Registry sind Gruppenrichtlinien immer empfehlenswert. Dann lassen sich z.B. die gemachten Änderungen einfacher wieder rückstandsfrei revidieren.

    Registry-Werty mit der Powershell ändern kannst Du mit Set-ItemProperty.


    Best regards (79,108,97,102|%{[char]$_})-join''



    Mittwoch, 11. Oktober 2017 15:00
  • Vielen Dank BOfH_666

    Konnte es mit folgendem Befehl lösen:

    Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces' -Recurse | ForEach-Object {Set-ItemProperty -Path $_.pspath -Name "NetBiosOptions" -Value 2}


    • Bearbeitet ynickburk Mittwoch, 11. Oktober 2017 15:23
    Mittwoch, 11. Oktober 2017 15:23
  • Okay, hat sich doch noch nicht ganz gelöst. Ich möchte zuerst prüfen, ob der Wert des Registry Keys "NetBiosOptions" auch tatsächlich 0 bzw. überhaupt vorhanden ist.

    Mit diesem Befehl kann ich alle Keys mit dem gewünschten Wert auflisten.

    Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces' -Recurse | ForEach-Object {Get-ItemProperty $_.pspath} | Where-Object {$_.NetBiosOptions -eq 0}

    Mit diesem Befehl kann ich bei allen den Wert auf 2 setzen (auch wenn es den Wert bei einem Adapter auch nicht gibt.....)

    Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces' -Recurse | ForEach-Object {Set-ItemProperty -Path $_.pspath -Name "NetBiosOptions" -Value 2}

    Wie kann ich diese matchen, damit nur bei der Ausgabe des oberen Befehls der untere Befehl angewendet wird?

                $adapters = (Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces' -Recurse | ForEach-Object {Get-ItemProperty $_.pspath} | Where-Object {$_.NetBiosOptions -eq 0})
    
                Foreach ($adapter in $adapters){
                write-host $adapter.pspath
                Set-ItemProperty -Path $.adapter.pspath -Name "NetBiosOptions" -Value 2
                }

    Habe es mal so versucht, aber dies gibt den Fehler Set-ItemProperty : Cannot find path 'C:\Windows\system32\$.testli.pspath' because it does not exist. aus. Ist $adapters kein array?



    • Bearbeitet ynickburk Donnerstag, 12. Oktober 2017 06:56
    Donnerstag, 12. Oktober 2017 06:55
  • Okay, scheint wieder gelöst zu sein.

    Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces' -Recurse | ForEach-Object {Get-ItemProperty $_.pspath} | Where-Object {$_.NetBiosOptions -eq 0} | ForEach-Object {Set-ItemProperty -Path $_.pspath -Name "NetBiosOptions" -Value 2}

    Habe nicht gedacht, dass man zwei Foreach-Object Befehle in einem Befehl über Pipe angeben kann. Wieder was gelernt. :-)

    Donnerstag, 12. Oktober 2017 07:01
  • Wenn Du schon "rausgekitzelt" hast, welche Registrywerte Du verändern möchtest, kannst Du die Powershell die Arbeit für Dich machen lassen ... dafür ist sie ja gemacht.

    Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces' -Recurse | 
        ForEach-Object {Get-ItemProperty $_.pspath} | 
            Where-Object {$_.NetBiosOptions -eq 0} |
                Set-ItemProperty -Name 'NetBiosOptions' -Value 2
    

    ungetestet ... sollte so aber klappen.

    Noch ein Tipp zur Formatierung (besonders hier im Forum). Du kannst Zeilen nach bestimmten Zeichen umbrechen und damit den Code lesbarer machen. Da sind unter anderem Pipe-Symbole, Kommata und Semikola. Das macht es dann auch einfacher den Code zu verstehen und ihn evtl. in der Powershell_ISE partiell auszuführen.


    Best regards (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 12. Oktober 2017 07:07