ค้นหาเว็บไซต์

ดำเนินงานด้านเครือข่าย


ตัวอย่างนี้ใช้กับแพลตฟอร์ม Windows เท่านั้น

เนื่องจาก TCP/IP เป็นโปรโตคอลเครือข่ายที่ใช้บ่อยที่สุด งานการดูแลระบบโปรโตคอลเครือข่ายระดับต่ำส่วนใหญ่จึงเกี่ยวข้องกับ TCP/IP ในส่วนนี้ เราใช้ PowerShell และ WMI เพื่อทำงานเหล่านี้

แสดงรายการที่อยู่ IP สำหรับคอมพิวเตอร์

หากต้องการรับที่อยู่ IP ทั้งหมดที่ใช้งานบนเครื่องคอมพิวเตอร์ ให้ใช้คำสั่งต่อไปนี้:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExpandProperty IPAddress

เนื่องจากคุณสมบัติ IPAddress ของออบเจ็กต์ Win32_NetworkAdapterConfiguration เป็นอาร์เรย์ คุณต้องใช้พารามิเตอร์ ExpandProperty ของ Select-Object เพื่อดูรายการที่อยู่ทั้งหมด

10.0.0.1
fe80::60ea:29a7:a233:7cb7
2601:600:a27f:a470:f532:6451:5630:ec8b
2601:600:a27f:a470:e167:477d:6c5c:342d
2601:600:a27f:a470:b021:7f0d:eab9:6299
2601:600:a27f:a470:a40e:ebce:1a8c:a2f3
2601:600:a27f:a470:613c:12a2:e0e0:bd89
2601:600:a27f:a470:444f:17ec:b463:7edd
2601:600:a27f:a470:10fd:7063:28e9:c9f3
2601:600:a27f:a470:60ea:29a7:a233:7cb7
2601:600:a27f:a470::2ec1

เมื่อใช้ Get-Member cmdlet คุณจะเห็นว่าคุณสมบัติ IPAddress เป็นอาร์เรย์:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Get-Member -Name IPAddress
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_NetworkAdapterConfiguration

Name      MemberType Definition
----      ---------- ----------
IPAddress Property   string[] IPAddress {get;}

คุณสมบัติ IPAddress สำหรับอะแดปเตอร์เครือข่ายแต่ละตัวนั้นเป็นอาร์เรย์จริงๆ เครื่องหมายปีกกาในคำจำกัดความระบุว่า IPAddress ไม่ใช่ค่า System.String แต่เป็นอาร์เรย์ของค่า System.String

แสดงรายการข้อมูลการกำหนดค่า IP

หากต้องการแสดงข้อมูลการกำหนดค่า IP โดยละเอียดสำหรับอะแดปเตอร์เครือข่ายแต่ละตัว ให้ใช้คำสั่งต่อไปนี้:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true

จอแสดงผลเริ่มต้นสำหรับออบเจ็กต์การกำหนดค่าอะแดปเตอร์เครือข่ายคือชุดข้อมูลที่มีอยู่ที่ลดลงอย่างมาก สำหรับการตรวจสอบเชิงลึกและการแก้ไขปัญหา ให้ใช้ Select-Object หรือ cmdlet การจัดรูปแบบ เช่น Format-List เพื่อระบุคุณสมบัติที่จะแสดง

ในเครือข่าย TCP/IP สมัยใหม่ คุณอาจไม่สนใจคุณสมบัติ IPX หรือ WINS คุณสามารถใช้พารามิเตอร์ ExcludeProperty ของ Select-Object เพื่อซ่อนคุณสมบัติด้วยชื่อที่ขึ้นต้นด้วย "WINS" หรือ "IPX"

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExcludeProperty IPX*,WINS*

คำสั่งนี้ส่งคืนข้อมูลโดยละเอียดเกี่ยวกับ DHCP, DNS, การกำหนดเส้นทาง และคุณสมบัติการกำหนดค่า IP รองอื่นๆ

ส่ง Ping คอมพิวเตอร์

คุณสามารถดำเนินการ ping ง่ายๆ กับคอมพิวเตอร์โดยใช้ Win32_PingStatus คำสั่งต่อไปนี้ดำเนินการ ping แต่ส่งคืนเอาต์พุตที่มีความยาว:

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'"

แบบฟอร์มที่มีประโยชน์มากขึ้นสำหรับข้อมูลสรุปที่แสดงคุณสมบัติ Address, ResponseTime และ StatusCode ตามที่สร้างโดยคำสั่งต่อไปนี้ พารามิเตอร์ ปรับขนาดอัตโนมัติ ของ Format-Table ปรับขนาดคอลัมน์ของตารางเพื่อให้แสดงได้อย่างถูกต้องใน PowerShell

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'" |
    Format-Table -Property Address,ResponseTime,StatusCode -Autosize
