X



【最強CUI】PowerShell -Part 2 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2016/11/26(土) 06:30:02.67ID:pZYy6q7Y
前スレ
【最強CUI】PowerShell -Part 1
http://echo.2ch.net/test/read.cgi/tech/1378978504/
2018/01/29(月) 05:04:35.04ID:LFybAfxw
>>434
オブジェクトをパイプに流す話とCOMなんて関係ないだろ w
そんなのはどうでもいいからお前は
> ストリームにオブジェクト流すなんて昔から普通に行われている
の具体例書けよ
2018/01/29(月) 05:26:47.04ID:NLT8o8lu
ああ静かだと思ったら寝てたのね
2018/01/29(月) 06:55:48.03ID:rL5UybAs
>>436
> コマンドに引数渡す時に頭につけるのは / なのか - なのか -- なのか、順番はあるのかないのか
> そういうところを初めに統一しておいたのが地味にPSのいいところだと思う
それには同意、ヘルプも充実してるし
あと引数の型チェックとかヘルプをスクリプト内に書ける機能とか良くできてると思う
440デフォルトの名無しさん
垢版 |
2018/01/29(月) 10:31:25.70ID:lrRcQbVC
コマンドレットのネーミングルールもあるのでそのあたりは楽だな。
考えてみれば旧来のshell言語は、覚えちゃったから使えるという
ところだもんな。
2018/01/29(月) 10:33:16.34ID:6aL5W79g
コマンドオプションはヘルプしっかりしてるし扱いもParamだけで楽チンでいいけど、演算子とメンバ関数が混在してくると何かもにょる
配列とか文字列の演算子多いし余計な変換するし
442デフォルトの名無しさん
垢版 |
2018/01/29(月) 15:58:03.39ID:6RiX0lFa
>>435
LinuxではPythonじゃね?
443デフォルトの名無しさん
垢版 |
2018/01/29(月) 16:35:46.17ID:6RiX0lFa
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、オブジェクト直列化):
 オブジェクトの参照をたどって関連するオブジェクトをまとめてバイトストリームにすることができる。
 そのストリームをファイルに書き込めば、オブジェクトの状態をそのまま保存(永続化)できる。

でっていう。
2018/01/29(月) 22:51:09.85ID:wqG3dXej
プロセス間でオブジェクトを受け渡すのは前からあったけど、シェルでサポートしてめっちゃ簡単に扱えるようになったのが利点じゃないの?
2018/01/30(火) 08:14:39.85ID:GJ8uq/eW
PowerShellのコマンドってオブジェクトをパイプに流すときにいちいちシリアライズとかしてるのか?

つーか
2018/01/30(火) 08:40:22.15ID:gBU+LQhN
>>445
知りたきゃソース見ればいいかと
2018/01/30(火) 11:33:08.90ID:V86e/eZu
>>445
してないと言うかPSのコマンドはいちいちプロセス作ったりしない
448デフォルトの名無しさん
垢版 |
2018/01/30(火) 15:53:11.19ID:LMuo1Zyp
>>445
そんなことせずに、直接やり取りできるところが
いいところだもんね。
449デフォルトの名無しさん
垢版 |
2018/01/30(火) 16:33:15.23ID:3+EGv0E9
失礼、噛みマミった。

>>443 の下半分は、Java言語の話です。
MS以外は昔からあるというので検索してみました。

.net は Java をパクって作っているけど
MSがJavaを使えなくなったのは、
開発スピードがMSのが早くて仕様を勝手に作ってしまうので
かじ取りをSUNがするために裁判を起こして差し止めたからなので
Javaが最初の実装なら、MSもほぼ同時期に同様の実装をしていることになる。
450デフォルトの名無しさん
垢版 |
2018/01/30(火) 16:43:32.50ID:3+EGv0E9
そうやってせっかくJavaの仕様を統一したのに
GoogleがAndroidに組み込んだのはJavaもどき。
おかげでCPUのJava命令を使えず、ソフトウェアエミュレーションしてて無駄にCPU食って遅いとか。

