Windows PowerShell, Unix / Linux'un terminali kadar güçlü mü? [kapalı]


44

Windows PowerShell , Linux kadar güçlü ve verimli terminalmidir?

Çevrimdışı insanlar bana, çok fazla açıklama yapmadan, Windows PowerShell’in Unix yöneticilerinin Windows’u daha rahat hissetmelerini sağlama girişimi olduğunu söyledi. Ama sanırım, onlar sadece (veya neredeyse) aynı verime sahipse rahat olacaklar.


3
Cevaplaması zor, çünkü bu bir Linux kabuğu yok. Linux'ta yaygın olarak kullanılan birçok kabuk vardır (veya genellikle * nix sistemlerinde). En çok kullanılanı bash, yani bunu sormak isteyebilirsiniz. <br> Ayrıca "güçlü" çok görüşe dayalı.
Kritzefitz

7
People offline tell me ... that Windows Powershell is an attempt to make UNIX administrators feel more comfortable using Windows.Bu insanlar Unix ya da Powershell kullanmamışlar.
surfasb

PowerShell’in, Microsoft’un bazı bölgelerinden güçlü bir kabuğa sahip olmadıklarına karıştığının bir onayı olduğunu söyleyebilirim. Ancak, UNIX'in tarzını hiçbir şekilde kopyalamaz. PS'yi tanımak için, gerçekten Windows'un nasıl çalıştığını ve .NET'in nasıl çalıştığını anlamak için gayet iyi bir şey biliyorsunuz.
Julian Knight

BTW, Microsoft, insanların UNIX'ten Windows Server'a geçmelerine yardımcı olması gereken bir geçiş araç setinin bir parçası olan bir BASH kabuğuna sahipti.
Julian Knight

1
Çoğu zaman Unix'i Windows'a tercih eden bir Unix fanatiğiyim; bununla birlikte PowerShell, ellerindeki metinleri anahtar / değer çiftlerine sahip olan ve salt metin olmayan nesneler içerdiğinden basar. Bu, tasarımda jQuery'ye bash'a göre daha benzer olmasını sağlar.
Mario

Yanıtlar:


55

İlk probleminiz bir kabuğu (PowerShell) bir terminale karşılaştırmanızdır. Linux'ta terminal, karakter tabanlı I / O gönderen ve alan ve arkasında etkileşimli bir kullanıcı olduğu varsayılan bir şeydir (başka bir deyişle, bir kabuk içermek için kullanılan GUI uygulamasıdır ). Koşmak en yaygın kabukları biri olan Ubuntu'nun Terminal olduğunu Bash , ama başkaları da var.

Çevrimdışı insanlar bana, çok fazla açıklama yapmadan, Windows PowerShell’in Unix yöneticilerinin Windows’u daha rahat hissetmelerini sağlama girişimi olduğunu söyledi.

Gerçekten, söylenecek doğru şey PowerShell’in Windows’un WMI , COM ve .NET nesne modelini etkileşimli ve komut dosyası çalıştırılabilir bir komut satırı ortamında göstermesi - ve bu komut satırı ortamının birçok boru hattını (örneğin, boru hatları gibi) ödünç almaya devam etmesidir. ve I / O yönlendirmesi - Unix kabuğundan, eski DOS gibi (2.0 ve üstü) command.comve cmd.exeyaptım. Boru hatları, PowerShell'deki nesnelerle çalışır. Yeterince bildiyseniz anında HTML oluşturmak ve muhtemelen Excel elektronik tabloları gibi şeyler yapabilirsiniz . Kesinlikle Windows NT 4. 0'dancmd.exe çok değişmemiş eski kabuğundan bir yükseltme / değiştirme .