Address   ResponseTime StatusCode
-------   ------------ ----------
127.0.0.1            0          0

StatusCode เป็น 0 บ่งชี้ว่า Ping สำเร็จ

คุณสามารถใช้อาร์เรย์เพื่อ Ping คอมพิวเตอร์หลายเครื่องด้วยคำสั่งเดียว เนื่องจากมีมากกว่าหนึ่งที่อยู่ ให้ใช้ ForEach-Object เพื่อ ping แต่ละที่อยู่แยกกัน:

'127.0.0.1','localhost','bing.com' |
  ForEach-Object -Process {
    Get-CimInstance -Class Win32_PingStatus -Filter ("Address='$_'") |
      Select-Object -Property Address,ResponseTime,StatusCode
  }

คุณสามารถใช้รูปแบบคำสั่งเดียวกันเพื่อ ping ที่อยู่ทั้งหมดบนซับเน็ต เช่น เครือข่ายส่วนตัวที่ใช้หมายเลขเครือข่าย 192.168.1.0 และซับเน็ตมาสก์คลาส C มาตรฐาน (255.255.255.0) เฉพาะที่อยู่ในช่วง 192.168 1.1 ถึง 192.168.1.254 เป็นที่อยู่ท้องถิ่นที่ถูกต้องตามกฎหมาย (0 จะถูกสงวนไว้สำหรับหมายเลขเครือข่ายเสมอ และ 255 คือที่อยู่การออกอากาศซับเน็ต)

หากต้องการแสดงอาร์เรย์ของตัวเลขตั้งแต่ 1 ถึง 254 ใน PowerShell ให้ใช้นิพจน์ 1..254 การ ping เครือข่ายย่อยที่สมบูรณ์สามารถทำได้โดยการเพิ่มแต่ละค่าในช่วงไปยังที่อยู่บางส่วนในคำสั่ง ping:

1..254| ForEach-Object -Process {
  Get-CimInstance -Class Win32_PingStatus -Filter ("Address='192.168.1.$_'") } |
    Select-Object -Property Address,ResponseTime,StatusCode

โปรดทราบว่าเทคนิคในการสร้างช่วงที่อยู่นี้สามารถนำไปใช้ที่อื่นได้เช่นกัน คุณสามารถสร้างชุดที่อยู่ที่สมบูรณ์ได้ด้วยวิธีนี้:

$ips = 1..254 | ForEach-Object -Process {'192.168.1.' + $_}

การดึงคุณสมบัติอะแดปเตอร์เครือข่าย

ก่อนหน้านี้ เราได้กล่าวไว้ว่าคุณสามารถดึงข้อมูลคุณสมบัติการกำหนดค่าทั่วไปได้โดยใช้คลาส Win32_NetworkAdapterConfiguration แม้ว่าจะไม่ใช่ข้อมูล TCP/IP อย่างเคร่งครัด แต่ข้อมูลอะแดปเตอร์เครือข่าย เช่น ที่อยู่ MAC และประเภทอะแดปเตอร์อาจมีประโยชน์ในการทำความเข้าใจสิ่งที่เกิดขึ้นกับคอมพิวเตอร์ หากต้องการรับข้อมูลสรุปให้ใช้คำสั่งต่อไปนี้:

Get-CimInstance -Class Win32_NetworkAdapter -ComputerName .

การกำหนดโดเมน DNS สำหรับอะแดปเตอร์เครือข่าย

หากต้องการกำหนดโดเมน DNS สำหรับการจำแนกชื่ออัตโนมัติ ให้ใช้เมธอด SetDNSDomain ของ Win32_NetworkAdapterConfiguration พารามิเตอร์ Query ของ Invoke-CimMethod รับสตริงการสืบค้น WQL cmdlet เรียกวิธีการที่ระบุไว้ในแต่ละอินสแตนซ์ที่ส่งคืนโดยแบบสอบถาม

$wql = 'SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True'
$args = @{ DnsDomain = 'fabrikam.com'}
Invoke-CimMethod -MethodName SetDNSDomain -Arguments $args -Query $wql

จำเป็นต้องมีการกรอง IPEnabled=True เนื่องจากแม้แต่บนเครือข่ายที่ใช้เฉพาะ TCP/IP การกำหนดค่าอะแดปเตอร์เครือข่ายหลายตัวบนคอมพิวเตอร์ก็ไม่ใช่อะแดปเตอร์ TCP/IP ที่แท้จริง เป็นองค์ประกอบซอฟต์แวร์ทั่วไปที่รองรับ RAS, VPN, QoS และบริการอื่นๆ สำหรับอะแดปเตอร์ทั้งหมด ดังนั้นจึงไม่มีที่อยู่ของตนเอง

