PowerShell คล้ายกับเชลล์ Unix มาก PowerShell มีนามแฝงสำหรับคำสั่งต่าง ๆ ที่คุณคุ้นเคยใน Unix เช่น ls, rm, cp, mv เป็นต้นอย่างไรก็ตามวิธีที่ cmdlet ที่อยู่เบื้องหลังนามแฝงนั้นทำงานแตกต่างกันมาก
ในเชลล์ * nix ทุกอย่างเป็นข้อความดังนั้นเอาต์พุตจากคำสั่งหนึ่งสามารถไพพ์ไปยังอีกคำสั่งได้ แต่โปรแกรมที่รับจะต้องรู้วิธีแยก / ตีความข้อความจากไพพ์ไลน์ นี่คือความแตกต่างที่สำคัญระหว่าง PowerShell และ * nix shells ... ใน PowerShell ทุกสิ่งที่ผ่านไปมานั้นเป็นวัตถุ
ผลลัพธ์ของการทำเช่นนี้คือการไพพ์จากคำสั่งหนึ่งไปยังอีกคำสั่งไม่ใช่เพียงแค่ไพพ์ stdout ไปยัง stdin มันกำลังส่งวัตถุ. net ที่เต็มเปี่ยมไปยังผู้รับ ดังนั้นผู้รับเพียงแค่ต้องรู้วิธีจัดการกับวัตถุประเภทนั้น ไม่จำเป็นต้องใช้การแยกวิเคราะห์ข้อความใด ๆ แต่ต้องเข้าใจวิธีการเรียกเมธอดและคุณสมบัติ (สมาชิก) ของวัตถุอินพุต
ในโปรแกรมบรรทัดคำสั่ง * nix คุณจะเขียนโค้ดที่อ่านจาก stdin และแยกวิเคราะห์ข้อมูลจากข้อความที่โปรแกรมอื่นสร้างขึ้น ใน PowerShell คุณจะทำสิ่งนี้:
function changeName($myObject)
{
if ($myObject.GetType() -eq [MyType])
{
#print the current name to screen
$myObject.Name
#change string in the 'name' property
$myObject.Name = "NewName"
}
return $myObject
}
การเรียกรหัสนี้ในบรรทัดคำสั่งอาจมีลักษณะดังนี้:
PS> $myObject = New-Object MyType -arg "OriginalName"
PS> $myObject = changeName $myNewObject
OriginalName
PS> $myObject.Name
NewName
คุณสามารถทำเช่นเดียวกันกับข้างต้นโดยใช้กลไกการวางท่อ แต่คุณสามารถเห็นความแตกต่างที่สำคัญในที่นี้เรากำลังผ่านวัตถุไม่ใช่ข้อความ:
PS> $myObject = New-Object MyType -arg "OriginalName" | changeName
OriginalName
PS> $myObject.Name
NewName
ลืมความแตกต่างที่สำคัญนี้ฉันจะบอกว่ามีความคล้ายคลึงกันอื่น ๆ ผิวเผิน แต่ส่วนใหญ่เพียง syntactically ดูเหมือนว่า PowerShell จะได้รับการออกแบบโดยคำนึงถึงผู้ใช้เชลล์ * nix ดังนั้นรูปแบบภาษาจำนวนมากจึงคล้ายกัน