【最強CUI】PowerShell -Part 2 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>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() ありがとう。
エクセルで開くときはcsv importみたいなコマンドレットは必要ないのね。その辺が調べてもよく分からなかった。
なお、配列にはデータ取り込んでる?
@()に入れる方法がよく分からん。
vbsだとarray=sheet.usedrange でできるけど。 >>492
ごめん、いま明日の引っ越し準備で
対応できない。 $array = $sheet.UsedRange.Value2
で良いんじゃね なるほど。
powershell だからパイプライン使うイメージだったけど、エクセル操作ではあまり使えない感じなんだね。 20年近く前にvbscriptで散々やったものを今必死にPowerShellで再現してる最中なのか。 ほんとそんな感じ。
サーバー管理するわけでもないなら、powershell そんなに覚える必要ないかな。ただパイプラインは面白いと思う ファイル操作には便利だよ
単機能のツール探すよりPSで書いた方が早いこと多い PowerShell より複雑なものは、Ruby を使え
Rubyから、Excel を扱うライブラリも、色々あるみたい pythonスレやpowershellスレでひたすらrubyすすめてくるキチガイはなんなんだw >>500
System.Runtime.InteropServices.Marshal.ReleaseComObject( ) 地獄に落ちてもいいならな
MSもMicrosoft.Office.Interop.Excelはアンマネージドなリソース使うんだからDisposeを真面目に実装しとけよ そうじゃなくて今はClosedXMLとかを使うんじゃないの 客先で他になんにもないときにめちゃ助かる
VBAも悪くないけど基本ライブラリしょぼいし別プロセス連携とかオブジェクト指向やりにくいから
>>505
Book.CloseとかApp.Quitとか要点さえ守ればCOMラッパーが参照カウントを処理してくれるからReleaseComObjectは不要 ただ本音を言うとCOMはもう直接触りたくない
裏方に徹してくれる分にはいいんだけど
そもそもOfficeが.NETのプラットフォームから逸脱してるのが面倒の素 データ取り込み->OleDb
帳票出力->サードパーティのマネージドライブラリ
操作性拡張->VBA
.NET相互運用は需要がない >>507-508
> Book.CloseとかApp.Quitとか要点さえ守ればCOMラッパーが参照カウントを処理してくれるからReleaseComObjectは不要
マジで言ってるの?
それとも最近便利な(まともな)ラッパーでもできたの? ラッパーなんてあるの?
webに転がってるpowershellの糞コードはまともに開放してないし
powershellで気を付けるレベルじゃどうやっても開放漏れは起こる
潔癖ならCOMと親和性の高いwshで処理したらいいし
大抵の人はEXCEL.EXEが残らなければOKって考えでしょ 逆に聞きたいんだが適切にCloseやQuitしててもリソースリークするエビデンスってある? >>511
NPOIとかClosedXMLすら使ったことないん? そもそもエクセルプロセスが生きてる以外にリーク判定ってどうやってんだ? 質問です。EXCELファイル内のマクロコードをGREP検索したいのですが
powershellからそのようなことは出来るのでしょうか?
(powershell以外の方法でも構いません) >>513
C# の話な
> 逆に聞きたいんだが適切にCloseやQuitしててもリソースリークするエビデンスってある?
適切の意味にもよるけどシートを参照したままApplication.Quit() してもリソースリークするって言うのはググれば出てくる
(これはVB.NETの例だけど)
https://social.msdn.microsoft.com/Forums/ja-JP/3a296f83-4a49-4561-a735-570aa7430874/ecxel?forum=vbgeneralja
>>514
COMの話であることも理解できないアホは絡んでくるなよ >>518
お前が誰か知らんけどそんなレスしかできないなら黙ってなよ w ■ このスレッドは過去ログ倉庫に格納されています