এই আর্টিকেলে আমরা আপনাকে দেখাবো কীভাবে PowerShell ব্যবহার করে Windows-এ নেটওয়ার্ক অ্যাডাপ্টার প্যারামিটার কনফিগার করা যায়। আমরা শিখবো কীভাবে স্ট্যাটিক IP ঠিকানা এবং DNS (নেমসার্ভার) পাওয়া ও সেট করা যায়, নেটওয়ার্ক ইন্টারফেসকে DHCP সার্ভার থেকে IP কনফিগারেশন পাওয়ার জন্য কনফিগার করা যায়। আপনি এই cmdlets ব্যবহার করে Windows Server Core/Nano ভার্সন, Hyper-V Server-এ নেটওয়ার্ক কনফিগার করতে পারেন, রিমোট কম্পিউটার/সার্ভারের IP সেটিংস পরিবর্তন করতে পারেন এবং আপনার PS স্ক্রিপ্টগুলিতে ব্যবহার করতে পারেন।
পূর্বে, Windows নেটওয়ার্ক সেটিংস CLI থেকে কনফিগার করার জন্য netsh interface ipv4 কমান্ড ব্যবহার হতো। PowerShell 3.0 এবং nieuwer-এ, আপনি বিল্ট-ইন PowerShell NetTCPIP মডিউল ব্যবহার করে Windows নেটওয়ার্ক সেটিংস ম্যানেজ করতে পারেন।
এই মডিউলে উপলব্ধ cmdlets-র তালিকা পেতে নিচের কমান্ডটি চালান:
get-command -module NetTCPIP

এই মডিউলে Test-NetConnection cmdletও আছে যা আপনি রিমোট কম্পিউটারগুলোর TCP পোর্ট অ্যাক্সেসিবিলিটি টেস্ট করতে ব্যবহার করতে পারেন।
PowerShell দিয়ে নেটওয়ার্ক অ্যাডাপ্টার ম্যানেজমেন্ট
কম্পিউটারে উপলব্ধ নেটওয়ার্ক ইন্টারফেসের তালিকা দেখান:
Get-NetAdapter
Cmdlet-টি ইন্টারফেসের নাম, এর স্টেট (Up/Down), MAC ঠিকানা এবং পোর্ট স্পিড ফেরত দেয়।
এই উদাহরণে, আমার কম্পিউটারে একাধিক নেটওয়ার্ক অ্যাডাপ্টার আছে (ফিজিক্যাল কানেকশন Ethernet0-র পাশাপাশি, কিছু Hyper-V এবং VMWare Player নেটওয়ার্ক ইন্টারফেস)।

আপনি নেটওয়ার্ক ইন্টারফেসকে তাদের নাম বা ইন্ডেক্স (Index কলাম) দিয়ে রেফার করতে পারেন। আমাদের উদাহরণে, ফিজিক্যাল LAN অ্যাডাপ্টার Intel 82574L সিলেক্ট করতে এই কমান্ডটি ব্যবহার করুন:
Get-NetAdapter -Name "Ethernet0"
অথবা:
Get-NetAdapter -InterfaceIndex 8

আপনি অ্যাডাপ্টার নাম পরিবর্তন করতে পারেন:
Rename-NetAdapter -Name Ethernet0 -NewName LAN
একটি নেটওয়ার্ক ইন্টারফেস নিষ্ক্রিয় করতে এই কমান্ডটি ব্যবহার করুন:
Get-NetAdapter -InterfaceIndex 13| Disable-NetAdapter
ইন্টারফেস সক্রিয় করার সময় আপনি এর ইন্ডেক্স ব্যবহার করতে পারবেন না কারণ এখনো এটি অ্যাসাইন করা নেই। আপনি অ্যাডাপ্টার নাম বা বর্ণনা নির্দিষ্ট করতে পারেন:
Enable-NetAdapter -InterfaceDescription “Hyper-V Virtual Ethernet Adapter"

যদি একটি অ্যাডাপ্টারের জন্য VLAN নির্দিষ্ট করা থাকে, তবে এটিকে নিচেরভাবে দেখানো যায়:
Get-NetAdapter | ft Name, Status, Linkspeed, VlanID
নেটওয়ার্ক অ্যাডাপ্টার ড্রাইভার সম্পর্কিত তথ্য পাওয়ার পদ্ধতি:
Get-NetAdapter | ft Name, DriverName, DriverVersion, DriverInformation, DriverFileName

ফিজিক্যাল নেটওয়ার্ক অ্যাডাপ্টার সম্পর্কিত তথ্য (PCI স্লট, বাস, ইত্যাদি):
Get-NetAdapterHardwareInfo
PowerShell দিয়ে TCP/IP নেটওয়ার্ক অ্যাডাপ্টার সেটিংস দেখা
বর্তমান নেটওয়ার্ক অ্যাডাপ্টার সেটিংস (IP ঠিকানা, DNS, ডিফল্ট গেটওয়ে) দেখতে:
Get-NetIPConfiguration -InterfaceAlias Ethernet0

বর্তমান নেটওয়ার্ক অ্যাডাপ্টার TCP/IP কনফিগারেশনের বিস্তারিত তথ্য দেখতে এই কমান্ডটি ব্যবহার করুন:
Get-NetIPConfiguration -InterfaceAlias Ethernet0 -Detailed
এই ক্ষেত্রে, ইন্টারফেসের এসাইন করা নেটওয়ার্ক প্রোফাইল (NetProfile.NetworkCategory), MTU সেটিংস (NetIPv4Interface.NlMTU), DHCP থেকে IP ঠিকানা পাওয়া সক্রিয় কিনা (NetIPv4Interface.DHCP) এবং অন্যান্য উপকারী তথ্য প্রদর্শিত হয়।

