PowerShell, Windows'ta Cygwin kabuğumun yerini almaya hazır mı? [kapalı]


384

PowerShell'i öğrenmeli miyim, yoksa sadece Cygwin / Perl betikleri / Unix kabuk betikleri vb.

PowerShell'in yararı, komut dosyalarının Cygwin'e sahip olmayan takım arkadaşları tarafından daha kolay kullanılabilmesidir; ancak, o kadar çok genel amaçlı senaryo yazıp yazamayacağımı veya insanların bunları bile kullanıp kullanamayacağını bilmiyorum.

Unix komut dosyaları çok güçlü, PowerShell geçişi garanti edecek kadar yakın mı?

İşte PowerShell'de aradığım belirli şeylerden (veya eşdeğerlerinden) bazıları:

  • grep
  • çeşit
  • uniq
  • Perl (PowerShell, Perl'in yeteneklerine ne kadar yaklaşıyor?)
  • AWK
  • sed
  • dosya (dosya bilgilerini veren komut)
  • vb.

7
Bunu söyleyemem, Powershell'i almakla ilgilendim, bu sayfayı buldum ve şimdi PS ve alışkın olduğum kabuk komut dosyası arasındaki genel farkları biliyorum.
En Büyük Bender

5
Bu yazı aniden bir HN bağlantısı gönderimi ile küllerden yükseldi. Harika iş. Ve @Bobby için bunu yapıcı değil olarak kapatmak kötü.
Sid

26
Birisi bir aracın diğerinin işlevlerini ne kadar iyi kopyaladığını soramazsa, SO araç karşılaştırma sorularına cevap veremez. Bu, tartışmayı önlemek için dikkatle ifade edilmiştir, ancak dikkatsiz bir Unix'e karşı Windows sorusuna benzediği için "tartışmalı" olduğu varsayılmıştır. Ve Unix komut dosyalarının Windows'ta ne kadar yararlı olabileceğine dair ek olgusal bilgilerle birlikte olgusal, nesnel bir cevap aldı.
chernevik

16
Bu yine neden kapalı? Birisi, trolleri "Windows vs Unix" olarak işlemekten uzaklaştırmak için "Windows Platformunda PowerShell vs Unix Kabukları" demek için başlığı düzenleyin. Bu mükemmel yapıcı bir sorudur - yeniden açmak için oy kullandı.
x0n

3
Op, kabuğu aletlerle karıştırıyor. PowerShell'in kullanımı vardır. Ancak GNU, UNIX ürünlerini Windows da dahil olmak üzere diğer işletim sistemlerine özgürce getirme projesidir. Op listesindeki her şeyin Windows'ta bir GNU uygulaması vardır. GnuWin32 veya tek tek sitelerden erişilebilir. Windows BAT işe yaramaz, yönlendirme, boru ve koşullara sahiptir.
MeaCulpa

Yanıtlar:


783

Araçlar sadece araçlardır.
Yardım ederler ya da yardım etmezler.
Yardıma ihtiyacınız var ya da yok.

Unix'i biliyorsanız ve bu araçlar Windows'ta yapmanız gerekenleri yaparsa - o zaman mutlu bir adamsınız ve PowerShell'i öğrenmenize gerek yoktur (keşfetmek istemiyorsanız).

Benim asıl amacım bir dizi Unix aracını Windows'a dahil etmek ve onunla birlikte yapmaktı (takımdaki birçoğumuzun derin Unix geçmişleri ve bu topluluğa sağlıklı bir saygı dozu var.)

Bulduğum şey, bunun gerçekten fazla yardımcı olmadığıydı. Bunun nedeni AWK / grep / sed'in COM , WMI , ADSI , Kayıt Defteri, sertifika deposu vb.

Başka bir deyişle, UNIX, metin dosyaları etrafında kendi kendini ayarlayan bir ekosistemdir. Bu nedenle, metin işleme araçları etkin bir şekilde yönetim araçlarıdır. Windows, API'ler ve Nesneler etrafında kendi kendini ayarlayan tamamen farklı bir ekosistemdir. Bu yüzden PowerShell'i icat ettik.

Bulacağınızı düşündüğüm şey, metin işlemenin Windows'ta istediğinizi elde etmediği birçok olay olacağı. Bu noktada, PowerShell'i almak isteyeceksiniz. NOT - bu bir ya hep ya hiç anlaşma değildir. PowerShell içinde Unix araçlarınızı çağırabilirsiniz (ve metin işlemlerini veya PowerShell'in metin işlemlerini kullanabilirsiniz). Ayrıca Unix araçlarınızdan PowerShell'i arayabilir ve metin alabilirsiniz.

Yine - burada din yoktur - odak noktamız size başarılı olmanız için gereken araçları vermektir. Bu yüzden geribildirim konusunda çok tutkuluyuz. İşe nereden düştüğümüzü veya ihtiyacınız olan bir aracınızın bulunmadığını bize bildirin ve listeye koyacağız ve buna ulaşacağız.

Dürüst olmak gerekirse, kendimizi 30 yıllık bir delikten kazıyoruz, bu yüzden biraz zaman alacak. Bununla birlikte, Windows Server 2008 / R2 beta sürümünü ve / veya sunucu ürünlerimizin betalarını alırsanız, bu deliğin ne kadar çabuk dolduğunu şok edeceğinizi düşünüyorum.

Kullanımla ilgili olarak - bugüne kadar 3,5 milyondan fazla indirme yaptık. Bu, Windows Server 2008 işletim sisteminde kullanan kişileri içermez, çünkü isteğe bağlı bir bileşen olarak bulunur ve indirmeye gerek yoktur.

V2, Windows'un tüm sürümlerinde gönderilecektir. İsteğe bağlı bir bileşen olduğu Sunucu çekirdeği dışındaki tüm sürümler için varsayılan olarak açık olacaktır. Windows 7 / Windows Server 2008 R2 gönderildikten kısa bir süre sonra, V2'yi Windows XP ve üzeri tüm platformlarda kullanıma sunacağız. Başka bir deyişle - öğrenmeye yaptığınız yatırım çok sayıda makine / ortam için geçerli olacaktır.

Son bir yorum. PowerShell'i öğrenmeye başladığınızda / başladığınızda, bence çok mutlu olacaksınız. Tasarımın çoğu Unix arka planlarımızdan büyük ölçüde etkilenir, bu yüzden oldukça farklıyken, çok hızlı bir şekilde alırsınız (Unix olmadığından küfrettikten sonra).

İnsanların öğrenme için çok sınırlı bir bütçesi olduğunu biliyoruz - bu yüzden tutarlılık konusunda çok zorlandık. Bir şeyler öğreneceksiniz ve sonra tekrar tekrar kullanacaksınız.

Deney! Zevk almak! Tut!


11
Cevabınız için teşekkürler. Sanırım devam edeceğim ve PowerShell'i öğreneceğim. Şimdiye kadar gördüğüm kadar güçlü görünüyor ve işte onunla daha yararlı komut dosyaları yazabiliyorum.
Andy White

55
@Jeffrey: Windows için daha iyi bir terminal şansı var mı? Powershell güçlü bir betik dilidir, ancak cmd.exe'de çalıştığı gerçeği, etkileşimli modda çok daha kullanışlı hale getirir
sumek

47
Bu "yapıcı olmayan" soru, "Unix'te her şey bir dosyadır" mantrasına ve Windows'un neden farklı olduğuna dair gördüğüm en iyi anlayışı üretti. Belki StackOverflow yapıcı tartışmalar kapanış daha iyi hizmet olurdu ?
chernevik

12
@sumek - ConEmu'ya bir şans ver; Birkaç haftadır kullanıyorum ve oldukça tatlı: hanselman.com/blog/…
EZ Hart

4
Uyarı: powershell ikili veriyi borulamayı sevmez. Bu nedenle, güvenilir Unix araçlarınızı ararken dikkatli olun, tar -c . | gzip > package.tar.gz doğrudan PowerShell'de olduğu gibi şeyler yapmayın , aksi halde acı çekersiniz. Bkz. Brianreiter.org/2010/01/29/…
Interarticle

123

grep

Select-Stringcmdlet ve -matchoperatör normal ifadelerle çalışır. Ayrıca, daha gelişmiş işlevsellik için .NET'in normal ifade desteğinden doğrudan yararlanabilirsiniz.

çeşit

Sort-Object(hatırladığımdan daha güçlü * nix's sort). Rasgele ifadelerde çok düzeyli sıralamaya izin verme. Burada PowerShell'in altta yatan türdeki bakımı yardımcı olur; örneğin bir DateTimeözellik, DateTimebiçimlendirilebilir bir biçimde biçimlendirmeyi sağlamak zorunda kalmadan bir olarak sıralanır .

uniq

Select-Object -Unique

Perl (PowerShell Perl yeteneklerine ne kadar yaklaşıyor?)

Perl'in alana özel destek kitaplıklarının genişliği açısından: hiçbir yerde yakın değil (henüz).

Genel programlama için, PowerShell kesinlikle daha uyumlu ve tutarlıdır ve genişletilmesi daha kolaydır. Metin munging için tek boşluk Perl ..operatörüne eşdeğer bir şeydir .

AWK

AWK kullandığından beri yeterince uzun oldu (18 yaşından büyük olmalı, daha sonra Perl kullandım çünkü), gerçekten yorum yapamam.

sed

[Yukarıyı görmek]

dosya (dosya bilgilerini veren komut)

PowerShell'in burada gücü, dosya sistemi nesneleriyle yapabileceklerinden çok fazla değildir (ve burada tam bilgi alır, uygun şekilde dirdöndürür FileInfoveya FolderInfonesneleri), tüm sağlayıcı modeli budur.

Kayıt defterini, sertifika deposunu, SQL Server'ı, Internet Explorer'ın RSS önbelleğini, vb. Dosya sistemiyle aynı cmdlet'lerin kullanabileceği bir nesne alanı olarak ele alabilirsiniz.


PowerShell, kesinlikle Windows'ta ileriye giden yoldur. Microsoft, gelecekteki ev dışı ürünler için gereksinimlerinin bir parçası haline getirdi. Bu nedenle Exchange'de zengin destek, SQL Server'da destek. Bu sadece genişleyecek.

Bunun yeni bir örneği TFS PowerToys'tur. Birçok TFS istemci işlemi, her seferinde tf.exe'yi başlatmak zorunda kalmadan yapılır (yeni bir TFS sunucu bağlantısı vb. Gerektirir) ve daha sonra verileri daha fazla işlemek daha kolaydır. Tüm TFS istemci API'sine TF.exe'nin Team Explorer'ında gösterilenden daha ayrıntılı bir şekilde geniş erişim sağlar.


2
Mesele şu ki, sağlayıcı modeli ilginçtir, çünkü işletim sistemi metni evrensel yapılandırma ortamı olarak kullanmaz, bu nedenle bu sağlayıcılara İHTİYACINIZ. UNIX ile çoğu dilde PAM, ana bilgisayar ve paketlere dokunmak için API'ler bulunur, ancak sonuçta metin her zaman orada olacaktır.
Daishiman

12
Metin her zaman her şey için en iyi biçim değildir (veritabanları ve raster görüntülerle başlayın). Ancak açık format savaşlardan ziyade katılmama konusunda anlaşabileceğimizi düşünüyorum.
Richard

5
Powershell, .NET çerçevesindeki herhangi bir nesneyi kullanabilir, bu Perl'in etki alanı yetenekleriyle eşleşmiyor mu? Ayrıca yeniden kullanılabilirlik istiyorsanız C # vb. Cmdlet'ler yazabilirsiniz
Chris S

Noktadan noktaya karşılaştırma. Güzel bir. Bu kabul edilen cevap olmalı. PowerShell'in gücü, .NET temelleri ve yeni
Cmdlet'ler

Sed'in tipik bir kullanımı (sanırım): sed 's/pattern/replacement/' filekabaca gc file | %{$_ -replace 'pattern','replacement'}ve benzer şekilde awk için: awk 'BEGIN {} /pat1/ {action1} /pat2/ {action2} END {}' filekabaca{BEGIN {}; switch -r -c -file file { 'pat1' {action1} 'pat2' {action2}}; END{};}
Nathan Chappell

56

Kariyeri 1997-2010 yılları arasında Windows kurumsal gelişimine odaklanan biri olarak, açık cevap daha önce verilen tüm iyi nedenlerden dolayı PowerShell olacaktır (örneğin, Microsoft'un kurumsal stratejisinin bir parçasıdır; Windows / COM / .NET ile iyi entegre olur; ve dosyaların yerine nesnelerin kullanılması "daha zengin" bir kodlama modeli sağlar). Bu nedenle, son iki yıldır PowerShell'i kullanıyordum ve tanıtıyordum, "İnanç Sözü" nü takip ettiğime olan inançla.

Ancak, bir pragmatist olarak PowerShell'in bu kadar harika bir cevap olduğundan artık emin değilim. Mükemmel bir Windows aracı ve Pencere komut satırı olan tarihi deliği doldurmak için çok gerekli bir adım sağlarken, hepimiz Microsoft'un tüketici bilgi işlem kaymasını izlediğinden, Microsoft'un işletim sistemini korumak için büyük bir savaş olması muhtemel görünüyor geleceğin işletmesi için önemlidir.

Gerçekten de, çalışmamın heterojen ortamlarda giderek daha fazla olduğunu bulduğumda, şu anda Bash komut dosyalarını kullanmanın çok daha yararlı olduğunu düşünüyorum, çünkü bunlar sadece Linux, Solaris ve Mac OS X'te değil, aynı zamanda Cygwin'in yardımı - Windows'ta.

Dolayısıyla, OS'nin geleceğinin tekel olmaktan ziyade metalaştırıldığı inancını satın alırsanız, mümkün olduğunda tescilli araçlardan uzak tutan çevik bir geliştirme aracı stratejisini tercih etmek mantıklı görünmektedir. Bununla birlikte, geleceğinizin Redmond'a hükmettiğini görürseniz, PowerShell'e gidin.


1
Unix komut dosyaları Cygwin-Windows üzerinde hatasız çalışır mı?
Pacerier

@Pacerier 12 yıldır Cygwin ve MinGW kullanıyorum ve nadiren şaşırtıcı bir sorun yaşadım. Önemli olan, eğer bir şey işe yaramazsa, Windows araçlarına veya herhangi bir şeye geri dönmek her zaman mümkündür - süreçler diğer kabukların başlattığı gibi başlatılabilir.
Evgeni Sergeev

4
Tamam, cevabınız 2011'den. Bugün powershell linux'da da çalışıyor. Ve - benim kişisel görüşüm - bash çok antika. Sözdizimi korkunç ve farklı bir betik dili kullanmayı tercih ediyorum. Günümüzde python çoğu linux dağıtımında standart olduğu için, komut dosyaları için bash kullanmak için herhangi bir neden görmüyorum. 2011'den beri çok şey olduğu için powershell'i tekrar kontrol etmenizi tavsiye ederim.
itmuckel


33

Komut dosyası otomasyonu için biraz PowerShell kullandım. Ortamın Unix kabuklarından çok daha fazla düşünülmüş gibi görünse de, pratikte metin akışları yerine nesnelerin kullanımı çok daha karmaşıktır ve son 30'da geliştirilen birçok Unix tesisi yıllar hala kayıp.

Cygwin hala Windows ana bilgisayarları için tercih ettiğim komut dosyası ortamıdır. İşlerin yapılmasında alternatifleri kesinlikle yener.


27
Nesneleri kullanmak bir paradigma değişimidir ve alışmak biraz zaman alır. Ancak, yapılandırılmış verilerin dahil olduğu her adımda yeniden ayrıştırma işleminin tamamını önler (örneğin, alanların sınırlandırılmasını sağlamaya gerek yoktur).
Richard

16
@Andy White @ Daishiman, PowerShell ile bir öğrenme eğrisinin nerede olduğunu anlayabiliyorum, ancak piping nesneleri piping metninden çok daha esnek olabilir. @Richard doğru. :)
Steven Murawski

18
Otomobil üreticileri de 1000 yıldan fazla atla tartışırken zorlandılar. Ben küstah olmaya çalışmıyorum. Sadece geçmiş başarıların inovasyonun potansiyel faydasını ortadan kaldırmayacağına dikkat çekmek.
EBGreen

12
@daishiman - Nesnelerin yararı, bir mülk istediğinizde, bunu istemenizdir - ayrıştırmak, tahmin etmek, dökmek zorunda değilsiniz. "Nesnelerin uyumlu yöntemlere sahip olmaması durumunda ne olur" konusundaki görüşünüzü anlamadım - Başka bir yol söyleyebilir misiniz veya sorunun bir örneğini verebilir misiniz? Teşekkürler.
Jeffrey Snover - MSFT

13
@Daishiman - Anlıyorum. Pratikte insanlar bunun bir sorun değil, büyük bir avantaj olduğunu bulmuşlardır. Bununla birlikte, uzman bir metin ayrıştırıcısı olsaydınız, bu yeni bir öğrenme becerisi olacağını ve ilk başta gereksiz ve garip hissedebileceğini görebiliyorum. Yine - yardımcı olan her şey doğru araçtır.
Jeffrey Snover - MSFT

15

Burada çok sayıda harika cevap var ve işte benim almam. PowerShell, hazırsanız ... Örnekler:

grep = " Select-String -Pattern "

sort = "Sırala Nesnesi"

uniq = " Benzersiz Olsun "

file = " Get-Item "

cat = " İçeriği Al "

Perl / AWK / Sed komut değildir, ancak yardımcı programlar karşılaştırmak zordur, ancak PowerShell'de hemen hemen her şeyi yapabilirsiniz.


2
Atalarımızın kullanmak zorunda kaldığı şifreli dört harfli komutlara inanabiliyor musunuz?
Evgeni Sergeev

4
@EvgeniSergeev Tüm yukarıdaki gibi varsayılan olarak bulunan sls, sort, gu, gi, gc, sırasıyla. Sekme tamamlanmış uzun okunabilir adlar ve tek bir sistemde kısa yazılabilen adlar. Bu sizin için kullanıcı dostu bir ilerleme.
16:17

Bunun takma adlarından Get-Contentbiri cat, bu nedenle Cygwin / Unix ve PowerShell arasında herhangi bir fark yoktur. Ne yazık ki, çoğu durumda, Microsoft'un cmdlet belgelerinde diğer adlar hakkında bilgi bulunmamaktadır, ancak tüm diğer adların bir listesiGet-Alias bir PowerShell oturumunda kullanılarak çıkarılır. "Get-Unique" takma adı "gu" dır, bu nedenle Cygwin / Unix olandan daha kısadır!
Peter Mortensen

13

Yakın zamanda PowerShell'de herhangi bir derecede ciddiyetle göz kamaştırmaya başladım. Son yedi yıldır neredeyse tamamen Windows tabanlı bir ortamda çalışmama rağmen, Unix geçmişinden geliyorum ve kendimi sürekli olarak Windows'daki etkileşim deneyimimi "Unix-fy" denemeye çalışırken buluyorum. Az söylemek sinir bozucu.

PowerShell'i Bash , tcsh veya zsh gibi bir şeyle karşılaştırmak adil olur , çünkü grep , sed , awk , find , vb. Gibi araçlar kabuğun bir parçası değildir; ancak her zaman herhangi bir Unix ortamının parçası olacaklardır. Böyle bir PowerShell komutu dedi Seç-dize çok benzer bir işlevi vardır grep ve edilir hatları biraz bulanık olabilir yani ... PowerShell içinde bir çekirdek modülü olarak paketlenmiş.

Bence anahtar şey kültür ve ilgili araç setlerinin kendi kültürlerini somutlaştıracağı gerçeği:

  • Unix, dosya tabanlı (genel olarak Unicode olmayan) metin tabanlı bir kültürdür. Yapılandırma dosyaları neredeyse tamamen metin dosyalarıdır. Öte yandan Windows, yapılandırma biçimleri açısından her zaman çok daha yapılandırılmıştır - yapılandırmalar genellikle yönetimi için özel araçlar gerektiren özel veritabanlarında (örn. Windows kayıt defteri) tutulur.
  • Unix yönetimsel (ve yıllarca geliştirme) arayüzü geleneksel olarak komut satırı ve sanal terminal olmuştur. Windows bir GUI olarak başladı ve yönetim işlevleri yalnızca son zamanlarda yalnızca GUI tabanlı olmaktan uzaklaşmaya başladı . PowerShell'de sahip olduğu önemli ipucu göz önüne alındığında, komut satırındaki Unix deneyiminin daha zengin, daha olgun bir deneyim olmasını bekleyebiliriz ve deneyimim buna uyuyor. Bu konuda benim tecrübelerime göre:

    • Unix idari deneyimi, en az miktarda tuş vuruşuyla işleri kolaylaştıracak şekilde tasarlanmıştır; bu muhtemelen bir sunucuyu yavaş 9600 baud çevirmeli bağlantı üzerinden yönetmek zorunda kalmanın tarihsel durumunun bir sonucudur. Şimdi PowerShell, oldukça ayrıntılı Verb-Noun standardını dolaşmak için uzun bir yol kat eden takma adlara sahip , ancak bu takma adları tanımak biraz acı verici (herkes daha iyi bir şey biliyor:? alias | where {$_.ResolvedCommandName -eq "<command>"}).

      Tarihin manipüle edilebileceği zengin yolun bir örneği:

      iptableskomutlar genellikle uzun soluklu ve yerleşik tarih manipülasyon birçok düzgün özelliklerden sadece biri için olmasa küçük farklarla onları tekrar bir ağrı olurdu vardır Bash yüzden iptables aşağıdaki gibi kural ekleme:

      iptables -I camera-1-internet -s 192.168.0.50 -m state --state NEW -j ACCEPT

      başka bir kamera için ikinci kez (" camera-2"), yalnızca aşağıdakilerin yayınlanması durumudur:

      !!:s/-1-/-2-/:s/50/51

      hangi vasıta "önceki komutu, ancak yerine gerçekleştirmek -1-ile -2-ve 50ile 51.

    • Unix deneyimi dokunmatik daktilolar için optimize edilmiştir; biri "ev" pozisyonundan ayrılmadan hemen hemen her şeyi yapabilir. Örneğin, Bash kullanarak Emacs tuş bağları (evet, Bash de destekler vi kullanılarak yapılır tarih boyunca bisiklet, bağlama) Ctrl-Pve Ctrl-Nkullanılarak yapılır bir satırın başlangıç ve bitiş hareket ederken Ctrl-Ave Ctrl-Esırasıyla ... ve kesinlikle orada bitmiyor. Ana konumdan hareket etmeden PowerShell konsolundaki en basit navigasyonu bile deneyin ve başınız belada.

    • Unix'te çok yönlü sayfalama ( daha az ) gibi basit şeyler , biraz sinir bozucu olan PowerShell'de kullanıma hazır gibi görünmüyor ve zengin bir editör deneyimi de mevcut değil. Tabii ki, her zaman bu boşlukları dolduracak üçüncü taraf araçları indirebilirsiniz, ancak bu şeyler Unix'in herhangi bir lezzetindeymiş gibi "orada" olsaydı iyi olurdu.
  • Windows kültürü, en azından sistem API'leri açısından , her ikisi de son derece yapılandırılmış ve nesne tabanlı olan destekleyici çerçeveler, yani, COM ve .NET tarafından yönlendirilir . Öte yandan, Unix API'lerine erişim geleneksel olarak bir dosya arayüzü ( /devve /proc) veya (nesne yönelimli olmayan) C tarzı kütüphane çağrıları yoluyla gerçekleşmiştir. Komut dosyası oluşturma deneyimlerinin, kendi işletim sistemi paradigmalarına uyması şaşırtıcı değildir. PowerShell doğası gereği yapılandırılmıştır (her şey bir nesnedir) ve Bash -ve-arkadaşlar dosya tabanlıdır. Bir PowerShell programlayıcısının elindeki yapısal API çok geniştir (temel olarak mevcut standart COM ve .NET arabirimleri grubunun genişliğiyle eşleşir ).

Kısacası, PowerShell kodlanabilirliğini tartışmasız daha güçlü olmasına rağmen vardır Bash (.NET kullanılabilirliğini göz önüne aldığınızda BCL ) interaktif deneyim da tümüyle klavye odaklı dan ona geliyorlar, özellikle önemli ölçüde daha zayıf , konsol tabanlı perspektif (birçok Unix kafası gibi).


"Herkes daha iyi bir şey biliyor: alias | where {$ _. ResolvedCommandName -eq" <komut> "}?" Peki alias -Definition *propertyya (ya da başka herhangi bir patern)? Cevabınızla ilgili sorun, kabuğu ve konsolu karıştırmanızdır: farklı düzenleme seçeneklerine sahip konsol seçenekleriniz olduğunu unutmayın. İnsanları İMKB gibi diğer konsolları kullanmaya teşvik etmek için DOS konsol düzenlemesini kasıtlı olarak bıraktılar.
Duncan

BTW, !!örneğiniz Powershell'de şu şekilde yazılabilir, (h -c 1) -replace '-1-','-2-' -replace '50','51' | iexancak tek bir komut için yukarı ok ve düzenleme yapmak daha kolaydır. Bunu birçok komutla yapmak istiyorsanız, Powershell'in kazanacağını düşünüyorum. 255 numaralı komutla biten 10 komutu düzenlemelerinizle tekrarlamak için: (h -c 10 -id 255) -replace '-1-','-2-' -replace '50','51' | iexPowershell'in geçmişi, Linux kabuklarında duyulmamış işleri yapmanızı sağlar; geriye dönük olarak bir komutun ne kadar süreceğini merak ediyorsanız:h -id 20 | select { $_.EndExecutionTime - $_.StartExecutionTime }
Duncan

@Duncan Yorumunuzla ilgili olarak kabuk ve konsol - Bence bu sadece Bash ve PS arasında temel bir fark; yani: Bash belirli bir etkileşimli deneyim sunmayı beklerken , PS bunu başka bir şeye "bırakır". İMKB konsolu ile ilgili çok fazla deneyimim yok, ancak hatırlayabildiğim kadarıyla, muazzam derecede zengin bir etkileşimli deneyimi de yok.
Eric Smith

@Duncan, evet - PS'nin akıllı tarih hileleri konusunda sunma yeteneği hakkında iyi bir nokta.
Eric Smith

@Duncan ... ama Linux kabuklarında bazı şeylerin duyulmadığı iddiasına rağmen:fc -e "sed -i -e 's/-1-/-2-/g' -e 's/50/51/g'" 10 255
Eric Smith

8

Hiçbir şekilde çok deneyimli bir PowerShell kullanıcısı değilim, ama maruz kaldığım küçük bir parça beni çok etkiledi. Unix komut isteminde yapabileceğiniz hemen hemen her şeyi yapmak için yerleşik cmdlet'leri birlikte zincirleyebilirsiniz ve CSV'ye, HTML tablolarına dışa aktarma ve daha derinlemesine sistem yönetimi iş türleri için bazı ek iyilikler vardır. .

Ve sed gibi bir şeye gerçekten ihtiyacınız varsa , PowerShell ile oldukça kolay bir şekilde entegre edebileceğiniz her zaman UnixUtils veya GnuWin32 vardır.

Uzun zamandır Unix kullanıcısı olarak, ancak komut adlandırma şemasına alışmakta biraz sorun yaşadım ve daha fazla .NET biliyorsam kesinlikle bundan daha fazla faydalanırdım.

Bu yüzden aslında, sadece Windows özelliği bir sorun yaratmazsa öğrenmeye değer olduğunu söylüyorum.


1
PowerShell'i Mono üzerinden diğer platformlarda çalıştırmanıza olanak tanıyan bir açık kaynak projesi "Pash" var. tinyurl.com/6dyoso
John D. Cook

Oha! Bahşiş için teşekkürler; Denemek için sabırsızlanıyorum
yalestar

6

Kabuk komut dosyalarını seviyorsanız PowerShell'i seveceksiniz!

Microsoft Komut Kabuğu (Ars Technica) rehberli turunda başlayın .


8
Kabuk komut dosyası oluşturmayı seviyorum ve PowerShell'i tolere ediyorum . Komutları ve sözdizimi iğrenç. Herhangi bir yararlı komut tamamlamadan korkunç derecede uzun komutlar ve seçenekler. Veya varsa ben bulamadım. Ayrılması gereken tek komutlara sıkışmış çok fazla özellik var. Garip değişken ve kaçış sözdizimi sadece bir DOS toplu programcı sevebilir.
Zan Lynx

8
@Zan Lynx - Bir şey bulamamakta haklısın. Tüm komutların takma adları vardır ve birçoğu DOS ve UNIX komutlarıyla eşleşir (ps, dir, rm, ls, kill, geçmiş, adam, kedi, açık vb.) Adlar anlamlı bir isme sahip olmaları için uzundur. Komut dosyaları için harika -yeni bir kişinin onu kullanması ve bakımını yapması gerektiğinde yardımcı olur. Cmdlet'ler, işlevler, değişken, yol, parametreler vb. İçin sekme genişletmesi vardır. Sözdiziminin çoğu Unix kabuklarından ve hangi kaçış sözdiziminden bahsediyorsunuz? `` Windows'ta yol ayırıcı olduğundan kaçış için kullanılmaz.
manojlds

3
@Zan Lynx - Argümanlarınız geçerli değil. Değişkenleri yorumlamayı durdurmak için '(tek tırnak) kullanın . Çift çift tırnak şey - aynı, kullanın write-output 'this is a "test"'. İşaret ettiğiniz soru Regex içindir ve regex'ten kaçmak her yerde geçerlidir. Powershell, Here-Strings / verbatim dizelerine de sahiptir. Java bile bunlara sahip değil! Java'da normal ifadeden kaçmayı deneyin. Bazen literalpath kullanmıyorsunuz. İhtiyacınız olduğunda kullanın. LiteralPath joker karakterleri aynen ele alır ve genişletmez. Dosyalarınız olduğunda kullanın. Size daha fazla seçenek sunar.
manojlds

3
@manojlds: Powershell ile karşılaştırıldığında Powershell hiçbir anlam ifade etmeyen ve sadece kafa karıştırıcı tutarsızlıklarla doludur. Bash'da her yerde aynı çıkış karakterini kullanırsınız ve dosya yolları da dizeler gibi kaçar. Bunun için özel bir parametreye ihtiyacınız yok. İçinde özel karakterler bulunan bir değişkeni genişletirseniz, onu çift tırnak içine alırsınız ve içerik güvenlidir, yeniden kaçmak için bir işlev çağırmanıza gerek yoktur.
Zan Lynx

5
@Zan Lynx - Tutarsızlık yok. Hatta write-output "this is a `"test`""çalışıyor. Sadece `\ \ yerine kullanın . regex :: escape size yardımcı olmaktan kaçar, böylece kaçan şeyleri kaçırmazsınız. Kullanmak gerekli değildir. Size yardımcı olacak ve hataları önleyecek ek seçeneklerin tutarsızlıklar olduğunu düşünüyorsunuz.
manojlds

6

Son denemelerim beni PowerShell ve .NET çağrılarının derinliklerine getirdiğinden, PowerShell'in Cygwin ve Unix kabuğunun yerini alabileceğini söylemeliyim .

Perl hakkında emin değilim, ama hem PowerShell hem de Perl programlama dilleri olarak Turing tamamlandığından, bunu Perl'i değiştirmeye de evet olarak veriyorum.

PowerShell'in * nix altında Cygwin ve sıradan Bash üzerinde sahip olduğu bir şey, korumalı DLL DLL çağrıları gerçekleştirme, işletim sistemini doğrudan API çağrıları, WMI yöntemleri ve hatta COM nesneleri aracılığıyla yönetme yeteneğidir. Internet Explorer'ı kodla başlatmaya, sonra görüntülenen belgeyle istediğinizi yapmaya, bir Web sunucusu için arka ucu etkili bir şekilde taklit etmeye ne dersiniz?

SQL sunucularından ve diğer veri sağlayıcılarından veri toplamaya, ayrıştırmaya ve CSV, posta mesajları, metin ve aslında her türlü mevcut ve mevcut olmayan dosya formatları olarak dışa aktarmaya ne dersiniz? (Elbette alınan verilerden geçerli bir dosya oluşturma becerisi ile, ancak CSV kolayca kullanılabilir).

İmzalı cmdlet'ler ve komut dosyaları, grup ilkeleri ve yürütme ilkeleri aracılığıyla, yönetici olarak çalıştırsanız bile sisteminizde kötü amaçlı kodun çalışmasını önlemeye yardımcı olan ek bir güvenlik vardır.

Hangi komutların uygulandığı hakkında - Richard'ın yanıtı bunları ve PowerShell'in zaten işlevlerini taklit etme yeteneğini listeler.

PowerShell'in geçişi garanti etmek için güçlü olup olmadığı hakkında - bu daha fazla kişisel tercih meselesidir, ancak giderek daha fazla Windows hizmeti onları kontrol etmek için PowerShell cmdlet'lerini sağladığından, mevcut bu hizmetlerle PowerShell'i kullanmamak bir engel olarak kabul edilir. (Hyper-V sunucusu bu tür birincil hizmettir ve ayrıca PowerShell cmdlet'leriyle GUI'den daha fazlasını yapma olanağı sağlar!)

Muhtemelen bu cevap beş yıl gecikmiştir, ancak yine de, birisi Windows'ta idari görevler veya çeşitli şeylerin genel komut dosyalarını uygularsa, kesinlikle PowerShell'i kendi amaçları için kullanmaya çalışmalıdır.


6

PowerShell'i Cygwin / Perl / Shell kombinasyonuyla karşılaştırdığınızda, PowerShell'in yalnızca bu kombinasyonun "Shell" bölümünü temsil ettiğini unutmayın.

Ancak cmd.exe veya Cygwin'den yaptığınız gibi PowerShell'den herhangi bir komutu çağırabilirsiniz. O mu değil belirtilen fonksiyonları, uygulaması yeniden ve Perl kesinlikle karşılaştırılamaz.

Bu sadece bir kabuk, ama .NET evrenine rahat bir arayüz sağlayarak programlamayı kolaylaştırıyor.

Ayrıca, PowerShell'in Windows XP, Windows Server 2003 veya daha yenisini gerektirdiğini ve BT altyapınıza bağlı olarak bir sorun oluşturabileceğini unutmayın.

Güncelleme:

Cevabımın ne tür bir felsefi tartışmaya yol açacağına dair hiçbir fikrim yoktu.

Cevabımı şu soru bağlamında gönderdim: PowerShell'i Cygwin ve Perl ve Bash ile karşılaştırın.

PowerShell, yerleşik komutlar, komut dosyaları, kullanıcı işlevleri ve harici komutlar (.exe, .bat, .cmd) arasında sözdizimsel bir fark yaratmadığından bir kabuktur. Yalnızca .NET yöntemlerini çağırmak, çağrıya bir ad alanı veya nesne ekleyerek farklılık gösterir.

Programlanabilirliği, PowerShell "diline" özgü herhangi bir şeyden değil, .NET çerçevesinden türetilir.

Bugzilla veya MediaWiki bir web sunucusunda çalışan PowerShell komut dosyaları olarak uygulanır uygulanmaz PowerShell'in bir "komut dosyası dili" olduğuna inanıyorum ;)

O zamana kadar karşılaştırmaların tadını çıkarın .


Evet, sanırım Unix "kabuk" dan bahsettiğimde grep, awk, vb. Gibi Unix ile birlikte gelen tüm normal yardımcı programlardan da bahsediyorum. PowerShell'in benzer yardımcı programlar sunup sunmadığını merak ediyorum -kutu.
Andy White

3
Powershell "sadece bir kabuk" değildir. Bu bir betik dilidir. Acaba perl ile karşılaştırılamaz mı? Olgun olduğumu itiraf ediyorum, ama bunun ötesinde eşitsizliği görmüyorum.
EBGreen

@EBGreen, Bu yorumla tam olarak ne demek istiyorsun? Herhangi bir kabuk veya komut dosyası dilinin doğası gereği benzer olduğunu kabul ediyorum, ancak PowerShell ve bash / perl / diğer unix kabukları / komut dosyası dillerinin özellikleri hakkında daha fazla merak ediyordum.
Andy White

2
Powershell inanılmaz derecede geniş bir fonksiyon yelpazesine sahiptir. - Etkileşimli, oluşturulabilir bir kabuk - Zengin bir etkileşimli kodlama dili - Bir programlama dili Zengin bir OO ve tesxt yardımcı program işlevleri (yani grep / awk / etc'ye eşdeğer) vardır.
Jeffrey Snover - MSFT

1
@Andy - Devio'yu powershell'in Perl kadar güçlü olmadığını söylediğini anladım. Bunun doğru olduğuna inanmıyorum ve neden böyle olduğunu düşündüğünü merak ettim.
EBGreen

4

PowerShell'deki cmdlet'ler çok güzel ve güvenilir bir şekilde çalışıyor. Bir Java / C # geliştiricisi olduğum için nesne yönelimleri bana çok cazip geliyor, ancak tam bir set değil. Nesneye yönelik olduğu için POSIX araç setinin metin akışı olgunluğunun birçoğunda ( awkvesed birkaçını belirtmek için) .

POSIX araçlarında OO tekniklerini ve olgunluğu sevmek ikilemine bulduğum en iyi cevap her ikisini de kullanmak! PowerShell'in harika bir yönü, nesneleri standart akışlara mükemmel bir şekilde bağlamasıdır. PowerShell varsayılan olarak, nesnelerini taşımak için bir nesne boru hattı kullanır. Bunlar standart akışlar değildir (standart çıkış, standart hata ve standart giriş). PowerShell, çıktıyı nesne boru hattı olmayan standart bir işleme geçirmesi gerektiğinde, önce nesneleri bir metin akışına dönüştürür. Bunu çok iyi yaptığı için PowerShell, POSIX araçlarını barındırmak için mükemmel bir yer!

En iyi POSIX araç seti GnuWin32'dir . Yüklenmesi 5 saniyeden uzun sürüyor, ancak sorun olmaya değer ve anlayabildiğim kadarıyla c:\windows\*, dosyaları belirttiğiniz dizinlere kopyalamak dışında sisteminizi (kayıt defteri, klasörler vb.) Değiştirmez . Bu çok güzel çünkü araçları paylaşılan bir dizine koyarsanız, birçok kişi aynı anda bunlara erişebilir.

GnuWin32 Kurulum Talimatları

Exe'yi ( SourceForge sitesinden ) indirin ve uygun bir dizine (kullanacağım) işaret ederek yürütün C:\bin. GetGnuWin32Orada çalıştıracağınız bir dizin oluşturur download.bat, daha sonra install.bat(parametreler olmadan), bundan sonra C:\bin\GetGnuWin32\gnuwin32\binbir Windows makinesinde var olan en yararlı klasör olan bir dizin olacaktır . Bu dizini yolunuza ekleyin, artık başlamaya hazırsınız.


4

TL; DR - Windows veya PowerShell'den nefret etmiyorum. Sadece olamaz do Windows veya PowerShell şey.


Şahsen hala en iyi ihtimalle PowerShell'i ezici buluyorum.

  • dizin yollarının sekme tamamlanması birleşmez ve kullanıcının her ad tamamlandıktan sonra bir yol ayırıcı girmesini gerektirir.
  • Windows bile bir yolun veya bir yol nedir kavramını yok gibi ben hala hiçbir erişilebilir kullanıcı ana göstergesi olan, hissetmek ~/bazı kısa@environment://somejibberish/%user_home%
  • NTFS hala bir karmaşa ve görünüşte her zaman olacak. İyi şanslar.

  • cmd-esque arabirimi, dinozor cmd.exe, PowerShell, Düzenleİşaretle hala bilgileri kopyalamanın tek yolu olmak ve yalnızca görünür terminal alanının dikdörtgen blokları şeklinde kopyalamak için görünür. ve DüzenleMark hala dizeleri terminale yapıştırmanın tek yoludur.

  • Mavi boyamak, onu daha çekici yapmaz. Yine de Microsoft geliştiricilerinin renkli bir tada sahip olmalarına aldırmıyorum.

  • Windows her zaman ekranın sol üst köşesinde açılır. Dikey görev çubukları kullanan biri için, özellikle Windows görev çubuğunun pencerenin kopyalama / yapıştırma işlevine erişim sağlayan tek köşesini kapsayacağı düşünüldüğünde inanılmaz derecede can sıkıcıdır.

Windows'un içerdiği araçların gerekçesiyle fazla konuşamam. Bir dizi açık kaynaklı, özgürce lisanslanan CLI araçları olduğu ve PowerShell'in bildiklerime göre, hiçbiri mutlak bir hayal kırıklığı değildir.

  • PowerShell wget, görünüşe göre GNU wget ile karşılaştırılamaz argümanlar alıyor. Teşekkürler, portably yararsız umut ışıltısı.
  • PowerShell POSIX, Bash uyumlu değildir, özellikle &&operatör ele alınmaz, bir şeyden sonra koşullu komutun en basitini yapar.

Adamı tanımıyorum; Denedim, gerçekten yaptım; Yine de bir dahaki sefere açtığımda daha az işe yaramayacağı umuduyla bir şans vermeye çalışıyorum. PowerShell'de hiçbir şey yapamıyorum ve GNU araçlarını Windows'a getirmek için gerçek bir projeyle zar zor şeyler yapabiliyorum.

MySysGit bana dinozor cmd.exe istemini birkaç GNU aracıyla veriyor ve hala çok ezici, ama son yol tamamlandığında çalışıyor. Git komutu Git Bash'te çalışacaktır.

MySysGit için Mintty, Cygwin arayüzünü mysysgit ortamı üzerinde verir, kopyalayıp yapıştırır (kopyalamayı (fare), yapıştırmak için Shift+ Insmodernliği ...) seçer . Ancak, git pushMintty'de gibi şeyler bozuldu.

Ben rant demek istemiyorum, ama yine de Cygwin gibi araçlar bile Windows üzerinde komut satırı kullanılabilirliği ile ilgili büyük sorunlar görüyorum.


Not: PowerShell'de bir şey yapılabileceği için, kullanılabilir değil . Kullanılabilirlik yetenekden daha derindir ve bir ürünü tüketici olarak kullanmaya çalışırken odaklandığım şeydir.


QuickEdit modu açılsın mı? Kopyalamak için enter tuşuna basın, yapıştırmak için ctrl-v tuşuna basın, artık Düzenle-> İşaretle veya Düzenle-> Yapıştır. Tercihlerde, Pencere konumunu ayarlayın ve "Sistem konumu penceresine izin ver" seçeneğinin işaretini kaldırın. Sekme tamamlama sadece o da değişken adları, komut isimleri, nesne özelliklerini tamamlıyor, dosya sistemi yolları tamamlayarak değil, yazmak üzere olabilecek .ya [da sadece ucunda bir yol ayırıcısı ekleyemezsiniz böylece, bir özellik veya dizin erişmek için. Tam olarak hangi PowerShell wget? Hangi PowerShell POSIX? GNU araçlarını Windows'a getirmeye veya bash uyumlu btw olmaya çalışmıyor.
TessellatingHeckler

Evet, bash olmaya çalışmadığını biliyorum. Orijinal yazıda bunu söylemekten kaçındım. Söyleyebilirim ki w olsun ikili ama hiç yoktur i gücü okumak satın Shell gerekiyordu i hatırlamıyorum :( güç kabuğunda komut POSIX uyumlu olacak şekilde "hangi"
ThorSummoner

5
re: "hayır hangisi" -> (get-command wg*.exe).Path. Re: bash tamamlanması ve taleb -> leeholmes.com/blog/2012/09/13/... giden github.com/lzybkr/PSReadLine
TessellatingHeckler

2

En azından henüz, PowerShell'in gerçekten kalktığını görmedim. Bu nedenle, ekibinizdeki diğerleri zaten bilmediği sürece onu öğrenme çabasına değmeyebilir.

Tahmininiz için, başkalarının geride bırakabileceği bir betik diliyle, bahsettiğiniz gibi Perl veya Ruby veya Python gibi diğerleriyle daha iyi olabilirsiniz.

Bence bunların çoğu ne yapmanız gerektiğine bağlı. Şahsen Python'u kendi kişisel senaryolarım için kullanıyorum, ama asla aktaramayacağım bir şey yazmaya başladığımda biliyorum - bu yüzden çok devrimci bir şey yapmamaya çalışıyorum.


2

Neden her ikisini de kullanmıyorsunuz? Perg gibi yorumlanmış diğer komut dosyaları gibi Cygwin'deki PowerShell komut dosyalarını çağırın.

Bunu yeterince yapmak için https://bitbucket.org/jbianchi/powershell'i bir Bash sarıcısının Cygwin'deki powershell.exe'yi çağırması için yazdım . Bu bir olarak kullanılabilir shebang bir powershell.exe .ps1 senaryonun ilk satırı olarak (PowerShell da bir yorum olarak "#" kullanan beri). Örnekler için bkz. Https://bitbucket.org/jbianchi/powershell/wiki/Ana sayfa


1

Birkaç satırda Cygwin ve PowerShell farklı araçlardır, ancak Cygwin yüklüyse Cygwin yürütülebilir dosyalarını bir PowerShell oturumu içinde çalıştırabilirsiniz. PowerShell'e artık alıştım, artık grep, sıralama, awk vb.

Kendimi kullandığım ana araç ssh.exe, ancak bir PowerShell oturumu içinde.

Harika çalışıyor.


0

PowerShell programlamanın çabaya değmeyeceğini gördüm.

Unix altında kabuk komut dosyası oluşturma konusunda birkaç yıllık tecrübem var, ancak PowerShell ile her şeyi yapmanın çok zor olduğunu gördüm.

Birçok işlev, Windows Yönetim Arabirimini sorgulamanızı ve ihtiyacınız olan bilgileri elde etmek için SQL benzeri komutlar vermenizi gerektirir.

Örneğin, bir dizin ağacından belirli bir soneki olan tüm dosyaları kaldırmak için bir komut dosyası yazmak istedim . Unix altında bu basit olurdu ...

find . -name \*.xyz -exec rm {} \;

Birkaç saat ile gevezelik sonra Scripting.FileSystemObjectve WScript.Shellve veren '& sürücüye & 'AND Path = '' & SearchFolder & "'", nihayet vazgeçti "Win32_ShortcutFile Sürücü =" SELECT * FROM' ve Windows Explorer'ın için yerleşmiş Arama komuta ve sadece elle yapın. Muhtemelen istediğimi yapmanın bir yolu var, ama açık bir şey görmedim ve MSDN sitesindeki tüm örnekler değersiz olacak kadar önemsizdi.

EDIT Heh, elbette bunu yazdığım anda biraz daha etrafa dürttüm ve eksik olduğumu buldum: -recurseitem kaldır komutunun seçeneği hatalı (eğer kullanırsanız ortaya çıkar get-help remove-item -detailed).

"Remove-item -filter '* .xyz' -recurse" deniyordum ve işe yaramadı, bu yüzden vazgeçtim.

Kullanmanız gerektiği ortaya çıkıyor get-childitem -filter '*.xyz' -recurse | remove-item


16
Sanırım Windows Scripting Host'u (WSH) PowerShell ile karıştırıyorsunuz. Tamamen farklılar.
Erik Funkenbusch

3
Örneğin, .TMN ile biten tüm dosyaları silmek istiyorsanız, bu komutu get-childitem c: \ -include * .TMN -recurse | foreach ($ _) {remove-item $ _. fullname}
Erik Funkenbusch

@ Mystere: Bunu denedim ve işe yaramadı. Biraz heyecan verdikten sonra, * .tmn ihtiyacınız olan şey (sadece .tmn yerine) gibi görünüyor
redtuna

5
Daha fazla saygıyı kabul edemedim ve hiçbir şekilde Windows üyesi değilim. PS'yi senaryo yazmaktan daha kolay buluyorum. PS daha tutarlıdır. Bash ile, çağırdığınız herhangi bir konsol yardımcı programının kendi sözdizimi ve benzersiz davranışı vardır ve bash sözdiziminin kendisi oldukça şifreli. PS, anonim işlevler (scriptblocks), parametre doğrulama, gelişmiş işlevler vb. Gibi dil özellikleriyle çok daha sağlamdır. Ayrıca taşınabilirlik ve diğer birçok özellik için modül kavramları. Temel olarak, en büyük sebep her zaman PS hakkında duyduğunuz şeydir, nesneler metni koz. Bash yine de daha hızlı.
user2233949

0

Https://github.com/skanga/BashWin adresindeki BashWin'i kullanarak Windows'ta Bash komut dosyalarını çalıştırmayı da deneyebilirsiniz .


0

PowerShell, çok güçlü, Unix kabuklarının standart yerleşiklerinden daha güçlüdür (ancak yalnızca alt programlara genellikle dahil edilen işlevselliğin çoğunu içerdiği için). Ayrıca, IronPython , IronRuby , PerlNet, vb.Dahil olmak üzere herhangi bir .NET dilinde uygulama yazabileceğinizi veya Cygwin komutlarınızı PowerShell'den çağırarak tüm ekstra işlevleri yok sayarak düşünebilirsiniz ve Bash, KornShell , ya da her neyse...


Bence Unix mermilerinin tasarım hedeflerini kaçırıyor olabilirsiniz. PowerShell'i çalmak değil (daha fazla bilgi edinmek istiyorum), ancak böyle bir ifade yapmak için Unix araçlarını anlamanız gerekiyor.
Jé Queue

2
@Xepoch - Hayır, sanırım PowerShell'in tasarım hedeflerini kaçırıyorsunuz. PowerShell, Unix kabuklarının yapabilecekleri her şeyi aynı şekilde yapabilir. Ancak, gerçek güç, sadece metin çıktısını ayrıştırmak yerine PS'nin nesne boru sistemini kullandığınızda gelir. PowerShell, tam olarak bash veya korn'ın yapabildiklerini yapabilir, ancak PowerShell'in yapabildiklerini yapamazlar.
Erik Funkenbusch

3
PowerShell'i size bir eleştiri verecek kadar bilmiyorum, ancak Unix mermilerinin hedeflerinin mutlaka dış aletin tamamen kapsamlı bir değiştirilmesi değil, etrafındaki kontrol yapıları olması gerektiği gibi bilmiyorum. Yine şu anda kıyaslayamıyorum ya da kontrast yapamıyorum ama PowerShell'i yükseltiyorum çünkü daha fazla yerleşik var, mutlaka Unix kabuklarının nimeti değil.
Jé Queue

@Xepoch - Mesele şu ki, bunu yapmak istediğiniz yöntemi seçebilirsiniz. Yerleşik kabuğun tüm iyiliğini kullanabilir veya bunu Unix'in yaptığı gibi görmezden gelebilir ve yapabilirsiniz. Bu senin seçimin. Ve seçim iyi, değil mi?
Erik Funkenbusch
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.