アカウント名:
パスワード:
マジいいんすよマジもうbatやvbsは書きたくなくなるぐらいに
昔からのバッチファイルの使い方もできて.NETもCOMもWMIもシームレスに繋げられるしコマンドレット起こして*NIXの各種コマンドラインツールっぽく繋げることもできてシステム管理に用いるグルー言語としてはかなりいい線いってるよね
遅いです。実行速度に関して何かを期待するべきではありません。物量のある作業をPowerShellに振る時は注意が必要です。ある程度使い慣れたユーザーは把握していると思いますが・・・。まず単純にPowerShell文の処理(ループ、算術演算の類)が遅いですし、何故かCOM経由の操作の反応が(VBSからExcel操作等より)遅かったり、うっかり型の自動変換が発生するコードを書きやすかったり、何かと直接必要でないデータをプールしがちだったりします。
速度が問題となる場合は、ボトルネック部分を1. C#で記述し化Add-Type -TypeDefinition で読み込ませて使う2. dll化しAdd-Typeでロードして使う3. PowerShellではやらない等の改善策はあります。まあ全部3に集約されるのですが。
しかしワンライナ―レベルのコードはかなり短く記述でき、表現力と活用範囲が広いため、思い立った操作を完了するための、人レベルでの作業速度としては優秀と個人的には思います。
遅いのはしゃあないです。1行1行ぜんぶ動的に.NETのPowerShellで使うオブジェクトにラップしてっから長大なバッチ処理には向きませんねそれのお蔭でブレークポイントやインスペクタとかが標準でお手軽に利用できる訳ではあるのですが…まぁ…適材適所って逃げの方向で…
これが本当に致命的に使い辛い。WindowsでPowerShellスクリプトの実行セキュリティポリシーを変更する [atmarkit.co.jp]セキュリティ上の理由でそうしているのは分かるが、解除すれば結局、穴開けてるわけだし、バッチも WSH もデフォで ON なのに、PowerShell だけデフォルトで restricted にしてる意味が分からない。
PowerShellは(最近のWindowsでは)OS標準で入っているものだから、デフォでONだとwshの悪夢再びになってしまうから。この設定でいいと思うよ。使いたい人だけRemoteSignedにすりゃいい。
PowerShellを使い出してから、Cygwin/MingwあたりのUNIX互換ツールセットを、職場でも自宅でもほぼ使わなくなりましたね。学生の頃から10年以上使い続けてきましたが。
UNIXのCLIと比べても良くできてると思います(あらゆる点で勝っているとは言いませんが)。なにより、統一感があって、使い方を覚えやすく、忘れにくいのがいい。
これは同意する。
cmd.exeやBatchファイルでは難しかったor面倒だった処理がPowerShellなら結構楽に記述できるので、Cygwinが無いと辛いって処理が殆ど無くなった。(perlかawk/sed使わせてくれって思う時あるけど)なによりWindowsに標準添付されツールってのは大きいですね。自分が運用管理していない機器でも、ある程度はスクリプトの動作が保障できる。
嫌な点は、起動時の微妙な待ち時間かな。cmd.exeと違うし、起動処理に時間が必要なのは判るんだけど・・・あの数秒の待ち状態が嫌(笑#単なる我侭って事は、十分に認識してます・
cmdでは面倒、出来なかった処理が簡単に出来るのは確かなんですが逆にcmdじゃないと無理な事が残っているのが残念(例えばファイルのリネームとか、動画処理などで大量のデータをパイプで転送する時など)
ちなみにPSの起動時間は該当アセンブリをngenしておくとかなり改善されます
C#ベースのインタプリタなら覚える気になりますが…あと変な変数スコープ
変数スコープはいわゆるダイナミックスコープで、bashなどのUNIX系シェルの変数スコープと同じです。まあ、いまどき何故?という疑問はありますが、言語設計者によれば、いろいろ試した結果、ダイナミックスコープがいちばん納得できたそうです。
文法的には、基本的には普通の手続き型言語ですし、.NET Frameworkのライブラリがすべて使えますので、必要とあれば、型なしのC#みたいな使い方ができます(LINQとかはありませんが)。.NET Frameworkを使いまくるPowerShellプログラムを書いていると、「これ、C#でよくね?」みたいな気分になりますが、そういう使い方ができてしまうのはやはり便利です。
また、C#で書いたコードをPowerShellから呼び出すのも簡単ですし、C#でコマンドレットを定義するのも簡単です。PowerShellの基盤が.NET Frameworkで、型システムも共通なので、C#とは非常に親和性が高く、C#で定義したクラスがPowerShellから普通に扱えます(いわゆる型変換ではなく、オブジェクトをそのままPowerShellで操作できるのです)。C#プログラムのフロントエンドインターフェイス用の環境としても、便利に使えると思います。
>bashなどのUNIX系シェルの変数スコープと同じです。Bashとは違う。ローカルで同じ名前の変数をときに、枝分かれする感じ。 = Python?最初から別々になっているPHP/Rubyタイプとも違う。
囲い込まれてみましょう。
楽になりますよ?
OSSに囲い込まれるよりはマシでしょ
.NET Core「Microsoft製ならOSSから逃れられると、いつから錯覚していた?」
LINQ欲しいかな。いや呼ぼうと思えば呼べるけどね。正規表現で書くとばっと見がひどい、かといってパイプで分離すると処理的にイマイチ、下手に分離することで誤解招くかもしれない、なんてとき使うの悩むんで。まあシェルなんでパイプでつなぐ思想だろうから無いのが正しいのかも知れませんがね。
Windowsをよく使っていて、自分がIT技術者のカテゴリに入る人間だと思っているなら今日からでも使うべきですね。覚えるというより、日常的に使用して知識を蓄積して行くのがよいでしょう。
よりによって基準がそこ?
十年前ならわかるが、今さらベンダー・ロックインの言語覚えたくないです。マルチプラットフォームで出直してください
だからLinuxでも使えるようになりつつあるという記事なのだが。
出直して来たって話でしょ?
PowerShellはOSSなの?Linuxで使える=ベンダー・ロックイン ではないことくらいMS信者でも理解しようぜ
Linuxで使える=ベンダー・ロックイン*回避*
OSS信者は頭悪いんでしょ
提示された問題のうちマルチプラットフォームは解決されても、ベンダー・ロックインの問題はまるっきり解決出来てないような気がしますが。
PowerShellで業務ソフトを組んでます。速度はあれだけど、開発はとても楽です。
開発を依頼してた会社がパンク状態になり1晩で夜間バッチを10本ほどでっち上げたところそのまま本番環境まで生き残ることになりました
#開発費返せw
確かに便利なんだが、サーバをリモートから管理する際にいちいちリモートデスクトップで入らないといけないので、標準でSSHサーバに対応してくれませんかねぇ。
Enter-PSSessionかInvoke-Command使えば同じことできますが?
あれはPowerShellの良く考えられたところで、あえて名前を規則的にすることで、冗長さと引き換えにコマンドを覚えやすく、探しやすくしているのです。「PowerShell 命名規則」あたりでググれば出てきます。
よく使うコマンドにはエイリアスが定義されているので、そちらを使います(エイリアスのつけ方もかなり規則的です)。例:Get-ChildItem → gciInvoke-Expression → iexGet-Command → gcmSelect-String → sls
一見ダサく感じられますが、一度使い始めれば、ありがたさが分かって印象が180度変わると思います。UNIX系ツールの名前と比べて、とても覚えやすく、未知のコマンドを探すのも容易です。
UNIX文化にはある種のマッチョイズムがあって、アルファベット数文字のコマンド名とオプション名を大量に暗記しているのが前提で話されることが多く、暗記にかかるコストについて、ほとんど話題になることがありません。PowerShellは、その暗黙のコストを認識し、事前の学習時間なしにだれでも快適に使えるような命名規則になっています。
PowerShellの問題点は常用性かと思うけど、どうでしょう?Unixの場合、それなりに使うので、使ううちに覚えます。それ以上はperlとかpythonとかLL系を使うかと思います。Windowsはその辺の連続性というか、CLIの常用性が低いのがちょっと...と言う感じが。#Windowsサーバ自体を常用してない人なんですが。
それはWindowsがGUIで管理できるって問題であってpowershellの問題ではないと思う同じような使用頻度だったら、コマンド名の規則性があるPowerShellの方が良いのでは…という意見になるかと思う
何が冗長(笑)なんでしょう
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
人生unstable -- あるハッカー
PowerShellもっと流行らそうぜ (スコア:0)
マジいいんすよマジ
もうbatやvbsは書きたくなくなるぐらいに
Re:PowerShellもっと流行らそうぜ (スコア:2, 興味深い)
昔からのバッチファイルの使い方もできて
.NETもCOMもWMIもシームレスに繋げられるし
コマンドレット起こして*NIXの各種コマンドラインツールっぽく繋げることもできて
システム管理に用いるグルー言語としてはかなりいい線いってるよね
Re:PowerShellもっと流行らそうぜ (スコア:2)
Re: (スコア:0)
遅いです。実行速度に関して何かを期待するべきではありません。
物量のある作業をPowerShellに振る時は注意が必要です。ある程度使い慣れたユーザーは把握していると思いますが・・・。
まず単純にPowerShell文の処理(ループ、算術演算の類)が遅いですし、何故かCOM経由の操作の反応が(VBSからExcel操作等より)遅かったり、
うっかり型の自動変換が発生するコードを書きやすかったり、何かと直接必要でないデータをプールしがちだったりします。
速度が問題となる場合は、ボトルネック部分を
1. C#で記述し化Add-Type -TypeDefinition で読み込ませて使う
2. dll化しAdd-Typeでロードして使う
3. PowerShellではやらない
等の改善策はあります。まあ全部3に集約されるのですが。
しかしワンライナ―レベルのコードはかなり短く記述でき、表現力と活用範囲が広いため、
思い立った操作を完了するための、人レベルでの作業速度としては優秀と個人的には思います。
Re: (スコア:0)
遅いのはしゃあないです。1行1行ぜんぶ動的に.NETのPowerShellで使うオブジェクトにラップしてっから長大なバッチ処理には向きませんね
それのお蔭でブレークポイントやインスペクタとかが標準でお手軽に利用できる訳ではあるのですが…まぁ…適材適所って逃げの方向で…
PowerShellの致命的欠点 (スコア:2)
これが本当に致命的に使い辛い。
WindowsでPowerShellスクリプトの実行セキュリティポリシーを変更する [atmarkit.co.jp]
セキュリティ上の理由でそうしているのは分かるが、
解除すれば結局、穴開けてるわけだし、バッチも WSH もデフォで ON なのに、PowerShell だけデフォルトで restricted にしてる意味が分からない。
uxi
Re: (スコア:0)
PowerShellは(最近のWindowsでは)OS標準で入っているものだから、デフォでONだとwshの悪夢再び
になってしまうから。
この設定でいいと思うよ。使いたい人だけRemoteSignedにすりゃいい。
Re:PowerShellもっと流行らそうぜ (スコア:1)
PowerShellを使い出してから、Cygwin/MingwあたりのUNIX互換ツールセットを、職場でも自宅でもほぼ使わなくなりましたね。
学生の頃から10年以上使い続けてきましたが。
UNIXのCLIと比べても良くできてると思います(あらゆる点で勝っているとは言いませんが)。
なにより、統一感があって、使い方を覚えやすく、忘れにくいのがいい。
Re:PowerShellもっと流行らそうぜ (スコア:1)
これは同意する。
cmd.exeやBatchファイルでは難しかったor面倒だった処理が
PowerShellなら結構楽に記述できるので、Cygwinが無いと辛いって
処理が殆ど無くなった。(perlかawk/sed使わせてくれって思う時あるけど)
なによりWindowsに標準添付されツールってのは大きいですね。
自分が運用管理していない機器でも、ある程度はスクリプトの動作が保障できる。
嫌な点は、起動時の微妙な待ち時間かな。
cmd.exeと違うし、起動処理に時間が必要なのは判るんだけど・・・
あの数秒の待ち状態が嫌(笑
#単なる我侭って事は、十分に認識してます・
Re: (スコア:0)
cmdでは面倒、出来なかった処理が簡単に出来るのは確かなんですが
逆にcmdじゃないと無理な事が残っているのが残念
(例えばファイルのリネームとか、動画処理などで大量のデータをパイプで転送する時など)
ちなみにPSの起動時間は該当アセンブリをngenしておくとかなり改善されます
Re: (スコア:0)
C#ベースのインタプリタなら覚える気になりますが…
あと変な変数スコープ
Re:PowerShellもっと流行らそうぜ (スコア:2, 参考になる)
変数スコープはいわゆるダイナミックスコープで、bashなどのUNIX系シェルの変数スコープと同じです。
まあ、いまどき何故?という疑問はありますが、言語設計者によれば、いろいろ試した結果、ダイナミックスコープがいちばん納得できたそうです。
文法的には、基本的には普通の手続き型言語ですし、.NET Frameworkのライブラリがすべて使えますので、
必要とあれば、型なしのC#みたいな使い方ができます(LINQとかはありませんが)。
.NET Frameworkを使いまくるPowerShellプログラムを書いていると、「これ、C#でよくね?」みたいな気分になりますが、
そういう使い方ができてしまうのはやはり便利です。
また、C#で書いたコードをPowerShellから呼び出すのも簡単ですし、C#でコマンドレットを定義するのも簡単です。
PowerShellの基盤が.NET Frameworkで、型システムも共通なので、C#とは非常に親和性が高く、
C#で定義したクラスがPowerShellから普通に扱えます(いわゆる型変換ではなく、オブジェクトをそのままPowerShellで操作できるのです)。
C#プログラムのフロントエンドインターフェイス用の環境としても、便利に使えると思います。
Re: (スコア:0)
>bashなどのUNIX系シェルの変数スコープと同じです。
Bashとは違う。
ローカルで同じ名前の変数をときに、枝分かれする感じ。 = Python?
最初から別々になっているPHP/Rubyタイプとも違う。
Re: (スコア:0)
囲い込まれてみましょう。
楽になりますよ?
Re: (スコア:0)
OSSに囲い込まれるよりはマシでしょ
Re: (スコア:0)
.NET Core「Microsoft製ならOSSから逃れられると、いつから錯覚していた?」
Re: (スコア:0)
LINQ欲しいかな。いや呼ぼうと思えば呼べるけどね。
正規表現で書くとばっと見がひどい、かといってパイプで分離すると処理的にイマイチ、下手に分離することで誤解招くかもしれない、なんてとき使うの悩むんで。
まあシェルなんでパイプでつなぐ思想だろうから無いのが正しいのかも知れませんがね。
Re: (スコア:0)
Windowsをよく使っていて、自分がIT技術者のカテゴリに入る人間だと思っているなら今日からでも使うべきですね。
覚えるというより、日常的に使用して知識を蓄積して行くのがよいでしょう。
Re: (スコア:0)
よりによって基準がそこ?
Re: (スコア:0)
十年前ならわかるが、今さらベンダー・ロックインの言語覚えたくないです。マルチプラットフォームで出直してください
Re: (スコア:0)
だからLinuxでも使えるようになりつつあるという記事なのだが。
出直して来たって話でしょ?
Re:PowerShellもっと流行らそうぜ (スコア:2)
PowerShellはOSSなの?
Linuxで使える=ベンダー・ロックイン ではないことくらいMS信者でも理解しようぜ
Re: (スコア:0)
Linuxで使える=ベンダー・ロックイン*回避*
Re: (スコア:0)
OSS信者は頭悪いんでしょ
Re: (スコア:0)
提示された問題のうちマルチプラットフォームは解決されても、ベンダー・ロックインの問題はまるっきり解決出来てないような気がしますが。
Re: (スコア:0)
PowerShellで業務ソフトを組んでます。
速度はあれだけど、開発はとても楽です。
Re: (スコア:0)
開発を依頼してた会社がパンク状態になり
1晩で夜間バッチを10本ほどでっち上げたところ
そのまま本番環境まで生き残ることになりました
#開発費返せw
Re: (スコア:0)
確かに便利なんだが、サーバをリモートから管理する際にいちいちリモートデスクトップで入らないといけないので、標準でSSHサーバに対応してくれませんかねぇ。
Re:PowerShellもっと流行らそうぜ (スコア:1)
Enter-PSSessionかInvoke-Command使えば同じことできますが?
Re:PowerShellもっと流行らそうぜ (スコア:2, 興味深い)
あれはPowerShellの良く考えられたところで、あえて名前を規則的にすることで、冗長さと引き換えにコマンドを覚えやすく、探しやすくしているのです。
「PowerShell 命名規則」あたりでググれば出てきます。
よく使うコマンドにはエイリアスが定義されているので、そちらを使います(エイリアスのつけ方もかなり規則的です)。
例:
Get-ChildItem → gci
Invoke-Expression → iex
Get-Command → gcm
Select-String → sls
一見ダサく感じられますが、一度使い始めれば、ありがたさが分かって印象が180度変わると思います。
UNIX系ツールの名前と比べて、とても覚えやすく、未知のコマンドを探すのも容易です。
UNIX文化にはある種のマッチョイズムがあって、アルファベット数文字のコマンド名とオプション名を大量に暗記しているのが前提で話されることが多く、
暗記にかかるコストについて、ほとんど話題になることがありません。
PowerShellは、その暗黙のコストを認識し、事前の学習時間なしにだれでも快適に使えるような命名規則になっています。
Re: (スコア:0)
PowerShellの問題点は常用性かと思うけど、どうでしょう?
Unixの場合、それなりに使うので、使ううちに覚えます。それ以上はperlとかpythonとかLL系を使うかと思います。
Windowsはその辺の連続性というか、CLIの常用性が低いのがちょっと...と言う感じが。
#Windowsサーバ自体を常用してない人なんですが。
Re:PowerShellもっと流行らそうぜ (スコア:1)
それはWindowsがGUIで管理できるって問題であってpowershellの問題ではないと思う
同じような使用頻度だったら、コマンド名の規則性があるPowerShellの方が良いのでは…
という意見になるかと思う
Re: (スコア:0)
いまは GUI も PowerShell へのラップしか提供してないので、機能面で劣るとか CLI では出来ないということは一つもありません。GUI で出来ないことは多いですが。
なので、Windows系で管理するなら PowerShell 常用はあたりまえ。
他のスクリプト系言語で処理を補うこともまず無いです。
PowerShell が強力すぎるので、.NET 系言語で拡張が自由なので、他のスクリプト言語を使う必要がない。
Re: (スコア:0)
何が冗長(笑)なんでしょう