.net が ARM の Java 命令で実行できるようになったらすごいけど・・・
2018/01/30(火) 19:45:29.59ID:m1sp0N+k
>>447
どこからプロセスが出てきたんだ?
2018/01/30(火) 20:56:43.36ID:N5bBVQCj
android登場時からjazilleで動いてるi-appliなんかより断然早かったと思うけど
2018/01/30(火) 21:56:58.31ID:XEZ388GX
>>451
>>443がプロセス間通信云々言ってるからじゃね?
PowereShellのコマンドレットをパイプでつなげるときは
powershell.exeのプロセスだけで完結しててプロセス間通信しないから
シリアライズの必要もない
454デフォルトの名無しさん
垢版 |
2018/01/31(水) 21:07:01.54ID:dWxBIZCx
ETH-w
2018/02/03(土) 13:46:03.51ID:Rohe4eLB
ipmo ちんこ
でちんこをパイプカットできるのは評価したい
2018/02/12(月) 22:00:10.19ID:spwyngle
使用頻度高いのに[pscustomobject]っていちいち全部手打ちしないといけないのがまどろっこしい
タブ補完か[pco]とかに省略できるかどっちかやってほしい
2018/02/14(水) 07:28:57.51ID:xNlz1dTb
外部プログラムのウインドウサイズを変更するのは、.Net Frameworkの機能だけでは無理なんですかね。
458デフォルトの名無しさん
垢版 |
2018/02/14(水) 22:12:05.64ID:NrdtujHN
>>457
その質問自体がちょっとおかしいので
もう少し具体的に話してみて。
2018/02/15(木) 11:16:12.91ID:bNKwK/bs
Invoke-Sqlcmdコマンドを使って、データベースにINSERTやDELETEの結果を取得できる方法をどなたか教えて頂けませんでしょうか?

コマンドプロンプトでsqlcmdを使うと「(1 行処理されました)」等が表示されます。これを取得したいです。
2018/02/15(木) 13:05:03.45ID:4lKXUWzM
>>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 で、
ブラウザの自動操作を実行してるけど、画面を最大にできる

もちろん、画面サイズも変更できる
461デフォルトの名無しさん
垢版 |
2018/02/15(木) 15:41:36.95ID:sVUOkVXF
Selenium使っているなら、PowerShellからSeleniunつかう
のじゃまずいのかな。
2018/02/15(木) 17:01:21.28ID:4lKXUWzM
シェルスクリプトよりは、PowerShell が良いけど、
これより複雑なものは、Ruby が良い

サクサク、プログラミングできて、バグが少ないのは、Rubyが断トツ!

Enumerable のメソッドが充実してる
2018/02/15(木) 17:07:26.96ID:4lKXUWzM
Selenium WebDriver は、PowerShell では出来ない

使えるプログラム言語は、Java/C#/Ruby/Python/Javascript
464デフォルトの名無しさん
垢版 |
2018/02/15(木) 18:02:19.40ID:ZXhM7ba9
出来ますよ
465デフォルトの名無しさん
垢版 |
2018/02/15(木) 18:18:56.65ID:ZXhM7ba9
>>463
それ、C#と書いてあるけど
.NETと解釈したらいいんですよ
それだけ。
それが.NETの良いところ
2018/02/16(金) 07:20:11.08ID:shLmPi2M
Win7 SP1 PowerShell 2.0の環境に隔離されたんだけどPSでGUIやるとしたら.NET 4.0のWinFormsが妥当?
セルフホストのHttpServerがあるならばブラウザアプリにするんだけどPS 2.0 .NET 4.0だとまだないよね
2018/02/16(金) 15:20:24.69ID:nkfY21W7
Windows7 SP1なら https://github.com/PowerShell/PowerShell/releases から
2018/01/25公開のPowerShell Core 6.0.1を入手し、今の内に慣れておくほうがいいのでは?
468デフォルトの名無しさん
垢版 |
2018/02/16(金) 16:51:14.69ID:jq0LJPC+
>>467
『隔離された』と書いてあるんで
そうしなくてもできないという話じゃないの?
2018/02/16(金) 19:11:11.01ID:pw8u3FlN
そうです
ネットは監視されてます
インストールも自由にできません
470デフォルトの名無しさん
垢版 |
2018/02/16(金) 19:31:53.38ID:jq0LJPC+
しかし、今後のネットなどを考えると
新たな発想の仕組みが出現してこないと
不自由でしかたないね。
いたちごっこの繰り返しだもんね。
2018/02/16(金) 22:10:13.50ID:pdOGHn5a
リモートで別のPCを操作したいという要求がある限り穴は無くならないのでは?
472デフォルトの名無しさん
垢版 |
2018/02/16(金) 22:42:52.85ID:vp1KbUn5
今のところ、ネットがある限り穴はあるというところ。
でも今後ないと困るわけだからね〜。

