يمكن لمسؤولي تكنولوجيا المعلومات القيام بالكثير باستخدام PowerShell وسطر الأوامر. العمل مع شبكات Windows هو واحد من تلك الطرق. في هذا البرنامج التعليمي ، ستتعلم كيفية استخدام PowerShell للحصول على عناوين IP من محولات الشبكة على جهاز كمبيوتر Windows باستخدام الأمر Get-NetIPAddress
وWMI.
المتطلبات المسبقة
سوف يفترض هذا البرنامج التعليمي أنك تستخدم كمبيوترًا يعمل بنظام Windows 10 أو أحدث مع تثبيت Windows PowerShell v5.1. كما يُفترض أنك تعمل في بيئة Active Directory. إذا لم يكن الأمر كذلك ، تأكد من التعرف على خاصية Credential
على أمر New-CimSession
.
استخدام Get-NetIPAddress
تحتوي PowerShell على مجموعة متنوعة من الأوامر للعمل مع اتصالات الشبكة مثل Get-NetAdapter
و Get-NetAdapterBinding
، وحتى واحدة مصممة خصيصًا للعثور على عناوين IP تسمى Get-NetIPAddress
. إذا كنت ترغب في استخدام PowerShell للحصول على عنوان IP في سكريبت بسيط، فيمكنك استخدام هذه الأوامر.
البساطة هي الأفضل. إذا كان بإمكان PowerShell أن يقدم طريقة أسهل للقيام بشيء ما، فافعلها!
على سبيل المثال، للعثور على عنوان IPv4 على جميع محولات الشبكة على جهاز الكمبيوتر المحلي، قم بتشغيل سطر واحد.

يشير الإخراج أعلاه إلى محول شبكة محدد مثل محول Ethernet ويعيد فقط عنوان IP.

انتهيت! استخدام PowerShell للحصول على عنوان IP هو عملية مباشرة، على الأقل أكثر بساطة من استخدام وسائل أخرى.
إذا لم تكن من محبي PowerShell، يمكنك أيضًا استخدام أمر ipconfig للحصول على عنوان IP. اطلع على المزيد حول ipconfig في الأوامر ipconfig التي تحتاج إلى معرفتها.
لماذا استخدام CIM / WMI؟
عند تشغيل أمر Get-NetIPAddress ، فإن PowerShell يستعلم في الواقع WMI لاسترداد تلك المعلومات. لماذا من المهم معرفة ذلك؟ لأنه يمكنك الاستعلام مباشرة في WMI بنفسك. ولكن لماذا تستخدم WMI عندما يمكنك استخدام أمر واحد؟
واحدة من أكثر الأسباب شيوعًا لاستخدام WMI على أمر واحد مثل Get-NetIPAddress هو عندما تكون بالفعل تستعلم WMI. يحتوي WMI على الكثير من معلومات النظام التي تكون مفيدة عند بناء النصوص لأغراض الجرد.
عند التواصل مع WMI باستخدام PowerShell ، يمكنك إنشاء جلسة CIM مشابهة لجلسة PSRemoting. استخدام الجلسة هو وسيلة فعالة للمصادقة على جهاز كمبيوتر مرة واحدة وإعادة استخدام هذا الاتصال مرارًا وتكرارًا.
استخدم CIM للحصول على عنوان IP عند بناء هذه المهمة كجزء من نص أكبر.
استعلام CIM بدون جلسة
عند بناء نص PowerShell باستخدام CIM للاستعلام عن مختلف قطع المعلومات ، يجب أن تستخدم جلسة CIM قابلة لإعادة الاستخدام. إعادة استخدام جلسة واحدة لا يسرع فقط النص الخاص بك ، بل يقلل أيضًا من تكرار الشفرة.
على سبيل المثال، ربما ترغب في معرفة نظام التشغيل الذي يعمل عليه جهاز كمبيوتر ويندوز عن بُعد. يحتوي CIM على اسم النظام في خاصية تسمى “Caption” داخل فئة “Win32_OperatingSystem”. للحصول على هذه المعلومات، يجب استخدام الأمر “Get-CimInstance” الموضح أدناه، وتحديد اسم الكمبيوتر (REMOTECOMPUTER
)، وفئة CIM (Win32_OperatingSystem
)، والإشارة إلى الخاصية “Caption” فقط على الكائن.
عند تشغيل الأمر “Get-CimInstance”، يجب على PowerShell العثور على الكمبيوتر عن بُعد، وتمرير بيانات الاعتماد المسجلة الدخول إليه وأخيراً استعلام CIM للحصول على المعلومات التي تحتاجها. هناك الكثير من الأعمال الإضافية المرتبطة بتشغيل الأمر “Get-CimInstance” بدون جلسة.
ماذا لو كنت تقوم ببناء نصي لجمع معلومات الخادم وترغب أيضًا في العثور على معلومات حول التخزين والذاكرة والشبكات، وما إلى ذلك؟ في هذه الحالة، ستحتوي على العديد من أوامر “Get-CimInstance” مثل ما يلي.
سيتصل النص الخاص بك بـ REMOTECOMPUTER
أربع مرات في مقتطف الكود أعلاه، وماذا لو تغير اسم الكمبيوتر؟ ستضطر إلى البحث عن الكمبيوتر واستبدال اسمه، وهو أمر غير جيد أثناء البرمجة.
إنشاء جلسة CIM
بدلاً من استخدام “Get-CimInstance” مع جلسة، يجب عليك إنشاء جلسة CIM واحدة باستخدام الأمر “New-CimSession” واستخدام تلك الجلسة مرارًا وتكرارًا.
بدلاً من المصادقة على جهاز كمبيوتر عن بُعد مرارًا وتكرارًا ، قم بإنشاء جلسة CIM واحدة باستخدام New-CimSession
وقم بتمرير تلك الجلسة إلى Get-CimInstance
كما هو موضح أدناه.
عند الانتهاء من الجلسة ، قم بقطع الاتصال وإزالتها من الذاكرة.
استخدام جلسات CIM مثل ما سبق هو طريقة رائعة للعمل مع CIM / WMI.
العثور على محول الشبكة المناسب
نظرًا لأن جهاز الكمبيوتر الذي يعمل بنظام Windows يمكن أن يحتوي على محولات شبكة مختلفة ، فيجب عليك تحديد أي محول شبكة ترغب في الحصول على عنوان IP منه. عند استخدام WMI ، استخدم فئة Win32_NetworkAdapterConfiguration. توفر هذه الفئة الكثير من المعلومات التي يعيدها Get-NetIPAddress
.
أولاً ، قم بإنشاء سكريبت PowerShell بواسطة اسم جهاز الكمبيوتر البعيد ، ثم أنشئ جلسة CIM جديدة ، ثم أضف خط إزالة جلسة CIM أدناه.
بمجرد بناء رمز جلسة CIM ، قم بإدراج استعلام WMI.

