ดำเนินงานด้านเครือข่าย
ตัวอย่างนี้ใช้กับแพลตฟอร์ม 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 ให้พร้อมท์สำหรับข้อมูลประจำตัว