PowerShell ForEach: مبانی Loop و Object
PowerShell ابزاری همه کاره برای مدیران سیستم است و می تواند برای خودکارسازی بسیاری از کارهای متداول در محیط ویندوز شما استفاده شود. PowerShell مانند اکثر زبانهای برنامه نویسی دیگر از مفهومی معروف به "حلقه" یا "تکرار" استفاده می کند ، که در آن همان عمل روی تعدادی از داده های مختلف انجام می شود.
از آنجا که از طریق آموزش PowerShell ما کار می کنید ، شما فرمان "ForEach" را خواهید یافت. این یکی از اساسی ترین و رایج ترین راه هایی است که PowerShell برای حلقه زدن پیاده سازی می کند ، و شناخت خوب از این فرمان برای هر کسی که با PowerShell کار می کند ، مهم است.
دوره آموزشی ویدیو PowerShell و Active Directory Essentials
را توصیه کنید. این هم برای کاربران PowerShell جدید و هم پیشرفته. ساختن ابزار AD یک تجربه یادگیری عالی است.
در این مقاله ، ما نگاهی عمیق تر به دستور ForEach در PowerShell خواهیم انداخت. ما توضیح خواهیم داد که چگونه این دستور کار می کند ، چگونه می توانید از آن برای اتوماسیون کارها استفاده کنید و نمونه های مفصلی از آن را در عمل به شما ارائه می دهیم. ما همچنین برخی از ملاحظاتی را که هنگام کار با آن باید در نظر داشته باشید توضیح خواهیم داد.
PowerShell ForEach Loop چیست؟
را نشان می دهد ، تقریباً همه زبانهای برنامه نویسی روشی از دستورات "حلقه زدن" دارند. این دستورات به شما امکان می دهند بدون نیاز به تایپ کردن همان فرمان ، هر بار یک عمل مشابه را بر روی تعدادی از قطعه داده های مختلف انجام دهید. حلقه دستور ForEach تعدادی از اشیاء را می خواند – به طور معمول توسط یک آرایه یا hashtable – نمایش داده می شود و یک عمل مشخص را برای هر یک انجام می دهد. سپس وقتی تمام مواردی را که شما به آنها داده اید کار می کند متوقف می شود.
برای دیدن دلیل حلقه ForEach تا چه اندازه مفید ، بیایید یک مثال اساسی بزنیم. بگویید که باید تمام پرونده های یک فهرست را بخوانید. برای تهیه لیستی از اشیاء کودک (پوشه ها و پرونده ها) در یک فهرست ، معمولاً از cmdlet Get-ChildItem PowerShell استفاده می کنید. این محبوب ترین cmdlet سیستم پرونده ای است ، و دارای چندین نام مستعار (gci ، dir، ls) است.
cmdlet Get-ChildItem لیستی از اشیاء کودک (تو در تو در تو) را در درایو یا دایرکتوری مشخص نشان می دهد. مسیر دایرکتوری از طریق ویژگی –Path مشخص می شود. به عنوان مثال ، برای لیست کردن پرونده ها در فهرست C: PS ، دستور را اجرا کنید:
Get-ChildItem -Path 'C: PS'
این دستور لیستی از اشیاء واقع در ریشه دایرکتوری مشخص شده را نشان می دهد. اما گاهی اوقات می خواهید محتوای دایرکتوری های کودک را نیز نمایش دهید. برای انجام این کار ، می توانید از پارامتر –Recurse استفاده کنید:
Get-ChildItem -Path 'C: PS' - Reecurse
با استفاده از دستور ForEach می توانید نتیجه مشابهی بدست آورید. به شما امکان می دهد به نوبه خود عملی را برای هر مورد انجام دهید. به عنوان مثال:
Get-ChildItem - مسیر "C: PS" | Foreach-Object # چیزی را با $ _ پر کنید نام کامل }
به عنوان مثال ، می توانید تمام پرونده ها را با پسوند * .log در فهرست مشخص شده و تمام زیر پوشه ها حذف کنید. در اینجا ، ما با اضافه کردن پارامتر WhatIF ، پرونده ها را از دیسک حذف نمی کنیم ، اما اگر این کار را حذف کنید ، این دستور به صورت زنده اجرا می شود:
Get-ChildItem –Path "C: PS" -Recurse -Filter * .log | Foreach-Object حذف $ _. FullName -WhatIF }
اقدامات بسیاری وجود دارد که می توانید با استفاده از این نوع ساختار انجام دهید. به عنوان مثال بگویید که می خواهید یک بار با استفاده از دستور Add-Content یک متن را در چندین مکان مختلف تهیه کنید. بیایید این مکانهای مختلف را C بنویسیم: C: Folder، C: File Files / Folder2 and C: Folder3.
بدون داشتن حلقه ، شما باید سه بار همان فرمان را تایپ کنید ، هرکدام مسیر متفاوتی برای گفتن PowerShell از کجا برای قرار دادن این پرونده ها. مانند این:
افزودن محتوا-مسیر "C: پوشه textfile.txt" -Value ‘برخی متن" افزودن محتوا -Path 'C: Files Program Folder2 textfile.txt' -Value ‘Some text ' افزودن محتوا-مسیر 'C: Folder2 textfile.txt' -Value ‘Some text '
حتی در این مثال کوچک ، شما در حال تایپ کردن وقت زیادی هستید. بدتر این که هرچه تعداد دستورات بزرگتر می شود ، می توان اشتباهاتی را انجام داد که هزینه بر باشد.
دستیابی به همان هدف از طریق یک حلقه ForEach بسیار ساده تر ، کمتر در معرض خطا و بسیار ساده تر است. برای این کار ، معمولاً مسیرهای پرونده را در مثال زیر در یک آرایه ذخیره می کنیم:
$ folders = @ ('' C: Folder '،' C: Files Program Folder2 '،' C: Folder3 ' )
با این کار یک آرایه پوشه $ ساخته می شود که اکنون می توان با یک فرمان دیگر در PowerShell با آن کار کرد. برای استفاده از دستور ForEach برای افزودن پرونده به هر یک از پوشه های ما ، اکنون می توانیم از این دستور استفاده کنیم:
foreach ($ t در $ پوشه) {
افزودن محتوا-مسیر "$ t textfile.txt" -Value "برخی از متن"
}
این راهی بسیار سریعتر برای رسیدن به همان هدف است. در ادامه این مقاله ، خواهیم دید که چگونه می توانید از دستور ForEach برای تسریع کارهای بیشتر در PowerShell استفاده کنید.
PowerShell ForEach Loop Discitions
قبل از اینکه وارد جزئیات شویم ، یک کلمه اخطار است. دستور ForEach ابزاری قدرتمند است و در استفاده از آن باید مراقب باشید. یک حلقه ضعیف طراحی شده یا یک اشتباه حاوی اشتباه می تواند خیلی سریع خسارت وارد کند.
قبل از گذراندن بقیه این راهنما ، بنابراین ، اطمینان حاصل کنید که در اصول استفاده از PowerShell به خوبی آگاهی دارید. به عنوان مثال باید راهنمای ما را در مورد ورودی های PowerShell بخوانید ، همچنین اطمینان حاصل کنید که از پیامدهای امنیت سایبری در استفاده از PowerShell آگاه هستید.
PowerShell ForEach و ForEach-Object چیست؟
اجازه دهید کمی جزئیات بیشتری را بدست آوریم. اولین چیزی که باید در مورد استفاده از حلقه های ForEach در PowerShell بدانید این است که از نظر فنی سه روش برای این کار وجود دارد. اینها عبارت ForEach ، ForEach-Object Cmdlet و متد ForEach () هستند. بیایید به هر نوبت نگاه کنیم.
بیانیه ForEach
ابتدایی ترین نوع حلقه ForEach عبارت ForEach است. ForEach یک کلمه کلیدی PowerShell داخلی است که نه cmdlet است و نه یک عملکرد. نحو اصلی استفاده از دستور این است:
foreach ($ i in $ array)
در اینجا ، متغیر $ i نمایانگر تکرار یا مقدار هر آیتم در مسیر $ است زیرا در هر عنصر در تکرار می شود. آرایه. ارزش لازم نیست که من $ من باشد ، هر چند. نام متغیر می تواند هر چیزی باشد که دوست داشته باشید.
عبارت ForEach سریعترین روش برای ساختن حلقه ها در PowerShell است ، اما دارای معایبی است. به زودی به این موارد خواهیم رسید.
CMdlet ForEach-Object Cmdlet
نوع دوم حلقه ForEach از cmdlet ForEach-Object استفاده می کند. از آنجا که ForEach-Object یک cmdlet است ، بسیار انعطاف پذیرتر از جمله ForEach است که در بالا به شما نشان داده ایم.
می توانید این پارامترهای cmdlet را تأثیر گذارید که بر نحوه عملکرد آن تأثیر می گذارد. مانند جمله foreach ، cmdlet ForEach-Object می تواند بیش از مجموعه اشیاء باشد. با این حال ، تفاوت عمده این است که cmlet مجموعه ای از اشیاء را انجام می دهد و عملکردی که می تواند روی هر پارامتر به عنوان پارامتر انجام دهد. در اینجا همان مثالی است که در بالا آورده ایم ، اما این بار با استفاده از cmdlet:
$ پوشه | ForEach-Object (Add-Content -Path "$ _ text.txt" -Value "Some Text")
cmdlet اما می تواند کمی گیج کننده باشد ، زیرا دارای یک نام مستعار به نام ForEach است ، که باعث می شود ظاهر همان جمله فوق. می توانید با بررسی اینکه اصطلاح "foreach" به دنبال آن آمده است ($ برخی از متغیرها در $ hinSet) بین این موقعیت ها تفاوت قائل شوید. در غیر این صورت ، در هر زمینه دیگر ، نویسنده کد احتمالاً از نام مستعار ForEach-Object استفاده می کند.
روش ForEach ()
روش نهایی استفاده از حلقه های ForEach در PowerShell v4 معرفی شده است. این روش ForEach () است. این روش دقیقاً مانند سایر روشهای اجرای حلقه های ForEach در بالا می تواند در یک آرایه یا یک شیء مجموعه استفاده شود. با استفاده از همان مثال قبلی ، این روش استفاده می شود: () از روش ForEach () استفاده می شود:
$ folders.ForEach ( افزودن محتوا-مسیر "$ _ textfile.txt" -Value "Some Text" })
به نظر می رسد بسیار شبیه به cmdlet ForEach-Object است ، اما روش ForEach () کمی متفاوت عمل می کند. بدون وارد شدن به تمام جزئیات ، مهمترین عامل این است که به طور قابل توجهی سریعتر از هر یک از روشهای فوق و به ویژه در مورد مجموعه دادههای بزرگ است. بالاتر از این بدان معنی است که هر یک باید در موارد خاص مورد استفاده قرار گیرد.
برای مبتدیان ، یا در جایی که شما فقط نیاز به ایجاد یک حلقه سریع و یکبار مصرف دارید ، نحوی جمله ForEach کافی خواهد بود.
ForEach-Object است. هنگام ارسال داده از طریق خط لوله به بهترین وجه مورد استفاده قرار می گیرد زیرا ادامه جریان اشیاء را به دستور بعدی در خط لوله ادامه می دهد. شما نمی توانید همین کار را با ForEach () {do انجام دهید زیرا اگر خط لوله را خراب کرده و پیام های خطایی را پرتاب می کند اگر می خواهید آن خروجی را به یک فرمان دیگر ارسال کنید. این مسئله بسیار مهم است اگر قصد دارید از داده ها در یک فرمان دیگر از طریق خط لوله استفاده کنید. جمله ForEach قبل از پردازش همه آنها به صورت هم زمان ، همه موارد را به صورت مجموعه در جلو قرار می دهد. ForEach-Object انتظار دارد که موارد از طریق خط لوله پخش شوند ، بنابراین نیازهای حافظه را کاهش می دهند ، اما در همان زمان ، یک ضربه عملکرد را به دست می آورند.
سرانجام ، روش ForEach () به طور قابل توجهی سریعتر از هر دو روش دیگر است اما پس از v4 فقط در محیط PowerShell پشتیبانی می شود. اگر می توانید با سیستم های میراث کار کنید ، می تواند باعث سازگاری با مشکلات سازگاری شود یا مطمئن نیستید که کد شما از کجا استفاده خواهد شد. اگرچه باید از روش ForEach () در هر کجا که امکان پذیر باشد استفاده کنید ، لازم است جزئیات این مورد را بدست آورید که کد شما برای این کار استفاده می شود.
PowerShell ForEach Loop Basics
حالا ما به شما نشان داده ایم كه چگونه هر نوع حلقه ForEach كار می كند ، باید شروع كنید كه چرا این فرمان چنین قدرتمند است. ForEach می تواند تقریباً با هر شیء در PowerShell مورد استفاده قرار گیرد ، و می توانید از داده های لوله کشی استفاده کنید تا نتایج حلقه خود را به هر اسکریپت یا دستور دیگر منتقل کنید.
این باعث می شود حلقه ForEach ابزاری بسیار قدرتمند و مفید باشد. ما مثالهای زیادی در مورد نحوه استفاده از ForEach در زیر می آوریم ، اما قبل از انجام این کار اجازه می دهیم به یک مثال عملی از یک کار مشترک که دستور ForEach برای آن مفید است نگاهی کوتاه بیندازیم.
بیایید بگوییم ، برای این مثال ، که می خواهید با برخی از داده ها در مورد کاربران Active Directory واکشی و کار کنید. شما می توانید از cmdlet Get-ADUser PowerShell برای جمع آوری اطلاعات کاربر از Active Directory استفاده کنید ، و اگر قبل از اقدام باید به ویژگی "شهر" هر کاربر توجه کنید می توانید از ForEach Loop استفاده کنید. بیایید بگوییم که می خواهید کاربرانی را که املاک شهرشان روی "لندن" تنظیم شده است ، صادر کنید و سپس این نتایج را در یک پرونده CSV ذخیره کنید. در اینجا یک اسکریپت PowerShell وجود دارد که این کار را با استفاده از یک حلقه ForEach انجام می دهد:
$ CityReport = "C: Temp CityReport.CSV"
حذف مورد $ CityReport -ErrorAction SilentlyContinue
$ STR = "نام کاربری ، شهر"
افزودن محتوا $ CityReport $ STR
$ AllUsersNow = Get-ADUser –Filter * -SearchBase “OU = TestUsers، DC = TechGenix، DC = Com” - خصوصیات *
Foreach ($ ThisUser در $ AllUsersNow)
{
$ CityOfUser = $ ThisUser.City
$ ThisUserNow = $ ThisUser.CN
IF ($ CityOfUser -eq "London")
{
$ STRNew = $ ThisUserNow + "،" + $ CityOfUser
افزودن محتوا $ CityReport $ STRNew
}
}
همانطور که می بینید ، کاری که ما در اینجا انجام می دهیم ایجاد یک متغیر جدید به نام $ CityReport است که مسیر گزارش را ذخیره می کند. سپس تمام کاربران را از یک واحد سازمانی جمع آوری می کنیم. سپس ، ما این داده ها را با استفاده از یک حلقه ForEach پردازش می کنیم. این عملکرد ForEach Loop ویژگی "شهر" کاربر را بررسی می کند. سپس ، از یک شرط IF استفاده می کند تا ببیند آیا این خاصیت دارای ارزش "London" برای کاربر فعلی است یا خیر. اگر کاربر از "لندن" به عنوان مقدار موجود در شهر استفاده کند ، نام کاربری فعلی و مقادیر نام شهر به پرونده C: Temp CityReport.CSV اضافه می شود.
همانطور که می بینید ، این روش خیلی سریعتر است. تهیه گزارش از بررسی هر کاربر به صورت دستی. اما این فقط آغاز کارهایی است که می توانید از حلقه های ForEach استفاده کنید. بیایید نگاه دقیق تری داشته باشیم.
ForEach PowerShell მაგალითები
در این بخش هشت نمونه از برنامه های ForEach را اجرا خواهیم کرد. هر مثال شامل برخی از عناصر اساسی استفاده از حلقه های ForEach در PowerShell خواهد بود ، و پس از کار در هر هشت مورد باید کاملاً با اطمینان کار کنید با این ابزار.
مثال 1. ایجاد پرونده ها در پوشه های فرعی
یکی از اساسی ترین وظایفی که می توانید از حلقه های ForEach برای آنها استفاده کنید ، ایجاد پرونده در زیر پوشه ها است. این می تواند مفید باشد ، به عنوان مثال ، اگر به طور مرتب از پرونده ها در تعدادی پوشه نسخه پشتیبان تهیه می کنید.
برای این مثال ، بگذارید بگوییم ده پوشه زیر در پوشه C: ARCHIVE_VOLUMES وجود دارد. هر زیر پوشه یک حجم بایگانی را نشان می دهد که روزانه از آن نسخه پشتیبان تهیه می شود. پس از تکمیل هر نسخه پشتیبان ، پرونده ای به نام BackupState.txt در داخل هر پوشه ایجاد می شود که حاوی تاریخ تهیه نسخه پشتیبان آن است. لیستی از تمام زیر پوشه های داخل C را دریافت می کند: ARCHIVE_VOLUMES ، و سپس هر یک از این پوشه ها را حلقه کنید. سرانجام ، یک فایل متنی با نام BackupState.txt ایجاد می کند که شامل تاریخ و ساعت فعلی خواهد بود. در اینجا اسکریپت آمده است:
# پوشه سطح بالا را تعریف کنید $ TOP_FOLDER = "C: ARCHIVE_VOLUMES" # همه پوشه های زیر را بگیرید $ Child_Folders = Get-ChildItem -Path $ TOP_FOLDER -آزمایی | Where-Object $ _. PSIsContainer -eq $ true # یک فایل متنی را در هر زیر پوشه ایجاد کنید و تاریخ / زمان فعلی را به عنوان مقدار اضافه کنید. foreach ($ نام خانوادگی در $ Child_Folders.FullName) (دریافت-تاریخ -فرما G) | Out-File -FilePath "$ ($ foldername) \ BackupState.txt" -Force }
سپس می توانید از cmdlet Get-ChildItem استفاده کنید تا بررسی کنید که این اسکریپت کار کرده است:
Get-ChildItem -Recurse -Path C: ARCHIVE_VOLUMES-Incupure backupstate.txt | Select-Object Fullname، CreationTime، LastWriteTime، طول
مثال 2. جمع آوری اطلاعات از پرونده ها در پوشه های زیر پوشه
در این مثال ، ما با پرونده هایی که در مثال 1 ایجاد کرده ایم کار خواهیم کرد و اطلاعاتی را از آنها دریافت می کنیم. . ما اسکریپتی خواهیم نوشت که:
- همه پرونده های BackupState.txt را به صورت بازگشتی در زیر پوشه های ما پیدا کنید ،
- برای خواندن هر پرونده از یک عبارت ForEach استفاده کنید و مقدار "آخرین زمان تهیه نسخه پشتیبان" را پیدا کنید ،
- و سپس نمایش دهید. نتایج روی صفحه شما.
اسکریپت در اینجا:
## یافتن تمام پرونده های BackupState.txt در C: ARCHIVE_VOLUMES
$ پرونده = Get-ChildItem - بازیابی-مسیر C: ARCHIVE_VOLUMES-شامل "BackupState.txt" | Select-Object DirectoryName ، FullName را انتخاب کنید
## مطالب هر پرونده را بخوانید
foreach (پرونده $ $ با پرونده) {
نوشتن-خروجی ("آخرین بار تهیه نسخه پشتیبان -" $ ($ file.DirectoryName) - "+ (دریافت-محتوی $ پرونده. نام کامل))
}
این اسکریپت را اجرا کنید ، و لیستی از آخرین زمان تهیه نسخه پشتیبان برای هر پوشه با یک خروجی پیمایش در کنسول شما نمایش داده می شود.
مثال 3. شروع خدمات با استفاده از cmdlet ForEach-Object
اکنون بیایید نگاه کنید. در یک مثال پیچیده تر سرپرستان سیستم اغلب باید وضعیت خدمات خاص را پیدا کنند و گردش کاری را انجام دهند که هرگونه سرویس ناموفق را برطرف کند. در این مثال ، ما برای انجام این کار از cmdlet ForEach-object cmdlet استفاده خواهیم کرد.
اسکریپت زیر به شرح زیر است:
- لیستی از سرویس های موجود را پیدا کنید و پیکربندی کنید تا بتوانند به طور خودکار شروع به کار کنند ، اما این در حال حاضر کار نمی کند ،
- برای اجرای هر سرویس و تلاش برای راه اندازی آن ، از cmdlet Foreach-Object cmdlet استفاده کنید و
- برای هر بار اجرای Start-Service ، پیام "موفقیت" یا "ناموفق" برگردانید.
اسکریپت در اینجا آمده است:
## لیستی از خدمات خودکار متوقف شده را دریافت کنید.
$ service = دریافت-خدمات | Where-Object $ .StartType -eq 'Automatic' و $ .Status -ne 'Running'}
## هر یک از سرویس ها را به خط لوله منتقل کنید و آنها را با cmdlet Foreach-Object پردازش کنید
خدمات $ | ForEach-Object
تلاش كردن {
نوشتن-میزبان "تلاش برای شروع" $ ($. DisplayName) ""
خدمات شروع-نام $. نام -ErrorAction STOP
نوشتن-میزبان "SUCCESS: '$ ($. DisplayName)" شروع شده است "
} گرفتن {
نوشتن و خروجی "FAILED: $ ($. բացառی.message)"
}
}
سپس این اسکریپت به عنوان تلاش برای شروع هر سرویس ، بازخورد را برمی گرداند ، بنابراین می توانید هرگونه مشکل بعدی را به صورت دستی برطرف کنید.
مثال 4. خواندن داده ها از یک پرونده CSV با استفاده از ForEach ()
اکثر سرپرستهای سیستم دارند. گردش کار مشابه در هنگام ایجاد انبوه کاربران جدید به وجود می آید. آنها داده های کاربرانی که باید ایجاد شوند را در یک پرونده CSV ذخیره می کنند ، که می تواند از طریق دستور import-CSV در PowerShell استفاده شود. شما همچنین می توانید از روش ForEach () استفاده کنید تا به طور خودکار هر کاربر را اجرا کند و یک حساب کاربری برای آنها ایجاد کند.
برای این مثال ، به یک فایلی نیاز دارید که با نام برخی از کاربران ایجاد شود. این باید دو ستون باشد و به صورت زیر باشد:
"Firstname"، "Lastname"
"Grimm"، "Reaper"
"جهنم" ، "پسر"
"ریک" ، "Rude" "
حالا بیایید یک اسکریپت بنویسیم تا این کاربران ایجاد شود. این اسکریپت ابتدا با عبور از مسیر محتوا به cmdlet Import-CSV ، پرونده CSV را وارد می کند. سپس با استفاده از متد foreach () نامها را حل می کند و کاربران جدید را در Active Directory ایجاد می کند:
# فهرست واردات نام و نام خانوادگی از پرونده CSV
$ newUsers = Import-Csv -Path. Employees.csv
Add-Type -AssociationName System.Web
# لیست را پردازش کنید
$ newUsers. بنابراین (
{
# گذرواژه تصادفی ایجاد کنید
$ password = [System.Web.Security.Membership] :: GeneratePassword ((دریافت-تصادفی-حداکثر 20-حداکثر 32) ، 3)
$ secPw = ConvertTo-SecureString - یافتن رمز عبور $ -AsPlainText -Force
# نام کاربری را تنظیم کنید
$ userName = '{0} {1}' -f $ _. FirstName.Substring (0، 1)، $ _. نام خانوادگی
# ایجاد ویژگی های کاربر جدید
$ NewUserParameters = @
GivenName = $ _. FirstName
نام خانوادگی = $ _. نام خانوادگی
نام = $ userName
AccountPassword = $ secPw
}
تلاش كردن {
New-AdUserNewUserParameters -ErrorAction Stop
نوشتن و خروجی "کاربر" $ ($ userName) "ایجاد شده است."
}
گرفتن {
نوشتن-خروجی $ _. Exception.Message
}
}
)
شما همچنین می توانید پیام های فیدبک را ، همانطور که در اسکریپت در مثال 3 وجود دارد ، بنویسید تا تأیید شود که هر کاربر با موفقیت اضافه شده است.
مثال 5. کار با ریاضی
مثال انتزاعی تر از چگونگی حلقه ForEach می تواند به کار رود استفاده از آنها برای تولید جداول زمان است. این کار به روش های مختلفی قابل انجام است و این ایده ها را در مورد چگونگی انعطاف پذیری این فرمان می دهد. به عنوان مثال ، یک پیاده سازی ساده عبارت است از:
ForEach (شماره دلار در 1،2،3،4،5،6،7،8،9،10) number شماره $ * 13}
یا ، با استفاده از روش ForEach ():
Clear-Host ForEach (عدد $ در 1..10) number $ $ * 13 یا با یک آرایه صریح تعریف شده: پاک-میزبان $ NumArray = (1،2،3،4،5،6،7،8،9،10) ForEach (عدد $ در NumArray $) number $ number * 13}
هر یک از این دستورات به نتیجه مشابهی می رسند و برخی از روشهای مختلفی که می توانید با همان فرمان ForEach کار کنید را نشان می دهد.
مثال 6. نمایش پرونده ها
در این مثال ، ما می خواهیم از حالت صریح ($ $ در مجموعه) {Block Statement} به پرونده های ورودی با استفاده از Get-ChildItem ، انتقال یافته و سپس (|) خروجی را به {Block Statement (خط) بیاندازیم. 19659002] در اینجا ، Get-ChildItem فقط نمونه ای از cmdlet برای ما است تا جنبه های عملکرد PowerShell ForEach را بررسی کنیم. ما همچنین از ریشه C: درایو استفاده خواهیم کرد زیرا این کار در اکثر رایانه ها اجرا می شود ، اما شما می توانید مسیر پرونده را مطابق میل خود تغییر دهید.
Clear-Host
ForEach (پرونده $ در Get-ChildItem C: )
{
$ file.name
}
مانند بسیاری از موارد موجود در PowerShell ، روش های زیادی برای دستیابی به همین نتیجه وجود دارد. به عنوان مثال ، شما همچنین می توانید از لوله کشی برای انجام همان کار فوق استفاده کنید:
Clear-Host
$ Path = "C: Windows System32 *. dll"
Get-ChildItem $ Path | برای هر {
نوشتن-میزبان $ _. نام
}
در اینجا ، ما همچنین یک متغیر $ Path را معرفی کرده ایم تا بتوانید پرونده هایی را که با آنها کار می کنید در جای دیگری غیر از پوشه root خود ذخیره کنید. فقط اطمینان حاصل کنید که این متغیر را ابتدا تعریف کنید.
مثال 7. خواندن چند داده از فایلهای .txt
با استفاده از مثال قبلی ، می توان از حلقه ForEach نیز برای خواندن چندین داده داده از مجموعه ای از ttxt استفاده کرد. فایل ها. اسکریپت زیر بسیار شبیه به نمونه های قبلی است اما پردازش داده ها کمی پیچیده تر بر روی داده هایی که می خواند انجام می دهد:
# PowerShell ForEach حلقه برای نمایش پرونده ها در C: فایلهای برنامه
$ Path = "C: File Files "
"{0،10} {1 ، -24} {2 ، -2}" -f "
"اندازه" ، "آخرین دسترسی" ، "نام پرونده"
ForEach (پرونده $ در مسیر دریافت-ChildItem $ مسیر -شسترس)
{اگر ($ file.extension -eq ".txt")
{
"{0،10} {1 ، -24} {2 ، -2}" -f "
$ file.l طول ، $ file.LastAccessTime ، $ file.fullname
}
}
مثال 8. حلقه با ForEach و WMI
حلقه های PowerShell ForEach همچنین می تواند برای کار با اشیاء WMI ، با استفاده از همان نحو مشابه نمونه هایی که تاکنون پوشش داده ایم ، استفاده شود. یک مثال اساسی از این اسکریپت زیر خواهد بود:
$ disk = Get-WmiObject Win32_LogicalDisk
ForEach (درایو $ در دیسک) {"Drive =" + $ drive.Name ame
و یک مثال پیچیده تر که پردازش داده ها را نیز انجام می دهد:
# مثال ForEach برای نمایش اندازه پارتیشن ها [GB]
$ disk = Get-WmiObject Win32_LogicalDisk
"درایو Ltr: اندازه [GB]"
ForEach (درایو $ در دیسک) {"Drive =" + $ drive.Name + `
"size =" + [int] ($ drive.Size / 1073741824)}
PowerShell Resources
پس از مثالهای فوق شما باید درک خوبی از نحوه کار حلقه های ForEach در PowerShell داشته باشید. اینها بخش اساسی در نحوه کار PowerShell است و تقریباً در هر آموزش که در PowerShell می خوانید ، ظاهر می شود. نحوه کار با حلقه های ForEach ، ارزش آن را دارد که به همه برنامه هایی که می توانید مهارتهای جدید خود را پیدا کنید ، نگاهی بیندازید.
برای کمک به شما ، در اینجا لیستی از تمام راهنماهای ما قرار دارد تا ایده ای را برای شما ارائه دهد. از انعطاف پذیری و قدرت PowerShell:
اصول اولیه PowerShell
دستورات + اسکریپت
IT جوانب
A Final Word
در غیر این صورت وقت و منابع زیادی مصرف می کند. اگر با سایر زبان های برنامه نویسی کار کرده اید ، احتمالاً با مفهوم آن آشنا شده اید و متوجه خواهید شد که PowerShell آن را به روشی نسبتاً ساده و صریح اجرا می کند. اگر PowerShell اولین زبانی است که شما یاد می گیرید ، پس کار با حلقه های ForEach به شما یک پایه اساسی عالی در مفهوم حلقه می دهد.
پس از کار با مثال های فوق ، باید منابعی را که ما در دسترس قرار داده ایم بررسی کنید. نحوه استفاده از PowerShell در شرایط مختلف. سپس ، هنگامی که شروع به استفاده بیشتر از PowerShell می کنید ، به ابزارهای اضافی که می توانید در کنار آن استفاده کنید ، نگاهی بیندازید ، و این می تواند بازدهی شما را حتی بیشتر کند.
