Saya berdebat apakah saya harus belajar PowerShell, atau hanya tetap dengan skrip Cygwin / Perl / skrip shell Unix, dll.
Keuntungan dari PowerShell adalah skrip dapat lebih mudah digunakan oleh rekan tim yang tidak memiliki Cygwin; Namun, saya tidak tahu apakah saya benar-benar akan menulis banyak skrip tujuan umum, atau apakah orang akan menggunakannya.
Script Unix sangat kuat, apakah PowerShell cukup dekat untuk menjamin pengalihan?
Berikut adalah beberapa hal spesifik (atau yang setara) yang akan saya cari di PowerShell:
unix
shell
powershell
Andy White
sumber
sumber
Jawaban:
Alat hanyalah alat.
Mereka membantu atau tidak.
Anda butuh bantuan atau tidak.
Jika Anda tahu Unix dan alat-alat itu melakukan apa yang perlu Anda lakukan pada Windows - maka Anda adalah pria yang bahagia dan tidak perlu mempelajari PowerShell (kecuali jika Anda ingin menjelajah).
Maksud asli saya adalah memasukkan seperangkat alat Unix di Windows dan menyelesaikannya (beberapa dari kami di tim memiliki latar belakang Unix yang dalam dan dosis rasa hormat yang sehat untuk komunitas itu.)
Apa yang saya temukan adalah bahwa ini tidak banyak membantu. Alasannya adalah bahwa AWK / grep / sed tidak bekerja melawan COM , WMI , ADSI , Registry, toko sertifikat, dll., Dll.
Dengan kata lain, UNIX adalah seluruh ekosistem yang disetel sendiri di sekitar file teks. Dengan demikian, alat pemrosesan teks adalah alat manajemen yang efektif. Windows adalah ekosistem yang sepenuhnya disetel sendiri di sekitar API dan Objek. Itu sebabnya kami menemukan PowerShell.
Apa yang saya pikir akan Anda temukan adalah bahwa akan ada banyak kesempatan ketika pemrosesan teks tidak akan memberikan apa yang Anda inginkan di Windows. Pada titik itu, Anda ingin mengambil PowerShell. CATATAN - ini bukan kesepakatan semua atau tidak sama sekali. Di dalam PowerShell, Anda dapat memanggil alat Unix Anda (dan menggunakan proses teks mereka atau pemrosesan teks PowerShell). Anda juga dapat memanggil PowerShell dari alat Unix Anda dan mendapatkan teks.
Sekali lagi - tidak ada agama di sini - fokus kami adalah memberi Anda alat yang Anda butuhkan untuk berhasil. Itu sebabnya kami sangat bersemangat tentang umpan balik. Beri tahu kami di mana kami jatuh pada pekerjaan atau di mana Anda tidak memiliki alat yang Anda butuhkan dan kami akan meletakkannya di daftar dan sampai ke sana.
Dalam semua kejujuran, kami menggali diri dari lubang 30 tahun, jadi itu akan memakan waktu. Yang mengatakan, jika Anda mengambil beta Windows Server 2008 / R2 dan / atau beta dari produk server kami, saya pikir Anda akan terkejut melihat seberapa cepat lubang itu diisi.
Sehubungan dengan penggunaan - kami memiliki> 3,5 juta unduhan hingga saat ini. Itu tidak termasuk orang yang menggunakannya di Windows Server 2008, karena itu termasuk sebagai komponen opsional dan tidak perlu diunduh.
V2 akan dikirimkan di semua versi Windows. Ini akan menjadi on-by-default untuk semua edisi kecuali Server inti di mana itu adalah komponen opsional. Tidak lama setelah Windows 7 / Windows Server 2008 R2 dikirimkan, kami akan menyediakan V2 di semua platform, Windows XP dan di atasnya. Dengan kata lain - investasi Anda dalam pembelajaran akan berlaku untuk sejumlah besar mesin / lingkungan.
Satu komentar terakhir. Jika / ketika Anda mulai belajar PowerShell, saya pikir Anda akan cukup senang. Sebagian besar desain sangat dipengaruhi oleh latar belakang Unix kami, jadi sementara kami sangat berbeda, Anda akan mengambilnya dengan sangat cepat (setelah Anda selesai mengutuk bahwa itu bukan Unix :-)).
Kami tahu bahwa orang memiliki anggaran yang sangat terbatas untuk belajar - itulah sebabnya kami sangat keras tentang konsistensi. Anda akan belajar sesuatu, dan kemudian Anda akan menggunakannya berulang kali.
Percobaan! Nikmati! Mengikutsertakan!
sumber
tar -c . | gzip > package.tar.gz
langsung di PowerShell, atau Anda akan menderita. Lihat brianreiter.org/2010/01/29/…Select-String
cmdlet dan-match
operator bekerja dengan regex. Anda juga dapat langsung menggunakan dukungan regex .NET untuk fungsionalitas yang lebih canggih.Sort-Object
lebih kuat (daripada yang saya ingat * nixsort
). Mengizinkan penyortiran multi-level pada ekspresi sewenang-wenang. Di sini pemeliharaan PowerShell untuk tipe yang mendasarinya membantu; misalnyaDateTime
properti akan diurutkan sebagaiDateTime
tanpa harus memastikan pemformatan ke dalam format yang dapat diurutkan.Select-Object -Unique
Dalam hal luasnya Perl dari perpustakaan dukungan khusus domain: tidak ada tempat (belum).
Untuk pemrograman umum, PowerShell tentu saja lebih kohesif dan konsisten, dan lebih mudah diperluas. Satu celah untuk teks hijauing adalah sesuatu yang setara dengan
..
operator Perl .Sudah cukup lama sejak menggunakan AWK (harus> 18 tahun, sejak kemudian saya hanya menggunakan Perl), jadi saya tidak bisa berkomentar.
[Lihat di atas]
Kekuatan PowerShell di sini tidak jauh dari apa yang dapat dilakukannya dengan objek sistem file (dan mendapat informasi lengkap di sini,
dir
pengembalianFileInfo
atauFolderInfo
objek yang sesuai) adalah model keseluruhan penyedia.Anda dapat memperlakukan registri, toko sertifikat, SQL Server, cache RSS Internet Explorer, dll. Sebagai ruang objek yang dapat dinavigasi oleh cmdlet yang sama dengan sistem file.
PowerShell jelas merupakan langkah maju di Windows. Microsoft telah menjadikannya bagian dari persyaratan mereka untuk produk non-rumah di masa depan. Oleh karena itu kaya dukungan di Exchange, dukungan dalam SQL Server. Ini hanya akan berkembang.
Contoh terbaru dari ini adalah TFS PowerToys. Banyak operasi klien TFS dilakukan tanpa harus memulai tf.exe setiap kali (yang memerlukan koneksi server TFS baru, dll.) Dan terutama lebih mudah untuk kemudian memproses data lebih lanjut. Selain memungkinkan akses luas ke seluruh API klien TFS ke detail yang lebih besar daripada yang terekspos di Team Explorer TF.exe.
sumber
sed 's/pattern/replacement/' file
adalah:, yang kira-kiragc file | %{$_ -replace 'pattern','replacement'}
, dan juga untuk awk:awk 'BEGIN {} /pat1/ {action1} /pat2/ {action2} END {}' file
kira{BEGIN {}; switch -r -c -file file { 'pat1' {action1} 'pat2' {action2}}; END{};}
Sebagai seseorang yang kariernya berfokus pada pengembangan perusahaan Windows dari tahun 1997 - 2010, jawaban yang jelas adalah PowerShell untuk semua alasan bagus yang diberikan sebelumnya (misalnya, itu adalah bagian dari strategi perusahaan Microsoft; ia terintegrasi dengan baik dengan Windows / COM / .NET; dan menggunakan objek alih-alih file menyediakan model pengkodean "lebih kaya"). Untuk alasan itu saya telah menggunakan dan mempromosikan PowerShell selama dua tahun terakhir, dengan keyakinan bahwa saya mengikuti "Kata-kata Bill."
Namun, sebagai seorang pragmatis, saya tidak lagi yakin PowerShell adalah jawaban yang hebat. Meskipun ini adalah alat Windows yang sangat baik dan menyediakan langkah yang sangat dibutuhkan untuk mengisi lubang bersejarah yang merupakan baris perintah Window, karena kita semua melihat cengkeraman Microsoft pada slip komputasi konsumen, tampaknya semakin mungkin bahwa Microsoft memiliki pertempuran besar ke depan untuk mempertahankan OS-nya sebagai penting bagi perusahaan masa depan.
Memang, mengingat saya menemukan pekerjaan saya semakin dalam lingkungan yang heterogen, saya merasa jauh lebih berguna untuk menggunakan skrip Bash saat ini, karena mereka tidak hanya bekerja di Linux, Solaris dan Mac OS X, tetapi mereka juga bekerja — dengan bantuan Cygwin — di Windows.
Jadi, jika Anda meyakini bahwa masa depan OS dikomodifikasi daripada dimonopoli, maka tampaknya masuk akal untuk memilih strategi alat pengembangan tangkas yang menjauhkan diri dari alat berpemilik yang layak. Namun jika Anda melihat masa depan Anda didominasi oleh semua-itu-Redmond maka pergi untuk PowerShell.
sumber
Saya telah menggunakan sedikit PowerShell untuk otomatisasi skrip. Meskipun sangat bagus bahwa lingkungan tampaknya telah dipikirkan lebih dari kerang Unix, dalam praktiknya penggunaan objek bukan aliran teks jauh lebih kikuk, dan banyak fasilitas Unix yang telah dikembangkan dalam 30 terakhir tahun masih hilang.
Cygwin masih lingkungan skrip pilihan saya untuk host Windows. Ini tentu mengalahkan alternatif dalam hal menyelesaikan sesuatu.
sumber
Ada banyak jawaban yang bagus di sini, dan ini adalah pendapat saya. PowerShell siap jika Anda ... Contoh:
grep = " Select-String -Pattern "
sort = "Sort-Object"
uniq = " Dapatkan-Unik "
file = " Dapatkan-Barang "
cat = " Dapatkan Konten "
Perl / AWK / Sed bukan perintah, tetapi utilitas karenanya sulit untuk dibandingkan, tetapi Anda dapat melakukan hampir semua hal di PowerShell.
sumber
sls
,sort
,gu
,gi
,gc
, masing-masing. Nama panjang yang dapat dibaca yang dilengkapi dengan tab, dan nama yang dapat diketik dalam satu sistem. Itu kemajuan yang ramah pengguna untuk Anda.Get-Content
itucat
, jadi untuk yang itu tidak ada perbedaan antara Cygwin / Unix dan PowerShell. Sayangnya, dalam sebagian besar kasus, dokumentasi Microsoft untuk cmdlet tidak memiliki informasi tentang alias, tetapi daftar semua alias dihasilkan dengan menggunakanGet-Alias
sesi PowerShell. Alias untuk "Get-Unique" adalah "gu", jadi itu lebih pendek daripada yang Cygwin / Unix!Saya baru saja mulai mencoba-coba PowerShell dengan tingkat keseriusan. Meskipun selama tujuh tahun terakhir saya telah bekerja di lingkungan berbasis Windows yang hampir secara eksklusif, saya berasal dari latar belakang Unix dan mendapati diri saya terus-menerus mencoba "Unix-fy" pengalaman interaksi saya di Windows. Sangat frustasi untuk sedikitnya.
Wajar untuk membandingkan PowerShell dengan sesuatu seperti Bash , tcsh , atau zsh karena utilitas seperti grep , sed , awk , find , dll. Bukan merupakan bagian dari shell; mereka akan selalu menjadi bagian dari lingkungan Unix. Yang mengatakan, perintah PowerShell seperti Pilih-String memiliki fungsi yang sangat mirip dengan grep dan yang dibundel sebagai modul inti dalam PowerShell ... sehingga garis dapat sedikit sebuah kabur.
Saya pikir kuncinya adalah budaya , dan fakta bahwa masing-masing perangkat akan mewujudkan budaya masing-masing:
Antarmuka administratif Unix (dan, selama bertahun-tahun, pengembangan) secara tradisional menjadi baris perintah dan terminal virtual. Windows dimulai sebagai GUI dan fungsi administrasi baru-baru ini mulai menjauh dari menjadi berbasis GUI secara eksklusif . Kita bisa berharap pengalaman Unix di baris perintah menjadi lebih kaya, lebih matang mengingat keunggulan signifikan yang dimilikinya di PowerShell, dan pengalaman saya cocok dengan ini. Tentang ini, dalam pengalaman saya:
Pengalaman administrasi Unix diarahkan untuk membuat hal-hal mudah dilakukan dalam jumlah minimal stroke kunci; ini mungkin sebagai akibat dari situasi historis keharusan mengelola server melalui koneksi dial-up 9600 baud yang lambat. Sekarang PowerShell memang memiliki alias yang harus melalui standar Verb-Noun yang agak bertele - tele , tetapi mengenal alias itu sedikit menyusahkan (ada yang tahu sesuatu yang lebih baik daripada
alias | where {$_.ResolvedCommandName -eq "<command>"}
:?).Contoh cara kaya di mana sejarah dapat dimanipulasi:
iptables
perintah sering bertele-tele dan mengulanginya dengan sedikit perbedaan akan menyebalkan jika bukan karena salah satu dari banyak fitur manipulasi sejarah yang dibangun di dalam Bash , jadi memasukkan aturan iptables seperti berikut:iptables -I camera-1-internet -s 192.168.0.50 -m state --state NEW -j ACCEPT
kedua kalinya untuk kamera lain ("
camera-2
"), hanya merupakan kasus penerbitan:!!:s/-1-/-2-/:s/50/51
yang berarti "melakukan perintah sebelumnya, tetapi gantikan
-1-
dengan-2-
dan50
dengan51
.Pengalaman Unix dioptimalkan untuk pengetik sentuh; seseorang dapat melakukan banyak hal tanpa meninggalkan posisi "rumah". Sebagai contoh, di Bash , menggunakan binding kunci Emacs (ya, Bash juga mendukung vi binding), bersepeda melalui sejarah dilakukan dengan menggunakan Ctrl-Pdan Ctrl-Nsementara bergerak ke awal dan akhir garis dilakukan dengan menggunakan masing Ctrl-A- Ctrl-Emasing ... dan itu pasti tidak berakhir di situ. Coba bahkan navigasi yang paling sederhana di konsol PowerShell tanpa berpindah dari posisi awal dan Anda dalam masalah.
Budaya Windows, setidaknya dalam hal sistem API sebagian besar didorong oleh kerangka kerja pendukung, yaitu, COM dan .NET , keduanya-yang sangat terstruktur dan berbasis objek. Di sisi lain, akses ke Unix APIs secara tradisional telah melalui antarmuka file (
/dev
dan/proc
) atau (tidak berorientasi objek) panggilan pustaka gaya C. Maka tidak mengherankan bahwa pengalaman scripting cocok dengan paradigma OS mereka masing-masing. PowerShell pada dasarnya terstruktur (semuanya adalah objek) dan berbasis file Bash -and-friends. API terstruktur yang tersedia bagi programmer PowerShell sangat luas (pada dasarnya cocok dengan luasnya set standar COM dan .NET interface).Singkatnya, meskipun kemampuan scripting dari PowerShell bisa dibilang lebih kuat daripada Bash (terutama ketika Anda mempertimbangkan ketersediaan .NET BCL ), pengalaman interaktif secara signifikan lebih lemah, terutama jika Anda datang dari yang sepenuhnya menggunakan keyboard. , perspektif berbasis konsol (sebanyak Unix-head adalah).
sumber
alias -Definition *property
(atau pola lainnya)? Saya pikir masalah dengan jawaban Anda adalah bahwa Anda mengkonfigurasi shell dan konsol: ingat Anda memiliki pilihan konsol dengan opsi pengeditan yang berbeda. Mereka sengaja membiarkan pengeditan konsol DOS rusak untuk mendorong orang menggunakan konsol lain seperti ISE.!!
contoh Anda dapat ditulis dalam Powershell(h -c 1) -replace '-1-','-2-' -replace '50','51' | iex
tetapi lebih mudah untuk panah atas dan mengedit untuk satu perintah. Jika Anda ingin melakukannya di banyak perintah saya pikir Powershell akan menang. Untuk mengulangi 10 perintah yang berakhir pada perintah # 255 dengan suntingan Anda:(h -c 10 -id 255) -replace '-1-','-2-' -replace '50','51' | iex
Juga sejarah Powershell memungkinkan Anda melakukan hal-hal yang belum pernah terjadi di shell Linux; jika Anda bertanya-tanya secara retrospektif berapa lama sebuah perintah harus dijalankan:h -id 20 | select { $_.EndExecutionTime - $_.StartExecutionTime }
fc -e "sed -i -e 's/-1-/-2-/g' -e 's/50/51/g'" 10 255
Saya bukan pengguna PowerShell yang sangat berpengalaman dengan cara apa pun, tetapi sedikit saja yang membuat saya terpesona sangat mengesankan. Anda dapat menyatukan cmdlet bawaan untuk melakukan apa saja yang dapat Anda lakukan di prompt Unix, dan ada beberapa kebaikan tambahan untuk melakukan hal-hal seperti mengekspor ke CSV, tabel HTML, dan untuk jenis pekerjaan administrasi sistem yang lebih mendalam. .
Dan jika Anda benar-benar membutuhkan sesuatu seperti sed , selalu ada UnixUtils atau GnuWin32 , yang dapat Anda integrasikan dengan PowerShell dengan cukup mudah.
Sebagai pengguna lama Unix, saya memiliki sedikit kesulitan membiasakan diri dengan skema penamaan perintah, dan saya pasti akan mendapat manfaat lebih dari itu jika saya tahu lebih banyak. NET.
Jadi pada dasarnya, saya katakan itu layak untuk dipelajari jika Windows-satunya-ness itu tidak menimbulkan masalah.
sumber
Jika Anda menyukai skrip shell, Anda akan menyukai PowerShell!
Mulai dari tur berpemandu Microsoft Command Shell (Ars Technica).
sumber
'
(tanda kutip tunggal). Untuk hal tanda kutip ganda - sama, gunakanwrite-output 'this is a "test"'
. Pertanyaan yang Anda tuju adalah untuk Regex dan melarikan diri untuk regex berlaku di mana-mana. Powershell juga memiliki string Here-Strings / verbatim. Bahkan Jawa tidak memiliki ini! Coba keluar dari regex di Jawa. Dan terkadang Anda tidak menggunakan literalpath. Anda gunakan saat Anda membutuhkannya. LiteralPath memperlakukan karakter wildcard kata demi kata dan tidak mengembangkannya. Anda menggunakannya ketika file Anda memilikinya. Ini memberi Anda lebih banyak opsi.write-output "this is a `"test`""
bekerja. Cukup gunakan`
alih-alih `\`. regex :: escape ada untuk membantu Anda sehingga Anda tidak ketinggalan barang melarikan diri. Tidak perlu menggunakannya. Anda berpikir bahwa opsi tambahan yang ada untuk membantu Anda dan mencegah kesalahan adalah inkonsistensi.Saat percobaan baru-baru ini membawa saya ke kedalaman panggilan PowerShell dan .NET, saya harus mengatakan bahwa PowerShell bisa menggantikan shell Cygwin dan Unix.
Saya tidak yakin tentang Perl, tetapi karena PowerShell dan Perl keduanya Turing lengkap sebagai bahasa pemrograman, saya memberikan ini sebagai ya untuk mengganti Perl juga.
Satu hal yang PowerShell miliki di atas Cygwin dan Bash biasa di bawah * nix, adalah kemampuannya untuk melakukan panggilan DLL berpasir, memanipulasi sistem operasi melalui panggilan API langsung, metode WMI dan bahkan objek COM. Bagaimana dengan meluncurkan Internet Explorer melalui kode, kemudian melakukan apa pun yang Anda inginkan dengan dokumen yang ditampilkan, secara efektif meniru back-end untuk server Web?
Bagaimana dengan mengumpulkan data dari server SQL dan penyedia data lainnya, menguraikannya dan mengekspor sebagai CSV, pesan email, teks dan sebenarnya semua format file yang ada dan yang tidak ada? (Dengan keterampilan yang tepat membuat file yang valid dari data yang diterima, tentu saja, tetapi CSV sudah tersedia).
Dan ada keamanan tambahan yang tersedia melalui cmdlet dan skrip yang ditandatangani, kebijakan grup, dan kebijakan eksekusi yang membantu mencegah kode berbahaya dari berjalan di sistem Anda bahkan jika Anda menjalankannya sebagai administrator.
Tentang perintah apa yang diterapkan - jawaban oleh Richard mencantumkannya dan kemampuan PowerShell untuk meniru fungsi mereka.
Tentang apakah PowerShell kuat untuk menjamin peralihan - ini lebih merupakan masalah pilihan pribadi, meskipun semakin banyak layanan Windows yang menyediakan cmdlet PowerShell untuk mengendalikannya, tidak menggunakan PowerShell dengan layanan ini dianggap sebagai penghalang. (Server Hyper-V adalah layanan utama tersebut, dan ia juga menyediakan kemampuan untuk melakukan lebih banyak dengan PowerShell cmdlet daripada dengan GUI!)
Mungkin jawaban ini terlambat lima tahun, tetapi tetap saja, jika seseorang melakukan tugas administratif atau skrip umum berbagai hal di Windows, mereka pasti harus mencoba memanfaatkan PowerShell untuk keperluan mereka.
sumber
Saat Anda membandingkan PowerShell dengan kombinasi Cygwin / Perl / Shell, ketahuilah bahwa PowerShell hanya mewakili bagian "Shell" dari kombinasi itu.
Namun Anda dapat menjalankan perintah apa pun dari PowerShell seperti yang Anda lakukan dari cmd.exe atau Cygwin. Itu tidak tidak kembali melaksanakan fungsi tertentu, dan hal ini tentunya tidak sebanding dengan Perl.
Ini "hanya" sebuah shell, tetapi itu membuat pemrograman lebih mudah menyediakan antarmuka yang nyaman ke alam semesta .NET.
Perlu diingat juga bahwa PowerShell membutuhkan Windows XP, Windows Server 2003 atau lebih tinggi, yang dapat menimbulkan masalah tergantung pada infrastruktur TI Anda.
Memperbarui:
Saya tidak tahu debat filosofis seperti apa yang akan saya jawab.
Saya memposting jawaban saya dalam konteks pertanyaan: Bandingkan PowerShell dengan Cygwin dan Perl dan Bash.
PowerShell adalah sebuah shell, karena ia tidak membuat perbedaan sintaksis antara perintah built-in, commandlets, fungsi pengguna, dan perintah eksternal (.exe, .bat, .cmd). Hanya memohon. Metode NET berbeda dengan menambahkan namespace atau objek dalam panggilan.
Programabilitasnya berasal dari .NET framework, bukan dari sesuatu yang spesifik dengan "bahasa" PowerShell.
Saya akan mengatakan saya percaya PowerShell adalah "bahasa scripting" segera setelah Bugzilla atau MediaWiki diimplementasikan sebagai skrip PowerShell yang berjalan di server web;)
Sampai saat itu, nikmati perbandingannya .
sumber
Cmdlet di PowerShell sangat bagus dan berfungsi dengan baik. Orientasi objek mereka sangat menarik bagi saya karena saya seorang pengembang Java / C #, tetapi itu sama sekali tidak lengkap. Karena berorientasi objek, itu terlewatkan pada banyak kematangan aliran teks dari set alat POSIX (
awk
dansed
untuk beberapa nama).Jawaban terbaik yang saya temukan pada dilema mencintai teknik OO dan mencintai kedewasaan dalam alat POSIX adalah dengan menggunakan keduanya! Salah satu aspek hebat dari PowerShell adalah ia melakukan pekerjaan perpipaan yang bagus untuk stream standar. PowerShell secara default menggunakan pipa objek untuk mengangkut objeknya di sekitar. Ini bukan stream standar (standard out, standard error, dan standard in). Ketika PowerShell perlu meneruskan output ke proses standar yang tidak memiliki pipa objek, itu pertama-tama mengkonversi objek ke aliran teks. Karena melakukannya dengan sangat baik, PowerShell membuat tempat yang sangat baik untuk meng-host alat POSIX!
Perangkat POSIX terbaik adalah GnuWin32 . Butuh waktu lebih dari 5 detik untuk menginstal, tetapi ini sepadan dengan masalahnya, dan sejauh yang saya tahu, itu tidak mengubah sistem Anda (registri,
c:\windows\*
folder, dll.) Kecuali menyalin file ke direktori yang Anda tentukan. Ini sangat bagus karena jika Anda meletakkan alat di direktori bersama, banyak orang dapat mengaksesnya secara bersamaan.Petunjuk Instalasi GnuWin32
Unduh dan jalankan exe (ini dari situs SourceForge ) dengan mengarahkannya ke direktori yang sesuai (saya akan menggunakan
C:\bin
). Ini akan membuatGetGnuWin32
direktori di sana di mana Anda akan menjalankandownload.bat
, laluinstall.bat
(tanpa parameter), setelah itu, akan adaC:\bin\GetGnuWin32\gnuwin32\bin
direktori yang merupakan folder paling berguna yang pernah ada di mesin Windows. Tambahkan direktori itu ke jalur Anda, dan Anda siap untuk pergi.sumber
TL; DR - Saya tidak membenci Windows atau PowerShell. Saya tidak bisa melakukan apa pun di Windows atau di PowerShell.
Saya pribadi masih menemukan PowerShell underwhelming di terbaik.
~/
kekurangan beberapa@environment://somejibberish/%user_home%
NTFS masih berantakan dan sepertinya akan selalu begitu. Semoga berhasil menavigasi.
antarmuka cmd-esque, cmd.exe dinosaurus masih terlihat di PowerShell, Edit → Tandai masih satu-satunya cara untuk menyalin informasi, dan menyalin hanya dalam bentuk blok persegi panjang ruang terminal terlihat. dan Edit → Tandai masih satu-satunya cara untuk menempelkan string ke terminal.
Lukisan biru tidak membuatnya lebih menarik. Saya tidak keberatan pengembang Microsoft memiliki selera warna.
Windows selalu terbuka di sudut kiri atas layar. Untuk seseorang yang menggunakan bilah tugas vertikal ini sangat menjengkelkan, terutama mengingat bahwa bilah tugas Windows akan mencakup satu-satunya sudut jendela yang memberikan akses ke fungsionalitas salin / tempel.
Saya tidak dapat berbicara banyak dengan alasan alat yang disertakan oleh Windows. Menjadi bahwa ada seluruh rangkaian open-source, alat CLI berlisensi bebas, dan PowerShell kapal dengan, setahu saya, tidak satupun dari mereka yang benar-benar mengecewakan.
wget
mengambil argumen yang sepertinya tak tertandingi untuk GNU wget. Terima kasih, secercah harapan yang berguna-sia-sia.&&
operator tidak ditangani, membuat perintah kondisional yang paling sederhana mengikuti bukan apa-apa.Saya tidak kenal laki-laki; Saya mencobanya, saya benar-benar melakukannya; Saya masih mencoba untuk mencobanya dengan harapan bahwa lain kali saya membukanya akan menjadi kurang berguna. Saya tidak bisa melakukan apa pun di PowerShell, dan saya hampir tidak bisa melakukan hal-hal dengan proyek nyata untuk membawa alat GNU ke Windows.
MySysGit memberi saya dinosaurus cmd.exe prompt dengan beberapa alat GNU, dan itu masih sangat mengecewakan, tetapi pada akhirnya penyelesaian jalan berhasil. Dan perintah Git akan berjalan di Git Bash.
Mintty for MySysGit memberikan antarmuka Cygwin ke lingkungan mysysgit, membuat salin dan tempel sesuatu (pilih untuk menyalin (mouse), Shift+ Insuntuk menempel, seberapa modern ...). Namun, hal-hal seperti
git push
rusak di Mintty.Saya tidak bermaksud berteriak-teriak, tapi saya masih melihat masalah besar dengan kegunaan baris perintah pada Windows bahkan diberikan alat-alat seperti Cygwin.
PS: Hanya karena sesuatu dapat dilakukan di PowerShell, tidak membuatnya bisa digunakan . Kegunaan lebih dalam daripada kemampuan dan apa yang cenderung saya fokuskan saat mencoba menggunakan produk sebagai konsumen.
sumber
.
atau[
mengakses properti atau indeks, sehingga tidak bisa hanya menambahkan pemisah jalur di akhir. PowerShell mana yang wget, tepatnya? Yang PowerShell POSIX? Itu tidak mencoba membawa alat gnu ke Windows, atau menjadi btw yang kompatibel dengan bash.(get-command wg*.exe).Path
. Re: selesai bash dan baca - - leeholmes.com/blog/2012/09/13/… yang mengarah ke github.com/lzybkr/PSReadLineSaya belum melihat bahwa PowerShell telah benar-benar lepas landas, setidaknya belum. Jadi mungkin tidak sepadan dengan upaya mempelajarinya kecuali orang-orang lain di tim Anda sudah mengetahuinya.
Untuk kesulitan Anda, Anda mungkin lebih baik dengan bahasa scripting yang orang lain bisa dapatkan, Perl seperti yang Anda sebutkan, atau orang lain seperti Ruby atau Python.
Saya pikir banyak hal tergantung pada apa yang perlu Anda lakukan. Secara pribadi saya telah menggunakan Python untuk skrip pribadi saya sendiri, tetapi saya tahu ketika saya mulai menulis sesuatu yang saya tidak akan pernah bisa meneruskannya - jadi saya mencoba untuk tidak melakukan sesuatu yang terlalu revolusioner.
sumber
Kenapa tidak menggunakan keduanya? Panggil skrip PowerShell di Cygwin sama seperti skrip lain yang diartikan seperti Perl, dll.
Saya melakukan ini cukup sehingga saya menulis https://bitbucket.org/jbianchi/powershell untuk bungkus Bash untuk memanggil powershell.exe di Cygwin. Ini dapat digunakan sebagai shebang sebagai baris pertama skrip powershell.exe .ps1 (karena PowerShell juga menggunakan "#" sebagai komentar). Lihat https://bitbucket.org/jbianchi/powershell/wiki/Home untuk contohnya
sumber
Dalam beberapa baris, Cygwin dan PowerShell adalah alat yang berbeda namun jika Anda telah menginstal Cygwin Anda dapat menjalankan executable Cygwin dalam sesi PowerShell. Saya sudah terbiasa dengan PowerShell sehingga sekarang saya tidak lagi menggunakan grep, sort, awk, dll. Ada cukup banyak alternatif bawaan di PowerShell, dan jika tidak, Anda dapat menemukan cmdlet di luar sana.
Alat utama yang saya temukan adalah ssh.exe, tetapi dalam sesi PowerShell.
Ini bekerja dengan baik.
sumber
Saya menemukan pemrograman PowerShell tidak sepadan dengan usaha.
Saya memiliki beberapa tahun pengalaman dengan skrip shell di bawah Unix, tetapi saya merasa sangat sulit untuk melakukan banyak hal dengan PowerShell.
Sepertinya banyak fungsi mengharuskan Anda untuk menginterogasi Windows Management Interface dan mengeluarkan perintah seperti SQL untuk mendapatkan informasi yang Anda butuhkan.
Sebagai contoh, saya ingin menulis skrip untuk menghapus semua file dengan akhiran tertentu dari pohon direktori. Di bawah Unix, ini akan menjadi sederhana ...
Setelah beberapa jam bercengkerama dengan
Scripting.FileSystemObject
danWScript.Shell
mengeluarkan "SELECT * FROM Win32_ShortcutFile WHERE Drive = '" & drive & "' AND Path = '" & searchFolder & "'", akhirnya saya menyerah dan menerima perintah Pencarian Windows Explorer dan lakukan saja secara manual. Mungkin ada beberapa cara untuk melakukan apa yang saya inginkan, tetapi saya tidak melihat sesuatu yang jelas dan semua contoh di situs MSDN sangat sepele sehingga tidak berharga.EDIT Heh, tentu saja begitu saya menulis ini, saya mencari-cari lagi dan menemukan apa yang saya lewatkan:
-recurse
opsi untuk perintah hapus-item salah (terungkap jika Anda menggunakanget-help remove-item -detailed
).Saya telah mencoba "remove-item -filter '* .xyz' -recurse" dan itu tidak berhasil, jadi saya menyerah.
Ternyata Anda perlu menggunakan
get-childitem -filter '*.xyz' -recurse | remove-item
sumber
Anda juga dapat mencoba menjalankan skrip Bash di Windows menggunakan BashWin di https://github.com/skanga/BashWin .
sumber
PowerShell sangat kuat, lebih kuat daripada built-in standar shell Unix (tetapi hanya karena mencakup banyak fungsi yang biasanya dikupas untuk subprogram). Juga, pertimbangkan bahwa Anda dapat menulis applet dalam bahasa .NET apa pun, termasuk IronPython , IronRuby , PerlNet, dll. Atau Anda dapat memanggil perintah Cygwin dari PowerShell, mengabaikan semua fungsi tambahan dan itu akan bekerja sama dengan Bash, KornShell , atau terserah...
sumber