กำหนดการตั้งค่าเครือข่ายบน Windows ด้วย PowerShell: ที่อยู่ IP, DNS, เกตเวย์เริ่มต้น, เส้นทางแบบคงที่
ใน Windows คุณสามารถจัดการการตั้งค่าสำหรับอะแดปเตอร์เครือข่ายของคุณ ไม่เพียงแต่จาก GUI เท่านั้น แต่ยังรวมถึงจากพรอมต์คำสั่ง PowerShell ในบทความนี้ เราจะดู cmdlet ที่สำคัญที่สุดที่คุณสามารถใช้เพื่อค้นหาที่อยู่ IP ปัจจุบันของอะแดปเตอร์เครือข่าย กำหนดที่อยู่ IP แบบคงที่ กำหนด IP ของเซิร์ฟเวอร์ DNS หรือกำหนดค่าอินเทอร์เฟซเครือข่ายเพื่อรับ IP การกำหนดค่าจากเซิร์ฟเวอร์ DHCP คุณสามารถใช้ cmdlet เหล่านี้เพื่อกำหนดค่าเครือข่ายบน Windows 10/11 และ Windows Server (หรือรุ่น Server Core), เซิร์ฟเวอร์ Hyper-V เพื่อเปลี่ยนการตั้งค่า IP ของอะแดปเตอร์เครือข่ายบนคอมพิวเตอร์ระยะไกล และในสคริปต์การทำงานอัตโนมัติของ PowerShell
ก่อนหน้านี้ อ
netsh interface ipv4 คำสั่งถูกใช้เพื่อจัดการการตั้งค่าเครือข่ายจาก CLI ใน PowerShell 3.0 และใหม่กว่า คุณสามารถใช้โมดูล PowerShell NetTCPIP ในตัวเพื่อจัดการการตั้งค่าเครือข่ายบน Windows
ในการรับรายการ cmdlets ในโมดูลนี้ ให้เรียกใช้คำสั่งต่อไปนี้:
get-command -module NetTCPIPโมดูลนี้ยังรวมถึง Test-NetConnection cmdlet ซึ่งสามารถใช้เพื่อค้นหาพอร์ต TCP ที่เปิดอยู่บนคอมพิวเตอร์ระยะไกล
การจัดการการตั้งค่าอะแดปเตอร์เครือข่ายผ่าน PowerShell
แสดงรายการอินเทอร์เฟซเครือข่ายที่มีในคอมพิวเตอร์ Windows:
Get-NetAdaptercmdlet ส่งคืนชื่ออินเทอร์เฟซ สถานะ (ขึ้น/ลง) ที่อยู่ MAC และความเร็วพอร์ต
ในตัวอย่างนี้ ฉันมีอะแดปเตอร์เครือข่ายหลายตัวในคอมพิวเตอร์ของฉัน (นอกเหนือจากการเชื่อมต่อทางกายภาพ Ethernet0 ฉันมีเครือข่าย Hyper-V และ VMWare Player อินเทอร์เฟซ)
หากต้องการแสดงเฉพาะอินเทอร์เฟซเครือข่ายทางกายภาพที่เปิดใช้งาน:
Get-NetAdapter -Physical | ? {$_.Status -eq "Up"}คุณสามารถดูเฉพาะพารามิเตอร์อะแดปเตอร์เครือข่ายบางอย่าง เช่น ชื่อ ความเร็ว สถานะ หรือที่อยู่ MAC:
Get-NetAdapter |Select-Object name,LinkSpeed,InterfaceOperationalStatus,MacAddressWindows อาจมีอะแดปเตอร์เครือข่ายซ่อนอยู่ หากต้องการแสดงทั้งหมด ให้เพิ่มพารามิเตอร์ IncludeHidden:
Get-NetAdapter -IncludeHiddenผลลัพธ์จะเป็นรายการของอแด็ปเตอร์ WAN Miniport เสมือนทั้งหมดที่ใช้สำหรับการเชื่อมต่อประเภทต่างๆ รวมถึง VPN การรีบูตอแด็ปเตอร์เหล่านี้มักจะแก้ไขข้อผิดพลาดในการเชื่อมต่อ VPN ด้วยไคลเอนต์ Windows ในตัว มี PowerShell cmdlet แยกต่างหากสำหรับจัดการการเชื่อมต่อ VPN
คุณสามารถอ้างถึงอินเทอร์เฟซเครือข่ายตามชื่อหรือดัชนี (คอลัมน์ ดัชนี) ในตัวอย่างของเรา ในการเลือกอะแดปเตอร์ LAN จริง Intel 82574L Gigabit Network Connection ให้ใช้คำสั่ง:
Get-NetAdapter -Name Ethernet0หรือ :
Get-NetAdapter -InterfaceIndex 8คุณสามารถเปลี่ยนชื่ออแด็ปเตอร์:
Rename-NetAdapter -Name Ethernet0 -NewName LANหากต้องการปิดใช้งานอินเทอร์เฟซเครือข่าย ให้ใช้คำสั่งนี้:
Get-NetAdapter -Name Ethernet0| Disable-NetAdapterเปิดใช้งาน NIC ตามชื่อ:
Enable-NetAdapter -Name Ethernet0หากอะแดปเตอร์เครือข่ายมีหมายเลข VLAN ที่กำหนดค่าไว้ คุณสามารถดูได้:
Get-NetAdapter | ft Name, Status, Linkspeed, VlanIDนี่คือวิธีที่คุณสามารถค้นหาข้อมูลเกี่ยวกับไดรเวอร์การ์ดเชื่อมต่อเครือข่ายที่คุณกำลังใช้:
Get-NetAdapter | ft Name, DriverName, DriverVersion, DriverInformation, DriverFileName
แสดงรายการข้อมูลเกี่ยวกับอะแด็ปเตอร์เครือข่ายจริง (สล็อต PCI, บัส ฯลฯ):
Get-NetAdapterHardwareInfoปิดใช้งานโปรโตคอล IPv6 สำหรับอินเทอร์เฟซเครือข่าย:
Get-NetAdapterBinding -InterfaceAlias Ethernet0 | Set-NetAdapterBinding -Enabled:$false -ComponentID ms_tcpip6ปิดใช้งานโปรโตคอล NetBIOS สำหรับอินเทอร์เฟซเครือข่าย:
Set-NetAdapterBinding -Name Ethernet0 -ComponentID ms_netbios -AllBindings -Enabled $Trueวิธีรับการตั้งค่าที่อยู่ IP ด้วย PowerShell
หากต้องการรับการตั้งค่าอะแดปเตอร์เครือข่ายปัจจุบันใน Windows (ที่อยู่ IP, DNS, เกตเวย์เริ่มต้น):
Get-NetIPConfiguration -InterfaceAlias Ethernet0หากต้องการแสดงข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับการกำหนดค่าอินเทอร์เฟซเครือข่าย TCP/IP ให้ใช้คำสั่ง
Get-NetIPConfiguration -InterfaceAlias Ethernet0 -Detailedในกรณีนี้ ตำแหน่งเครือข่ายที่กำหนด (โปรไฟล์) (NetProfile.NetworkCategory) ของอินเทอร์เฟซ การตั้งค่า MTU (NetIPv4Interface.NlMTU) เปิดใช้งานการรับที่อยู่ IP จาก DHCP หรือไม่ (NetIPv4Interface.DHCP) และข้อมูลที่เป็นประโยชน์อื่นๆ อีกจำนวนหนึ่ง จะแสดง
ในการรับที่อยู่อินเทอร์เฟซ IPv4 เท่านั้น:
(Get-NetAdapter -Name ethernet0 | Get-NetIPAddress).IPv4Addressคืนค่าที่อยู่ IP ของอินเทอร์เฟซเท่านั้น:
(Get-NetAdapter -Name ethernet0 | Get-NetIPAddress).IPv4Addressเมื่อคัดลอกไฟล์ไปยัง VM ผู้ดูแลระบบจำนวนมากสังเกตเห็นประสิทธิภาพเครือข่ายที่ต่ำบน Windows Server 2019 โดยเปิดใช้งานบทบาท Hyper-V ในกรณีนี้ การคืนค่าการตั้งค่าสแต็ก TCP กลับไปเป็นการตั้งค่าที่ใช้ใน Windows Server 2016 จะช่วยแก้ไขปัญหาได้:
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CongestionProvider DCTCP
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CwndRestart True
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -ForceWS Disabledแสดงรายการโปรโตคอลเครือข่ายที่สามารถเปิดใช้งานหรือปิดใช้งานสำหรับอะแดปเตอร์เครือข่าย:
Get-NetAdapterBinding -Name ethernet0 -IncludeHidden -AllBindingsName DisplayName ComponentID Enabled
---- ----------- ----------- -------
Ethernet File and Printer Sharing for Microsoft Networks ms_server True
Ethernet NetBIOS Interface ms_netbios True
Ethernet Microsoft LLDP Protocol Driver ms_lldp True
Ethernet Microsoft NDIS Capture ms_ndiscap True
Ethernet Internet Protocol Version 4 (TCP/IPv4) ms_tcpip True
Ethernet Microsoft RDMA - NDK ms_rdma_ndk True
Ethernet Microsoft Network Adapter Multiplexor Protocol ms_implat False
Ethernet Link-Layer Topology Discovery Mapper I/O Driver ms_lltdio True
Ethernet NDIS Usermode I/O Protocol ms_ndisuio True
Ethernet Point to Point Protocol Over Ethernet ms_pppoe True
Ethernet Link-Layer Topology Discovery Responder ms_rspndr True
Ethernet Internet Protocol Version 6 (TCP/IPv6) ms_tcpip6 True
Ethernet Hyper-V Extensible Virtual Switch vms_pp False
Ethernet WFP Native MAC Layer LightWeight Filter ms_wfplwf_lower True
Ethernet Client for Microsoft Networks ms_msclient True
Ethernet Npcap Packet Driver (NPCAP) INSECURE_NPCAP True
Ethernet WINS Client(TCP/IP) Protocol ms_netbt True
Ethernet Bridge Driver ms_l2bridge True
Ethernet WFP 802.3 MAC Layer LightWeight Filter ms_wfplwf_upper True
Ethernet QoS Packet Scheduler ms_pacer True
หากต้องการดูเซสชัน TCP/IP ที่ใช้งานอยู่บนคอมพิวเตอร์ ให้ใช้ Get-NetTCPConnection cmdlet
ตั้งค่าที่อยู่ IP แบบคงที่บน Windows โดยใช้ PowerShell
มาลองตั้งค่าที่อยู่ IP แบบคงที่สำหรับ NIC หากต้องการเปลี่ยนที่อยู่ IP, เน็ตเวิร์กมาสก์ และเกตเวย์เริ่มต้นสำหรับอินเทอร์เฟซเครือข่าย Ethernet0 ให้ใช้คำสั่ง:
Get-NetAdapter -Name Ethernet0| New-NetIPAddress -IPAddress 192.168.2.50 -DefaultGateway 192.168.2.1 -PrefixLength 24 คุณสามารถตั้งค่าที่อยู่ IP โดยใช้โครงสร้างอาร์เรย์ (มองเห็นได้มากขึ้น):
$ipParams = @{
InterfaceIndex = 8
IPAddress = "192.168.2.50"
PrefixLength = 24
AddressFamily = "IPv4"
}
New-NetIPAddress @ipParamsคุณสามารถใช้ New-NetIPAddress เพื่อเพิ่มที่อยู่ IP ที่สอง (นามแฝง) ไปยังการ์ดเชื่อมต่อเครือข่าย
หากมีการกำหนดค่าที่อยู่ IP แบบคงที่แล้วและจำเป็นต้องเปลี่ยน ให้ใช้ cmdlet Set-NetIPAddress:
Set-NetIPAddress -InterfaceAlias Ethernet0 -IPAddress 192.168.2.90หากต้องการปิดใช้งานการรับที่อยู่ IP จาก DHCP สำหรับอแด็ปเตอร์ของคุณ ให้รันคำสั่ง:
Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Disabledลบที่อยู่ IP แบบคงที่:
Remove-NetIPAddress -IPAddress "xxx.xxx.xxx.xxx"ตั้งค่าที่อยู่ IP ของเซิร์ฟเวอร์ DNS ใน Windows ด้วย PowerShell
หากต้องการตั้งค่าที่อยู่ IP ของเซิร์ฟเวอร์ DNS ที่ต้องการและสำรองใน Windows ให้ใช้ cmdlet Set-DNSClientServerAddress ตัวอย่างเช่น:
Set-DNSClientServerAddress -InterfaceIndex 8 -ServerAddresses 192.168.2.11,10.1.2.11คุณยังสามารถระบุ IP ของเนมเซิร์ฟเวอร์ DNS โดยใช้อาร์เรย์:
$dnsParams = @{
InterfaceIndex = 8
ServerAddresses = ("8.8.8.8","8.8.4.4")
}
Set-DnsClientServerAddress @dnsParamsหลังจากเปลี่ยนการตั้งค่า DNS แล้ว คุณสามารถล้างแคชตัวแก้ไข DNS (เทียบเท่ากับ
ipconfig /flushdns):
Clear-DnsClientCacheแสดงเนื้อหาแคช DNS ใน Windows::
Get-DnsClientCacheการจัดการตารางเส้นทางด้วย PowerShell
cmdlet Get-NetRoute ใช้เพื่อแสดงตารางเส้นทาง
รับเส้นทางเกตเวย์เริ่มต้นสำหรับอินเทอร์เฟซเครือข่ายจริงใน Windows:
Get-NetAdapter -Physical | ? {$_.Status -eq "Up"}| Get-netroute| where DestinationPrefix -eq "0.0.0.0/0"หากต้องการเพิ่มเส้นทางใหม่ ให้ใช้ cmdlet New-NetRoute:
New-NetRoute -DestinationPrefix "0.0.0.0/0" -NextHop "192.168.2.2" -InterfaceIndex 8คำสั่งนี้จะเพิ่มเส้นทางถาวรไปยังตารางเส้นทาง (คล้ายกับ
route -p add). หากคุณต้องการเพิ่มเส้นทางชั่วคราว ให้เพิ่ม
-PolicyStore "ActiveStore"ตัวเลือก. เส้นทางนี้จะถูกลบหลังจากรีสตาร์ท Windows
ลบเส้นทางออกจากตารางเส้นทาง:
Remove-NetRoute -NextHop 192.168.0.1 -Confirm:$FalsePowerShell: เปลี่ยนอแด็ปเตอร์จากที่อยู่ IP แบบคงที่เป็น DHCP
ในการกำหนดค่าคอมพิวเตอร์ของคุณเพื่อรับที่อยู่ IP แบบไดนามิกสำหรับอะแดปเตอร์เครือข่ายจากเซิร์ฟเวอร์ DHCP ให้รันคำสั่งนี้:
Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Enabledล้างการตั้งค่าเซิร์ฟเวอร์ DNS:
Set-DnsClientServerAddress -InterfaceAlias Ethernet0 -ResetServerAddressesและรีสตาร์ทอะแดปเตอร์เครือข่ายเพื่อรับที่อยู่ IP จากเซิร์ฟเวอร์ DHCP โดยอัตโนมัติ:
Restart-NetAdapter -InterfaceAlias Ethernet0หากคุณเคยกำหนดค่าเกตเวย์เริ่มต้นไว้ ให้ลบออก:
Set-NetIPInterface -InterfaceAlias Ethernet0| Remove-NetRoute -Confirm:$falseหากคุณต้องการรีเซ็ตการตั้งค่า IPv4 ทั้งหมดสำหรับอินเทอร์เฟซเครือข่ายของคอมพิวเตอร์ และสลับการตั้งค่าเหล่านี้เพื่อรับที่อยู่ IP แบบไดนามิกจาก DHCP ให้ใช้สคริปต์ต่อไปนี้:
$IPType = "IPv4"
$adapter = Get-NetAdapter | ? {$_.Status -eq "up"}
$interface = $adapter | Get-NetIPInterface -AddressFamily $IPType
If ($interface.Dhcp -eq "Disabled") {
If (($interface | Get-NetIPConfiguration).Ipv4DefaultGateway) {
$interface | Remove-NetRoute -Confirm:$false
}
$interface | Set-NetIPInterface -DHCP Enabled
$interface | Set-DnsClientServerAddress -ResetServerAddresses
}เปลี่ยนที่อยู่ DNS และ IP จากระยะไกลบนคอมพิวเตอร์หลายเครื่องด้วย PowerShell
คุณสามารถใช้ PowerShell เพื่อเปลี่ยนที่อยู่ IP หรือการตั้งค่าเซิร์ฟเวอร์ DNS จากระยะไกลบนคอมพิวเตอร์ระยะไกลหลายเครื่อง
สมมติว่า งานของคุณคือเปลี่ยนการตั้งค่า DNS บนโฮสต์ Windows Server ทั้งหมดใน AD Organizational Unit (OU) สคริปต์ต่อไปนี้ใช้ Get-ADComputer cmdlet เพื่อรับรายการคอมพิวเตอร์จาก Active Directory จากนั้นเชื่อมต่อกับคอมพิวเตอร์ระยะไกลผ่าน WinRM (ใช้ Invoke-Command cmdlet):
$Servers = Get-ADComputer -SearchBase ‘OU=Servers,OU=Berlin,OU=DE,DC=a-d,DC=cpm’ -Filter '(OperatingSystem -like "Windows Server*")' | Sort-Object Name
ForEach ($Server in $Servers) {
Write-Host "Server $($Server.Name)"
Invoke-Command -ComputerName $Server.Name -ScriptBlock {
$NewDnsServerSearchOrder = "192.168.2.11","8.8.8.8"
$Adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.DHCPEnabled -ne 'True' -and $_.DNSServerSearchOrder -ne $null}
Write-Host "Old DNS settings: "
$Adapters | ForEach-Object {$_.DNSServerSearchOrder}
$Adapters | ForEach-Object {$_.SetDNSServerSearchOrder($NewDnsServerSearchOrder)} | Out-Null
$Adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.DHCPEnabled -ne 'True' -and $_.DNSServerSearchOrder -ne $null}
Write-Host "New DNS settings: "
$Adapters | ForEach-Object {$_.DNSServerSearchOrder}
}
}