يمكنك رؤية أن الإخراج الافتراضي أعلاه لا يعرض عنوان IP. ستحتاج إلى التنقيب قليلاً أعمق. كما أنه لا يعيد مثيل واحد فقط. كيف يمكنك تحديد الذي يحتوي على عنوان IP الذي تبحث عنه؟
للقيام بذلك ، قم أولاً بعرض جميع الخصائص باستخدام Select-Object
.
انتقل عبر الإخراج ، وستلاحظ بعض محولات الشبكة بدون عنوان IP ، وبعضها به عنوان واحد ، وبعضها به عدة عناوين IP! يجب عليك تقييدها. يجب أن تجد بعض المعايير القياسية لتصفية ذلك حتى يمكن تطبيقه على جميع الخوادم.

على كل محول، يجب أن ترى خاصية IPEnabled
. عندما يتم تعيين هذه الخاصية إلى True، فإن بروتوكول TCP/IP مرتبط بمحول NIC هذا، وهو شرط أساسي للحصول على عنوان IP. يجب عليك تحديد محولات NIC التي تحتوي على خاصية IPEnabled
معتمدة على True، وسوف يكون لديك المحول الذي تبحث عنه.
عند تصفية مثيلات WMI، فمن الأفضل استخدام معلمة Filter
في Get-CimInstance
. هناك مقولة في مجتمع PowerShell تقول “تصفية اليسار”. إذا كانت لديك الفرصة، فهذا يعني دائمًا تصفية الناتج أقصى قدر ممكن إلى اليسار.
لا تستخدم Where-Object
إلا إذا كان ذلك ضروريًا. ستكون الأداء أسرع بكثير بدلاً من ذلك بسبب عدم وجود زائد في معالجة الكائنات غير الضرورية عبر الأنابيب.
تستخدم معلمة Filter
في Get-CimInstance
لغة الاستعلام لغة استعلام Windows (WQL). WQL هي جزء صغير من SQL. تتوقع معلمة Filter
نفس بناء جملة القيود WHERE كما ستفعل SQL.
للعثور على جميع مثيلات CIM لفئة Win32_NetworkAdapterConfiguration مع خاصية IPEnabled معتمدة على True، استخدم استعلام WQL SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'True'
.
نظرًا لأننا بالفعل نحدد اسم الفئة لوسيطة المعلمة ClassName
في Get-CimInstance
، فإننا بحاجة إلى تحديد IPEnabled = 'True'
للمرشح Filter
. سيتمكن هذا من إرجاع محول الشبكة الوحيد الذي يحتوي على عنوان IP.
عند تشغيل مقتطف الكود أعلاه، يجب أن تلاحظ أن Get-CimInstance
يعيد فقط مثيلًا واحدًا (أو مجموعة محدودة) من النتائج.
والآن بما أن لديك مثيل CIM وتعرف الخاصية التي تبحث عنها (IPAddress
)، دعنا نرى كيف يبدو. ستلاحظ أدناه أنه في هذا المثال، يعيد مثيل CIM واحد فقط ولكن مع ثلاث سلاسل لخاصية IPAddress
، بما في ذلك عناوين IPV6.
سيتعين عليك تصفية بعض العناصر الأخرى. نظرًا لأن WQL لا يمكنه تصفية أعمق من قيمة خاصية IPAddress
، يجب عليك الآن تحليل عنوان IPv4.
يكون عنوان IPV4 عادةً أول عنوان يتم تحديده في المصفوفة. قم باختيار هذا العنوان باستخدام الإشارة إلى الفهرس 0 كما هو موضح أدناه. عند القيام بذلك، ستلاحظ أنه يعيد سلسلة واحدة فقط لعنوان IP الخاص بـ IPV4.
قد لا يكون عنوان IPV4 هو أول عنصر في المصفوفة دائمًا. في الواقع، قد لا يكون خاصية IPAddress حتى مصفوفة. تختلف تكوينات IP بشكل كبير عبر المحولات والتكوينات المختلفة. قد تحتاج إلى أن تكون مبدعًا في تصفيتها.
الاستنتاج.
إذا كنت بحاجة إلى استخدام PowerShell للحصول على عنوان IP من جهاز كمبيوتر، فابدأ بالنظر في الأمر Get-NetIPAddress
. إذا كنت تقوم ببناء نص أكبر أو لا يمكنك تشغيل هذا الأمر لسبب ما، فتحقق من استخدام Get-CimInstance
وجلسة CIM للقيام بالعمل الشاق.
Source:
https://adamtheautomator.com/powershell-get-ip-address/