ইন্টারফেসের শুধু IPv4 ঠিকানা পেতে:
(Get-NetAdapter -Name ethernet0 | Get-NetIPAddress).IPv4Address
PowerShell ব্যবহার করে স্ট্যাটিক IP ঠিকানা সেট করা
চলুন NIC-র জন্য একটি স্ট্যাটিক IP ঠিকানা সেট করার চেষ্টা করি। একটি নেটওয়ার্ক ইন্টারফেসের IP ঠিকানা, সাবনেট মাস্ক এবং ডিফল্ট গেটওয়ে পরিবর্তন করতে ব্যবহার করুন:
New-NetIPAddress –IPAddress 192.168.2.50 -DefaultGateway 192.168.2.1 -PrefixLength 24 -InterfaceIndex 8
আপনি একটি অ্যারে স্ট্রাকচার ব্যবহার করে IP ঠিকানা সেট করতে পারেন (আরও দৃশ্যমান):
$ipParams = @{
InterfaceIndex = 8
IPAddress = "192.168.2.50"
PrefixLength = 24
AddressFamily = "IPv4"
}
New-NetIPAddress @ipParams
New-NetIPAddress ব্যবহার করে একটি নেটওয়ার্ক অ্যাডাপ্টারে দ্বিতীয় IP ঠিকানা (অ্যালিয়াস) যোগ করা যায়।
যদি ইতিমধ্যে স্ট্যাটিক IP ঠিকানা কনফিগার করা থাকে এবং আপনি তা পরিবর্তন করতে চান, Set-NetIPAddress cmdlet ব্যবহার করা হয়:
Set-NetIPAddress -InterfaceIndex 8 -IPAddress 192.168.2.90
আপনার অ্যাডাপ্টারের জন্য DHCP থেকে IP ঠিকানা পাওয়া নিষ্ক্রিয় করতে এই কমান্ডটি চালান:
Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Disabled
রাউটিং টেবিল দেখতে Get-NetRoute cmdlet ব্যবহার করা হয়। নতুন রুট যোগ করতে New-NetRoute cmdlet ব্যবহার করুন:
New-NetRoute -DestinationPrefix "0.0.0.0/0" -NextHop "192.168.2.2" -InterfaceIndex 8
নেটওয়ার্ক অ্যাডাপ্টারের জন্য IPv6 প্রোটোকল নিষ্ক্রিয় করতে:
Get-NetAdapterBinding -InterfaceAlias Ethernet0 | Set-NetAdapterBinding -Enabled:$false -ComponentID ms_tcpip6
Set-DnsClientServerAddress: প্রাইমারি এবং সেকেন্ডারি DNS সার্ভার ঠিকানা সেট করা
Windows-এ প্রাইমারি এবং সেকেন্ডারি DNS সার্ভার IP ঠিকানা সেট করতে Set-DNSClientServerAddress cmdlet ব্যবহার করুন। উদাহরণস্বরূপ:
Set-DNSClientServerAddress –InterfaceIndex 8 –ServerAddresses 192.168.2.11,10.1.2.11
আপনি অ্যারে ব্যবহার করেও নেমসার্ভার সেট করতে পারেন:
$dnsParams = @{
InterfaceIndex = 8
ServerAddresses = ("8.8.8.8","8.8.4.4")
}
Set-DnsClientServerAddress @dnsParams
DNS সেটিংস পরিবর্তন করার পর, রেজলভার ক্যাশ ক্লিয়ার করুন:
Clear-DnsClientCache
PowerShell ব্যবহার করে স্ট্যাটিক IP ঠিকানা থেকে DHCP-এ পরিবর্তন করা
নেটওয়ার্ক অ্যাডাপ্টারের জন্য কম্পিউটারকে DHCP সার্ভার থেকে ডাইনামিক IP ঠিকানা পাওয়ার অনুমতি দিতে এই কমান্ডটি চালান:
Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Enabled
DNS সার্ভার সেটিংস ক্লিয়ার করুন:
Set-DnsClientServerAddress –InterfaceIndex 8 -ResetServerAddresses
এবং আপনার অ্যাডাপ্টার রিস্টার্ট করুন যাতে DHCP সার্ভার থেকে স্বয়ংক্রিয়ভাবে IP ঠিকানা পায়:
Restart-NetAdapter -InterfaceAlias Ethernet0
আপনার আগে যদি ডিফল্ট গেটওয়ে কনফিগার করা থাকে, তবে সেটি মুছে ফেলুন:
Set-NetIPInterface -InterfaceAlias Ethernet0| Remove-NetRoute -Confirm:$false
PowerShell দিয়ে রিমোটলি IP ঠিকানা এবং DNS সেটিংস পরিবর্তন করা
আপনি PowerShell ব্যবহার করে একাধিক রিমোট কম্পিউটারের IP ঠিকানা বা DNS সার্ভার সেটিংস পরিবর্তন করতে পারেন। মান লইয়ে চলি, আপনার টাস্ক হলো নির্দিষ্ট AD কন্টেইনার (Organizational Unit)-এ সব সার্ভারের DNS সেটিংস পরিবর্তন করা। নিচের স্ক্রিপ্টে কম্পিউটার তালিকা পেতে Get-ADComputer cmdlet ব্যবহার করা হয়েছে, এবং রিমোট কম্পিউটারগুলোর সাথে কানেক্ট করতে WinRM (Invoke-Command cmdlet) ব্যবহার করা হয়েছে:
$Servers = Get-ADComputer -SearchBase ‘OU=Servers,OU=Berlin,OU=DE,DC=woshub,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}
}
}