Czy PowerShell jest gotowy do zastąpienia mojej powłoki Cygwin w systemie Windows?

Zastanawiam się, czy powinienem nauczyć się PowerShella, czy po prostu trzymać się Cygwin /skryptów Perla/skryptów powłoki Unix, itp.

Zaletą PowerShella byłoby to, że skrypty mogłyby być łatwiej używane przez kolegów z zespołu, którzy nie mają Cygwina; jednak nie wiem, czy naprawdę pisałbym tyle skryptów ogólnego przeznaczenia, czy też ludzie by z nich korzystali.

Skrypty Unixowe są tak potężne, że PowerShell jest wystarczająco blisko, aby nakazać przełączenie?

Oto niektóre z konkretnych rzeczy (lub ich odpowiedników) szukałbym w PowerShell:

  • grep
  • Sortuj
  • uniq
  • Perl (jak bardzo PowerShell zbliża się do możliwości Perla?)
  • AWK
  • sed
  • file (polecenie, które podaje informacje o pliku)
  • itd.
Author: Peter Mortensen, 2009-02-21

18 answers

Narzędzia to tylko narzędzia.
Pomagają albo nie.
Potrzebujesz pomocy albo nie.

Jeśli znasz Uniksa, a te narzędzia robią to, co potrzebujesz, aby zrobić na Windows - To jesteś szczęśliwym facetem i nie ma potrzeby uczyć się PowerShell (chyba, że chcesz eksplorować).

Moim pierwotnym zamiarem było włączenie zestawu narzędzi uniksowych do systemu Windows i zakończenie z nim (wielu z nas w zespole ma głębokie korzenie uniksowe i zdrową dawkę szacunku dla tej społeczności.) Znalazłem to, że to nie pomogło. Powodem tego jest to, że awk / grep / sed nie działają przeciwko COM, WMI, ADSI, rejestrowi, sklepowi cert, itp. Innymi słowy, UNIX jest całym ekosystemem samostrojonym wokół plików tekstowych. Jako takie, narzędzia do przetwarzania tekstu są efektywnymi narzędziami do zarządzania. Windows To zupełnie inny ekosystem samostrojony wokół interfejsów API i obiektów. Dlatego stworzyliśmy PowerShell.

Myślę, że znajdziesz to, że będzie wiele okazji, gdy przetwarzanie tekstu nie da ci tego, co chcesz w systemie Windows. W tym momencie będziesz chciał odebrać PowerShell. Uwaga - nie jest to umowa "wszystko albo nic". W PowerShell możesz wywołać swoje narzędzia uniksowe(i użyć ich procesu tekstowego lub przetwarzania tekstu PowerShell). Możesz również wywołać PowerShell z narzędzi Unix i uzyskać tekst.

Ponownie-nie ma tu religii - skupiamy się na dostarczaniu narzędzi potrzebnych do osiągnięcia sukcesu. Dlatego tak pasjonują nas opinie zwrotne. Let us dowiedz się, gdzie upadamy w pracy lub gdzie nie masz narzędzia, którego potrzebujesz, a my umieścimy go na liście i przejdziemy do niego. Szczerze mówiąc, wykopujemy się z 30-letniej dziury, więc trochę to potrwa. To powiedziawszy, jeśli wybierzesz wersję beta Windows Server 2008 /R2 i / lub wersję beta naszych produktów serwerowych, myślę, że będziesz zszokowany tym, jak szybko Ta dziura zostanie wypełniona.

W odniesieniu do użytkowania-do tej pory mieliśmy > 3,5 miliona pobrań. To prawda. Nie uwzględniaj osób używających go w systemie Windows Server 2008, ponieważ jest on dołączony jako opcjonalny komponent i nie wymaga pobierania. Wersja 2 zostanie dostarczona we wszystkich wersjach systemu Windows. Będzie on domyślnie włączony dla wszystkich edycji z wyjątkiem Server core, gdzie jest opcjonalnym komponentem. Wkrótce po premierze systemu Windows 7 / Windows Server 2008 R2 udostępnimy V2 na wszystkich platformach XP i wyższych. Innymi słowy-twoja inwestycja w naukę będzie miała zastosowanie do bardzo dużej liczby maszyny / środowiska.

