アカウント名:
パスワード:
シームレスに.NET Frameworkも (やりたくないが) COMも叩けるから今までのスクリプティング環境から世界が変わる。調子こいて長大なバッチ処理書いたりするとめちゃくちゃ遅くて悶絶するが…
実行速度はなんとかならんものかと思いますね。
楽しい言語なので、何でもかんでもPowerShellでやりたくなりますが、ちょっと取り扱うデータ量が大きくなると、遅くてかなわんです。
オープンソース化で、実行速度向上しないかなあ(他力本願)。
PowerShellだととにかくスクリプトが長くなる。
ぱっと書くにはめんどくさいしかっちり長々と書くと他の言語で書くより圧倒的に遅くなる
既存の言語から乗り換える人いるのかなーというのが正直な感想。PythonやBashやPHPやJavaScriptで事足りてる人に何かアピールできるところって有りますか?
マルチプラットフォームってことなら他の言語のほうが実績も資産もあるし、何より早い。例えば、下記のようなキメラな処理でもPowerShellより圧倒的に早い上に書くのも簡単。grep "hoge*" hoge.txt | gawk 'BEGIN{FS=";"}{print $3}' |
これなあ…lsの結果とか、空の時とファイル1個の時と2個以上の時とで型が変わっちゃうんだよね。知ってて問題に気付けばすぐ直せるんだけど、初心者は必ず嵌るし、スクリプト適当に書いてると後で問題が発覚する。何気なく対策入れてるコードは何やら呪文めいてる(リンク先では不思議なカンマが入っている)し、この自動変換いらんかったんじゃないかなあ…
lsの結果とか、空の時とファイル1個の時と2個以上の時とで型が変わっちゃうんだよね。
それって例えば、
$list = @(ls)
で解決しない?
確かにハマりやすい点ではあって、PowerShellの最初の方で教えとくべき。
うん、ls自体がコレクションを返すイメージがあるのに、1次元のコレクションを$listに入れるのにこう書いてると、よく知らない人は@()余計じゃねって思うでしょう。思わないかな、PowerShell覚えたての人にとってどうなんだろ。単純な配列リテラルと認識してると思うんだけど。
その辺常識化されてる気がしないから 「#@()で常に配列を返す」 とかコメント入れようとか思うけどでも毎回コメント書くのか?みたいな。
後でパイプライン通すだけのものを一時的に$listに入れる時は@()とかは要らないわけで、類似の複数のコードの中@()してるのしてないのが出てくるし、じゃあ逆に全部@()で括るの統一するかっつうと変数挟まないものでも @(ls)|%{$_.FullName} とかしないとバランス悪い気がするし、なんかなー。
ぱっと書くにはめんどくさいし
入力補完が賢いので、それほど面倒とも思わないけど。オブジェクトのメソッド・プロパティまで補完が効いたりするしね。
かっちり長々と書くと他の言語で書くより圧倒的に遅くなる
スピードを気にするようなところに使うもんじゃないんじゃないかな。
PythonやBashやPHPやJavaScriptで事足りてる人に何かアピールできるところって有りますか?
Windowsなら別ですが、Unix系OS上で、という話なら、特に無い、というのが正直なところですかね。
ただ、パイプにオブジェクト列が流れていく様は、おもしろいと思います。
ちょっと凝って、Pythonで書くとやや長くなるけど、PowerShellほどにはならないような
長くなるのは、cmdletが長かったり、オプションが長かったりするせいだと思うけど、それも入力補完があれば気にならないけどな。
いまどき、IDEとかの入力補完があるのが前提ですよね。Bashを対話的に使ってても入力補完はあるわけだし。
そんなことより、.Netのライブラリが微妙に不親切なのが気に食わないです。ちょっとしたあったら便利なメソッドが存在してないので、いちいちちょっとづつ実装しなきゃいけない。# スニペット使え?
元コメじゃないんですが、入力補完は気持ち悪いので完全オフにしています。あっ、PowerShellそのものはチマチマ使ったりしてますよ。
入力補完は気持ち悪いので完全オフにしています。
参考までに、なにが「気持ち悪い」のか聞かせてくれない?Bashと感触が違うからとか?
ディスプレイに映る自分の顔、じゃないかな?
元コメではなく、元々コメですが、さくさく保管されていたものが一瞬もたついてイラッとしたり同じタイミングで打てなかったりするのが嫌ですね。
後は、似た名称のながーいオプションが多くて勘違いするとかかな・・・。
実行してみて、あれってなること多い
さくさく保管されていたものが一瞬もたついて
# ヒストリの話じゃなくて、補完の書き間違いだよね?
なんかよく解らんですが、そーゆーこともあるんですかね。
そーゆーのこそ、入力補完が真価を発揮するところでしょ。
新しいISEの補完とか、かなり便利だと思うけどな。
>なんかよく解らんですが、そーゆーこともあるんですかね。#3067406 [srad.jp]ではありませんが、windows版でスクリプトを編集中に数文字入れた後Tabキーで補完させようとするとISE下部のステータス欄に"Intelli sence..."と表示されてしばらく(3~5秒)返ってこないときがあります。Moduleを多くImportしているときに発生するので、仕方ないものと考えています。
入力補完Offとかそれもう生きている意味ないじゃん…
WindowsのISEだと、cmdletのパラメータの入力ダイアログが出てくるよね。cmdletってIBMのAS/400のコマンドオブジェクトの影響があると思う。MSがかつてAS/400ユーザーだったことからの推測だけど。
COM以外にも.NETのアセンブリも同じように扱えなかったっけ?
使えるよ。というより、そっちがメインじゃないかと思う。黒い画面で文字入力とか今時しないだろ。
VisualStudio使わずSystem.Windows.Forms使ってアプリ作れるのがいいんじゃないのかね。ただし、IDEの支援なしにFormsのオブジェクトあれこれ作るのはかなりつらい。細かなフォーム作っているとやっぱりXAMLが欲しくなる。
つまり、MSの罠
> 黒い画面で文字入力とか今時しないだろ。
それはあなたの感想ですよね?
PowerShellの背景が黒じゃないことを知らない人はおよびじゃないです
背景色、単にcmd.exeの設定だから変えられるョわたしは背景色はクリームっぽい色、文字色黒で使ってる
帯襷ではあるけど久々に読むと古文書みたいになってるbashやらのシェルスクリプトが綺麗に書き換えられると思うんすよね。ちゃんとした構造化プログラミングもできつつ*NIXの文化圏に沿ってパイプやリダイレクトでお繋ぎできるスクリプト言語なんで。とはいえ.NETやCOMやOCXを手軽かつ安全にブッ叩けるのが一番パワフルな使い方なんでそういった裾野が無いとうま味も無いか…
WindowsのパイプやリダイレクトがUnixのそれと同等と思える時点でお察し案件。
ぶっちゃけ、何がリダイレクトされるかがよりシンプルなUnixのほうが、インタフェースとして優れてると思うよ。PowerShellは、高機能なんだが直感的ではない感じ。
じゃあアセンブラですべてやればいいんじゃないかな
何でもバイトストリームと割り切ってしまうUnixのやり方もいい加減古臭いよねと言いつつ、いざパイプにオブジェクトが流れるようになると戸惑ってしまう
百聞は(ry https://msdn.microsoft.com/library/system.management.automation.cmdlet.aspx [microsoft.com]
同感だな。UNIXのやり方が、環境も含めて仕事をこなすのに十分、とは言えるけど、インターフェースとしては古臭い。
もっとも、PowerShellはまだまだ不十分で、Windowsを管理するのに十分とは言い難いのも事実。
何が「じゃあ」なのか分からない
> PythonやBashやPHPやJavaScriptで事足りてる人に何かアピールできるところって有りますか?PythonやPHPやJavaScript…JavaScript!? はともかく、Bashに比べたらプログラムは遙かに書きやすいからなぁUNIXの哲学()とか言ってShellScriptでなんでもかんでもやろうとする人いるけど、あんなの黒魔術以外の何物でも無いよ
Mac でまともに動かす環境ができたら(もうある?失敬調べてすらいない…)、使途は AppleScript や Automator と競合するんですかね。だとしたらユーザとしては嬉しいですな。
今までも Shell Script やら Python/Sikuli やら、微妙に住み分け&微妙に競合してたけど、デスクトップ向けスクリプト言語の選択肢が増えるのは良いことと思います。尻ひっぱたかれて Apple 純正環境が進化してくれれば、もっと良いんですが。
自己レスみんなのコメント読んでたら、だんだん PowerShell 勉強したくなってきました。新しめの(一昨年・昨年くらいの)参考書も出てますね。
時に、まったく似てないにもかかわらず、昔挫折した REXX みたいな雰囲気を感じてます。なんでじゃろ。
PowerShellがAppleScriptの代替としてつとまるようになるには、Open Scripting Architectureに準拠させないといけない。やろうと思えば出来ないことはないかもしれないけど、単なるベタ移植では済まないね。
ワンライナーオンリーで使うんならいいんだけど、スクリプトとして残す場合、そのコードは醜い。そして美しく書くこともできない。
まぁ悪くはない。良くできているのは確かだ。
でも、数十万個とかの個数が多いオブジェクトをパイプに渡そうとするとコケる。PowerShellのパイプはUNIXのパイプに見えてそうじゃない。膨大な行を人間がやりたくないからスクリプトにやらせたいのに、扱える数に限度があってそれができない。
・・で、自分の場合は結局perlにやらせることになった。
それは、PowerShellのパイプのせいじゃないよ。例えば、要素数が10,000,000(百万)個でも、
PS> 1..10000000 | Measure-Object -Minimum -Maximum -Average -Sum Count : 10000000Average : 5000000.5Sum : 50000005000000Maximum : 10000000Minimum : 1Property : PS>
は(信じられないくらい時間はかかるが)実行できる。
問題は、パイプの直後のcmdletで、こいつの作り次第なんだよね。
いずれにせよ、PowerShellがまだまだだ、という批判は、妥当ではある(笑)。
例えば、要素数が10,000,000(百万)個でも、
ふむ。新手の詐欺として使えそうだな(笑
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー
PowerShellはいいゾ (スコア:0)
シームレスに.NET Frameworkも (やりたくないが) COMも叩けるから今までのスクリプティング環境から世界が変わる。
調子こいて長大なバッチ処理書いたりするとめちゃくちゃ遅くて悶絶するが…
Re: (スコア:0)
実行速度はなんとかならんものかと思いますね。
楽しい言語なので、何でもかんでもPowerShellでやりたくなりますが、
ちょっと取り扱うデータ量が大きくなると、遅くてかなわんです。
オープンソース化で、実行速度向上しないかなあ(他力本願)。
Re: (スコア:0)
PowerShellだととにかくスクリプトが長くなる。
ぱっと書くにはめんどくさいし
かっちり長々と書くと他の言語で書くより圧倒的に遅くなる
既存の言語から乗り換える人いるのかなーというのが正直な感想。
PythonやBashやPHPやJavaScriptで事足りてる人に何かアピールできるところって有りますか?
マルチプラットフォームってことなら他の言語のほうが実績も資産もあるし、何より早い。
例えば、下記のようなキメラな処理でもPowerShellより圧倒的に早い上に書くのも簡単。
grep "hoge*" hoge.txt | gawk 'BEGIN{FS=";"}{print $3}' |
Re:PowerShellはいいゾ (スコア:3)
http://www.pine4.net/Memo/Article/Archives/203/ [pine4.net]
大抵はObject[]だろうがArrayListだろうがどちらでも良いのだが、要素数が1つの場合に解かれて、ListのListみたいなものを扱うとわかりづらいバグになった。
Re: (スコア:0)
これなあ…
lsの結果とか、空の時とファイル1個の時と2個以上の時とで型が変わっちゃうんだよね。
知ってて問題に気付けばすぐ直せるんだけど、初心者は必ず嵌るし、スクリプト適当に書いてると後で問題が発覚する。
何気なく対策入れてるコードは何やら呪文めいてる(リンク先では不思議なカンマが入っている)し、
この自動変換いらんかったんじゃないかなあ…
Re:PowerShellはいいゾ (スコア:1)
lsの結果とか、空の時とファイル1個の時と2個以上の時とで型が変わっちゃうんだよね。
それって例えば、
で解決しない?
確かにハマりやすい点ではあって、PowerShellの最初の方で教えとくべき。
Re: (スコア:0)
うん、ls自体がコレクションを返すイメージがあるのに、
1次元のコレクションを$listに入れるのにこう書いてると、よく知らない人は@()余計じゃねって思うでしょう。
思わないかな、PowerShell覚えたての人にとってどうなんだろ。単純な配列リテラルと認識してると思うんだけど。
その辺常識化されてる気がしないから 「#@()で常に配列を返す」 とかコメント入れようとか思うけど
でも毎回コメント書くのか?みたいな。
後でパイプライン通すだけのものを一時的に$listに入れる時は@()とかは要らないわけで、
類似の複数のコードの中@()してるのしてないのが出てくるし、
じゃあ逆に全部@()で括るの統一するかっつうと変数挟まないものでも @(ls)|%{$_.FullName} とかしないとバランス悪い気がするし、なんかなー。
Re:PowerShellはいいゾ (スコア:1)
ぱっと書くにはめんどくさいし
入力補完が賢いので、それほど面倒とも思わないけど。
オブジェクトのメソッド・プロパティまで補完が効いたりするしね。
かっちり長々と書くと他の言語で書くより圧倒的に遅くなる
スピードを気にするようなところに使うもんじゃないんじゃないかな。
PythonやBashやPHPやJavaScriptで事足りてる人に何かアピールできるところって有りますか?
Windowsなら別ですが、Unix系OS上で、という話なら、特に無い、というのが正直なところですかね。
ただ、パイプにオブジェクト列が流れていく様は、おもしろいと思います。
ちょっと凝って、Pythonで書くとやや長くなるけど、PowerShellほどにはならないような
長くなるのは、cmdletが長かったり、オプションが長かったりするせいだと思うけど、それも入力補完があれば気にならないけどな。
いまどき、IDEとかの入力補完があるのが前提ですよね。
Bashを対話的に使ってても入力補完はあるわけだし。
そんなことより、.Netのライブラリが微妙に不親切なのが気に食わないです。
ちょっとしたあったら便利なメソッドが存在してないので、いちいちちょっとづつ実装しなきゃいけない。
# スニペット使え?
Re: (スコア:0)
元コメじゃないんですが、入力補完は気持ち悪いので完全オフにしています。
あっ、PowerShellそのものはチマチマ使ったりしてますよ。
Re:PowerShellはいいゾ (スコア:1)
入力補完は気持ち悪いので完全オフにしています。
参考までに、なにが「気持ち悪い」のか聞かせてくれない?
Bashと感触が違うからとか?
Re: (スコア:0)
ディスプレイに映る自分の顔、じゃないかな?
Re: (スコア:0)
元コメではなく、元々コメですが、
さくさく保管されていたものが一瞬もたついてイラッとしたり
同じタイミングで打てなかったりするのが嫌ですね。
後は、似た名称のながーいオプションが多くて
勘違いするとかかな・・・。
実行してみて、あれってなること多い
Re:PowerShellはいいゾ (スコア:1)
さくさく保管されていたものが一瞬もたついて
# ヒストリの話じゃなくて、補完の書き間違いだよね?
なんかよく解らんですが、そーゆーこともあるんですかね。
後は、似た名称のながーいオプションが多くて
勘違いするとかかな・・・。
そーゆーのこそ、入力補完が真価を発揮するところでしょ。
新しいISEの補完とか、かなり便利だと思うけどな。
Re: (スコア:0)
>なんかよく解らんですが、そーゆーこともあるんですかね。
#3067406 [srad.jp]ではありませんが、windows版でスクリプトを編集中に数文字入れた後Tabキーで補完させようとするとISE下部のステータス欄に"Intelli sence..."と表示されてしばらく(3~5秒)返ってこないときがあります。Moduleを多くImportしているときに発生するので、仕方ないものと考えています。
Re: (スコア:0)
入力補完Offとかそれもう生きている意味ないじゃん…
Re: (スコア:0)
WindowsのISEだと、cmdletのパラメータの入力ダイアログが出てくるよね。cmdletってIBMのAS/400のコマンドオブジェクトの影響があると思う。MSがかつてAS/400ユーザーだったことからの推測だけど。
Re: (スコア:0)
COM以外にも.NETのアセンブリも同じように扱えなかったっけ?
Re: (スコア:0)
使えるよ。というより、そっちがメインじゃないかと思う。
黒い画面で文字入力とか今時しないだろ。
VisualStudio使わずSystem.Windows.Forms使ってアプリ作れるのがいいんじゃないのかね。
ただし、IDEの支援なしにFormsのオブジェクトあれこれ作るのはかなりつらい。
細かなフォーム作っているとやっぱりXAMLが欲しくなる。
つまり、MSの罠
Re: (スコア:0)
> 黒い画面で文字入力とか今時しないだろ。
それはあなたの感想ですよね?
Re: (スコア:0)
PowerShellの背景が黒じゃないことを知らない人はおよびじゃないです
Re:PowerShellはいいゾ (スコア:1)
背景色、単にcmd.exeの設定だから変えられるョ
わたしは背景色はクリームっぽい色、文字色黒で使ってる
Re: (スコア:0)
帯襷ではあるけど久々に読むと古文書みたいになってるbashやらのシェルスクリプトが綺麗に書き換えられると思うんすよね。
ちゃんとした構造化プログラミングもできつつ*NIXの文化圏に沿ってパイプやリダイレクトでお繋ぎできるスクリプト言語なんで。
とはいえ.NETやCOMやOCXを手軽かつ安全にブッ叩けるのが一番パワフルな使い方なんでそういった裾野が無いとうま味も無いか…
Re: (スコア:0)
WindowsのパイプやリダイレクトがUnixのそれと同等と思える時点でお察し案件。
Re:PowerShellはいいゾ (スコア:1)
Re: (スコア:0)
ぶっちゃけ、何がリダイレクトされるかがよりシンプルなUnixのほうが、インタフェースとして優れてると思うよ。
PowerShellは、高機能なんだが直感的ではない感じ。
Re: (スコア:0)
じゃあアセンブラですべてやればいいんじゃないかな
Re: (スコア:0)
何でもバイトストリームと割り切ってしまうUnixのやり方もいい加減古臭いよねと言いつつ、
いざパイプにオブジェクトが流れるようになると戸惑ってしまう
Re: (スコア:0)
Re: (スコア:0)
百聞は(ry https://msdn.microsoft.com/library/system.management.automation.cmdlet.aspx [microsoft.com]
Re:PowerShellはいいゾ (スコア:1)
同感だな。
UNIXのやり方が、環境も含めて仕事をこなすのに十分、とは言えるけど、インターフェースとしては古臭い。
もっとも、PowerShellはまだまだ不十分で、Windowsを管理するのに十分とは言い難いのも事実。
Re: (スコア:0)
何が「じゃあ」なのか分からない
Re: (スコア:0)
> PythonやBashやPHPやJavaScriptで事足りてる人に何かアピールできるところって有りますか?
PythonやPHPやJavaScript…JavaScript!? はともかく、Bashに比べたらプログラムは遙かに書きやすいからなぁ
UNIXの哲学()とか言ってShellScriptでなんでもかんでもやろうとする人いるけど、あんなの黒魔術以外の何物でも無いよ
Re: (スコア:0)
Mac でまともに動かす環境ができたら(もうある?失敬調べてすらいない…)、
使途は AppleScript や Automator と競合するんですかね。
だとしたらユーザとしては嬉しいですな。
今までも Shell Script やら Python/Sikuli やら、微妙に住み分け&微妙に競合してたけど、
デスクトップ向けスクリプト言語の選択肢が増えるのは良いことと思います。
尻ひっぱたかれて Apple 純正環境が進化してくれれば、もっと良いんですが。
Re: (スコア:0)
自己レス
みんなのコメント読んでたら、だんだん PowerShell 勉強したくなってきました。
新しめの(一昨年・昨年くらいの)参考書も出てますね。
時に、まったく似てないにもかかわらず、昔挫折した REXX みたいな雰囲気を感じてます。
なんでじゃろ。
Re: (スコア:0)
PowerShellがAppleScriptの代替としてつとまるようになるには、Open Scripting Architectureに準拠させないといけない。やろうと思えば出来ないことはないかもしれないけど、単なるベタ移植では済まないね。
Re: (スコア:0)
ワンライナーオンリーで使うんならいいんだけど、スクリプトとして残す場合、そのコードは醜い。そして美しく書くこともできない。
Re: (スコア:0)
まぁ悪くはない。良くできているのは確かだ。
でも、数十万個とかの個数が多いオブジェクトをパイプに渡そうとするとコケる。
PowerShellのパイプはUNIXのパイプに見えてそうじゃない。
膨大な行を人間がやりたくないからスクリプトにやらせたいのに、扱える数に限度があってそれができない。
・・で、自分の場合は結局perlにやらせることになった。
Re:PowerShellはいいゾ (スコア:1)
でも、数十万個とかの個数が多いオブジェクトをパイプに渡そうとするとコケる。
PowerShellのパイプはUNIXのパイプに見えてそうじゃない。
膨大な行を人間がやりたくないからスクリプトにやらせたいのに、扱える数に限度があってそれができない。
それは、PowerShellのパイプのせいじゃないよ。
例えば、要素数が10,000,000(百万)個でも、
は(信じられないくらい時間はかかるが)実行できる。
問題は、パイプの直後のcmdletで、こいつの作り次第なんだよね。
いずれにせよ、PowerShellがまだまだだ、という批判は、妥当ではある(笑)。
Re: (スコア:0)
ふむ。新手の詐欺として使えそうだな(笑