Zastanawiam się, czy powinienem nauczyć się PowerShell, czy po prostu trzymać się skryptów Cygwin / Perl / skryptów powłoki Unix itp.
Zaletą PowerShell byłoby to, że skrypty mogłyby być łatwiej używane przez członków drużyny, którzy nie mają Cygwina; nie wiem jednak, czy naprawdę pisałbym tyle skryptów ogólnego przeznaczenia, czy ludzie mogliby ich nawet używać.
Skrypty uniksowe są tak potężne, czy PowerShell jest wystarczająco blisko, aby uzasadnić przełączenie?
Oto niektóre z konkretnych rzeczy (lub odpowiedników), których chciałbym szukać w PowerShell:
unix
shell
powershell
Andy White
źródło
źródło
Odpowiedzi:
Narzędzia to tylko narzędzia.
Pomagają lub nie pomagają.
Potrzebujesz pomocy lub nie.
Jeśli wiesz, że Unix i te narzędzia robią to, co musisz, aby zrobić w systemie Windows - jesteś szczęśliwym facetem i nie musisz uczyć się programu PowerShell (chyba że chcesz eksplorować).
Moim pierwotnym zamiarem było dołączenie zestawu narzędzi uniksowych do systemu Windows i załatwienie go (wielu z nas w zespole ma głębokie doświadczenie w Uniksie i zdrową dawkę szacunku dla tej społeczności).
Odkryłem, że to niewiele pomogło. Powodem tego jest to, że AWK / grep / sed nie działają z COM , WMI , ADSI , rejestrem, magazynem certyfikatów itp. Itp.
Innymi słowy, UNIX jest całym ekosystemem, który sam dostosowuje się do plików tekstowych. Jako takie, narzędzia do przetwarzania tekstu są skutecznie narzędziami do zarządzania. Windows to zupełnie inny ekosystem, dostrajający się wokół interfejsów API i obiektów. Właśnie dlatego wymyśliliśmy PowerShell.
Myślę, że przekonasz się, że będzie wiele okazji, gdy przetwarzanie tekstu nie zapewni Ci tego, czego chcesz w systemie Windows. W tym momencie będziesz chciał wybrać PowerShell. UWAGA - nie jest to umowa typu wszystko albo nic. W programie PowerShell możesz wywoływać narzędzia uniksowe (i korzystać z ich procesu tekstowego lub przetwarzania tekstu PowerShell). Możesz także wywołać PowerShell z narzędzi uniksowych i uzyskać tekst.
Ponownie - nie ma tu religii - skupiamy się na dostarczeniu narzędzi potrzebnych do odniesienia sukcesu. Dlatego tak bardzo pasjonujemy się opiniami. Poinformuj nas, gdzie spadamy w pracy lub gdzie nie masz potrzebnego narzędzia, a my umieścimy je na liście i przejdziemy do niego.
Szczerze mówiąc, wykopujemy się z 30-letniej dziury, więc to zajmie trochę czasu. To powiedziawszy, jeśli podniesiesz wersję beta systemu Windows Server 2008 / R2 i / lub bety naszych produktów serwerowych, myślę, że będziesz zaskoczony, jak szybko zapełni się tę dziurę.
Jeśli chodzi o użytkowanie - do tej pory mieliśmy ponad 3,5 miliona pobrań. Nie obejmuje to osób korzystających z niego w systemie Windows Server 2008, ponieważ jest on zawarty jako składnik opcjonalny i nie wymaga pobierania.
Wersja 2 zostanie dostarczona we wszystkich wersjach systemu Windows. Będzie domyślnie włączony we wszystkich wersjach oprócz Server core, gdzie jest to składnik opcjonalny. Wkrótce po dostarczeniu systemu Windows 7 / Windows Server 2008 R2 udostępnimy wersję V2 na wszystkich platformach, Windows XP i nowszych. Innymi słowy - Twoja inwestycja w naukę będzie miała zastosowanie do bardzo dużej liczby maszyn / środowisk.
Ostatni komentarz. Jeśli zaczniesz uczyć się programu PowerShell, myślę, że będziesz bardzo szczęśliwy. Wiele projektów jest pod silnym wpływem naszych uniksowych środowisk, więc chociaż jesteśmy zupełnie inni, bardzo szybko je odbierzesz (po tym, jak przestaniesz gadać, że to nie jest Unix :-)).
Wiemy, że ludzie mają bardzo ograniczony budżet na naukę - dlatego bardzo zależy nam na spójności. Nauczysz się czegoś, a potem będziesz go używać w kółko.
Eksperyment! Cieszyć się! Angażować!
źródło
tar -c . | gzip > package.tar.gz
bezpośrednio w PowerShell, bo inaczej będziesz cierpieć. Patrz brianreiter.org/2010/01/29/…Select-String
polecenia cmdlet i-match
operator działają z wyrażeniami regularnymi. Możesz także bezpośrednio skorzystać z obsługi wyrażeń regularnych .NET dla bardziej zaawansowanych funkcji.Sort-Object
jest mocniejszy (niż pamiętam * nixsort
). Zezwalanie na wielopoziomowe sortowanie według dowolnych wyrażeń. Tutaj pomaga utrzymanie podstawowego typu programu PowerShell; np.DateTime
właściwość zostanie posortowana jakoDateTime
nie wymagająca formatowania do formatu sortowalnego.Select-Object -Unique
Pod względem szerokiego zakresu bibliotek wsparcia specyficznych dla domeny: nigdzie blisko (jeszcze).
W przypadku ogólnego programowania PowerShell jest z pewnością bardziej spójny i spójny oraz łatwiejszy do rozszerzenia. Jedyną luką w mungowaniu tekstu jest coś równoważnego
..
operatorowi Perla .Minęło już wystarczająco dużo czasu od używania AWK (musi to być> 18 lat, ponieważ później użyłem Perla), więc nie mogę tak naprawdę komentować.
[Patrz wyżej]
Siła PowerShell tutaj nie tyle z tego, co może zrobić z obiektami systemu plików (i dostaje pełne informacje tutaj,
dir
zwracaFileInfo
lubFolderInfo
obiektów, odpowiednio) jest to, że jest to cały model dostawcy.Rejestr, magazyn certyfikatów, SQL Server, pamięć podręczną RSS programu Internet Explorer itp. Można traktować jako przestrzeń obiektową, w której można nawigować za pomocą tych samych poleceń cmdlet, co system plików.
PowerShell jest zdecydowanie krokiem naprzód w systemie Windows. Microsoft uwzględnił to w swoich wymaganiach dotyczących przyszłych produktów innych niż domowe. Stąd bogate wsparcie w Exchange, wsparcie w SQL Server. To się tylko rozszerzy.
Ostatnim przykładem tego jest TFS PowerToys. Wiele operacji klienta TFS odbywa się bez konieczności uruchamiania tf.exe za każdym razem (co wymaga nowego połączenia z serwerem TFS itp.) I jest znacznie łatwiejsze do dalszego przetwarzania danych. Pozwala także na szeroki dostęp do całego interfejsu API klienta TFS z większą szczegółowością niż ujawniona w jednym z Eksploratorów Team of TF.exe.
źródło
sed 's/pattern/replacement/' file
które jest z grubszagc file | %{$_ -replace 'pattern','replacement'}
i podobnie dla awk:awk 'BEGIN {} /pat1/ {action1} /pat2/ {action2} END {}' file
jest z grubsza{BEGIN {}; switch -r -c -file file { 'pat1' {action1} 'pat2' {action2}}; END{};}
Jako osoba, której kariera koncentrowała się na rozwoju systemu Windows w latach 1997–2010, oczywistą odpowiedzią byłby PowerShell z wszystkich podanych wcześniej dobrych powodów (np. Jest częścią strategii korporacyjnej Microsoft; dobrze integruje się z Windows / COM / .NET; oraz używanie obiektów zamiast plików zapewnia „bogatszy” model kodowania). Z tego powodu używałem i promowałem PowerShell przez ostatnie dwa lata, z wyraźnym przekonaniem, że postępowałem zgodnie ze „Słowem Billa”.
Jednak jako pragmatyk nie jestem już pewien, że PowerShell jest tak świetną odpowiedzią. Chociaż jest to doskonałe narzędzie systemu Windows i stanowi bardzo potrzebny krok w kierunku wypełnienia historycznej dziury, jaką jest wiersz poleceń systemu Windows, ponieważ wszyscy obserwujemy, jak Microsoft trzyma się poślizgu obliczeń konsumenckich, wydaje się coraz bardziej prawdopodobne, że Microsoft ma przed sobą ogromną bitwę o utrzymanie swojego systemu operacyjnego jako ważne dla przyszłości.
Rzeczywiście, biorąc pod uwagę, że moja praca jest coraz bardziej w środowiskach heterogenicznych, uważam, że o wiele bardziej przydatne jest używanie skryptów Bash w tej chwili, ponieważ działają one nie tylko w systemie Linux, Solaris i Mac OS X, ale działają również z pomoc Cygwin - w systemie Windows.
Jeśli więc wierzysz, że przyszłość systemu operacyjnego jest utowarowiona, a nie zmonopolizowana, wydaje się sensowne, aby wybrać zwinną strategię narzędzi programistycznych, która w miarę możliwości trzyma się z dala od zastrzeżonych narzędzi. Jeśli jednak widzisz swoją przyszłość zdominowaną przez wszystko to, co jest Redmond, wybierz PowerShell.
źródło
Użyłem trochę PowerShell do automatyzacji skryptów. Chociaż bardzo miło jest, że środowisko wydaje się być znacznie bardziej przemyślane niż powłoki uniksowe, w praktyce użycie obiektów zamiast strumieni tekstowych jest znacznie bardziej niezręczne, a wiele udogodnień uniksowych opracowanych w ciągu ostatnich 30 lat lata wciąż brakuje.
Cygwin jest nadal moim ulubionym środowiskiem skryptowym dla hostów Windows. Z pewnością przewyższa alternatywy pod względem wykonywania zadań.
źródło
Jest tu wiele świetnych świetnych odpowiedzi i oto moje zdanie. PowerShell jest gotowy, jeśli jesteś ... Przykłady:
grep = " Select-String -Pattern "
sort = "Sort-Object"
uniq = „ Get-Unique ”
file = „ Get-Item ”
cat = „ Get-Content ”
Perl / AWK / Sed nie są poleceniami, ale narzędzia są trudne do porównania, ale w PowerShell można zrobić prawie wszystko.
źródło
sls
,sort
,gu
,gi
,gc
, odpowiednio. Długie, czytelne nazwy, które uzupełniają tabulatory, oraz krótkie, które można wpisać w jednym systemie. To postęp przyjazny dla użytkownika.Get-Content
jestcat
, więc dla tego nie ma żadnej różnicy między Cygwin / Unix i PowerShell. Niestety w większości przypadków w dokumentacji Microsoft dla poleceń cmdlet brakuje informacji o aliasach, ale lista wszystkich aliasów jest generowana przy użyciuGet-Alias
w sesji PowerShell. Alias dla „Get-Unique” to „gu”, więc jest krótszy niż Cygwin / Unix!Dopiero niedawno zacząłem pisać w PowerShell z jakimkolwiek stopniem powagi. Chociaż przez ostatnie siedem lat pracowałem w prawie wyłącznie środowisku Windows, wywodzę się z uniksowego środowiska i ciągle próbuję „Unix-fy” doświadczyć interakcji z Windows. To co najmniej frustrujące.
Można jedynie porównywać PowerShell z czymś takim jak Bash , tcsh lub zsh, ponieważ narzędzia takie jak grep , sed , awk , find itp. Nie są, ściśle mówiąc, częścią powłoki; zawsze będą jednak częścią dowolnego środowiska uniksowego. To powiedziawszy, polecenie PowerShell, takie jak Select-String, ma bardzo podobną funkcję do grep i jest pakowane jako moduł podstawowy w PowerShell ... więc linie mogą być trochę rozmyte.
Myślę, że kluczową rzeczą jest kultura i fakt, że odpowiednie zestawy narzędzi będą ucieleśniać ich kultury:
Interfejs administracyjny Uniksa (i przez wiele lat rozwoju) tradycyjnie był wierszem poleceń i wirtualnym terminalem. Windows zaczął jako GUI, a funkcje administracyjne dopiero niedawno zaczęły odchodzić od oparcia wyłącznie na GUI. Możemy się spodziewać, że środowisko Unixa w wierszu poleceń będzie bogatsze, bardziej dojrzałe, biorąc pod uwagę znaczącą przewagę, jaką posiada w programie PowerShell, a moje doświadczenie pasuje do tego. O tym z mojego doświadczenia:
Doświadczenie administracyjne w systemie Unix ma na celu ułatwienie wykonywania czynności przy minimalnej liczbie naciśnięć klawiszy; dzieje się tak prawdopodobnie w wyniku historycznej sytuacji, gdy konieczne jest administrowanie serwerem za pomocą wolnego połączenia dial-up o prędkości 9600 bodów. Teraz PowerShell ma aliasy, które znacznie ułatwiają obejście dość szczegółowego standardu czasownik-rzeczownik , ale poznanie tych aliasów jest trochę uciążliwe (ktoś wie coś lepszego niż
alias | where {$_.ResolvedCommandName -eq "<command>"}
:?).Przykład bogatego sposobu, w jaki można manipulować historią:
iptables
polecenia są często długie i powtarzanie ich z niewielkimi różnicami byłoby uciążliwe, gdyby nie tylko jedna z wielu fajnych cech manipulacji historią wbudowanych w Bash , więc wstawienie 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
”) to tylko kwestia wydania:!!:s/-1-/-2-/:s/50/51
co znaczy „wykonać poprzednie polecenie, ale zamiast
-1-
z-2-
i50
z51
.Uniksowe wrażenia są zoptymalizowane dla maszynistek; prawie wszystko można zrobić bez opuszczania pozycji „domowej”. Na przykład, w Bash , używając Emacs klawiszy (tak, Bash obsługuje również vi wiązań), jazda na rowerze w historii odbywa się za pomocą Ctrl-Pi Ctrl-Njednocześnie przesuwając się na początku i końcu linii odbywa się za pomocą Ctrl-Ai Ctrl-Eodpowiednio ... i to zdecydowanie na tym się nie kończy. Wypróbuj nawet najprostszą nawigację w konsoli PowerShell bez ruszania się z pozycji wyjściowej i masz kłopoty.
Kultura systemu Windows, przynajmniej pod względem interfejsów API systemu, jest w dużej mierze napędzana przez frameworki, tj. COM i .NET , które są wysoce strukturalne i oparte na obiektach. Z drugiej strony, dostęp do uniksowych interfejsów API tradycyjnie odbywa się poprzez interfejs plików (
/dev
i/proc
) lub (nie zorientowane obiektowo) wywołania biblioteczne w stylu C. Nic więc dziwnego, że doświadczenia związane ze skryptami odpowiadają ich paradygmatom systemu operacyjnego. PowerShell ma z natury strukturę (wszystko jest obiektem) i oparty jest na plikach Bash - and -friends. Strukturalny interfejs API, który jest do dyspozycji programisty PowerShell, jest ogromny (zasadniczo dopasowuje się do ogromu istniejącego zestawu standardowych interfejsów COM i .NET).Krótko mówiąc, chociaż możliwości skryptowe programu PowerShell są prawdopodobnie potężniejsze niż Bash (szczególnie, jeśli wziąć pod uwagę dostępność .NET BCL ), interaktywność jest znacznie słabsza, zwłaszcza jeśli korzystasz z klawiatury całkowicie , perspektywa oparta na konsolach (jak wiele głowic uniksowych).
źródło
alias -Definition *property
(lub jakikolwiek inny wzór)? Myślę, że problem z twoją odpowiedzią polega na tym, że łączysz powłokę i konsolę: pamiętaj, że masz wybór konsoli z różnymi opcjami edycji. Celowo pozostawili przerwane edytowanie konsoli DOS, aby zachęcić ludzi do korzystania z innych konsol, takich jak ISE.!!
przykład może być napisany w PowerShell,(h -c 1) -replace '-1-','-2-' -replace '50','51' | iex
ale łatwiej jest strzałkę w górę i edytować dla pojedynczego polecenia. Jeśli chcesz to zrobić za pomocą wielu poleceń, myślę, że Powershell wygrałby. Aby powtórzyć 10 poleceń kończących się poleceniem nr 255 wraz z wprowadzonymi zmianami:(h -c 10 -id 255) -replace '-1-','-2-' -replace '50','51' | iex
Również historia Powershell pozwala robić rzeczy niespotykane w powłokach Linuksa; jeśli zastanawiasz się retrospektywnie, jak długo trwało uruchomienie polecenia:h -id 20 | select { $_.EndExecutionTime - $_.StartExecutionTime }
fc -e "sed -i -e 's/-1-/-2-/g' -e 's/50/51/g'" 10 255
Pod żadnym względem nie jestem bardzo doświadczonym użytkownikiem PowerShell, ale trochę mnie to zrobiło. Możesz połączyć ze sobą wbudowane cmdlety, aby zrobić wszystko, co możesz zrobić po monicie w systemie Unix, i jest jeszcze jedna dodatkowa korzyść z takich rzeczy, jak eksportowanie do CSV, tabel HTML i dla bardziej dogłębnych zadań administracyjnych związanych z administrowaniem systemem .
A jeśli naprawdę potrzebne coś jak sed , zawsze UnixUtils lub GnuWin32 , które można zintegrować z PowerShell dość łatwo.
Jako długoletni użytkownik Uniksa miałem jednak problem z przyzwyczajeniem się do schematu nazewnictwa poleceń i na pewno skorzystałbym z niego, gdybym wiedział więcej .NET.
Zasadniczo mówię, że warto się tego nauczyć, jeśli tylko system Windows nie stanowi problemu.
źródło
Jeśli lubisz skrypty powłoki, pokochasz PowerShell!
Zacznij od Zwiedzanie z przewodnikiem powłoki Microsoft Command Shell (Ars Technica).
źródło
'
(pojedynczych cudzysłowów). Do podwójnego cudzysłowu - tego samego, użyjwrite-output 'this is a "test"'
. Pytanie, na które wskazujesz, dotyczy Regex, a funkcja ucieczki dla wyrażenia regularnego jest ważna wszędzie. Program Powershell ma również ciągi tutaj-ciągi / dosłownie. Nawet Java tego nie ma! Spróbuj uciec wyrażenia regularnego w Javie. I czasami nie używasz literalpath. Używasz, kiedy potrzebujesz. LiteralPath traktuje znaki wieloznaczne dosłownie i ich nie rozwija. Używasz go, gdy mają go Twoje pliki. Daje ci więcej opcji.write-output "this is a `"test`""
działa. Po prostu użyj`
zamiast `\`. regex :: escape istnieje, aby ci pomóc, abyś nie przegapił ucieczki. Nie trzeba go używać. Myślicie, że dodatkowe opcje, które pomogą wam i zapobiec błędom, to niespójności.Ponieważ moje ostatnie eksperymenty doprowadziły mnie do głębi wywołań PowerShell i .NET, muszę powiedzieć, że PowerShell może zastąpić powłoki Cygwin i Unix.
Nie jestem pewien co do Perla, ale ponieważ zarówno PowerShell, jak i Perl są Turingami kompletnymi jako języki programowania, zgadzam się na zastąpienie Perla.
Jedną z rzeczy, które PowerShell ma powyżej Cygwina i zwykłego Basha pod * nix, jest zdolność do wykonywania piaskownicowych wywołań DLL, manipulowania systemem operacyjnym poprzez bezpośrednie wywołania API, metody WMI, a nawet obiekty COM. Co powiesz na uruchomienie programu Internet Explorer za pomocą kodu, a następnie robienie wszystkiego, co chcesz z wyświetlanym dokumentem, skutecznie emulując zaplecze dla serwera WWW?
Co powiesz na zbieranie danych z serwerów SQL i innych dostawców danych, parsowanie ich i eksportowanie jako CSV, wiadomości e-mail, tekst i właściwie wszelkiego rodzaju istniejące i nieistniejące formaty plików? (Przy odpowiednich umiejętnościach tworzenia prawidłowego pliku z otrzymanych danych, oczywiście, ale CSV są łatwo dostępne).
Dostępne są dodatkowe zabezpieczenia za pomocą podpisanych poleceń cmdlet i skryptów, zasad grupy i zasad wykonania, które pomagają zapobiegać uruchamianiu złośliwego kodu w systemie, nawet jeśli są uruchamiane jako administrator.
O tym, jakie polecenia są zaimplementowane - odpowiedź Richarda wymienia je i zdolność PowerShell do emulacji już ich funkcjonalności.
O tym, czy PowerShell jest silny, aby uzasadnić przełączenie - jest to bardziej kwestia osobistych preferencji, chociaż ponieważ coraz więcej usług systemu Windows udostępnia polecenia cmdlet PowerShell do ich kontrolowania, nieużywanie programu PowerShell z tymi usługami jest uważane za przeszkodę. (Serwer Hyper-V jest podstawową tego rodzaju usługą, a także zapewnia więcej możliwości dzięki poleceniom cmdlet PowerShell niż w GUI!)
Prawdopodobnie ta odpowiedź jest opóźniona o pięć lat, ale jeśli ktoś wykonuje zadania administracyjne lub ogólne skryptowanie różnych rzeczy w systemie Windows, zdecydowanie powinien spróbować wykorzystać PowerShell do swoich celów.
źródło
Porównując PowerShell z kombinacją Cygwin / Perl / Shell, pamiętaj, że PowerShell reprezentuje tylko część „Shell” tej kombinacji.
Możesz jednak wywołać dowolne polecenie z programu PowerShell, tak jak z cmd.exe lub Cygwin. To nie nie ponownie wdrożyć określone funkcje, a to z pewnością nie jest porównywalna do Perl.
To „tylko” powłoka, ale ułatwia programowanie, zapewniając wygodny interfejs do wszechświata .NET.
Należy również pamiętać, że PowerShell wymaga systemu Windows XP, Windows Server 2003 lub nowszego, co może stanowić problem w zależności od infrastruktury IT.
Aktualizacja:
Nie miałem pojęcia, jaka debata filozoficzna wywołałaby moją odpowiedź.
Odpowiedziałem w kontekście pytania: Porównaj PowerShell z Cygwin oraz Perl i Bash.
PowerShell jest powłoką, ponieważ nie robi różnicy składniowej między wbudowanymi poleceniami, komendami, funkcjami użytkownika i zewnętrznymi poleceniami (.exe, .bat, .cmd). Tylko wywoływanie metod .NET różni się poprzez dodanie przestrzeni nazw lub obiektu w wywołaniu.
Jego programowalność wynika z frameworku .NET, a nie z niczego specyficznego dla „języka” programu PowerShell.
Powiedziałbym, że wierzę, ż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 korzystaj z porównań .
źródło
Polecenia cmdlet w programie PowerShell są bardzo ładne i działają niezawodnie. Ich orientacja obiektowa bardzo mi się podoba, ponieważ jestem programistą Java / C #, ale nie jest to kompletny zestaw. Ponieważ jest zorientowany obiektowo, brakuje wielu dojrzałości strumienia tekstowego zestawu narzędzi POSIX (
awk
ised
żeby wymienić tylko kilka).Najlepszą odpowiedzią na dylemat kochania technik OO i dojrzałości narzędzi POSIX jest użycie obu! Jednym wielkim aspektem programu PowerShell jest to, że wykonuje doskonałą pracę, przesyłając obiekty do standardowych strumieni. Program PowerShell domyślnie używa potoku obiektów do transportu swoich obiektów. To nie są standardowe strumienie (standardowe wyjście, błąd standardowy i wejście standardowe). Kiedy PowerShell musi przekazać dane wyjściowe do standardowego procesu, który nie ma potoku obiektów, najpierw przekształca obiekty w strumień tekstowy. Ponieważ robi to tak dobrze, PowerShell stanowi doskonałe miejsce do hostowania narzędzi POSIX!
Najlepszy zestaw narzędzi POSIX to GnuWin32 . Instalacja zajmuje więcej niż 5 sekund, ale jest warta kłopotu i, o ile mogę stwierdzić, nie modyfikuje systemu (rejestru,
c:\windows\*
folderów itp.), Z wyjątkiem kopiowania plików do określonych katalogów. Jest to bardzo miłe, ponieważ jeśli umieścisz narzędzia we współdzielonym katalogu, wiele osób będzie mogło uzyskać do nich dostęp jednocześnie.Instrukcje instalacji GnuWin32
Pobierz i uruchom plik exe (pochodzi ze strony SourceForge ), kierując go do odpowiedniego katalogu (będę używać
C:\bin
). Stworzy toGetGnuWin32
katalog, w którym nie można uruchomićdownload.bat
, a następnieinstall.bat
(bez parametrów), po czym pojawi sięC:\bin\GetGnuWin32\gnuwin32\bin
katalog, który jest najbardziej przydatny folder, który nigdy nie istniał na komputerze z systemem Windows. Dodaj ten katalog do swojej ścieżki i jesteś gotowy.źródło
TL; DR - nie nienawidzę Windows ani PowerShell. Po prostu nie mogę nic zrobić w systemie Windows ani w programie PowerShell.
Osobiście nadal uważam, że PowerShell jest w najlepszym razie rozczarowujący.
~/
trochę@environment://somejibberish/%user_home%
NTFS wciąż jest bałaganem i pozornie zawsze nim będzie. Powodzenia w nawigacji.
Interfejs cmd-esque, cmd.exe dinozaura jest nadal widoczny w programie PowerShell, Edycja → Mark nadal jest jedynym sposobem kopiowania informacji i kopiowania tylko w postaci prostokątnych bloków widocznej przestrzeni terminala. i Edycja → Oznacz nadal jest jedynym sposobem wklejania ciągów do terminala.
Malowanie go na niebiesko nie czyni go bardziej atrakcyjnym. Nie mam nic przeciwko programistom Microsoft, którzy mają smak w kolorze.
System Windows zawsze otwiera się w lewym górnym rogu ekranu. Dla kogoś, kto używa pionowych pasków zadań, jest to niezwykle irytujące, szczególnie biorąc pod uwagę, że pasek zadań Windows obejmie jedyny narożnik okna, który daje dostęp do funkcji kopiowania / wklejania.
Nie mogę wiele mówić na temat narzędzi, które zawiera system Windows. Ponieważ istnieje cały zestaw otwartych, darmowo licencjonowanych narzędzi CLI, a PowerShell zawiera, o ile wiem, żadne z nich nie jest absolutnym rozczarowaniem.
wget
przenosi pozornie nieporównywalne argumenty do GNU wget. Dzięki, promyk nadziei przenośny - bezużyteczny.&&
operator nie jest obsługiwany, dzięki czemu najprostsze polecenie warunkowe nie następuje.Nie znam człowieka; Dałem temu szansę, naprawdę. Nadal staram się dać temu szansę w nadziei, że następnym razem, gdy go otworzę, będzie mniej przydatny. Nie mogę nic zrobić w PowerShell i ledwo mogę zrobić rzeczy z prawdziwym projektem, aby wprowadzić narzędzia GNU do Windows.
MySysGit daje mi monit dinozaura cmd.exe z kilkoma narzędziami GNU i wciąż jest bardzo rozczarowujący, ale w końcu ukończenie ścieżki działa. A polecenie Git uruchomi się w Git Bash.
Mintty dla MySysGit daje interfejs Cygwin w środowisku mysysgit, dzięki czemu kopiowanie i wklejanie rzeczy (wybierz, aby skopiować (mysz), Shift+, Insaby wkleić, jak nowoczesny ...). Jednak takie rzeczy
git push
są zepsute w Mintty.Nie zamierzam narzekać, ale wciąż widzę ogromne problemy z użytecznością wiersza poleceń w systemie Windows, nawet przy takich narzędziach jak Cygwin.
PS: Tylko dlatego, że coś można zrobić w PowerShell, nie czyni go użytecznym . Użyteczność jest głębsza niż umiejętność i na tym koncentruję się, próbując użyć produktu jako konsumenta.
źródło
.
lub[
uzyskać dostęp do właściwości lub indeksu, więc nie można po prostu dodać separatora ścieżek na końcu. Który dokładnie program PowerShell? Który POSIX PowerShell? Nie próbuje przynieść narzędzi GNU do systemu Windows ani być kompatybilnym z bash.(get-command wg*.exe).Path
. Odp: Zakończenie bashu i readline -> leeholmes.com/blog/2012/09/13/… prowadzący do github.com/lzybkr/PSReadLineNie widziałem, że PowerShell naprawdę wystartował, przynajmniej jeszcze nie. Może więc nie warto się tego uczyć, chyba że inni w twoim zespole już to wiedzą.
Jeśli masz kłopoty, możesz lepiej korzystać z języka skryptowego, który inni mogą mieć za sobą, Perla, jak wspomniałeś, lub innych, takich jak Ruby lub Python.
Myślę, że wiele z tego zależy od tego, co musisz zrobić. Osobiście używam Pythona do własnych skryptów, ale wiem, kiedy zacznę pisać coś, czego nigdy nie będę mógł przekazać - więc staram się nie robić niczego zbyt rewolucyjnego.
źródło
Dlaczego nie skorzystać z obu? Wywołaj skrypty PowerShell w Cygwin, tak jak inne interpretowane skrypty, takie jak Perl itp.
Robię to na tyle, że napisałem https://bitbucket.org/jbianchi/powershell dla opakowania Bash, aby wywołać powershell.exe w Cygwin. Może być używany jako shebang jako pierwsza linia skryptu powershell.exe .ps1 (ponieważ PowerShell używa również „#” jako komentarza). Przykłady znajdziesz na https://bitbucket.org/jbianchi/powershell/wiki/Home
źródło
W kilku wierszach Cygwin i PowerShell to różne narzędzia, jednak jeśli masz zainstalowany Cygwin, możesz uruchamiać pliki wykonywalne Cygwin w ramach sesji PowerShell. Tak przyzwyczaiłem się do PowerShell, że teraz nie używam już grep, sort, awk itp. W PowerShell są wbudowane alternatywy, a jeśli nie, możesz znaleźć cmdlet.
Głównym narzędziem, z którego korzystam, jest ssh.exe, ale w ramach sesji PowerShell.
Działa świetnie.
źródło
Odkryłem, że programowanie w PowerShell nie jest warte wysiłku.
Mam kilkuletnie doświadczenie w skryptowaniu powłoki w systemie Unix, ale bardzo trudno było mi zrobić wiele z PowerShell.
Wygląda na to, że wiele funkcji wymaga przesłuchania interfejsu zarządzania Windows i wydawania poleceń podobnych do SQL, aby uzyskać potrzebne informacje.
Na przykład chciałem napisać skrypt, aby usunąć wszystkie pliki z określonym sufiksem z drzewa katalogów. W systemie Unix byłoby to proste ...
Po kilku godzinach dicking wokół z
Scripting.FileSystemObject
aWScript.Shell
i wydawania „SELECT * FROM Win32_ShortcutFile gdzie dysk =„”& Drive &««i Path =»»& searchFolder &„””, ale w końcu poddał się i osiadł dla Eksploratora Windows Search polecenia i po prostu zrób to ręcznie. Prawdopodobnie jest jakiś sposób, aby zrobić to, co chciałem, ale nie widziałem nic oczywistego, a wszystkie przykłady na stronie MSDN były tak trywialne, że były bezwartościowe.EDYCJA Heh, oczywiście jak tylko to napisałem, przeszukałem trochę więcej i znalazłem to, czego mi brakowało:
-recurse
opcja polecenia usuń element jest wadliwa (ujawniona, jeśli używaszget-help remove-item -detailed
).Próbowałem „remove-item-filter” * .xyz '-recurse ”i to nie działało, więc się poddałem.
Okazuje się, że musisz użyć
get-childitem -filter '*.xyz' -recurse | remove-item
źródło
Możesz także spróbować uruchomić skrypty Bash w systemie Windows za pomocą BashWin na https://github.com/skanga/BashWin .
źródło
PowerShell jest bardzo potężny, potężniejszy niż standardowe wbudowane powłoki uniksowe (ale tylko dlatego, że zawiera wiele funkcji zwykle wyłuskanych w podprogramach). Weź również pod uwagę, że możesz pisać aplety w dowolnym języku .NET, w tym IronPython , IronRuby , PerlNet itp., Lub możesz po prostu wywoływać polecenia Cygwin z PowerShell, ignorując wszystkie dodatkowe funkcje i będzie działał podobnie do Bash, KornShell , lub cokolwiek...
źródło