Ostatni komentarz. Jeśli zaczniesz uczyć się PowerShell, myślę, że będziesz całkiem szczęśliwy. Duża część projektu jest pod silnym wpływem naszego środowiska uniksowego, więc chociaż jesteśmy całkiem różni, bardzo szybko go odbierzesz(po tym, jak przestaniesz przeklinać, że to nie jest Unix : -)). Wiemy, że ludzie mają bardzo ograniczony budżet na naukę - dlatego bardzo zależy nam na konsekwencjach. Nauczysz się czegoś, a potem będziesz go używać w kółko i jeszcze raz.

Eksperyment! Smacznego! Atakować!

 753
Author: Jeffrey Snover - MSFT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-30 16:18:14

Grep

Select-String cmdlet i operator -match pracują z wyrażeniami regularnymi. Możesz również bezpośrednio skorzystać z obsługi regex. NET dla bardziej zaawansowanych funkcji.

Sortuj

Sort-Object jest potężniejsza (niż pamiętam * nix sort). Umożliwienie wielopoziomowego sortowania na dowolnych wyrażeniach. Tutaj pomaga konserwacja typu bazowego PSH; np. właściwość DateTime zostanie posortowana jako DateTime bez konieczności zapewnienia formatowania do sortowalnego format.

Uniq

Select-Object -Unique

Perl (jak bardzo PowerShell zbliża się do możliwości Perla?)

Jeśli chodzi o szerokość bibliotek obsługujących domeny Perla: nowhere close (yet).

W przypadku ogólnego programowania PSH jest z pewnością bardziej spójne i spójne oraz łatwiejsze do rozszerzenia. Jedyna luka dla mungingu tekstu jest czymś równoważnym operatorowi .. Perla.

Awk

To było dawno dość od używania awk (musi być >18 lat, bo później właśnie używałem Perla), więc nie mogę tego komentować.

Sed

[patrz wyżej]

File (polecenie, które podaje informacje o pliku)

Siła PSH nie tyle może zrobić z obiektami systemu plików (i pobiera tutaj pełne informacje, dir zwraca FileInfo lub FolderInfo odpowiednio obiekty), to cały model provider.

Możesz traktować rejestr, certyfikat store, SQL Server, IE ' s RSS cache itp. jako przestrzeń obiektu, którą można nawigować za pomocą tych samych cmdletów co system plików.


PSH jest zdecydowanie drogą naprzód w systemie Windows. Państwa członkowskie uczyniły to częścią swoich wymagań dotyczących przyszłych produktów innych niż domowe. Stąd bogate wsparcie w Exchange, wsparcie w SQL Server, to tylko się rozszerzy.

[[12]}ostatnim tego przykładem jest TFS PowerToys. Wiele operacji klienta TFS odbywa się bez konieczności uruchamiania tf.exe za każdym razem (co wymaga nowego TFS połączenie z serwerem itp.) i jest znacznie łatwiejszy do dalszego przetwarzania danych. Jak również umożliwienie szerokiego dostępu do całego interfejsu klienta TFS w sposób bardziej szczegółowy niż w obu Eksploratorach TF.exe.
 116
Author: Richard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-24 03:03:40

Jako ktoś, kto w latach 1997-2010 koncentrował się na rozwoju Windows enterprise, oczywistą odpowiedzią byłoby Powershell ze wszystkich dobrych powodów podanych powyżej (np. jest to część strategii korporacyjnej MS; dobrze integruje się z Windows / COM/. NET; a używanie obiektów zamiast plików zapewnia "bogatszy" model kodowania). Z tego powodu używałem i promowałem Powershell przez ostatnie 2 lata, z wyraźnym przekonaniem, że podążałem za "słowem Billa"."

