تاريخ النشر: 2022-02-08
في هذا المقال المختصر ، سنتعلم الخطوات المتضمنة في إعداد جهاز افتراضي باستخدام Azure PowerShell مع اظهار المراحل والاحتمالات الممكنة .
يمكن تنفيذ الخطوات والمراحل القادمة بالتجربة التفاعلية المقدمة من خلال Azure Cloud Shell ، أو يمكنك تثبيت Azure PowerShell محليًا.
في حالة استعمال Azure Cloud Shell فأنت متصل مباشرة بحسابك، ويمكنك تخطي هذه المرحلة.
أما إذا كنت تستعمل نسخة Azure PowerShell مثبتة محليًا، فستحتاج الى تثبيت حزمة أوامر Azure عن طريق الأمر التالي :
install-module -name az -scope CurrentUser -Repository PSGallery -Force
بعدها يمكنك تسجيل الدخول عن طريق الأمر التالي :
Connect-AzAccount
بحيث ستفتح تلقائيا نافذة المتصفح ( Mozilla Firefox مثلا ) لإدخال اسم المستخدم وكلمة المرور (هذه الخطوة تطبق مرة واحدة فقط ).
بعد نجاح العملية ستظهر هذه النافذة التي تؤكد ذلك:
في Azure ، يمكن تخصيص جميع الموارد المنشئة في مجموعة إدارة موارد resource group منطقية، إذ توفر سهولة العمل معها (أي الموارد) كمجموعة. بالنسبة لحالتنا نحن ، تدخل جميع الموارد التي سنقوم بإنشاؤها في مجموعة واحدة تسمى VmsGroup ( يمكن أن تختار أي إسم تريد):
New-AzResourceGroup -Name VMsGroup -Location eastus
ResourceGroupName : VMsGroup
Location : eastus
ProvisioningState : Succeeded
Tags :
ResourceId : /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/VMsGroup
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."
أدخل اسم المستخدم وكلمة المرور عندما يُطلب منك ذلك. يتم تمرير كائن الاعتماد الناتج كمعامل في الخطوة التالية:
PowerShell credential request
Enter a username and password for the virtual machine.
User: AhmedAli
Password for user AhmedAli: *********
تحتوي الأجهزة الافتراضية في Azure على عدد كبير من التبعيات والمرفقات ( dependencies ). يقوم Azure PowerShell بإنشاء هذه الموارد نيابة عنا ،بناءً على وسيطات ( arguments ) سطر الأوامر التي نحددها. لسهولة القراءة ، نحن نستخدم PowerShell splatting لتمرير المعلمات ( parameters ) إلى أوامر Azure PowerShell cmdvlets.
سنقوم بإنشاء آلة افتراضية جديدة تعمل بنظام Windows Server 2019 :
$vmParams = @{
ResourceGroupName = 'VMsGroup'
Name = 'DemoVM1'
Location = 'eastus'
ImageName = 'Win2019Datacenter'
PublicIpAddressName = 'DemoPublicIp'
Credential = $cred
OpenPorts = 3389
}
$newVM1 = New-AzVM @vmParams
أثناء إنشاء الجهاز الافتراضي ، تظهر قيم المعلمات ( parameter ) المستخدمة مع إنشاء موارد Azure. سيعرض PowerShell شريط تقدم كما هو موضح أدناه:
$newVM1
Creating Azure resources
No Size value has been provided. The VM will be created with the default size Standard_D2s_v3.
Creating Azure resources [21% |..................... ]
بمجرد أن يصبح الجهاز الإفتراضي جاهزًا ، يمكننا عرض النتائج في Azure Portal كما هو مبين في الصورة التالية:
أو عن طريق فحص المتغير newVM1 :
$newVM1
ResourceGroupName : VMsGroup
Id :
/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/VMsGroup/providers/Microsoft.Compute/virtualMachines/DemoVM1
VmId : cae645d7-2471-4633-aeb9-504d5b2a5bfa
Name : DemoVM1
Type : Microsoft.Compute/virtualMachines
Location : eastus
Tags : {}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
OSProfile : {ComputerName, AdminUsername, WindowsConfiguration, Secrets, AllowExtensionOperations,
RequireGuestProvisionSignal}
ProvisioningState : Succeeded
StorageProfile : {ImageReference, OsDisk, DataDisks}
FullyQualifiedDomainName : demovm1-cdc6cf.eastus.cloudapp.azure.com
قيم الخصائص المدرجة داخل الأقواس هي كائنات متداخلة. في الخطوة التالية سوف نوضح كيفية عرض قيم محددة في هذه الكائنات المتداخلة.
دعنا نحصل على بعض المعلومات التفصيلية من الجهاز الإفتراضي الذي أنشأناه للتو. في هذا المثال ، نتحقق من اسم الجهاز وحساب المسؤول الذي أنشأناه:
$newVM1.OSProfile | Select-Object ComputerName,AdminUserName
ComputerName AdminUsername
------------ -------------
DemoVM1 AhmedAli
يمكننا استخدام أوامر Azure PowerShell الأخرى للحصول على معلومات محددة حول تكوين الشبكة:
$newVM1 | Get-AzNetworkInterface | Select-Object -ExpandProperty IpConfigurations | Select-Object Name,PrivateIpAddress
Name PrivateIpAddress
---- ----------------
DemoVM1 192.168.1.4
في هذا المثال ، نستخدم خط إمداد PowerShell لإرسال الكائن newVM1 إلى الأمر Get-AzNetworkInterface. نختار كائن IpConfigurations المتداخل من نتيجة الأمر السابق. من عنصر IpConfigurations إخترنا الاسم Name والخصائص PrivateIpAddress .
للتأكد من أن الجهاز الوهمي يشتغل ، نحتاج إلى الاتصال عبر سطح المكتب البعيد (Remote Desktop ). لذلك ، نحتاج إلى معرفة عنوان IP العام:
$publicIp = Get-AzPublicIpAddress -Name DemoPublicIp -ResourceGroupName VMsGroup
في هذا المثال ، نستخدم Get-AzPublicIpAddress ونخزن النتائج في المتغير publicIp$ . من هذا المتغير نختار الخصائص ونستخدم تعبيرًا لاسترداد خاصية الإسم الكامل Fqdn (Fully qualified domain name ) المتداخلة.
$publicIp | Select-Object Name,IpAddress,@{label='FQDN';expression={$_.DnsSettings.Fqdn}}
Name IpAddress FQDN
---- --------- ----
DemoPublicIp X.X.X.X demovm1-eb2cbf.eastus.cloudapp.azure.com
من جهازك المحلي(إذا كنت تستعمل Windows ) ، يمكنك تشغيل الأمر التالي للاتصال بـ demoVM1 عبر سطح المكتب:
mstsc.exe /v X.X.X.X
يمكنك إستعمال أي برنامج ( remote desktop client )يتيح لك خاصية الاتصال بالواجهة الرسومية للأنظمة التي تدعم سطح المكتب.
في بعض الأحيان قد نرغب في إنشاء جهاز افتراضي جديد على شبكة فرعية حالية موجودة أو تم إنشائها مسبقا.
يستخدم الجهاز الظاهري الثاني الشبكة الفرعية الموجودة التي تم إنشائها في القسم الأول من الشرح (إنشاء DemoVm1 ) .
في العادة في حالة لم نقم بتحديد حجم الجهاز الإفتراضي المراد إنشاءه ، يتم تحديد الحجم بالقيمة Standard_D2s_v3 والتي تعادل 2 معالجات (cores) و 8 جيغا ذاكرة داخلية.
في هذا المثال سنقوم بتحديد الحجم بالقيمة Standard_B4ms والتي تعادل 4 معالجات و 16 جيغا ذاكرة داخلية:
$vm2Params = @{
ResourceGroupName = 'VMsGroup'
Name = 'DemoVM2'
ImageName = 'Win2019Datacenter'
Size = 'Standard_B4ms'
VirtualNetworkName = 'DemoVM1'
SubnetName = 'DemoVM1'
PublicIpAddressName = 'DemoPublicIp2'
Credential = $cred
OpenPorts = 3389
}
$newVM2 = New-AzVM @vm2Params
Creating Azure resources [15% \ ]
يمكن أن نلاحظ في هذه الصورة أنه تم إنشاء موارد أخرى ذات علاقة بالجهاز الذي أنشأناه DemoVM2 :
أو عن طريق تفحص المتغير newVM2 :
$newVM2
ResourceGroupName : VMsGroup
Id :
/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/VMsGroup/providers/Microsoft.Compute/virtualMachines/DemoVM2
VmId : 81775363-8642-4f10-ad16-f70f375b8d5a
Name : DemoVM2
Type : Microsoft.Compute/virtualMachines
Location : eastus
Tags : {}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
OSProfile : {ComputerName, AdminUsername, WindowsConfiguration, Secrets, AllowExtensionOperations,
RequireGuestProvisionSignal}
ProvisioningState : Succeeded
StorageProfile : {ImageReference, OsDisk, DataDisks}
FullyQualifiedDomainName : demovm2-8a7a8c.eastus.cloudapp.azure.com
يمكنك تخطي بضع خطوات للحصول على عنوان IP العام لجهاز VM الجديد حيث يتم إرجاعه في خاصية FullyQualifiedDomainName للكائن $ newVM2. استخدم الأمر التالي للاتصال مباشرة دون الحاجة الى عنوان IP عام، لإستخدام الواجهة الرسومية لسطح المكتب للجهاز DemoVM2 :
mstsc.exe /v $newVM2.FullyQualifiedDomainName
يمكن إيقاف أو تشغيل الأجهزة الإفتراضية حسب الحاجة، عن طريق إستعمال الأر التالي:
Stop-AzVM -ResourceGroupName 'VMsGroup' Name = 'DemoVM1'
Start-AzVM -ResourceGroupName 'VMsGroup' Name = 'DemoVM2'
الآن وبعد اكتمال الشرح التعليمي ، حان الوقت لتنظيف الوضعية وحذف الموارد التي تم إنشاؤها لتجنب أعباء تكلفة إضافية في حالة لم نحتج إليها.
يمكنك حذف الموارد الفردية باستخدام الأمر Remove-AzResource ، ولكن الطريقة الأكثر أمانًا لإزالة جميع الموارد في مجموعة الموارد هي حذف المجموعة باستخدام الأمر Remove-AzResourceGroup.
$job = Remove-AzResourceGroup -Name VMsGroup -Force -AsJob
$job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Long Running O… AzureLongRunni… Running True localhost Remove-AzResourceGroup
يحذف هذا الأمر الموارد التي تم إنشاؤها أثناء الشرح التعليمي ، ويضمن إلغاء تخصيصها بالترتيب الصحيح. تحافظ المعلمة -AsJob على منع PowerShell من الإختناق (block) أثناء إجراء الحذف. للانتظار حتى اكتمال الحذف ، استخدم الأمر التالي:
Wait-Job -Id $job.Id
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Long Running O… AzureLongRunni… Completed True localhost Remove-AzResourceGroup
مع اكتمال عملية الحذف والتنظيف ، وصلنا الى نهاية المقال.
• تهانينا! لقد تعلمنا في هذا المقال المختصر كيفية إنشاء أجهزة إفتراضية باستخدام موارد جديدة أو حالية ، والتعبيرات المستخدمة وأوامر Azure PowerShell الأخرى لالتقاط البيانات و تخزينها في متغيرات الصدفة ( shell) ، وألقينا نظرة على بعض الموارد التي تم إنشاؤها لأجهزة Azure VM.
سنتستعرض في مقال مفصل لاحقا إن شاء الله جميع الطرق الممكنة لاستعمال وتشغيل PowerShell تحت مختلف أنظمة وبيئات التشغيل.