Sözdizimiyle ilgili olarak, Unix kabukları gibi daha azdır (en sonunda cmdlet'lerin hiçbiri /bir anahtar ya da parametre göstergesi olarak kullanmasa da), ancak klasik Unix komutlarının takma adları vardır - lsbir PowerShell penceresine girmek gibi çalışacaktır dir. Ancak bunlar sadece takma adlardır ("Get-Alias" bunları listeler?).

PowerShell yeteneği ile ilgili olarak, aslında her ikisi de .NET öncesi olsa da , sadece komut dosyası biçiminde, VBScript ve CScript'ten de benzer bir yeteneğiniz oldu .

Unix kullanıcılarının çoğu zaman Bash'i kullanmak zorunda olmadıkları bir şey, çoğu zaman bir programcının veya nesnesinin çok gelişmiş ve basit PowerShell görevleri için gerekli olan çok karmaşık nesne modelini yakından tanımaktır. Ancak bu mümkündür, çünkü birçok standart POSIX komutu için düz metin çıktısının açık bir kuralları vardır . Windows bu geleneğe sahip değildi - mmcyönetim görevleri için bir konsol kullanmayı tercih etmiş gibiydi , yıllar içinde buraya ve orada eklenmiş komutlar. Ayrıca, çok iyi bilinen Unix hizmeti karmaşıktır ve kullanılmadan önce bir çalışma gerektirir - rsync, wgetve diğerleri. Verimlilik muhtemelen bir kişinin kullandığı aracı her şeyden daha iyi bilmesinin bir işlevidir.


8
PowerShell’in .NET’i konsola ve komut dosyası sunucusu olarak gösterdiğini belirttiğinizde +1. Komut dosyalarında kullanılacak birçok önemli Windows kütüphanesinin gücünü gösterir. İkisi arasındaki kullanım durumları benzer olabilir, stil tamamen farklıdır.
Julian Knight

3
Bir terminalin bir kabuk içerdiğini belirtmek için +1. Windows ve Linux'u uzun süredir kullanıyorum ancak hiç kimse bu kadar net bir şekilde ifade etmedi.
Tyler Collier

25

Windows PowerShell ve Unix kabuğu, her ikisinde de avantajları olan iki farklı şeydir.

Unix (kabuk), her şeyin bir dosya olduğu felsefesine sahiptir. Bir Unix komutunun girişine ve çıkışına bir dosya gibi erişilebilir. Bu, zincirleme komutunu gerçekten basitleştirir ve bir komutun çıktısının bir başkası tarafından tekrar kullanılması, Unix kabuğunun gücüdür.

Windows PowerShell ile bildiğim kadarıyla, her şey bir nesnedir. Bir komutun sonucunu başka bir nesne olarak geçirebilirsiniz. Bu gerçekten güçlü olabilir, ama basit bir Unix konseptine sahip değil.

PowerShell'in bir Unix kabuğu kadar verimli olduğuna inanmıyorum, ancak diğerleri de buna inanıyor.

Ancak, karşılaştırma tartışmalıdır, çünkü Windows bir * nix sistemi değildir, bu yüzden * nix kavramları uygulanmaz. MS-DOS ile karşılaştırıldığında , PowerShell büyük bir gelişmedir.


4
Her şey bir dosyanın kabukla ilgisi yok, çekirdeği.
terdon

3
Doğru, ancak unix kabuğunun nasıl tasarlandığını etkiler.
Biapy

@ terdon: Doğru, ancak kabuk bununla iyi çalışıyor. Çünkü hala |, <veya gibi semboller tanıyan bir kabuktur >.
Kritzefitz

1
İnsanlar powershell'de bu nesneler hakkında konuşmaya devam ediyorlar. Yalnızca cmd.exe ve bash (veya diğer kabukları) için kullanılan, belki basit bir örnek ile detaylandırabilir misiniz?
Luc,

5
Sizi bu sayfadan göndermeden - borunun sağ tarafındaki * nix sistemlerinde bir şeyleri boruya aktardığınızda basit bir metin beklersiniz, örneğin --- tarihçe | grep cp --- sadece cp içeren satırları döndürür. Öte yandan, PS'deki şeyleri sağ tarafa yönlendirirken, bunun gibi özelliklere sahip bir nesne elde edersiniz --- Get-History | Where-Object {$ _. CommandLine -eq "cp"} --- $ _ her nesnedir, CommandLine özelliğidir, -eq eşittir ve son olarak cp dizesidir.
Bilinmeyen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.