نحوه استفاده و ایجاد
Array یکی از ویژگی های اساسی PowerShell است به عنوان توانایی برای مصرف ، دستکاری و خروجی ساختار داده های واقعی (و نه فقط رشته های خام) هسته اصلی آنچه PowerShell متفاوت و مفید تر از سایر زبان های اسکریپت نویسی است ، می باشد.
در این مقاله ، ما توضیح خواهیم داد که آرایه ها چیست و نحوه استفاده از آنها در PowerShell. ما ابتدا نحوه ایجاد آرایه ها در PowerShell را به شما نشان خواهیم داد و سپس چگونه می توان از توابع اصلی برای دستکاری آنها استفاده کرد. سپس ما چندین نوع مختلف از آرایه ها را بررسی خواهیم کرد و برخی از ویژگی های ظریف تر آنها را بررسی خواهیم کرد.
هدف ما این است که به شما در زمینه کار با آرایه ها در PowerShell زمینه مناسبی را ارائه دهیم. هنگامی که این اصول را فرا گرفتید ، می توانید برای یادگیری بیشتر به دوره ما در PowerShell نگاهی بیندازید.
PowerShell Arrays
Arrays یک ویژگی مشترک تقریباً در تمام زبان های برنامه نویسی است. آنها یک ساختار داده ای هستند که به عنوان مجموعه ای از قطعات مختلف داده ها خدمت می کنند. هنگام کار با یک آرایه ، می توانید از همان دستور برای انجام همان عملکرد در هر مورد در یک آرایه استفاده کنید ، یا به عناصر مجزا با استفاده از یک فهرست دسترسی پیدا کنید و دستکاری کنید.
آرایه ها در PowerShell می توانند شامل یک یا چند مورد باشند. یک مورد می تواند یک رشته ، یک عدد صحیح ، یک شی یا حتی یک آرایه دیگر باشد و یک آرایه می تواند شامل ترکیبی از این موارد باشد. هر یک از این موارد دارای یک فهرست هستند ، که همیشه شروع می شود (بعضی اوقات گیج کننده) با 0. بنابراین به اولین مورد در یک آرایه ، شاخص 0 داده می شود ، مورد دوم به عنوان 1 و غیره نمایه می شود.
آرایه های PowerShell چنین هستند. بخش اساسی PowerShell که در هر آموزش PowerShell وجود دارد ، و دانش خوبی در مورد نحوه کار با آنها برای بسیاری از جنبه های استفاده از PowerShell ، از پیکربندی Office 365 تا استفاده از PowerShell برای Pentesting بسیار مهم است.
نمونه ای از PowerShell Array
ساده ترین روش برای نشان دادن آنچه که یک آرایه است مثالی است. بیایید آرایه ای بسازیم که نشان دهنده یک کاسه میوه باشد.
چندین روش برای ایجاد آرایه ها در Powershell وجود دارد ، اما ساده ترین کار اجرای این دستور است:
@ ()
این یک آرایه خالی ایجاد می کند. با این حال ، یک مجموعه خالی چندان مفید نیست ، بنابراین ، اجازه دهید میوه هایی به مجموعه جدید ما اضافه کنیم. اینها به عنوان رشته های متن نمایش داده می شوند. برای انجام این کار ، این دستور را اجرا کنید
$ fruit = @ ('سیب' ، 'پرتقال' ، 'موز')
با این کار یک آرایه "میوه" می نامید و سه مورد را به آن اضافه می کنید. برای دیدن اینکه این کار عملی شده است ، می توانید این آرایه را با استفاده از این دستور بخوانید:
PS / Users / yourname> $ fruit
که اکنون باز خواهد گشت:
سیب پرتقال ها موز
همانطور که مشاهده می کنید ، این آرایه گروهی از داده های جداگانه است. PowerShell به طور خودکار آنها را به روشی که در بالا توضیح دادیم ایندکس می کند: "Apple" به صورت 0 ، "پرتقال" به عنوان 1 و "موز" به عنوان 2 فهرست بندی می شود.
این مثال ممکن است باعث شود که آرایه ها بسیار ساده باشند. اشیاء ، و به روشی که هستند. با این حال ، سادگی آنها نیز چیزی است که آنها را به چنین اشیاء قدرتمند و انعطاف پذیر تبدیل می کند. در ادامه این راهنما ، ما طرز تهیه کارهایی با آرایه ها را به شما می دهیم.
Array Fundamentals
در این بخش ، به ابتدایی ترین راه های ایجاد و کار با آرایه ها خواهیم پرداخت. PowerShell.
Array
را بسازید ابتدا یک آرایه ایجاد می کنیم. روش استاندارد انجام این کار استفاده از @ () است ، اگرچه روش های دیگری نیز وجود دارد.
در حال حاضر ، بیایید آرایه ای بنام "داده" ایجاد کنیم. برای این کار ، اجرا کنید:
$ data = @ ()
این آرایه در حال حاضر خالی است زیرا ما هیچ داده ای را برای آن مشخص نکرده ایم. برای بررسی تعداد موارد در یک آرایه ، می توانیم از تابع شمارش استفاده کنیم:
$ data.count
که در حال حاضر ، 0 را برمی گرداند ، زیرا هیچ آیتمی در آرایه ما وجود ندارد. برای ایجاد آرایه ای با داده های موجود در آن ، ما این داده ها را درون پرانتز قرار می دهیم بعد از @:
$ data = @ ('' صفر '،' یک '،' دو '،' سه ')
همین تابع شمارش در حال حاضر ، و شما خواهید دید که 4 آیتم در این آرایه وجود دارد. برای دیدن دوباره این موارد ، ما فقط آرایه را فراخوانی می کنیم:
$ data
که مواردی را که ما در آرایه قرار می دهیم لیست می کند.
دسترسی به موارد
اکنون یک آرایه داریم ، می خواهیم دسترسی داشته باشیم مواردی از آن راه های مختلفی برای این کار وجود دارد. اولین استفاده از فهرست موارد موجود در آرایه است. همانطور که قبلاً گفتیم ، ایندکس ها از 0 شروع می شوند ، بنابراین برای بازیابی اولین مورد در آرایه ما ، باید به PowerShell بگوییم تا موردی را مشاهده کند که فهرست آن صفر باشد. ما این کار را با اجرای این کار انجام می دهیم:
$ data [0]
این "صفر" بر می گردد زیرا این اولین رشته ای است که ما در مجموعه خود قرار داده ایم.
ما همچنین می توانیم این نحو را برای بازگشت چندین آیتم از همان آرایه ، فقط با قرار دادن فهرست های بیشتر در همان دستور. برای مثال ، اجرا کنید:
$ $ [0,2,3]
با این کار "صفر دو سه" برمی گردد. موارد به همان ترتیبی که شما وارد ایندکس ها شده اند ، بازگردانده می شوند. شما همچنین می توانید از syntax اضافی برای بازگشت مجموعه موارد از مجموعه استفاده کنید. به عنوان مثال: [دادههای19659012] $ [1..3]
همه موارد را با یک فهرست بین 1 و 3 (شامل) باز می گرداند. و:
$ data [-1]
آخرین مورد موجود در آرایه را برمی گرداند: عدد منفی به PowerShell می گوید که از انتهای آرایه عقب بماند ، بنابراین در این حالت ، این دستور "سه" را برمی گرداند. آخرین مورد در آرایه آزمون ما.
در حال تغییر موارد
با استفاده از همین روش می توانید موارد را در یک آرایه به روز کنید. به عنوان مثال ، برای به روزرسانی موردی که فهرست آن 2 است (بیاد داشته باشید که این سومین مورد در آرایه است) ، می توانیم اجرا کنیم:
data data [2] = 'second'
این به ما دسترسی مستقیم می دهد به موارد داخل یک آرایه.
Iterated Actions
یکی از قدرتمندترین ویژگی های PowerShell (و در حقیقت ، هر رابط خط فرمان) توانایی انجام یک عمل مشابه بر روی تمام موارد موجود در یک آرایه است. چندین روش مختلف برای انجام این کار وجود دارد.
اساسی ترین استفاده از یک خط لوله است که کاراکتر | وقتی یک آرایه را به یک خط لوله منتقل می کنید ، هر مورد در یک آرایه بصورت جداگانه پردازش می شود. همانطور که در مقاله ما در مورد اشیاء PowerShell و لوله کشی داده ها اشاره کردیم ، این اغلب ساده ترین روش برای انجام اقدامات تکراری است.
به عنوان مثال ، برای اضافه کردن توضیحی به هر مورد در آرایه ما ، می توانیم از این دستور استفاده کنیم:
$ data | ForEach-Object Item "مورد: [$PSItem]"}
این دستور به PowerShell می گوید که اقلام را به صورت یکبار در $ داده ها جمع کند ، و سپس برای هر یک از آنها "مورد" را به ابتدا اضافه کنید ، و بعد از آن اصلی مقدار.
چندین روش دیگر برای انجام اقدامات تکراری در PowerShell وجود دارد که در صورت استفاده از سایر زبان های برنامه نویسی ، بسیاری از آنها آشنا خواهید بود: PowerShell شامل حلقه های ForEach ، حلقه ها و سوئیچ ها است. برای اطلاعات بیشتر در مورد این ، مستندات مایکروسافت را بررسی کنید.
آرایه های اشیاء
تاکنون ، ما با آرایه ای کار کرده ایم که شامل داده های اولیه است: یک رشته. با این حال ، آرایه ها همچنین می توانند حاوی اشیاء باشند و بسیاری از رایج ترین کاربردهای PowerShell – مانند پیکربندی Office 365 – مستلزم این است که شما بدانید که چگونه با اشیاء کار کنید. بنابراین بیایید چند دستورالعمل اساسی را برای انجام آن بررسی کنیم.
ایجاد یک آرایه از اشیاء
ما می توانیم با استفاده از عملکرد @ () مجموعه ای از اشیاء را به همان روشی که با رشته ها انجام دادیم ، ایجاد کنیم. به عنوان مثال ، برای تهیه لیست آزمایشی کارمندان ، می توانیم از این موارد استفاده کنیم:
$ data = @ ( [pscustomobject] @ {FirstName = 'Kevin'؛ LastName = 'Marquette'} [pscustomobject] @ {FirstName = 'جان'؛ نام خانوادگی = 'Doe' )
وقتی cmd متغیر را برای کار با آنها اختصاص می دهید ، بیشتر cmdlet ها این نوع را باز می گردانند.
دسترسی به اشیاء از Arrays
فرایندی که ما از بالا برای دستیابی به تک تک داده ها استفاده کردیم به همان اندازه قابل استفاده است. آرایه هایی که شامل اشیاء هستند. به عنوان مثال ، در حال اجرا:
$ data [0]
باز خواهد گشت:
نام خانوادگی نام خانوادگی ----- ---- کوین مارکت
از طرف دیگر ، می توانیم با مشخص کردن اینکه کدام ملک را می خواهیم در همان دستور قرار دهیم ، مانند این: به [دادههای19659012] $ $ [0] .FirstName
که "کوین" باز خواهد گشت ، دسترسی پیدا می کنیم.
به روز رسانی ویژگی های شیء در آرایه ها
با پیشرفت بیشتر ، همان نحو به ما امکان می دهد تا ویژگی های فردی را در اشیایی که به صورت آرایه نگه داشته می شوند ، به روز کنیم. به عنوان مثال:
$ data [0] .FirstName = 'Jay'
خاصیت FirstName را در اولین مورد موجود در مجموعه ما به "جی" به روز می کند.
دسترسی به هر ملک در مجموعه ای از اشیاء [19659010] در اکثر زبان های برنامه نویسی ، ما باید برای دسترسی به همه خصوصیات موجود در یک اشیاء ، از یک فرآیند تکراری استفاده کنیم. ما می توانیم این کار را در PowerShell نیز انجام دهیم ، البته ، با اجرای:
$ data | ForEach-Object $ _. LastName}
با این کار لیستی از تمام ویژگی های LastName در آرایه ما باز خواهد گشت ، اما نوشتن هر زمان که می خواهید این داده ها را بنویسید از لحاظ محاسباتی گران است. بنابراین در عوض ، PowerShell دارای میانبر است. اجرای این:
$ data.LastName
و همان لیست را مشاهده خواهید کرد. PowerShell در واقع هر چیز دیگری را به نوبه خود ، مانند گذشته ، گرفته است ، اما این پیچیدگی را از ما پنهان می کند.
Operators For Arrays
تقریباً از همه اپراتورهایی که ما استفاده می کنیم. برای موارد داده های فردی در PowerShell نیز با آرایه ها کار خواهد کرد ، اما برخی از آنها هنگام استفاده از این روش کمی متفاوت عمل می کنند. بنابراین بیایید نگاهی به متداولترین اپراتورها بیندازیم ، و اینکه چگونه می توانید از آنها در آرایه ها استفاده کنید.
-join
عملگر -join یکی از پرکاربردترین دستورات در PowerShell است ، و هنگام کار با آن بسیار مفید است. آرایه ها می توان از آن به صورت تکراری در موارد موجود در آرایه استفاده کرد تا در خروجی یک آرایه به آنها بپیوندند.
بیایید مثالی بزنیم. ابتدا یک آرایه ساده ایجاد کنید:
$ data = @ (1،2،3،4)
و سپس از – استفاده کنید تا یک ضخامت را بین هر آیتم وارد کنید و نتیجه را بدست آورید:
$ data -Join '-'
که "1-2-3-4" باز خواهد گشت. همچنین می توان از عملگر -jooin بدون تعیین کننده استفاده کرد ، که در آن می توانید موارد موجود در یک آرایه به صورت یک سری مقادیر جدا نشده از آن خارج شوند.
-Contains
اپراتور –contains روی آرایه ها به روشی بسیار مشابه کار می کند. برای استفاده از آن با نقاط داده واحد. شما می توانید از آن برای بررسی اینکه آیا یک آرایه حاوی یک رشته خاص است استفاده کنید و مقدار بولی را تولید می کند. به عنوان مثال:
PS> $ data = @ ('قرمز' ، 'سبز' ، 'آبی') PS> $ حاوی "سبز" است True
برابری
دو عملگر برای بررسی برابری در PowerShell وجود دارد: -eq و -ne. اگر عادت دارید از اینها در مقادیر مجزا استفاده کنید ، اما نحوه کار در رابطه با آرایه ها کمی عجیب به نظر می رسد. به عنوان مثال ، اگر از -eq استفاده می کنید ، اپراتور Boolean "True" را صادر نمی کند ، بلکه در عوض شیءی را که مطابقت دارد برمی گرداند.
به عنوان مثال:
PS> $ data = @ ('red'، ' سبز آبی') PS> $ data -eq "green" green
اپراتور یک به همان روش کار می کند ، به جز اینکه تمام مقادیری را که برابر با مقدار مشخص شده شما نیست به شما می دهد. بنابراین:
PS> $ data = @ ("قرمز" ، "سبز" ، "آبی") PS> $ داده "سبز" قرمز blue
با این حال ، می توانید از عبارت if () برای مقایسه خروجی این اپراتورها با خروجی مورد انتظار خود استفاده کنید ، و یک خروجی "True" یا "False" را برگردانید.
چگونه می توان مقادیر را به یک آرایه اضافه کرد [19659022] بعد از تمام دستورالعمل های بالا ، شما احتمالاً تعجب می كنید كه چرا ما اضافه كردن موارد داده به آرایه را امتناع كرده ایم. به این دلیل که هیچ راهی برای انجام این کار وجود ندارد. یک آرایه ، یک بار ایجاد شده ، به همان اندازه برای همیشه باقی می ماند و بنابراین برای بزرگتر شدن آن ، باید آن را در یک آرایه جدید کپی کنید و نسخه اصلی را حذف کنید.
این به نظر پیچیده است ، اما Powershell این فرایند را برای شما انجام می دهد. یک سری از اپراتورهای بسیار ساده. برای این کار دو روش اصلی وجود دارد.
Array Addition
PowerShell می تواند دو آرایه را با استفاده از عملگر "+" اضافه کند ، که پیچیدگی کارهایی را که در واقع سیستم انجام می دهد پنهان می شود. به عنوان مثال ، اگر دو آرایه آزمایشی را مانند این تهیه کنید:
$ first = @ ( "صفر" "یک" ) ثانیه دوم = @ ( "دو" 'سه' )
سپس می توانید آنها را با استفاده از فقط اضافه کنید:
PS> $ first + $ second
با این چهار مقدار یک آرایه جدید ایجاد می کند و نتایج را به دست می آورد. البته توجه داشته باشید که این اسم جدید را به این آرایه جدید نمی دهد. برای انجام این کار ، ما از عملگر + = استفاده می کنیم.
به علاوه برابر است با ترکیب آرایه ها
به جای استفاده از عملگر "+" در مثال بالا ، می توانستیم از عملگر "+ =" استفاده کنیم ، که به ما می دهد. یک آرایه کاملاً جدید:
$ first + = 'Two، Three'
این دستور ساده به نظر می رسد ، اما آنچه را که PowerShell در اینجا انجام می دهد پنهان است. در حال کپی کردن از تمام مقادیر از ابتدا و ایجاد یک آرایه جدید است که شامل مقادیر اضافی می باشد. سپس این آرایه اصلی را حذف می کند.
این مسئله تا حدی مشکل ساز است زیرا از نظر محاسباتی گران است. با وجود آرایه های کوچک ، ممکن است متوجه نشوید ، اما با مقادیر زیادی از داده ها ، این روش می تواند به سرعت سیستم شما را قفل کند. به همین دلیل ما به شما راه حل این مشکل را داده ایم ، در زیر.
انواع Array
تاکنون ، با آرایه های پیش فرض در PowerShell سرو کار کرده ایم. گرچه PowerShell در آن زمان به ما نگفت ، هر آرایه ای که تاکنون ایجاد کرده ایم از یک نوع است ، نوع [PSObject[]]. این نوع آرایه می تواند هر نوع داده را نگه داشته باشد.
Arrays شدیداً تایپ شده
با این وجود ، مواقعی وجود دارد که می خواهید انواع داده ها یا اشیایی را که یک آرایه می تواند فقط در یک نگه داشته باشد محدود کنید. ما می توانیم این کار را با استفاده از یک آرایه کاملاً تایپ شده انجام دهیم ، که فقط می تواند نوع داده مشخص را داشته باشد.
برای مثال ، برای ساختن آرایه ای که فقط عدد صحیح را بگیرد ، می توانیم از:
PS> [int[]] $ اعداد = 1،2،3
اگر نوع اشتباه مقدار داده را در یک آرایه به شدت تایپ شده قرار دهید ، یک کد خطا را برمی گرداند.
ArrayList
همانطور که در بالا گفتیم ، موارد را اضافه کنید. برای آرایه ها می تواند یک دردسر باشد. با این حال ، نوع دیگری از مجموعه – ArrayList – وجود دارد که زیبایی بیشتری به این بخش می دهد. با این وجود ، برای استفاده از این نوع مجموعه ، باید از چارچوب .Net استفاده کنیم که می تواند برخی از خروجی های ناگوار را در راه ما قرار دهد.
برای ایجاد یک ArrayList و اضافه کردن موارد به آن ، موارد زیر را اجرا کنید:
$ myarray = [System.Collections.ArrayList] :: جدید () [void] $ myArray.Add ('Value')
در اینجا ، ما می توانیم از سازنده پیش فرض .Net استفاده کنیم تا یک ArrayList جدید ایجاد کنیم و سپس از اپراتور -Add برای اضافه کردن موارد به آن استفاده کنیم. اپراتور [void] در آنجا وجود دارد زیرا گاهی اوقات این دستورات خروجی های عجیب و غریبی را می دهند که می توانند با کد مخلوط شوند.
Going Next
اینها متداولترین انواع آرایه در PowerShell هستند ، اما چند مورد دیگر وجود دارد. اگر به عنوان یک کاربر PowerShell در حال توسعه هستید ، استفاده از ArrayLists به جای آرایه مستقیم مستقیم مفید است ، اما باید این نکته را نیز بدانید که این نوع آرایه توسط کاربران پیشرفته استفاده نمی شود.
در عوض ، اکثر رمزگذارهای مجرب از ژنریک استفاده می کنند. نوع لیست به نام لیست []. این نوع لیست کمی پیچیده تر است زیرا مستقیماً از C # مشتق می شود ، اما پس از تسلط آن ، انعطاف پذیری بسیار بیشتری نسبت به آرایه هایی که ما تاکنون مورد بحث قرار داده ایم ارائه می دهد.
توابع Array Advanced [19659022]
علاوه بر قابلیت های اساسی که تاکنون پوشش داده ایم ، تعدادی عملکرد توابع آرایه پیشرفته تر و برخی از ویژگی های اضافی نیز وجود دارد که توجه به آنها شروع می شود.
آرایه های پیش اندازه
روش استاندارد ایجاد آرایه ها در بالا یک آرایه با اندازه تعیین شده توسط تعداد موارد موجود در آن ایجاد می کند. با این وجود ، می توانید با استفاده از سازنده جدید (اندازه $) آرایه ای ایجاد کنید.
شما می توانید این کار را انجام دهید:
$ data = [Object[]] :: new (4) [19659013] اگر یک query .count را در این آرایه اجرا کنید ، آن را "4" برمی گرداند ، زیرا حتی اگر داده ای در آن وجود نداشته باشد ، فضای آن را پر خواهد کرد. این در صورت نیاز به تنظیم اولیه بسیار مفید است. آرایه جدیدی که پر از صفر باشد زیرا در ابتدا یک آرایه از پیش اندازه پر خواهد شد.آرایه های ضرب شده
ضرب اشیاء در یک آرایه - و به ویژه رشته ها - چیزی است که اکثر افراد را هنگام اولین بار گیج می کند. برای انجام این. ما برای دستیابی به این نتیجه ، اسکریپتهای بسیار پیچیده ای دیده ایم ، اما یک روش بسیار ساده تر وجود دارد:
PS> $ data = @ ('' قرمز '' '' '' '' '' '') PS> $ data * 3بله ، درست است. این یک آرایه جدید با هر مقدار تکرار سه بار ایجاد می کند. همچنین می توانید با ساخت یک آرایه با مقدار انتخابی خود ، از این دستور به عنوان یک روش جایگزین برای پر کردن یک آرایه با صفر (یا هر مقدار پیش فرض دیگر) استفاده کرده و سپس آن را در هر زمان که دوست دارید ضرب کنید.
Arrays Nested [19659010] PowerShell مانند بسیاری از زبان های برنامه نویسی دیگر ، از آرایه های تو در تو پشتیبانی می کند. روش استاندارد انجام این کار در PowerShell استفاده از یک آرایه چند بعدی است. ساده ترین نمونه این کار ایجاد یک آرایه دو بعدی است:
$ data = @ (@ (1،2،3) ، @ (4،5،6) ، @ (7،8،9)) $ data2 = @ ( @ (1،2،3) ، @ (4،5،6) ، @ (7،8،9) )ساختار داده ای که با این دستور درست می کنید یک ماتریس کلاسیک است و می توان آن را مانند زبانهای دیگر برنامه نویسی کار کرد. برای مثال ، برای دستیابی به یک مقدار خاص از این آرایه ، باید دو بعد را مشخص کنید.
برای مثال ، برای دسترسی به مقدار "3" ، ما از این استفاده می کنیم:
PS> $ خارج = 0 PS> $ داخل = 2 PS> $ data [$outside][$inside] 3سپس می توان از این دستور برای دسترسی به هر مقدار استفاده کرد ، اما برای دسترسی به هر سطح ماتریس ، باید براکت های تو در تو اضافه کنید.
A Word Final
دستورالعمل های بالا ممکن است برای کاربرانی که برای اولین بار به PowerShell می آیند بسیار باشد ، اما آنها با دقت به عنوان راهی برای یادگیری زبان انتخاب شده اند. با تلفیق تکنیک های مختلف ، می توانید اسکریپت های قدرتمندی بسازید تا بسیاری از کارهای متداول و بیشترین وقت خود را با PowerShell انجام دهید. بسیاری از رایج ترین زبانهایی که برای مدیریت امنیت سایبری مورد استفاده قرار می گیرند ، مانند NetCat و Nmap ، از بسیاری از همان اصولی استفاده می کنند که PowerShell انجام می دهد. بنابراین استفاده از PowerShell برای بهبود امنیت سایبری ، راهی عالی برای یادگیری چگونگی امنیت عمومی سیستمهای شما است.