Jednak jako pragmatyku nie jestem już pewien, czy Powershell jest tak świetną odpowiedzią. Chociaż jest to doskonałe narzędzie Windows i stanowi bardzo potrzebny krok w kierunku wypełnienia historycznej dziury, jaką jest linia poleceń okna, ponieważ wszyscy obserwujemy chwyt MS na poślizgu komputerów konsumenckich, wydaje się coraz bardziej prawdopodobne, że MS ma przed sobą ogromną bitwę, aby utrzymać jego system operacyjny jako ważny dla przedsiębiorstwa przyszłości.

Rzeczywiście, biorąc pod uwagę, że moja praca jest coraz bardziej w heterogenicznych środowiskach, uważam, że jest o wiele bardziej przydatna aby korzystać ze skryptów bash w tej chwili, ponieważ działają nie tylko na Linuksie, Solarisie i Mac OS X, ale również działają-z pomocą Cygwin - na Windows.

Więc jeśli kupujesz przekonanie, że przyszłość systemu operacyjnego jest utowarowana, a nie zmonopolizowana, to wydaje się sensowne, aby zdecydować się na zwinną strategię narzędzi programistycznych, która trzyma się z dala od narzędzi zastrzeżonych tam, gdzie jest to możliwe. Jeśli jednak widzisz, że twoja przyszłość jest zdominowana przez wszystko, co jest Redmond, wybierz Powershell.

 56
Author: Ubiguchi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-07 17:12:23

Użyłem trochę PowerShell do automatyzacji skryptów. Chociaż jest to bardzo miłe, że środowisko wydaje się być znacznie bardziej przemyślane niż powłoki Uniksa, w praktyce użycie obiektów zamiast strumieni tekstowych jest o wiele bardziej niezgrabne, a wiele udogodnień uniksowych, które zostały opracowane w ciągu ostatnich 30 lat, nadal brakuje.

Cygwin jest nadal moim środowiskiem skryptowym z wyboru dla hostów Windows. To z pewnością przebija alternatywy pod względem załatwiania spraw.

 32
Author: Daishiman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-11 22:07:14

Wiele wspaniałych, wspaniałych odpowiedzi, oto moje zdanie. PS jest gotowy, jeśli jesteś... Przykład

Grep = " Select-String-Pattern "

Sort = "Sort-Object"

Uniq = "Get-Unique "

File = "Get-Item "

Cat = "Get-Content "

Perl / Awk / Sed nie są poleceniami, ale narzędziami, więc trudno je porównać, ale w Powershell można zrobić prawie wszystko.

 14
Author: Vic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-17 08:22:32

Od niedawna zajmuję się PS z każdym stopniem powagi. Chociaż przez ostatnie siedem lat pracowałem w prawie wyłącznie środowisku opartym na systemie Windows, pochodzę z środowiska uniksowego i nieustannie próbuję "Unix-fy" mojego doświadczenia interakcji w systemie Windows. To frustrujące.

Można porównać PS do czegoś takiego jak Bash, tcsh lub zsh ponieważ narzędzia takie jak grep, sed, awk, znajdź itd. nie są, ściśle mówiąc, częścią powłoki; zawsze jednak będą częścią każdego środowiska uniksowego. To powiedziawszy, polecenie PS takie jak Select-String ma bardzo podobną funkcję do grep i jest dołączone jako moduł podstawowy w PS ... więc linie mogą być trochę rozmyte.