ดำเนินงานการกำหนดค่า DHCP

การแก้ไขรายละเอียด DHCP เกี่ยวข้องกับการทำงานกับชุดอะแดปเตอร์เครือข่าย เช่นเดียวกับการกำหนดค่า DNS มีการดำเนินการที่แตกต่างกันหลายประการที่คุณสามารถทำได้โดยใช้ WMI

ค้นหาอะแดปเตอร์ที่เปิดใช้งาน DHCP

หากต้องการค้นหาอะแดปเตอร์ที่เปิดใช้งาน DHCP บนคอมพิวเตอร์ ให้ใช้คำสั่งต่อไปนี้:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=$true"

หากต้องการแยกอะแด็ปเตอร์ที่มีปัญหาการกำหนดค่า IP คุณสามารถเรียกข้อมูลเฉพาะอะแด็ปเตอร์ที่เปิดใช้งาน IP เท่านั้น:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true"

การดึงข้อมูลคุณสมบัติ DHCP

เนื่องจากคุณสมบัติที่เกี่ยวข้องกับ DHCP สำหรับอะแดปเตอร์โดยทั่วไปจะเริ่มต้นด้วย DHCP คุณสามารถใช้พารามิเตอร์คุณสมบัติของ Format-Table เพื่อแสดงเฉพาะคุณสมบัติเหล่านั้น:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter  "IPEnabled=$true and DHCPEnabled=$true" |
  Format-Table -Property DHCP*

การเปิดใช้งาน DHCP บนอะแด็ปเตอร์แต่ละตัว

หากต้องการเปิดใช้งาน DHCP บนอะแด็ปเตอร์ทั้งหมด ให้ใช้คำสั่งต่อไปนี้:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE IPEnabled=True and DHCPEnabled=False'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

การใช้คำสั่งตัวกรอง IPEnabled=True และ DHCPEnabled=False หลีกเลี่ยงการเปิดใช้งาน DHCP ในกรณีที่เปิดใช้งานอยู่แล้ว

การออกและการต่ออายุสัญญาเช่า DHCP บนอะแด็ปเตอร์เฉพาะ

อินสแตนซ์ของคลาส Win32_NetworkAdapterConfiguration มีเมธอด ReleaseDHCPLease และ RenewDHCPLease ทั้งสองใช้ในลักษณะเดียวกัน โดยทั่วไป ให้ใช้วิธีการเหล่านี้หากคุณต้องการปล่อยหรือต่ออายุที่อยู่สำหรับอะแดปเตอร์บนเครือข่ายย่อยที่ระบุเท่านั้น วิธีที่ง่ายที่สุดในการกรองอะแดปเตอร์บนเครือข่ายย่อยคือเลือกเฉพาะการกำหนดค่าอะแดปเตอร์ที่ใช้เกตเวย์สำหรับเครือข่ายย่อยนั้น ตัวอย่างเช่น คำสั่งต่อไปนี้เผยแพร่การเช่า DHCP ทั้งหมดบนอะแดปเตอร์บนเครื่องคอมพิวเตอร์ที่ได้รับการเช่า DHCP จาก 192.168.1.254:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

การเปลี่ยนแปลงเพียงอย่างเดียวสำหรับการต่ออายุสัญญาเช่า DHCP คือการใช้วิธี RenewDHCPLease แทนวิธี ReleaseDHCPLease:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName RenewDHCPLease -Query $wql

บันทึก

เมื่อใช้วิธีการเหล่านี้บนคอมพิวเตอร์ระยะไกล โปรดทราบว่าคุณอาจสูญเสียการเข้าถึงระบบระยะไกลได้ หากคุณเชื่อมต่อเข้ากับระบบผ่านอะแดปเตอร์ด้วยสัญญาเช่าที่ออกหรือต่ออายุ

การออกและการต่ออายุสัญญาเช่า DHCP บนอะแด็ปเตอร์ทั้งหมด

คุณสามารถดำเนินการเผยแพร่ที่อยู่ DHCP ส่วนกลางหรือต่ออายุบนอะแดปเตอร์ทั้งหมดได้โดยใช้วิธี Win32_NetworkAdapterConfiguration ReleaseDHCPLeaseAll และ RenewDHCPLeaseAll อย่างไรก็ตาม คำสั่งต้องใช้กับคลาส WMI แทนที่จะเป็นอะแด็ปเตอร์เฉพาะ เนื่องจากการรีลีสและการต่ออายุสัญญาเช่าแบบโกลบอลจะดำเนินการในคลาส ไม่ใช่บนอะแด็ปเตอร์เฉพาะ Invoke-CimMethod cmdlet สามารถเรียกเมธอดของคลาสได้

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName ReleaseDHCPLeaseAll

