ขั้นตอนแรกที่สำคัญในการเรียนรู้การเขียนโปรแกรมคือการทำงานกับลูป โชคดีที่ PowerShell ยังคงเติบโตไปพร้อมกับทักษะของคุณ
วิธีดูช่องท้องถิ่นบน roku
คุณสามารถกำหนดกรอบคำสั่งที่มีอยู่ที่คุณใช้ทุกวันในลูปเพื่อประหยัดเวลาและความพยายาม สคริปต์ของคุณทำงานหนักในขณะที่คุณทำงานสำคัญในการอ่านบทความเพิ่มเติมเกี่ยวกับ MakeUseOf!
Powershell ForEach Loops: ประตูสู่การจัดการข้อมูลขั้นสูง
ForEach เป็นนามแฝงสำหรับ ForEach-Object (นามแฝงเป็นเพียงทางลัดสำหรับคำสั่งใน PowerShell) นี่เป็นเวลาที่ดีที่จะพูดถึงวิธีที่ PowerShell จัดการข้อมูล
เช่นเดียวกับภาษาโปรแกรมสมัยใหม่ส่วนใหญ่ PowerShell เป็น Object-Oriented . ทุกอย่างใน PowerShell เป็นอ็อบเจ็กต์ หมายความว่าแม้แต่ตัวแปร มีคุณสมบัติและหน้าที่ขยายออกไป . คุณสมบัตินั้นคือเหตุผลที่คุณสามารถตั้งค่าการค้นหาของคุณเป็นตัวแปร และจบลงด้วยอาร์เรย์ของผลลัพธ์
$yourVar = Get-ChildItem *
foreach ($file in $yourVar){
Your Steps
}
ในบางภาษา การประมวลผลอาร์เรย์นี้จะเป็นกระบวนการหลายขั้นตอน ขั้นแรก หาความยาวแล้วนับแต่ละขั้นตอน
ใน PowerShell คุณก้าวผ่านอาร์เรย์และดำเนินการกับแต่ละรายการโดยใช้ ForEach วิธีนี้ช่วยให้คุณประหยัดโค้ดได้หลายบรรทัด ซึ่งจะเป็นประโยชน์หากคุณมีสคริปต์ที่ยาวกว่า ตัวอย่างเช่น ต่อไปนี้คือสคริปต์ขนาดเล็กที่จะใช้ Powershell ForEach สองลูป มันสร้างไฟล์ ZIP ของไฟล์ทั้งหมดที่คุณไม่ได้เปิดใน 30 วัน
การสร้างระบบจัดเก็บไฟล์โดยใช้ ForEach Loops
มาแบ่งขั้นตอนกัน คุณใช้ รับ-ChildItem เพื่อรับไฟล์ทั้งหมดในโฟลเดอร์เอกสาร ตัวแปรสภาพแวดล้อม $env:USERPROFILE รันสคริปต์โดยใช้โปรไฟล์ปัจจุบัน ตัวแปรนี้พกพาสะดวกกว่าพาธแบบฮาร์ดโค้ด ผลลัพธ์ของการค้นหานั้นถูกกำหนดให้กับตัวแปร $ MyDocs . จากนั้นเราสร้าง ForEach loop โดยให้มันก้าวผ่านแต่ละอัน $Doc ใน $MyDocs .
$oldDocs = @()
$MyDocs = Get-ChildItem -Path '$($env:USERPROFILE)Documents' -Recurse
foreach ($doc in $MyDocs){
if($doc.LastAccessTime -lt $(Get-Date).addDays(-30)){
$oldDocs += $doc
}
}
$ArchiveFolder = New-Item -Path '$($env:USERPROFILE)Documents$((Get-Date -Format MMddyy).toString())' -ItemType Directory
foreach ($doc in $oldDocs){
Move-Item -Path $doc.FullName -Destination '$($ArchiveFolder.FullName)$($doc.Name)' -Confirm $false
}
$source = $ArchiveFolder.FullName
$destination = '$($env:USERPROFILE)Documents$($ArchiveFolder.Name).zip'
Add-Type -AssemblyName 'system.io.compression.filesystem'
[io.compression.zipfile]::CreateFromDirectory($source, $destination)
if(test-path $destination){
Remove-Item -Path $ArchiveFolder -Recurse -Confirm $false
}
ภายในลูปเราตรวจสอบดูว่าแต่ละไฟล์เป็น .หรือไม่ LastAccessTime ทรัพย์สินมีอายุมากกว่า 30 วัน เราได้รับสิ่งนี้ด้วย รับวันที่ cmdlet และใช้ the AddDays ฟังก์ชันกับลบสามสิบ ถ้าใช่ เราเพิ่มไฟล์ไปที่ $myOldDocs อาร์เรย์ หลังจากการจัดเรียงไฟล์เสร็จสิ้น เราจะนำอาร์เรย์ที่เสร็จสมบูรณ์แล้วสร้างไฟล์ zip กระบวนการนี้ซับซ้อนกว่าเล็กน้อยเนื่องจากเกี่ยวข้องกับการเรียกใช้ .NET เล็กน้อย ไม่ต้องกังวลหากคุณไม่ค่อยเข้าใจ - คุณสามารถขโมยรหัสจาก เอกสารช่วยเหลือ TechNet นี้ .
เพื่อแยกย่อยสิ่งที่เกิดขึ้นที่นี่: เราจะย้ายไฟล์เก่าทั้งหมดของเราไปยังไดเร็กทอรีใหม่ที่มีชื่อสำหรับวันที่ของวันนี้ซึ่งเก่ากว่า 30 วัน เมื่อสร้างโฟลเดอร์แล้ว เราต้องสร้างไฟล์ ZIP ที่มีชื่อเดียวกัน เราจะทดสอบเพื่อให้แน่ใจว่าไฟล์เก็บถาวรสำเร็จและมีไฟล์ .ZIP อยู่ที่นั่น จากนั้นจึงลบโฟลเดอร์ใหม่ ตั้งค่านี้เป็นงานที่กำหนดเวลาไว้เพื่อให้ทำงานเดือนละครั้ง คุณจะประหยัดพื้นที่เพียงเล็กน้อยและทำให้โฟลเดอร์เอกสารของคุณสะอาดอยู่เสมอ
ในขณะที่และทำในขณะที่: วนซ้ำตามเงื่อนไข
หากคุณต้องการเรียกใช้ลูปเฉพาะเมื่อตรงตามเงื่อนไขเฉพาะ ให้ใช้การวนรอบ หากคุณกำลังใช้ตัวแปรเพื่อติดตามการนับ ให้ตั้งค่านั้นก่อน
i=0
while(i<10){
Your Steps
i+=1
}
ปัญหาคือถ้าคุณไม่ได้ใช้ตัวนับ คุณอาจต้องการให้โค้ดของคุณทำงานอย่างน้อยหนึ่งครั้ง แม้ว่าการทดสอบจะเป็นจริงก็ตาม กรณีนี้กับสคริปต์ตัวอย่างด้านล่าง ดังนั้นในกรณีเหล่านั้น คุณต้องการใช้ Do-While loop ไวยากรณ์แตกต่างกันเล็กน้อย
do{
Your Steps
}while(Conditional Statement)
การใช้สิ่งเหล่านี้ไม่ชัดเจนนักสำหรับโปรแกรมเมอร์มือใหม่ การทำสคริปต์แบบวันต่อวันคุณอาจไม่ได้พบเจอบ่อยนัก จุดที่สะดวกเป็นพิเศษคือการสร้างตัวจับเวลาชั่วคราวเพื่อทดสอบความสำเร็จของกระบวนการ
วิธีถ่ายโอนรูปภาพ iphone ไปยัง mac
เราจะสร้างสคริปต์ด่วนเพื่อรีบูตเครื่องระยะไกลและแจ้งเตือนหากไม่กลับมาภายใน 15 นาที สถานการณ์สมมตินี้ถือว่าเป็นโฮมเซิร์ฟเวอร์หรือเครื่องอื่นที่ไม่ได้รีบูตบ่อยนัก ปรับเปลี่ยนเวลาได้ตามสบายหากโดยปกติแล้วคอมพิวเตอร์ของคุณทำงานเร็วขึ้น
รีบูตและตรวจสอบ: การใช้ Do-While Loop
สคริปต์นี้ง่ายกว่าเล็กน้อย ขั้นแรก คุณใช้ รีสตาร์ทคอมพิวเตอร์ คำสั่งให้รีบูตเครื่องระยะไกล (เราใช้ IP จำลองสำหรับคำสั่งรีบูต อย่าลืมเขียนทับสิ่งนี้ด้วย DNS/IP ของคอมพิวเตอร์ของคุณ) จากนั้นสร้างตัวแปรตัวนับ ผม และตั้งค่าเป็น 0 จากนั้น ให้ Do loop ของคุณมี Start-Sleep หยุดสคริปต์เป็นเวลา 300 วินาที (5 นาที) คำสั่งที่สองเพิ่มคำสั่งหนึ่งไปยังตัวนับ
Restart-Computer -ComputerName 127.0.0.1
i=0
do{
Start-Sleep -Seconds 300
$i += 1
}while((!(Test-Connection 127.0.0.1 -Quiet)) -or $i -gt 3)
if($i -gt 3){
Write-Ouput 'Remote Machine not responding, please check.'
}
else{
Write-Output 'Reboot Succeeded'
}
จากนั้นเราก็มีเกณฑ์ในขณะที่ของเรา เราใช้การทดสอบหรือเพื่อให้แน่ใจว่าความล้มเหลวสร้างการแจ้งเตือน อีกทางเลือกหนึ่งคือสคริปต์วนซ้ำเพื่อรอเครื่องระยะไกลอย่างไม่รู้จบ ในการตรวจสอบเครื่อง เราใช้ปุ่ม ทดสอบการเชื่อมต่อ cmdlet. เพื่อความเรียบง่าย นี่คือ Ping สำหรับ PowerShell เราเพิ่มพารามิเตอร์ -เงียบ ซึ่งบังคับให้ส่งคืน True หรือ False มากกว่าผลลัพธ์ของแพ็กเก็ต ส่วนที่สองของคำสั่ง Or จะตรวจสอบว่าตัวนับมีค่ามากกว่าสามหรือไม่
เมื่อวนรอบเสร็จสิ้น เราต้องการสร้างผลลัพธ์ นั่นหมายความว่าเราต้องตรวจสอบเคาน์เตอร์ของเรา นี่เป็นคำสั่ง if/else แบบด่วน หากมากกว่าสาม สคริปต์จะแสดงผลว่าเครื่องระยะไกลไม่ตอบสนอง หากไม่เป็นเช่นนั้น แสดงว่าการรีบูตสำเร็จ
ลูปอื่นๆ
มีลูปอีกสองประเภทใน PowerShell พวกเขาค่อนข้างเกี่ยวข้องกับสองลูปก่อนหน้านี้ แต่ไม่ได้ใช้กันทั่วไป A For loop ทำงานคล้ายกับตัวอย่างในขณะที่ คุณกำหนดเกณฑ์ทั้งหมดของคุณในการประเมิน จากนั้นตั้งค่า cmdlet ของคุณ
for($i = 0;$i -lt 10;$i++){
Your Steps
}
ลูป Do Before นั้นเหมือนกับลูป Do while คุณเพียงแค่เปลี่ยนคำสั่งในขณะที่เป็นจนถึง ในสคริปต์ตัวอย่าง มันจะเหมือนกับพฤติกรรม เป็นทางเลือกสไตล์ แต่ Do While นั้นหลากหลายกว่าในสถานการณ์อื่นๆ ดังนั้นหากคุณจำได้เพียงอันเดียว Do while จะมีประโยชน์มากกว่า
PowerShell มีความช่วยเหลือสำหรับแต่ละลูปเหล่านี้เช่นกัน คุณสามารถขอความช่วยเหลือได้โดยการเพิ่ม เกี่ยวกับ ก่อนชื่อลูปใน Get-Help จากนั้น คุณสามารถดูตัวอย่างและเคล็ดลับอื่นๆ สำหรับแต่ละประเภทได้ สิ่งเหล่านี้น่าจะมีประโยชน์หากคุณติดขัด
เติบโตไปพร้อมกับคุณอย่างต่อเนื่อง
ณ จุดนี้ คุณมีทักษะส่วนใหญ่ในการเริ่มสร้างสคริปต์ที่มีประสิทธิภาพ ไม่ว่าจะเป็นระบบอัตโนมัติในบ้านหรือประหยัดเวลาในการทำงาน ลูปช่วยให้สคริปต์ของคุณทำสิ่งต่างๆ ได้มากขึ้น การรวมลูปเหล่านี้เข้ากับการจัดการข้อผิดพลาดจะทำให้สคริปต์ของคุณก้าวไปไกลกว่าพื้นฐาน ซึ่งจะเปิดประตูสู่ภาษาขั้นสูงขึ้น
สคริปต์ PowerShell อันชาญฉลาดที่คุณสร้างขึ้นโดยใช้ลูปคืออะไร แบ่งปันกับเราในความคิดเห็น
แบ่งปัน แบ่งปัน ทวีต อีเมล ลบไฟล์และโฟลเดอร์ Windows เหล่านี้เพื่อเพิ่มพื้นที่ว่างในดิสก์ต้องการล้างพื้นที่ดิสก์บนคอมพิวเตอร์ Windows ของคุณหรือไม่? ต่อไปนี้คือไฟล์และโฟลเดอร์ Windows ที่สามารถลบออกได้อย่างปลอดภัยเพื่อเพิ่มพื้นที่ว่างในดิสก์
อ่านต่อไป หัวข้อที่เกี่ยวข้อง- การเขียนโปรแกรม
- PowerShell
- การเขียนสคริปต์
Michael ไม่ได้ใช้ Mac เมื่อถึงวาระ แต่เขาสามารถเขียนโค้ดใน Applescript ได้ เขามีปริญญาด้านวิทยาการคอมพิวเตอร์และภาษาอังกฤษ เขาเขียนเกี่ยวกับ Mac, iOS และวิดีโอเกมมาระยะหนึ่งแล้ว และเขาเป็นลิงไอทีในเวลากลางวันมานานกว่าทศวรรษ โดยเชี่ยวชาญด้านการเขียนสคริปต์และเวอร์ชวลไลเซชัน
xbox one controller ไม่ทำงานบน pcเพิ่มเติมจาก Michael McConnell
สมัครรับจดหมายข่าวของเรา
เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!
คลิกที่นี่เพื่อสมัครสมาชิก