Myślę, że kluczową rzeczą jest kultura , a fakt, że odpowiednie zestawy narzędzi ucieleśnią swoje odpowiednie Kultury:

  • Unix to kultura oparta na plikach , (ogólnie, non Unicode) oparta na tekście . Pliki konfiguracyjne są prawie wyłącznie plikami tekstowymi. Z drugiej strony System Windows zawsze był znacznie bardziej ustrukturyzowany pod względem formatów konfiguracji-konfiguracje są zazwyczaj przechowywane w zastrzeżonych bazach danych (np. rejestrze systemu Windows), które wymagają specjalistycznych narzędzi do zarządzania nimi.
  • Administracja Uniksa (i, dla wiele lat, rozwój) interfejs tradycyjnie był wierszem poleceń i wirtualnym terminalem. Windows zaczynał jako GUI, a funkcje administracyjne dopiero niedawno zaczęły odchodzić od bycia wyłącznie opartym na GUI. Możemy spodziewać się, że doświadczenie Uniksa w wierszu poleceń będzie bogatsze, bardziej dojrzałe, biorąc pod uwagę znaczącą przewagę, jaką ma na PS , a moje doświadczenie pasuje do tego. Na ten temat, z mojego doświadczenia:

    • The Unix administrative doświadczenie jest nastawione na ułatwianie rzeczy przy minimalnej liczbie uderzeń klawiszy; prawdopodobnie wynika to z historycznej sytuacji konieczności administrowania serwerem przez powolne połączenie dial-up 9600 baud. Teraz PS ma aliasy, które znacznie ułatwiają poruszanie się po standardowym czasownik-rzeczownik, ale poznanie tych aliasów jest trochę bolesne (ktoś zna coś lepszego niż: alias | where {$_.ResolvedCommandName -eq "<command>"}?).

      Przykład bogatego sposobu, w jaki historia może być manipulowana:

      iptables polecenia są często przeciągane i powtarzanie ich z niewielkimi różnicami byłoby uciążliwe, gdyby nie jedna z wielu ciekawych funkcji manipulacji historią wbudowanych w Bash , więc wstawianie reguły iptables jak poniżej:

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

      Drugi raz dla innej kamery ("camera-2"), jest tylko przypadkiem Wydania:

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

      Co oznacza " wykonaj poprzednią komendę, ale zastąp -1- przez -2- i 50 z 51.

    • Uniksowe doświadczenie jest zoptymalizowane pod kątem Typerów dotykowych; można praktycznie zrobić wszystko bez wychodzenia z pozycji" domu". Na przykład, w Bash, używając Emacs (Tak, Bash obsługuje również vi), przełączanie historii odbywa się za pomocą Ctrl-P i Ctrl-N podczas przechodzenia do początku i końca linii odbywa się za pomocą Ctrl-A i Ctrl-e odpowiednio ... i to na pewno nie koniec. Spróbuj nawet najprostszej nawigacji w konsoli PS bez ruszania się z pozycji głównej i masz kłopoty.

    • proste rzeczy, takie jak wszechstronne stronicowanie (Ala less) na Unixie, wydają się nie być dostępne od ręki w PS, co jest trochę frustrujące, a bogate doświadczenie edytorskie również nie istnieje. Oczywiście zawsze można pobrać narzędzia innych firm, które wypełnią te luki, ale na pewno byłoby miło, gdyby te rzeczy były po prostu "tam", jakby były na prawie każdym smaku Uniksa.
  • Kultura Windows, przynajmniej jeśli chodzi o API systemowe, jest w dużej mierze oparta na frameworkach wspierających, mianowicie., COM i . NET , które są wysoce ustrukturyzowane i oparte na obiektach. Z drugiej strony, dostęp do uniksowych API był tradycyjnie przez interfejs plików (/dev i /proc) lub (nie obiektowe) wywołania bibliotek w stylu C. Nic więc dziwnego, że doświadczenia Skryptowe pasują do ich paradygmatów OS. PS jest z natury uporządkowany (wszystko jest obiektem) i Bash - i-przyjaciele-oparty na plikach. Ustrukturyzowane API, które jest do dyspozycji programisty PS jest ogromne (zasadniczo pasujące do ogromu istniejącego zestawu standardowych interfejsów COM i. NET).

W skrócie, chociaż możliwości Skryptowe PS {[13] } są prawdopodobnie potężniejsze niż Bash (zwłaszcza gdy biorąc pod uwagę dostępność. NET BCL), doświadczenie interactive jest znacznie słabsze, szczególnie jeśli podchodzisz do niego z całkowicie sterowanej klawiaturą, opartej na konsoli perspektywy (jak wiele uniksowych głowic).

 13