それに対応する暗号利用技術は考えられているんだが
まだ実用化されないし。
といっても暗号化も対処技術に他ならないしね〜〜
2018/02/16(金) 22:57:24.63ID:TT/12OsV
>>448
してる決まってるだろ。いくらなんでも素人杉。
474デフォルトの名無しさん
垢版 |
2018/02/17(土) 01:10:35.41ID:YxQ+FKPw
わたし448じゃないけど、基本してないでしょ。
2018/02/17(土) 09:26:10.93ID:RP1Lckbc
GUIだんだんわかってきた
WPFが動くからFormsよりWPF使うほうが簡単だった
別ファイルにXAMLとViewMode(C#)を書いてXamlReaderでパース、Add-Type
しかし今のところPowerShellスクリプトの出番がほとんどない
PSCustomObjectをバインドできれば使えるのかな
476デフォルトの名無しさん
垢版 |
2018/02/17(土) 09:31:46.64ID:AgYT9x+M
>>475
私は、WPF利用して逆にPowerShellの出番がガンガン増えてるよ〜。
2018/02/17(土) 14:55:08.94ID:O2aJXn1j
.NET Coreには、WPF無いけどPowerShell CoreからWPF使えるのかな?
2018/02/17(土) 15:32:09.98ID:tJC3jvlA
んなわけない
2018/02/17(土) 16:33:07.35ID:/8k93ROr
>>475
簡単なGUIならXAMLもPowerShellに書いちゃえばいいじゃん?
480デフォルトの名無しさん
垢版 |
2018/02/18(日) 00:25:57.67ID:mfQi5O1f
Visual StudioでWPF設計して
そのxamlをそのまま読みこんでPowerShellの表示に使えるように
PowerShell関数作ってます。
結構簡単に出来るよ
2018/02/18(日) 07:28:07.73ID:Stb7rhur
>>480
エライエライ
2018/02/18(日) 21:06:46.31ID:HOomNEjj
PowerShellで作る時に、使う最強のエディタは?
2018/02/18(日) 22:10:00.84ID:JlUJeRgg
VSCode
2018/02/19(月) 00:49:35.13ID:PsquRqu/
edlin
2018/02/19(月) 05:38:51.91ID:p/IhV2LV
>>482
VSCodeが決定版
やっぱ同じMS製だし
他言語でも使える
2018/02/21(水) 21:50:44.89ID:sytXW6IH
excelの選択範囲をpowershellに渡す方法教えて
ファイルに出力→powershellサブプロセス
はダサいから無しで
487デフォルトの名無しさん
垢版 |
2018/02/22(木) 03:26:54.69ID:hk+HnqcW
$excel=New-Object -ComObject Excel.Application
$excel.Visible=$true
$wokbook=$excel.workbooks.open("なんとか.xlsx")
$woksheet=$wokbook.ActiveSheet
$actCells=$excel.Selection
488デフォルトの名無しさん
垢版 |
2018/02/22(木) 03:28:18.65ID:hk+HnqcW
要は、最後の1行
$actCells=$excel.Selection
2018/02/24(土) 01:27:05.92ID:u/AYofsf
そういうのでよく使うのはGetObjectの方だと思う
2018/02/24(土) 02:25:42.58ID:EfAIzsYg
エクセルついでに、
csvをエクセルで開いて配列に一気に取り込んで、それをxlsx形式で新規保存する方法教えて。
491デフォルトの名無しさん
垢版 |
2018/02/24(土) 05:43:27.81ID:4C8nRMYU
$excel=New-Object -ComObject Excel.Application
$excel.DisplayAlerts=$false
$workbook=$excel.workbooks.open(”入力path\なんとか.csv")
$workbook.SaveAs("保存path\かんとか.xlsx",51)
$workbook.Close()
$excel.Quit()
2018/02/24(土) 09:43:41.67ID:tzORDq38
ありがとう。
エクセルで開くときはcsv importみたいなコマンドレットは必要ないのね。その辺が調べてもよく分からなかった。

なお、配列にはデータ取り込んでる?
@()に入れる方法がよく分からん。
vbsだとarray=sheet.usedrange でできるけど。
493デフォルトの名無しさん
垢版 |
2018/02/24(土) 10:16:12.10ID:4C8nRMYU
>>492
ごめん、いま明日の引っ越し準備で
対応できない。
2018/02/24(土) 12:22:39.31ID:NyTmnWgI
$array = $sheet.UsedRange.Value2
で良いんじゃね
2018/02/24(土) 15:03:06.06ID:EfAIzsYg
なるほど。
powershell だからパイプライン使うイメージだったけど、エクセル操作ではあまり使えない感じなんだね。
2018/02/24(土) 15:07:47.88ID:9oN2QzaC
20年近く前にvbscriptで散々やったものを今必死にPowerShellで再現してる最中なのか。
2018/02/24(土) 22:59:13.75ID:EfAIzsYg
ほんとそんな感じ。
サーバー管理するわけでもないなら、powershell そんなに覚える必要ないかな。ただパイプラインは面白いと思う
2018/02/25(日) 00:32:11.83ID:01COGLgI
ファイル操作には便利だよ
単機能のツール探すよりPSで書いた方が早いこと多い
2018/02/25(日) 01:39:02.81ID:pcyqC+jB
PowerShell より複雑なものは、Ruby を使え

Rubyから、Excel を扱うライブラリも、色々あるみたい
2018/02/25(日) 01:40:14.58ID:bSC8YYTG
>>499
Excelならc#で十分だわ
2018/02/25(日) 01:46:43.42ID:xNv2PYt4
pythonスレやpowershellスレでひたすらrubyすすめてくるキチガイはなんなんだw
502デフォルトの名無しさん
垢版 |
2018/02/25(日) 03:34:56.38ID:X5QEzlQF
>>499
COM経由で一緒
2018/02/25(日) 04:58:27.12ID:5ohi2TD0
なんかrubyはずっといる
2018/02/25(日) 04:58:51.59ID:5ohi2TD0
>>500
VBAだろ
2018/02/25(日) 06:53:28.67ID:579ZQdUK
>>500
System.Runtime.InteropServices.Marshal.ReleaseComObject( ) 地獄に落ちてもいいならな

MSもMicrosoft.Office.Interop.Excelはアンマネージドなリソース使うんだからDisposeを真面目に実装しとけよ
2018/02/25(日) 07:36:24.71ID:xNv2PYt4
そうじゃなくて今はClosedXMLとかを使うんじゃないの
2018/02/25(日) 07:44:46.15ID:bSC8YYTG
>>505
いつの時代の話だよ
2018/02/25(日) 08:14:51.73ID:/V/K592r
客先で他になんにもないときにめちゃ助かる
VBAも悪くないけど基本ライブラリしょぼいし別プロセス連携とかオブジェクト指向やりにくいから

>>505
Book.CloseとかApp.Quitとか要点さえ守ればCOMラッパーが参照カウントを処理してくれるからReleaseComObjectは不要
2018/02/25(日) 08:39:48.35ID:RKRNLmY8
ただ本音を言うとCOMはもう直接触りたくない
裏方に徹してくれる分にはいいんだけど

そもそもOfficeが.NETのプラットフォームから逸脱してるのが面倒の素
2018/02/25(日) 09:25:49.90ID:Ydc/tL+D
データ取り込み->OleDb
帳票出力->サードパーティのマネージドライブラリ
操作性拡張->VBA

.NET相互運用は需要がない
2018/02/25(日) 16:14:29.85ID:4dYhkUpy
>>507-508
> Book.CloseとかApp.Quitとか要点さえ守ればCOMラッパーが参照カウントを処理してくれるからReleaseComObjectは不要
マジで言ってるの?
それとも最近便利な(まともな)ラッパーでもできたの?
2018/02/25(日) 16:45:57.41ID:f0GbsyKa
ラッパーなんてあるの?
webに転がってるpowershellの糞コードはまともに開放してないし
powershellで気を付けるレベルじゃどうやっても開放漏れは起こる
潔癖ならCOMと親和性の高いwshで処理したらいいし
大抵の人はEXCEL.EXEが残らなければOKって考えでしょ
2018/02/25(日) 19:36:34.84ID:Ydc/tL+D
逆に聞きたいんだが適切にCloseやQuitしててもリソースリークするエビデンスってある?
2018/02/25(日) 19:37:48.11ID:riORzo3z
>>511
NPOIとかClosedXMLすら使ったことないん?
2018/02/25(日) 20:06:18.82ID:Ydc/tL+D
そもそもエクセルプロセスが生きてる以外にリーク判定ってどうやってんだ?
2018/02/25(日) 23:21:13.29ID:97AlcoLv
質問です。EXCELファイル内のマクロコードをGREP検索したいのですが
powershellからそのようなことは出来るのでしょうか?
(powershell以外の方法でも構いません)
2018/02/26(月) 08:48:04.46ID:0MjsGOBH
>>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の話であることも理解できないアホは絡んでくるなよ
2018/02/26(月) 08:55:33.76ID:qQ1Da7Hp
>>517
どうも日本語が不自由なようだ
2018/02/26(月) 09:29:44.47ID:0MjsGOBH
>>518
お前が誰か知らんけどそんなレスしかできないなら黙ってなよ w
2018/02/26(月) 09:57:08.97ID:MMVJYAud
>>519
涙拭けよw
2018/02/26(月) 10:12:54.85ID:0MjsGOBH
なんだ、無能の煽りかよ
2018/02/26(月) 12:17:43.07ID:7zf74qFu
>>521
顔真っ赤にしてどうした?w
2018/02/26(月) 12:21:47.40ID:aBQXIVru
ゆとりはCOMやオブジェクト思考を理解できない。
2018/02/26(月) 12:29:53.91ID:LisqF3+Y
いまどきCOMとかwww
2018/02/26(月) 12:32:03.28ID:aBQXIVru
このとおり。COMが何かすら理解してない様子。
2018/02/26(月) 12:49:39.49ID:K3pn9bD4
今は2018年だった気がするが
2018/02/26(月) 13:03:41.88ID:byvTlEgJ
>>517
エビデンスって言うには弱いな
コードの断片だけ見せて開放されないんですって言ってる人が居たってだけで
それにこれたぶんGC回ったら回収されるパターンでしょ
2018/02/26(月) 13:18:51.36ID:aBQXIVru
MSのメモリリークのバグなんて昔から何度もあったのに。MSも随分と信用を得たものだ。
2018/02/26(月) 13:26:17.87ID:zI4VKzz4
まあ今時COMって言うのは間違ってはないとは思うがCOMの話してるのにNPOIとかClosedXMLととか言い出す>>514が頓珍漢であることは変わらない
2018/02/26(月) 13:33:29.92ID:aBQXIVru
VS2017にATLついてる。なぜならMSが必要だから。COMなしではWindowsは動かない基盤技術。

おまえらの2chブラウザも動かなくなる。
2018/02/26(月) 15:06:05.67ID:tmFMcABi
流れを見ると>>500のレスを>>505が勝手にCOMの話と勘違いしたからそもそも話しがおかしくなってるんだと思うけど
どっちにしろたいした話もできてないからもう終わりでよくね
2018/02/26(月) 15:21:15.75ID:9PwnP/L5
ClosedXMLはExcelを操作するんじゃなくてExcelファイルを操作するライブラリだしww
てかいつまで粘着するの?
2018/02/26(月) 17:32:43.42ID:JDadgspp
COMの話題でどっと混む
2018/02/26(月) 18:04:10.90ID:XspdtcWH
エクセルでcsvを開いて、名前変えてエクセルファイルとして保存したいんだけど、
c:/test.csv
から
c:/test_add.xlsx
って感じに。
このとき、split-path $_ -parent + "/" + $.basename + "_add.xlsx"
みたいな書き方してるんだけど、もっとカッコいい良い書き方ある?
2018/02/26(月) 20:02:07.45ID:tmFMcABi
>>534
かっこいいかは分からんけどjoin-path使ったり
Join-Path $_.Directory ($_.BaseName + "_add.xlsx")

置換したり
$_.FullName -replace "\.csv$", "_add.xlsx"

単に文字列内で展開してもいいだろうし
"$($_.Directory)\$($_.BaseName)_add.xlsx"
2018/02/26(月) 23:11:59.96ID:6edExPT+
>>535
ありがとうございます。
さらっと3通り出るのすごい。

joinがpowershell 使ってる感あって好き、けど文字列内の$$もいいな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況