Powershell هو موجه أوامر، ولكنه أيضًا لغة برمجة تسمح لك بأتمتة المهام، وفرز كميات مذهلة من البيانات بسرعة، ولكن أيضًا استمتع! نعرض لك في هذا الملف أربعة أمثلة لنصوص برمجية ممتعة ومفيدة إلى حد ما، على الأقل لتتعلم كيفية ترويض موجه الأوامر الجديد.
يستبدل Powershell الآن موجه الأوامر الكلاسيكي (cmd) افتراضيًامنذ تحديث Windows 10 Creators. يتيح لك هذا البرنامج القيام بكل ما يمكن أن يفعله Cmd، ولكنه يسمح أيضًا للمطورين ذوي الخبرة أو المبرمجين الناشئين بإنشاء نصوص برمجية صغيرة بدافع الفضول أو ترميز وتبسيط استخدامك للكمبيوتر. لقد حاولنا من خلال هذه النصوص القليلة أن نعرض لك أمثلة مفيدة بقدر ما هي مسلية.
ملخص
بوويرشيل: حلقة النجوم
يتيح لك هذا البرنامج النصي الصغير معرفة كيفية عمل الحلقات. انسخه وقم بتشغيله في نافذة Powershell لرؤية النتيجة مباشرة:
$i="*"
Do {
$i="$i*"
$i
}
While ($true)
أنت تفهم بشكل أفضل لماذا أطلقنا على هذه الحلقة اسم"حلقة النجمة".لمقاطعة البرنامج، اضغط على المفاتيحالسيطرة + جمن لوحة المفاتيح الخاصة بك. هذا الكود الصغير ممتع للغاية، لكنه يمكنه القيام بأشياء أكثر فائدة. على سبيل المثال، يمكنك استبدال النجمة بما تريد. ولكن أيضًا عناصر أخرى، أرقام زوجية:
$i=1
Do {
$i
$i++
}
While ($i -le 10)
ستعرض الحلقة بعد ذلك الرقم الموجود فيها$1
وأضف 1 طالما كانت قيمة$i
أقل من 10 (وبالتالي$i -le 10
في النهاية، -الدالأقلأوأقل منباللغة الإنجليزية). من الممكن أيضًا تحويل هذا إلى عد تنازلي عن طريق استبدال++
بجانب$i
الذي ستفهمه هو متغير، بواسطة أ--
. يجب عليك أيضًا تغيير قيمة البداية إلى 10، ووضع 0 في النهاية إذا كنت تريد إجراء عد تنازلي على غرار إقلاع الصاروخ.
وإذا كنت تريد أن يتم عرض كل تكرار بشكل أبطأ، على سبيل المثال عرض كل رقم بفارق ثانية واحدة، فيمكنك إضافة أمر لإيقاف البرنامج مؤقتًا لعدد محدد من المللي ثانية لكل حلقة:
$i=10
Do {
$i
$i--
Start-Sleep -m 1000
}
While ($i -ge 0)
أخيرًا، إذا كنت تريد إضافة إشارة صوتية في كل مرة يتم فيها تنفيذ الجزء الصغير من التعليمات البرمجية في الحلقة، أضف[console]::beep(440,100)
حيث 440 هو تردد الصوت بالهرتز (وهو A) و100 هو وقت التشغيل. والذي يعطي الكود التالي:
$i=10
Do {
$i
$i--
[console]::beep(440,100)
Start-Sleep -m 1000
}
While ($i -ge 0)
لاحظ أنه في حالة العد التنازلي، فإنWhile
(بينما...) لا يمكن تشغيل الحلقة حتى تصل قيمة$i
هي "أقل من 0"، لأن قيمة $i تبدأ من 10. لذلك من الضروري الاستبدال في السطر الأخير-le
قدم المساواة-ge
وهو ما يعنيأكبر منأو أعلى من الفرنسية.
ماذا لو قلنا لك أنه يمكنك صنع الموسيقى باستخدام Powershell؟ إحدى أكثر الطرق الممتعة لتعلم لغة برمجة Powershell هي برمجة المقطوعات الموسيقية. انسخ رمز الأغاني مباشرة إلى نافذة Powershell واكتبهدخوللتنفيذها.
"المسيرة الإمبراطورية"
[console]::beep(440,500)
[console]::beep(440,500)
[console]::beep(440,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,1000)
[console]::beep(659,500)
[console]::beep(659,500)
[console]::beep(659,500)
[console]::beep(698,350)
[console]::beep(523,150)
[console]::beep(415,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,1000)
"المهمة المستحيلة"
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(932,150)
Start-Sleep -m 150
[console]::beep(1047,150)
Start-Sleep -m 150
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(699,150)
Start-Sleep -m 150
[console]::beep(740,150)
Start-Sleep -m 150
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(932,150)
Start-Sleep -m 150
[console]::beep(1047,150)
Start-Sleep -m 150
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(699,150)
Start-Sleep -m 150
[console]::beep(740,150)
Start-Sleep -m 150
[console]::beep(932,150)
[console]::beep(784,150)
[console]::beep(587,1200)
Start-Sleep -m 75
[console]::beep(932,150)
[console]::beep(784,150)
[console]::beep(554,1200)
Start-Sleep -m 75
[console]::beep(932,150)
[console]::beep(784,150)
[console]::beep(523,1200)
Start-Sleep -m 150
[console]::beep(466,150)
[console]::beep(523,150)
خلق خلقك الخاص
كما ترون من خلال تشريح الأمر الذي لدينا[console]::beep
مع رقمين بين قوسين. يشير الرقم الموجود على اليسار إلى تردد الصوت (على سبيل المثال 440 هرتز لـ A)، والرقم الموجود على اليمين، يشير إلى المدة التي يجب تشغيل الصوت خلالها (بالملي ثانية). في المهمة المستحيلة نرى أيضًا أن الأصوات تتخللها الأمرStart-Sleep -m 150
. هذا يعني"لا تفعل أي شيء من أجل X مللي ثانية": مثالية لتقديم الصمت! إنها ملكك - لا تتردد في مشاركة إبداعاتك في التعليقات!
اجعل Powershell يتحدث
من الممكن أيضًا تحويل النص إلى تركيب كلام مباشرةً في Powershell. للقيام بذلك، يجب عليك أولاً تحميل وحدة تركيب الكلام عن طريق تشغيل هذا الأمر، ثم إنشاء كائن جديد$speak
والتي سوف تبسيط استخدامه. كل هذا بسيط للغاية، انسخ السطرين التاليين وقم بتنفيذهما في Powershell:
Add-Type -AssemblyName System.speech
$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer
يمكنك بعد ذلك جعل التركيب الصوتي لـ Powershell يتحدث:
$speak.Speak("Je donne ma langue au chat")
من الممكن أيضًا تحويل جملك إلى ملف WAV بسرعة. يتطلب ذلك فتح/بدء حفظ ملفك على محرك الأقراص الثابتة بطريقة أو بأخرى عن طريق تعديل الأمر التالي، ثم تنفيذه. ثم "أغلق" الملف بمجرد الانتهاء من أمر آخر حتى تتمكن من قراءته في البرنامج الذي تختاره:
$speak.SetOutputToWaveFile("C:\users\LE\CHEMIN\QUE\VOUS\AUREZ\CHOISI\test.wav")
ثم قم بتشغيل عدد قليل$speak.Speak()
تحتوي على جمل تريد تحويلها إلى كلام، ثم قم بتشغيل هذا الأمر لإغلاق الملف:
$speak.Dispose()
إذا لم يعجبك الصوت، يمكنك عرض قائمة الأصوات المثبتة عن طريق تشغيل الأمر:
$speak.GetInstalledVoices().VoiceInfo
انسخ اسم الصوت والصقه في هذا الأمر لتغييره:
$speak.SelectVoice('LA VOIX QUE VOUS AVEZ CHOISIE')
قم بترتيب سطح مكتب Windows 10 الخاص بك باستخدام برنامج نصي
هذا البرنامج النصي الصغير من Reddit (بفضل u/Zazierx!) عملي جدًا لدرجة أننا لا نستطيع مقاومة مشاركته معك. فهو يسمح لك بالتعرف على عوامل التشغيل الشرطية (الكود واضح نسبيًا وسهل القراءة) وتنظيم سطح مكتب Windows 10 في مجلدات حسب نوع الملف. انسخ الكود التالي والصقه في نافذة Powershell وقم بتشغيله:
$pathToUse = "C:\Utilisateurs\$env:username\Bureau"
$video = @(
'3g2','3gp','3gpp','asf','avi','divx','f4v',
'flv','h264','ifo','m2ts','m4v','mkv','mod','mov',
'mp4','mpeg','mpg','mswmm','mts','mxf','ogv','rm',
'srt','swf','ts','vep','vob','webm','wlmp','wmv'
)
$spreadsheets = @(
'csv','ods','xls','xlsx'
)
$images = @(
'arw','bmp','cr2','crw','dcm','dds','djvu','djvu',
'dmg','dng','fpx','gif','ico','ithmb','jp2','jpeg',
'jpg','nef','nrw','orf','pcd','pict','png','psd',
'sfw','tga','tif','tiff','webp','xcf'
)
$presentations = @(
'key','odp','pps','ppsx''ppt','pptm','pptx'
)
$docs = @(
'chm','doc','docm','docx','dot','dotx','eml','eps',
'hwp','log','m3u','odt','pages','pdf','pub','rtf',
'sxw','txt','wpd',' wps','xml','xps'
)
$cadFiles = @(
'dwg','dxf'
)
$misc = @(
'bin','cda','dat','dll','exe','isc',
'img','inf','ipa','kmz','lnk','pes',
'ps','rem','torrent','ttf','vcf'
)
$ebooks = @(
'azw','azw3','epub','fb2''lit','lrf','mbp','mobi',
'opf','prc'
)
$web = @(
'css','htm','html','js','json','php'
)
$arcs = @(
'7z','apk','bz2','cbr','gz','gzip','jar','rar',
'tar','tgz','zip','war'
)
$scripts = @(
'bat','cmd','vb','vbs','vbe','js',
'jse','ws','wsf','wsc','wsh','ps1',
'ps1xml','ps2','ps2xml','psc1','psc2','sql'
)
$files = Get-ChildItem -Path $pathToUse
Foreach ($x in $files){
if($docs.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Documents" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Documents"
}
elseif($spreadsheets.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Spreadsheets" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Spreadsheets"
}
elseif($images.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Images" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Images"
}
elseif($presentations.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Presentations" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Presentations"
}
elseif($video.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Videos" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Videos"
}
elseif($cadFiles.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "CAD Files" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"CAD Files"
}
elseif($misc.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Misc" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Misc"
}
elseif($ebooks.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "E-Books" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"E-Books"
}
elseif($web.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Web" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Web"
}
elseif($arcs.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Archives" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Archives"
}
elseif($scripts.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Scripts" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Scripts"
}
elseif($x.Directory){
New-Item -ItemType Directory -Path $pathToUse -Name "Other - misc" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Other - misc"
}
else{
Write-Host $x
}
}
مع بعض التعديلات الصغيرة، يمكنك تنظيم أي ملف دون عناء. هل تعرف أي نصوص Powershell ممتعة أخرى؟ شاركهم في تعليقات هذا المقال!