Author: Eric Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-28 13:21:58

Nie jestem zbyt doświadczonym użytkownikiem PowerShell, ale trochę tego, na co byłem narażony, zrobiło na mnie ogromne wrażenie. Możesz połączyć wbudowane cmdlety ze sobą, aby zrobić prawie wszystko, co możesz zrobić w monicie Uniksa, i jest kilka dodatkowych zalet dla robienia rzeczy, takich jak eksportowanie do CSV, tabel HTML i bardziej szczegółowych typów zadań sys-admin. A jeśli naprawdę potrzebujesz czegoś takiego jak sed, zawsze jest UnixUtils lub GnuWin32 , który można zintegrować z Powershell dość łatwo.

Jako wieloletni użytkownik Uniksa, miałem jednak trochę problemów z przyzwyczajeniem się do schematu nazewnictwa poleceń i na pewno skorzystałbym z niego bardziej, gdybym znał więcej .NET.

Więc zasadniczo, mówię, że warto się tego nauczyć, jeśli tylko Windows nie stanowi problemu.

 8
Author: yalestar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-21 20:05:17

Jeśli lubisz Skrypty shell, pokochasz PowerShell!

Zacznij od wycieczka z przewodnikiem po powłoce poleceń Microsoft (Ars Technica).

 7
Author: Nick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-11 22:08:05

Porównując PowerShell z kombinacją Cygwin / Perl / Shell, należy pamiętać, że PowerShell reprezentuje tylko "Shell" część tej kombinacji.

Możesz jednak wywołać dowolne polecenie z PowerShell tak samo jak z cmd.exe czy Cygwin. NIE ponownie implementuje określone funkcje i z pewnością nie jest porównywalna z Perlem.

To" tylko " powłoka, ale ułatwia programowanie, zapewniając wygodny interfejs do świata. Net.

Również zachować należy pamiętać, że PowerShell wymaga WinXP, Srv2003 lub wyższej, co może stanowić problem w zależności od infrastruktury IT.

Update:

Nie miałem pojęcia, jaki rodzaj filozoficznej debaty wywoła moja odpowiedź.

Swoją odpowiedź zamieściłem w kontekście pytania: Porównaj PowerShell do Cygwina, Perla i Basha.

PowerShell jest powłoką, ponieważ nie robi różnicy w składni między wbudowanymi poleceniami, poleceniami, funkcjami użytkownika i zewnętrznymi poleceniami (.exe,bat, .cmd). Tylko wywołanie metod. Net różni się dodaniem przestrzeni nazw lub obiektu w wywołaniu.

Jego programowalność wywodzi się z.Net framework, a nie z niczego specyficznego dla "języka"PowerShell.

Powiedziałbym, że PowerShell jest "językiem skryptowym", gdy tylko Bugzilla lub MediaWiki zostaną zaimplementowane jako skrypty PowerShell działające na serwerze WWW;)

Do tego czasu ciesz się porównaniami .

 6
Author: devio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-22 11:44:29

Ponieważ moje ostatnie eksperymenty doprowadziły mnie do głębi PowerShell i. NET wywołań, muszę powiedzieć, że Powershell może zastąpić Cygwin i uniksową powłokę. Nie jestem pewien co do Perla, ale ponieważ zarówno Powershell, jak i Perl są Turing kompletne jako języki programowania, daję to jako tak dla zastąpienia Perla również. Jedną z rzeczy, które Powershell ma powyżej Cygwina i zwykłego Basha pod *nix, jest jego zdolność do wykonywania wywołań piaskownicy DLL, manipulowania systemem operacyjnym poprzez bezpośrednie wywołania API, metody WMI i nawet obiekty COM. Co powiesz na uruchomienie IE za pomocą kodu, a następnie zrobienie co chcesz z wyświetlanym dokumentem, skutecznie emulując back-end dla serwera www? Jak o zbieranie danych z serwerów SQL i innych dostawców danych, parsować je i eksportować jako CSV, wiadomości e-mail, tekst i faktycznie wszelkiego rodzaju istniejących i nieistniejących formatów plików? (Oczywiście z odpowiednimi umiejętnościami tworzenia poprawnego pliku z otrzymanych danych, ale CSV są łatwo dostępne) i istnieje dodatkowe zabezpieczenie dostępne za pośrednictwem podpisane cmdlety i skrypty, Zasady grup i zasady wykonywania, które pomagają zapobiegać uruchamianiu złośliwych kodów w systemie, nawet jeśli uruchamiasz je jako administrator.