คุณสามารถใช้รูปแบบคำสั่งเดียวกันเพื่อเรียกใช้เมธอด RenewDHCPLeaseAll:

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName RenewDHCPLeaseAll

การสร้างส่วนแบ่งเครือข่าย

หากต้องการสร้างการแชร์เครือข่าย ให้ใช้วิธี Create ของ Win32_Share:

Invoke-CimMethod -ClassName Win32_Share -MethodName Create -Arguments @{
    Path = 'C:\temp'
    Name = 'TempShare'
    Type = [uint32]0 #Disk Drive
    MaximumAllowed = [uint32]25
    Description = 'test share of the temp folder'
}

ซึ่งเทียบเท่ากับคำสั่ง net share ต่อไปนี้บน Windows:

net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"

หากต้องการเรียกเมธอดของคลาส WMI ที่รับพารามิเตอร์ คุณต้องทราบว่ามีพารามิเตอร์ใดบ้างและประเภทของพารามิเตอร์เหล่านั้น ตัวอย่างเช่น คุณสามารถแสดงรายการวิธีการของ Win32_Class ด้วยคำสั่งต่อไปนี้:

(Get-CimClass -ClassName Win32_Share).CimClassMethods
Name          ReturnType Parameters                                   Qualifiers
----          ---------- ----------                                   ----------
Create            UInt32 {Access, Description, MaximumAllowed, Name…} {Constructor, Implemented, MappingStrings, Stati…
SetShareInfo      UInt32 {Access, Description, MaximumAllowed}        {Implemented, MappingStrings}
GetAccessMask     UInt32 {}                                           {Implemented, MappingStrings}
Delete            UInt32 {}                                           {Destructor, Implemented, MappingStrings}

ใช้คำสั่งต่อไปนี้เพื่อแสดงรายการพารามิเตอร์ของเมธอด Create

(Get-CimClass -ClassName Win32_Share).CimClassMethods['Create'].Parameters
Name            CimType Qualifiers                                  ReferenceClassName
----            ------- ----------                                  ------------------
Access         Instance {EmbeddedInstance, ID, In, MappingStrings…}
Description      String {ID, In, MappingStrings, Optional}
MaximumAllowed   UInt32 {ID, In, MappingStrings, Optional}
Name             String {ID, In, MappingStrings}
Password         String {ID, In, MappingStrings, Optional}
Path             String {ID, In, MappingStrings}
Type             UInt32 {ID, In, MappingStrings}

คุณยังสามารถอ่านเอกสารประกอบสำหรับวิธีการสร้างของคลาส Win32_Share ได้

การลบการแชร์เครือข่าย

คุณสามารถลบการแชร์เครือข่ายได้ด้วย Win32_Share แต่กระบวนการจะแตกต่างจากการสร้างการแชร์เล็กน้อย เนื่องจากคุณต้องดึงข้อมูลอินสแตนซ์เฉพาะที่ต้องการลบ แทนที่จะเป็น Win32_Share ระดับ. ตัวอย่างต่อไปนี้จะลบส่วนแบ่ง TempShare:

$wql = 'SELECT * from Win32_Share WHERE Name="TempShare"'
Invoke-CimMethod -MethodName Delete -Query $wql

การเชื่อมต่อไดรฟ์เครือข่ายที่เข้าถึงได้ของ Windows

New-PSDrive cmdlet สามารถสร้างไดรฟ์ PowerShell ที่แมปกับการแชร์เครือข่าย

New-PSDrive -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

อย่างไรก็ตาม ไดรฟ์ที่สร้างขึ้นด้วยวิธีนี้จะพร้อมใช้งานสำหรับเซสชัน PowerShell ที่สร้างขึ้นเท่านั้น หากต้องการแมปไดรฟ์ที่มีอยู่ภายนอก PowerShell (หรือกับเซสชัน PowerShell อื่น) คุณต้องใช้พารามิเตอร์ Persist

New-PSDrive -Persist -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

บันทึก

ไดรฟ์ที่แมปอย่างต่อเนื่องอาจไม่พร้อมใช้งานเมื่อทำงานในบริบทที่มีการยกระดับ นี่เป็นลักษณะการทำงานเริ่มต้นของ Windows UAC สำหรับข้อมูลเพิ่มเติม ดูบทความต่อไปนี้:

  • ไดรฟ์ที่แมปไม่พร้อมใช้งานจากพร้อมท์การยกระดับเมื่อมีการกำหนดค่า UAC ให้พร้อมท์สำหรับข้อมูลประจำตัว

บทความที่เกี่ยวข้อง