【最強CUI】PowerShell -Part 2 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>391
> 新しい技術、新しい技術連呼で具体例は一切なしか。
ん?
ちょっと調べりゃすぐわかるだろうに...
・パイプにオブジェクトを渡せる
・スクリプトの癖に型を強制できる
・一部の処理でループを記述せずに配列を処理するできる (-eq 演算子とか switch 文とか) > パイプにオブジェクトを渡せる
すごいようでこれがあまりにもすごくないんだよな。残念大勝の一番の理由がこれ。 >>395
具体的って?
.NETにオブジェクトとして渡せるだけで十分だろ。 なにひとつ具体的にあげられないから議論にならないな
典型的な人を馬鹿にした俺かっこいいのプログラミング初心者だろう unixシェルは同じコマンドでも作者やバージョンによって出力フォーマットが違うことがあるのがゴミ
.netはecmaで標準化されてるからどの環境でも同じように使える PSは今やWindowsのシェルと言うよりも.NETのシェル
そしてMSには.NET以外のDOS由来だのActiveX/COMに割けるリソースは無い
そもそもcmdやWSHは別者過ぎて学習の指針となるべき一貫性が無い
そもそも.NETに興味ないならしょうがないけどね >>379
関数だと括弧をつけると配列を第一引数として渡したことになるところは毎回ハマる
メソッドの使用と混在すると特に
というかアレは関数じゃなくてcmdletだから、生成構文を区別して、関数は関数で別に作れたら良かったのに >>379
それは自分が何に成れているか次第ででょうね
私だと==を使う言語自体使っていなかったので
-eq以前に==自体に違和感感じるんだわ msはかつて大きなシェアをとった時代に独禁法で規制された
関係で他の環境への進出を長い間やれなかった(また控えていた)。
そのために他のプラットフォーム上では企業として進出しなかった。
今はそういう環境から解放されたので、他のプラットフォーム上に
積極的に出ることができるようになったという流れ。
今後は、どんどん出てくるよ。
うまく行くかどうかは別として。 >>402
括弧と言うかカンマ ',' の扱いが独特なのと一次元配列に対する親切機能(お節介機能とも言う)のお陰で今でも混乱してる俺
>>403
日頃どんな言語使ってるの? SAS なんて聞いたこともないからよく知らんけど統計処理用の言語みたいだから PowerShell みたいな言語と比較されてもそりゃ違うだろとしか言えんわな >>407
まあ特殊な管理用途以外でShell使う必要がないので
大規模なレガシーデータ処理だとまともに処理できるソフトが
余りないので、DB構築の前処理などに大変便利してる。
PowerShellも便利にしてるよ。 LISPみたいな印字書式を定義しなかったせいでオブジェクト毎に出力が無茶苦茶なのがな
適当なシリアライズ/デシリアライズなコンテナを探してこないと これ、
> ・パイプにオブジェクトを渡せる
蛇蝎のように嫌われているのだろうと思っていたが、意外にもこの界隈では評価されているんだね。
型を意識する必要のある点や、-output-string(だっけ?)が要ることもあったりする点が、他OS移植版普及のネックだろうと思う。 >>410
???
当然だけど文字列を渡すこともできるんだが... >>410
そうやってメリットデメリット出して考えてゆくのが
良いような気がするな。開発者自体が別プラットフォーム間での
移植性を考えているなら当然の問題として、それを考えていることに
なるので、じゃどういう考えを持っているか見て行くのも面白いと思う。 >>411
一つはそれはあるね
とはいえPowerShellの良さを生かそうとすると
別な手段も考え(てくる)気がする。
ま、.NETドライブするのが大きな目的だから、別プラットフォーム間で
.NET同士でオブジェクトで渡す方向があるでしょうね。 自分は事務職で、PowerShellを少しだけ使ってるんですけど、便利だなあと思う反面、
難しくてしんどいことも多いです。
最初にPowerShellを使ってみたのは、業務システムから出力されるCSVから、データの抽出をしたときです。
CSVのカラムが数百列あるうえに、下っ端の私が知らぬ間に仕様がたまに変わる。
(新規カラムがいくつか追加されている。しかもそれらが既存カラムの間に挿入されている)
そのCSVから複数条件で抽出するのに、以前はエクセルで毎回難儀してたのが、
2時間くらいかけて文法のさわりを勉強してPowerShellを使ってみたら超楽ちん!
それからはもう少し勉強して、Webからデータをとってきたり、毎度決まりきったファイルのリネームと移動、
みたいなことにも便利に使ってます。
しんどいのは、挙動の予測が難しい場合が多々あることです。
他の言語(VBA、C#)も少し勉強したことがあるのですが、初心者にわかりづらい挙動の多さという意味では
PowerShellが一番難しいです。
ちょっとしたことをするのにも大抵1つ2つ罠にはまって、毎回悩みながら解決する羽目になります。
そして文法はなんだか覚えづらい。
ここ何か月か新規スクリプトを作る機会がなかっただけでだいぶ忘れてしまいました。
OSに付属していることだし、職業プログラマーじゃない人も使うことを考えて、
できればもう少しシンプルで覚えやすい仕様にしてほしかった。 >しんどいのは、挙動の予測が難しい場合が多々あることです。
>ちょっとしたことをするのにも大抵1つ2つ罠にはまって、
>毎回悩みながら解決する羽目になります。
そういうのを、ここに質問する場にしたらどうでしょ。 >>416
ありがとうございます。
またハマってしまうことがあったら質問させていただきます。 >>415
> 2時間くらいかけて文法のさわりを勉強してPowerShellを使ってみたら超楽ちん!
2時間とか超優秀な部類じゃね?
> 初心者にわかりづらい挙動の多さという意味では
> PowerShellが一番難しいです。
まあこれはあるわな
便利さとのトレードオフもあるけど配列回りはちょっとやり過ぎな気もする
・-eq とかがフィルター演算子になる
・switch に配列渡すと自動的に全要素を処理する
等々... >>417
なんか利用されるのに適したcmdletあったら便利という気がするもので
いまC#で関数(dll)にして、ちまちまと自分ツールにしてます。
dllにすれば、そのまま.netクラスになるので、C#でもPowerShellでも
(使ってないけどvbでも)共用できるんで。
あと、海外のサイトにはいろいろ転がってるみたいなもので。 >>399
なるほど。最近勉強を始めて歴史を知らないからすげーと思ったわけか。
パクり屋のジョブスを革新、すげーと思う若者みたいなものだな。
UNIXではオブジェクト間通信の普及に失敗したけど、Windowsでは20年前に成功しているんですよ。
もう一度なぜオブジェクト思考が必要になったか歴史を勉強してくださいな。これは歴史の逆行ですよ。 >>420
> Windowsでは20年前に成功しているんですよ。
おそらくDDE辺りの話を知ったかしてるんだろうけど全く違う話だから w 「ファイルサイズ1MB以上のファイルをTEMPフォルダに移動する」
という処理をそのまま書き下せるのがシェルでオブジェクトを扱える利点
凄い事ではなくて、単にやりたいことをより自然に書けるようになるってだけ
下らないテキストの加工やマジックナンバーが減って読みやすくなる >>415
> そして文法はなんだか覚えづらい。
> ここ何か月か新規スクリプトを作る機会がなかっただけでだいぶ忘れてしまいました。
文法覚えづらいか?統一されてるからちょっと覚えるだけだと思うが。
補完も使ってないとかいうオチでは その程度なら unix の find コマンドでできる
逆に言うとオブジェクトを渡せなかったから find コマンドが色々なフィルター機能を持つ必要があったと言うことでもある >>421
20年前はIE4アップデートの話だよ。Windowsが一気にCOM化したんだよw
なんでDDEが出てくるんだよw これだからUNIX屋は今でも20年遅れてる。
ストリームにオブジェクト流すなんて昔から普通に行われているのに、
シェルでオブジェクト流せるパイプライン!! 最新の技術!!! 老害は便利さを理解できない!!! だもんなぁ。 >>425
20年前の話を後生大事を覚えてる老害乙 w
COMの話がどう関係するのか知らんけどストリームにオブジェクトを流せるとかはもう少し具体的に書いてもらえるかな ストリームにオブジェクト流すなんて昔から普通に行われている(笑)
そのわりにはあんたの大好きなWSHにはTextStreamはあるけどObjectStreamなんてものは見当たらないよね 同じような話をぼんやりした理解のまま混ぜてやってるから
誰が何を応援してるのかさっぱり分からん >>405
今でもっていうがもうずっと前から同じヤツが言ってるだろ
5人はいないと思う その人ジョブズがーゲイツがーとか意味不明な話ばっかで
突っ込まれることにびびって具体的なこと何も言えない人だから
構ってもしょうがないよ
XP最高秀丸最高とか言ってる老害と同類じゃないかな > COMの話がどう関係するのか知らんけどストリームにオブジェクトを流せるとかはもう少し具体的に
ここまでド素人丸出しの質問されてもね。
C++でもCOMでもMFCでもC#でも.netでもオブジェクト思考に関連する技術書なら書いてるでしょってレベル。
それが自称デシタルネイティブで老害連呼だからね。
安っぽいブログ風の記事ばかり読んでないでMSの公式解説書を全部読めよ。知識薄すぎなんだよ、小便垂れ。 ストリームてPSのコマンド群は単なるクラスライブラリなんだが… >>433
MSの基幹技術のCOMすら理解してなかったのになんでおまえはそんなに偉そうなの?
若さゆえの過ちというものを認めたくないのは分かるが背伸びし過ぎではないか。 シェルスクリプトでは、複雑なプログラミングは無理だから、PowerShell になる。
それよりもさらに複雑になると、Ruby になる
だから、Vagrant, Chef, Homebrew などの環境構築ツールは皆、Ruby で作られている 一つのコマンドが肥大化してカオスになったのがこれまでのシェルだから、それに慣れてしまってる人は良さが分かりにくいだろうね
コマンドに引数渡す時に頭につけるのは / なのか - なのか -- なのか、順番はあるのかないのか
そういうところを初めに統一しておいたのが地味にPSのいいところだと思う >>434
オブジェクトをパイプに流す話とCOMなんて関係ないだろ w
そんなのはどうでもいいからお前は
> ストリームにオブジェクト流すなんて昔から普通に行われている
の具体例書けよ >>436
> コマンドに引数渡す時に頭につけるのは / なのか - なのか -- なのか、順番はあるのかないのか
> そういうところを初めに統一しておいたのが地味にPSのいいところだと思う
それには同意、ヘルプも充実してるし
あと引数の型チェックとかヘルプをスクリプト内に書ける機能とか良くできてると思う コマンドレットのネーミングルールもあるのでそのあたりは楽だな。
考えてみれば旧来のshell言語は、覚えちゃったから使えるという
ところだもんな。 コマンドオプションはヘルプしっかりしてるし扱いもParamだけで楽チンでいいけど、演算子とメンバ関数が混在してくると何かもにょる
配列とか文字列の演算子多いし余計な変換するし http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=43441&forum=7
> OLE1.0の時代は、DDE(Dynamic Data Exchange)をベースアーキテクチャとしていました。
> OLE2.0(現在)では、COM(Component Object Model)をベースアーキテクチャとしています。
> そのCOMは、プロセス間通信に RPC(Remote Procedure Call)を利用しています。
https://msdn.microsoft.com/ja-jp/library/ms538074(v=vs.85).aspx
> Text Services Framework を使用することにより、アプリケーションのテキスト ストリームにオブジェクトを埋め込むことができます。
https://docs.oracle.com/javase/jp/7/platform/serialization/spec/output.html#933
> クラス ObjectOutputStream は、オブジェクト直列化を実装します。
この直列化は20年ほど前からあるっぽい。
https://ja.wikipedia.org/wiki/Java#実行環境の構成
> シリアライズ(serialization、オブジェクト直列化):
オブジェクトの参照をたどって関連するオブジェクトをまとめてバイトストリームにすることができる。
そのストリームをファイルに書き込めば、オブジェクトの状態をそのまま保存(永続化)できる。
でっていう。 プロセス間でオブジェクトを受け渡すのは前からあったけど、シェルでサポートしてめっちゃ簡単に扱えるようになったのが利点じゃないの? PowerShellのコマンドってオブジェクトをパイプに流すときにいちいちシリアライズとかしてるのか?
つーか >>445
してないと言うかPSのコマンドはいちいちプロセス作ったりしない >>445
そんなことせずに、直接やり取りできるところが
いいところだもんね。 失礼、噛みマミった。
>>443 の下半分は、Java言語の話です。
MS以外は昔からあるというので検索してみました。
.net は Java をパクって作っているけど
MSがJavaを使えなくなったのは、
開発スピードがMSのが早くて仕様を勝手に作ってしまうので
かじ取りをSUNがするために裁判を起こして差し止めたからなので
Javaが最初の実装なら、MSもほぼ同時期に同様の実装をしていることになる。 そうやってせっかくJavaの仕様を統一したのに
GoogleがAndroidに組み込んだのはJavaもどき。
おかげでCPUのJava命令を使えず、ソフトウェアエミュレーションしてて無駄にCPU食って遅いとか。
.net が ARM の Java 命令で実行できるようになったらすごいけど・・・ android登場時からjazilleで動いてるi-appliなんかより断然早かったと思うけど >>451
>>443がプロセス間通信云々言ってるからじゃね?
PowereShellのコマンドレットをパイプでつなげるときは
powershell.exeのプロセスだけで完結しててプロセス間通信しないから
シリアライズの必要もない ipmo ちんこ
でちんこをパイプカットできるのは評価したい 使用頻度高いのに[pscustomobject]っていちいち全部手打ちしないといけないのがまどろっこしい
タブ補完か[pco]とかに省略できるかどっちかやってほしい 外部プログラムのウインドウサイズを変更するのは、.Net Frameworkの機能だけでは無理なんですかね。 >>457
その質問自体がちょっとおかしいので
もう少し具体的に話してみて。 Invoke-Sqlcmdコマンドを使って、データベースにINSERTやDELETEの結果を取得できる方法をどなたか教えて頂けませんでしょうか?
コマンドプロンプトでsqlcmdを使うと「(1 行処理されました)」等が表示されます。これを取得したいです。 >>457
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--begin-maximized')
driver = Selenium::WebDriver.for :chrome, options: options
driver.navigate.to "〜URI〜"
driver.manage.window.maximize # 画面最大
Windows10, Ruby, Selenium::WebDriver::Chrome で、
ブラウザの自動操作を実行してるけど、画面を最大にできる
もちろん、画面サイズも変更できる Selenium使っているなら、PowerShellからSeleniunつかう
のじゃまずいのかな。 シェルスクリプトよりは、PowerShell が良いけど、
これより複雑なものは、Ruby が良い
サクサク、プログラミングできて、バグが少ないのは、Rubyが断トツ!
Enumerable のメソッドが充実してる Selenium WebDriver は、PowerShell では出来ない
使えるプログラム言語は、Java/C#/Ruby/Python/Javascript >>463
それ、C#と書いてあるけど
.NETと解釈したらいいんですよ
それだけ。
それが.NETの良いところ Win7 SP1 PowerShell 2.0の環境に隔離されたんだけどPSでGUIやるとしたら.NET 4.0のWinFormsが妥当?
セルフホストのHttpServerがあるならばブラウザアプリにするんだけどPS 2.0 .NET 4.0だとまだないよね Windows7 SP1なら https://github.com/PowerShell/PowerShell/releases から
2018/01/25公開のPowerShell Core 6.0.1を入手し、今の内に慣れておくほうがいいのでは? >>467
『隔離された』と書いてあるんで
そうしなくてもできないという話じゃないの? そうです
ネットは監視されてます
インストールも自由にできません しかし、今後のネットなどを考えると
新たな発想の仕組みが出現してこないと
不自由でしかたないね。
いたちごっこの繰り返しだもんね。 リモートで別のPCを操作したいという要求がある限り穴は無くならないのでは? 今のところ、ネットがある限り穴はあるというところ。
でも今後ないと困るわけだからね〜。
それに対応する暗号利用技術は考えられているんだが
まだ実用化されないし。
といっても暗号化も対処技術に他ならないしね〜〜 >>448
してる決まってるだろ。いくらなんでも素人杉。 GUIだんだんわかってきた
WPFが動くからFormsよりWPF使うほうが簡単だった
別ファイルにXAMLとViewMode(C#)を書いてXamlReaderでパース、Add-Type
しかし今のところPowerShellスクリプトの出番がほとんどない
PSCustomObjectをバインドできれば使えるのかな >>475
私は、WPF利用して逆にPowerShellの出番がガンガン増えてるよ〜。 .NET Coreには、WPF無いけどPowerShell CoreからWPF使えるのかな? >>475
簡単なGUIならXAMLもPowerShellに書いちゃえばいいじゃん? Visual StudioでWPF設計して
そのxamlをそのまま読みこんでPowerShellの表示に使えるように
PowerShell関数作ってます。
結構簡単に出来るよ PowerShellで作る時に、使う最強のエディタは? >>482
VSCodeが決定版
やっぱ同じMS製だし
他言語でも使える excelの選択範囲をpowershellに渡す方法教えて
ファイルに出力→powershellサブプロセス
はダサいから無しで $excel=New-Object -ComObject Excel.Application
$excel.Visible=$true
$wokbook=$excel.workbooks.open("なんとか.xlsx")
$woksheet=$wokbook.ActiveSheet
$actCells=$excel.Selection 要は、最後の1行
$actCells=$excel.Selection そういうのでよく使うのはGetObjectの方だと思う エクセルついでに、
csvをエクセルで開いて配列に一気に取り込んで、それをxlsx形式で新規保存する方法教えて。 $excel=New-Object -ComObject Excel.Application
$excel.DisplayAlerts=$false
$workbook=$excel.workbooks.open(”入力path\なんとか.csv")
$workbook.SaveAs("保存path\かんとか.xlsx",51)
$workbook.Close()
$excel.Quit() ■ このスレッドは過去ログ倉庫に格納されています