O tym, jakie polecenia są implementowane - odpowiedź Richarda wymienia je i możliwości emulacji ich funkcjonalności już w Powershell.

O tym, czy Powershell jest silny, aby nakazać przełączenie-jest to bardziej kwestia osobistych preferencji, chociaż jako że coraz więcej usług Windows zapewnia Cmdlety Powershell do ich kontrolowania, nieużywanie Powershell z tymi usługami jest uważane za przeszkodę. (Hyper-V server jest podstawową taką usługą, zapewnia również możliwość zrobienia więcej z cmdletami Powershell niż z GUI!)

Prawdopodobnie ta odpowiedź spóźnia się pięć lat, ale mimo to, jeśli ktoś wykonuje zadania administracyjne lub ogólne Skrypty różnych rzeczy na Windows, powinien zdecydowanie spróbować wykorzystać Powershell do swoich celów.

 6
Author: Vesper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-17 20:25:17

TL; DR -- nie nienawidzę Windows lub Powershell po prostu nie mogę zrobić cokolwiek w windows lub na Powershell.


[7]}osobiście nadal uważam powershell za rozczarowujący.
  • uzupełnianie kart ścieżek katalogów nie jest złożone, co wymaga od użytkownika wprowadzenia separatora ścieżek po każdym uzupełnieniu nazwy.
  • nadal czuję, że windows nie ma nawet pojęcia ścieżki lub co to jest ścieżka, bez dostępnego wskaźnika home użytkownika ~/ brakuje niektórych @environment://somejibberish/%user_home%
  • NTFS jest nadal bałagan i pozornie zawsze będzie, powodzenia nawigacji.

  • Cmd-esque interface, dinozaur cmd.exe jest nadal widoczny w Powershell, edit->mark nadal jest jedynym sposobem kopiowania informacji i kopiowania tylko w postaci prostokątnych bloków widocznej przestrzeni terminala. i edit->paste nadal jest jedynym sposobem na wklejenie ciągów do terminala.

  • Pomalowanie go na niebiesko nie czyni go bardziej atrakcyjnym. Nie mam nic przeciwko MS developers ma smak koloru.

  • System Windows zawsze otwiera się w lewym górnym rogu ekranu, dla kogoś, kto używa pionowych pasków zadań, jest to niezwykle denerwujące, zwłaszcza biorąc pod uwagę, że pasek zadań systemu Windows obejmie jedyny róg okna, który daje dostęp do funkcji kopiowania / wklejania.

Nie mogę mówić zbyt wiele na podstawie okna narzędzi obejmuje. Ponieważ istnieje cały zestaw open-source, swobodnie licencjonowanych narzędzi cli i statków powershell z tego, co wiem, żaden z nich nie jest całkowitym rozczarowaniem.

  • powershell wget przyjmuje pozornie nieporównywalne argumenty do gnu wget, dzięki glimmer of hope-bezużyteczne.
  • PowerShell posix nie jest kompatybilny z bash, szczególnie operator && nie jest obsługiwany, co sprawia, że najprostsze polecenie warunkowe nie jest wykonywane.

