PowerShell vs. Unix Shell


14

ฉันได้ยินบางสิ่งเกี่ยวกับคุณสมบัติของ PowerShell บางอันดูเหมือนว่าคุณสมบัติทั่วไปของ Unix shells

ดังนั้นดูเหมือนว่า Powershell จะมี piping และ commandlets คล้ายกับ shell script แต่ฉันยังไม่ได้ลอง (ไม่มี Windows) ดังนั้นฉันอาจผิด

ดังนั้นคำถามของฉันคือ Powershell คล้ายกับ Unix shell หรือแนวคิดแตกต่างกันหรือไม่?
หากสิ่งหลัง: สิ่งใดที่แนวคิดแตกต่างกัน?


2
คำถามนี้ถูกถามไปแล้วใน StackOverflow: stackoverflow.com/questions/573623/powershell-vs-unix-shells
Richard

คำตอบ:


20

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 ดังนั้นรูปแบบภาษาจำนวนมากจึงคล้ายกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.