Nie wiem Stary, dałem mu szansę, naprawdę zrobiłem; nadal staram się dać mu szansę w nadziei, że następnym razem otworzę go będzie mniej bezużyteczny. Nie mogę nic zrobić w powershell, a Mogę zrobić coś z prawdziwym projektem, aby wprowadzić narzędzia gnu do Windows.

MySysGit dał mi cmd dinozaura.exe prompt z kilkoma narzędziami gnu, nadal bardzo rozczarowujący, ale w końcu Ukończenie ścieżki działa. i polecenie git będzie uruchamiane w gitBash

Mintty dla Myysgit daje interfejs Cygwin nad środowiskiem myysgit, co sprawia, że Kopiuj i wklej coś. (select to copy (mysz), shift+ins do wklejenia, jak nowoczesne...) jednak rzeczy takie jak git push są zepsute w miętowym.

Nie chcę narzekać, ale nadal widzę ogromne problemy z użytecznością wiersza poleceń w systemie windows, nawet biorąc pod uwagę narzędzia takie jak Cygwin.


P. S. tylko dlatego, że coś Może być zrobione w powershell, nie rób tego użytecznego , użyteczność jest głębsza niż zdolność i to jest to, na czym zwykle skupiam się próbując użyć produktu jako konsumenta.

 4
Author: ThorSummoner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-26 23:36:46

Cmdlety w powershell są bardzo ładne i działają niezawodnie. Ich orientacja obiektowa przemawia do mnie bardzo, ponieważ jestem programistą java / C#, ale wcale nie jest to kompletny zestaw. Ponieważ jest zorientowany obiektowo, pomija wiele dojrzałości strumienia tekstowego zestawu narzędzi POSIX (awk i sed).

Najlepszą odpowiedzią jaką znalazłem na dylemat kochania technik OO i kochania dojrzałości w narzędziach POSIX jest używanie obu! Jednym z najważniejszych aspektów Powershell jest że wykonuje doskonałą pracę orurowania obiektów do standardowych strumieni. Powershell domyślnie używa potoku obiektów do transportu swoich obiektów. Nie są to standardowe strumienie (standardowe wyjście, standardowy błąd i standardowe wejście). Gdy Powershell musi przekazać dane wyjściowe do standardowego procesu, który nie ma potoku obiektów, najpierw konwertuje obiekty do strumienia tekstowego. Ponieważ robi to tak dobrze, Powershell jest doskonałym miejscem do hostowania narzędzi POSIX!

Najlepszym zestawem narzędzi POSIX jest GnuWin32 Instalacja zajmuje więcej niż 5 sekund, ale warto się kłopotać i z tego co wiem, nie modyfikuje systemu (rejestru, folderów c:\windows\* itp.) z wyjątkiem kopiowania plików do podanych przez Ciebie katalogów. Jest to bardzo miłe, ponieważ jeśli umieścisz narzędzia w udostępnionym katalogu, Wiele osób może uzyskać do nich dostęp jednocześnie.

Instrukcja Instalacji GnuWin32

Pobierz i uruchom exe (pochodzi z SourceForge site ) wskazując go do odpowiedniego katalogu (będę używał c:\bin). Utworzy tam katalog GetGnuWin32, w którym uruchomisz download.bat, a następnie install.bat (bez parametrów), po czym pojawi się katalog c:\bin\GetGnuWin32\gnuwin32\bin, który jest najbardziej użytecznym folderem, jaki kiedykolwiek istniał na komputerze z systemem Windows. Dodaj ten katalog do swojej ścieżki i jesteś gotowy do pracy.

 3
Author: Limited Atonement,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-26 14:52:45

Nie widziałem, żeby Powershell naprawdę wystartował, przynajmniej jeszcze nie. Więc może nie być warte wysiłku uczenia się tego, chyba że inni z twojego zespołu już o tym wiedzą.

Dla Twojego kłopotu może być lepiej z językiem skryptowym, który inni mogą mieć za sobą, Perl jak wspomniałeś, lub inne, takie jak Ruby lub Python.

Myślę, że wiele zależy od tego, co musisz zrobić. Osobiście używam Pythona do własnych skryptów, ale wiem, kiedy zacznij pisać coś, czego nigdy nie będę w stanie przekazać - więc staram się nie robić niczego zbyt Rewolucyjnego.

 2
Author: greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-21 20:12:20

Dlaczego nie użyć obu? Wywołanie skryptów PowerShell w Cygwinie, tak jak innych skryptów interpretowanych jak perl, itp.

Robię to na tyle, że napisałem https://bitbucket.org/jbianchi/powershell dla wrappera bash do wywołania powershell.exe w Cygwinie. Może być używany jako Shebang jako pierwsza linia powershell.skrypt exe. ps1 (ponieważ powershell używa również " # " jako komentarza). Zobacz https://bitbucket.org/jbianchi/powershell/wiki/Home for examples

 2
Author: johnnyB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-25 17:01:16

PowerShell jest bardzo wydajny, bardziej wydajny niż standardowe wbudowane powłoki Uniksa (ale tylko dlatego, że zawiera wiele funkcji, które zwykle są podzielone na podprogramy). Należy również pamiętać, że można pisać aplety w dowolnym języku. NET, w tym IronPython, IronRuby, PerlNet, itp.. możesz też po prostu wywołać polecenia cygwin z PowerShell, ignorując wszystkie dodatkowe funkcje i będzie działać podobnie do bash, korn, lub cokolwiek innego...

 1
Author: Erik Funkenbusch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-22 03:22:23

W kilku wierszach, Cygwin i Powershell są różnymi narzędziami, jednak jeśli masz zainstalowany Cygwin, możesz uruchomić pliki wykonywalne Cygwin w sesji Powershell. Tak się przyzwyczaiłem do PowerShella, że teraz nie używam już grep, sort, awk itp. Istnieje wiele wbudowanych alternatyw w Powershell, a jeśli nie, możesz znaleźć tam cmdlet.

Głównym narzędziem, którego używam, jest ssh.exe, ale w ramach sesji Powershell.

Działa świetnie.

 1
Author: yaxzone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-10 09:31:25

Możesz również spróbować uruchomić skrypty Bash w systemie windows używając BashWin w https://github.com/skanga/BashWin

 -1
Author: skanga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-13 17:06:47

Uznałem, że programowanie PowerShell nie jest warte wysiłku.

Mam kilkuletnie doświadczenie w pisaniu skryptów w powłoce pod Unixem, ale bardzo trudno było mi cokolwiek zrobić z Powershellem.

Wydaje się, że wiele funkcji wymaga przesłuchiwania interfejsu zarządzania Windows i wydawania poleceń podobnych do SQL, aby uzyskać potrzebne informacje.

Na przykład, chciałem napisać skrypt usunąć wszystkie pliki z określonym sufiksem z drzewo katalogów. pod Unixem byłoby to proste ...

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

Po kilku godzinach wygłupiania się z Scripting.FileSystemObject i WScript.Shell i wydawania " SELECT * FROM Win32_ShortcutFile, gdzie Drive = '" & drive & "'I Path = '" & searchFolder&"'", w końcu zrezygnowałem i zdecydowałem się na polecenie Eksploratora Windows Search i po prostu zrobiłem to ręcznie. Pewnie jest jakiś sposób na zrobienie tego, co chciałem, ale nie widziałem nic oczywistego, a wszystkie przykłady na stronie MSDN były tak trywialne, że bądź bezwartościowy.

EDIT Heh, oczywiście jak tylko to napisałem, poszperałem trochę więcej i znalazłem to, czego mi brakowało: opcja -recurse polecenia Usuń-element jest wadliwa(ujawniona, jeśli używasz get-help remove-item -detailed).

Próbowałem "Usuń-element-filtr"*.xyz '- recurse " i nie działało, więc zrezygnowałem z tego.

Okazuje się, że musisz użyć get-childitem -filter '*.xyz' -recurse | remove-item

 -1
Author: TMN,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-11 21:46:34