X



PowerShell -Part 3
■ このスレッドは過去ログ倉庫に格納されています
0087デフォルトの名無しさん垢版2018/10/23(火) 19:08:54.72ID:R3+D42hK
パワーシェル単体ではちょっと弱い

パワーシェル扱ってるということはインフラ系だと思うからプラスアルファでvbaやvbsなどインフラ系スクリプト言語やAJSなどのバッチサーバの経験がほしい
0089デフォルトの名無しさん垢版2018/10/23(火) 21:36:09.49ID:Cxf5lQdo
パワーシェルだけじゃ仕事ないっていう観点はあっている
0090デフォルトの名無しさん垢版2018/10/23(火) 21:56:38.39ID:xD54VN5l
クセと多いがpowershell好きw
できるだけ小文字で書きたいのだが、インテリセンスが大文字混ぜるのをなんとかしたい、なにか手はある?
あとパラメータとか短縮表記になったのを伸ばすツールある?
0092デフォルトの名無しさん垢版2018/10/24(水) 08:55:14.55ID:paw2wRgq
PowerShellEditorServicesはオープンソースだから改造すればえんちゃう
0093デフォルトの名無しさん垢版2018/10/24(水) 15:40:32.38ID:+Ub61VYb
クリップコマンド使うとなぜか改行がはいってしまいます、改善策ないでしょうか?

"test" |clip
で、メモ帳などに貼り付けると改行ついていて不都合があります!
0094デフォルトの名無しさん垢版2018/10/24(水) 17:13:32.82ID:K/10T0Yf
set-clipboardコマンドレット使えば行けそう
今はテスト出来ないしPowershell5.0以降が必要だけど(Windows10なら標準)
0095デフォルトの名無しさん垢版2018/10/24(水) 18:07:46.88ID:+Ub61VYb
Windowsサーバ2012r2なんですがそのコマンドあるかな・・・
0096デフォルトの名無しさん垢版2018/10/24(水) 18:33:39.42ID:+Ub61VYb
ちなみにですがバッチファイルだと下のコマンドで改行なしにできるのですが、パワーシェルからからこのコマンド呼び出すと<がリダイレクトマークなのでつかえません!ってエラーがでます
このコマンドをパワーシェルで使う方法などありますか?

set /p <nul="test" | clip
0098デフォルトの名無しさん垢版2018/10/24(水) 19:01:25.53ID:+Ub61VYb
コマンドプロンプト部分をシングルコーテートでくくってcmdのオプションで/cつければ他のコマンドも実行できるんですか?
試してみます、ありがとうございます
0099デフォルトの名無しさん垢版2018/10/24(水) 19:04:05.43ID:SZPDhNVG
>>95
2012R2だとPowerShell4.0だね。5.0にするならWMF5.1のインストールが必要みたい

ちなみにset-clipboardだと改行は入らなかった
0100デフォルトの名無しさん垢版2018/10/24(水) 20:12:04.59ID:SZPDhNVG
Win10 1809のWin Powershellなんだけど
powershell -Version 3.0
でも$PSVersionTableで3.0にならない
2.0だと変わる、バグかな
0101デフォルトの名無しさん垢版2018/10/25(木) 03:52:38.91ID:BKSYttF8
基本的なことですいません。
tab補完で、最初にカレントディレクトリの./がつくのをつかないようにできませんか。
javaを実行するときjava ./hogehogeとなって、いちいち./消すのが面倒なもので
0103デフォルトの名無しさん垢版2018/10/25(木) 17:13:59.66ID:ehGwymsw
PowerShellはコマンドプロンプトと同じように使おうとしてハマる奴多いな
コマンドプロンプトとは別物として考えた方が良いと思うんだけど
0105デフォルトの名無しさん垢版2018/10/25(木) 23:48:32.38ID:BKSYttF8
>>102
>javac hogehoge.java
>java hogehoge
としたいんです。
javaで実行くるときはファイルではなく、クラスを指定するので、カレントディレクトリの指定があると実行できないんです。
0108デフォルトの名無しさん垢版2018/10/26(金) 03:54:22.79ID:9wT1H/41
>>105
何で./があると実行できないのか俺にはわからんが
そのjavaというプログラムの第一引数は単なるファイル名ではないってことか
PowerShellウィンドウとは相性が悪いプログラムってことだな
上にあるようにIDEを使うか、コマンドプロンプトで使うしかないだろう
0110デフォルトの名無しさん垢版2018/10/26(金) 07:44:23.03ID:fUEsFsck
いちいち手作業が面倒くさいときこそシェルスクリプトを書くべきじゃまいか
引数のパスからクラス名を取り出して他の引数はそのままjava.exeに渡す
このスクリプトにパスを通しておく
coかcomまで辿ればパッケージにも対応できるな
0114デフォルトの名無しさん垢版2018/10/26(金) 18:35:01.07ID:zbWSKzqB
プログラムとスクリプトとシェルの違いって何ですか?
パワーシェルは何?
0115デフォルトの名無しさん垢版2018/10/26(金) 18:46:34.50ID:xBIHPZW8
コマンドプロンプト・PowerShell・bash は、コマンドを入力できるから、シェル

コマンドプロンプト用に、ファイルに書いたプログラムは、バッチファイル。
PowerShell・bash用に、ファイルに書いたプログラムは、シェルスクリプト
0116デフォルトの名無しさん垢版2018/10/26(金) 19:16:08.67ID:6wLQ7f7d
>>105
Java11使え。
java ./hogehoge.java
0117デフォルトの名無しさん垢版2018/10/26(金) 19:30:22.59ID:FXq8Nzbn
クラスファイルに.class 拡張子は付いてないという前提でラクそうな方法
java -classpath
まで入れて、ファイル名一部入力してtab
.\Hogeが保管されるので
Ctrl+←で一回おすと\の後の文字に飛ぶ。
そこでスペースキー
java -classpath .\ Hoge
Javaは拡張子は見ませんだの、ファイル名見ませんだの、大文字小文字区別だのいろいろ面倒ね
0119デフォルトの名無しさん垢版2018/10/26(金) 20:14:30.49ID:mtqgcbcu
ComObjectみたいにJavaObjectをNewできたら便利だとおもう
Java相互運用ラッパーを自動生成するコマンドレットない?
0120デフォルトの名無しさん垢版2018/10/27(土) 11:50:26.09ID:E3+jW7oE
>>116
11からコンパイルいらないんでしたっけ?便利ですよね。
結局プロファイルでmyjavaっていう11みたいに動作するようにしました。
0122デフォルトの名無しさん垢版2018/10/29(月) 21:10:57.38ID:UusL+Srb
>>121
最近追ってなかったから知らんかったけど
Markdownに対応してんやね
びっくりやわ
0123デフォルトの名無しさん垢版2018/10/30(火) 00:22:31.97ID:LZVff6s3
パワーシェルやバッチってプログラム言語と言えるの?
0124デフォルトの名無しさん垢版2018/10/30(火) 04:04:48.57ID:ZaLbntHv
シェルスクリプト(awk sed,perl)含むの記述がプログラムか?と問われたら是非別れるのと同じ気がする。用法、組み方によるのでは?
各種言語を切り貼り利用できるグルー言語資質と、プロトタイピング性に優れてる。
データ扱いが常にオブジェクトというのがそれらと大きく異質。
0126デフォルトの名無しさん垢版2018/10/30(火) 07:27:28.27ID:H5WVH8ZO
一般的な基準として、チューリング完全な、プログラムを記述するための形式言語ならプログラミング言語
Powershellはbrainf*ckインタープリタを書けるらしいのでチューリング完全
だからプログラミング言語と言って差し支えない
0128デフォルトの名無しさん垢版2018/10/30(火) 19:29:22.59ID:5BbWkodl
WindowsPEのvbsがシステムフォントの変更によって使い物にならなくなったので
PowerShellでフォントを指定したメッセージボックスを使いたいです。

インプットボックスでフォントを指定したサンプルは見つけましたが
メッセージボックス版が見つけられません。

コードを教えていただけますでしょうか。

バッチスレの住人でPowerShellは門外漢なのです。
0129デフォルトの名無しさん垢版2018/10/30(火) 20:40:30.78ID:LZVff6s3
よくわからんけどmsgコマンドじゃあかんの?
0130デフォルトの名無しさん垢版2018/10/30(火) 21:16:30.95ID:J8L+p3HY
>>129
WindowsのPro版にある「Msg.exe」の事ですか?
WindowsPEに有りませんし、持って来ても動きませんでした。
WindowsPEはx86のexeをx64で動かせないので
x86しかexeが無い場合は使えません。
その点、スクリプトはビット数を選ばないので都合がいいのです。
0131デフォルトの名無しさん垢版2018/10/30(火) 21:25:14.89ID:eTO/K+Ns
Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("メッセージ", "タイトル")

で行けるかね?
PEでWindowsForms使えるか分からんけど
0132デフォルトの名無しさん垢版2018/10/30(火) 21:41:00.25ID:OyNBi9EH
そもそもPEなんてしょぼ環境にPowershellや.NETランタイム入ってるんだっけ
逆にPSが動作するぐらいならSysWOW64ぐらい入っててもよさそうだが
0135デフォルトの名無しさん垢版2018/10/31(水) 01:30:38.10ID:FlI1cXqx
バッチから引数付きで呼び出す時に、引数 ※param() でエラーが出た時って
%ERRORLEVEL% は 0 ですよね?
trapやtry〜catchもできないし。。。
param での例外を判定する方法はないでしょうか
0136デフォルトの名無しさん垢版2018/10/31(水) 10:46:10.57ID:7QmHbGvy
WindowsFormsつかってフォントかえるなら
FormつくってLabelのfontに
Add-Type -AssemblyName System.Drawing
$Font = New-Object System.Drawing.Font("メイリオ",18)
でぶち込むくらいしか知らねい
0137デフォルトの名無しさん垢版2018/10/31(水) 19:08:52.44ID:TK2x4mB7
>>135
Powershellをバッチの部品として使うのは非効率だしなぁ
Powershellスクリプトで書けば良くない?
引数のエラー処理なんて関数ごとtry〜catchすりゃいいし
0138デフォルトの名無しさん垢版2018/10/31(水) 19:25:39.36ID:zoWehdgp
今更ながらに気が付いた話。
大容量のcsvファイルをimport-csvで読むとメモリーの問題があり・・・・
と思い込んでいたんだけど。
.NETが基本なんで、もしかして中身はIEnumerable利用なんかな?
と思い、ためしに130万件で20項目のデータを使って
import-csv をそのままパイプでgroup-objectにつないで集計してみたら
何の問題もなく結果が得られた。

そうだよね、遅延実行してくれてるんだよね。
処理速度は別として、1億件でもメモリー圧迫なしで処理できるんだ。
自作コマンドレット作ると、デカいデータをPowerShell使った処理が
可能だな。

と気が付いた次第。
皆にとっては当たり前かもしれんけど、いま気が付いたよ。
0139デフォルトの名無しさん垢版2018/10/31(水) 20:54:57.34ID:2eQnYqe5
>>134
>>136
すみませんが、その説明でも分からないレベルですので
コードを全て教えて頂けないでしょうか。
Formとかlabelとか全然分からないのです。
0140デフォルトの名無しさん垢版2018/10/31(水) 21:31:23.96ID:1CGtBgIK
135です
自己解決しました

>>137
既存の置き換えなのでそうもいかないのです^^;
結局、呼び出したps1ファイルの中で関数化してInvoke-commandでスクリプトブロックを呼び出しました
0141138垢版2018/10/31(水) 22:05:02.46ID:zoWehdgp
PCで時間計測してみた
819万件20項目のCSVファイルで2項目を指定したクロス集計。
CSV読み込みからクロス集計まで。
環境はmac mini。OSはwin7
結果:17分16秒
まあ許せるんじゃないでしょうか。
ついでなんでSASで同じことをやってみた、読み込みからクロス集計。
結果:0分9秒

・・・・・・がっくり
0143デフォルトの名無しさん垢版2018/10/31(水) 22:13:11.37ID:7QmHbGvy
>>139
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$form = New-Object System.Windows.Forms.Form
$form.Text = "タイトル"
$form.Size = New-Object System.Drawing.Size(260,180)
$form.StartPosition = "CenterScreen"
$form.MaximizeBox = $false
$form.MinimizeBox = $false
$form.FormBorderStyle = "FixedSingle"

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(130,100)
$OKButton.Size = New-Object System.Drawing.Size(75,30)
$OKButton.Text = "OK"
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)
0144デフォルトの名無しさん垢版2018/10/31(水) 22:13:40.92ID:7QmHbGvy
>>139
$Font = New-Object System.Drawing.Font("メイリオ",18)

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,30)
$label.Size = New-Object System.Drawing.Size(250,30)
$label.Text = "メッセージ"
$label.font = $Font
$form.Controls.Add($label)

$form.Topmost = $True

$result = $form.ShowDialog()
0145デフォルトの名無しさん垢版2018/10/31(水) 22:26:30.11ID:zoWehdgp
統計関係で有名なソフト
データ加工がめちゃ便利で速い。値段が高い。
GoogleやAppleが会社(仕事環境:オフィスや会社の環境)は
SASの本社(SAS Institute)を参考にしたそうだ。
0147デフォルトの名無しさん垢版2018/10/31(水) 22:37:39.56ID:zoWehdgp
私のデスクトップ環境で、ソフト年間レンタル初年度120万、次年度60万円
個人じゃ買えないよね〜。でも金融機関や大手の分析BI系(統計やマイニング)は
ほとんどこのソフト。DBもETLもいらないんであとはExcelがあればいいという感じ。
このソフト入れると、DBはただの元データ置き場になっちゃって、皆これをDB代わり
にも使ってしまうことが多い。ただ高いので結構利用部門とか限定される事も多い。
0148138垢版2018/10/31(水) 22:50:51.47ID:zoWehdgp
ついでに、機械学習(マイニング・AI)専用のKNIME(これはフリー)で
同じこと(819万件20項目のCSV読み込みと2項目のクロス集計)をやってみた。
結果:3分48秒

PowerShell遅かったけど、十分実用性あると思うわ。
一般のツール使ったらやはり10分位はかかると思うんで。
0149デフォルトの名無しさん垢版2018/11/01(木) 00:33:44.20ID:PBz6MbCm
>>138
PowerShell は遅延実行だったのか

Ruby では、外部イタレータのEnumerator なら遅延実行になる

Enumeratorから、to_a して配列の実体を作ると、全部読み込まれてしまうから、
ずっと、Enumeratorを返すメソッドをチェーンしていって、最後にストリーム処理する

Java のStream とか、C# のLinq みたいな感じ
0150デフォルトの名無しさん垢版2018/11/01(木) 01:13:45.19ID:c7Wqsl8P
Powershellパフォーマンス計測やってたブログで
パイプラインは遅延実行でメモリ使用は少ないけど遅い
foreach(foreach-objectフィルタじゃなくてコマンドの方)はオブジェクトをメモリに読み込むからリソース使うけど速い
とかテストしていた所があった

ただ結構昔の記事だから最近のバージョンだと違うかも
0151デフォルトの名無しさん垢版2018/11/01(木) 06:23:45.61ID:mmcP2r/K
>>149
>Java のStream とか、C# のLinq みたいな感じ
まさにLinqの形なんですね。C#でLinq使ってみて、もしかして・・・と思って
テストしてみたい次第。

>>150
foreach速いのかな?
逆にすげー遅いんじゃないかと思ってだんたけど、どうなんだろう。
場合によると、それはforに対するforeachの話かもしれない。

ちょっとデータが大きくなると、利用していなかったけど、少しくらい大きい
ものなら、PowerShell結構使い物になることが分かったので、ツール作ろうかと
思って来ましたよ。コマンドレットを独自に作れば結構なことが出来そう。
0152デフォルトの名無しさん垢版2018/11/01(木) 06:25:15.55ID:mmcP2r/K
>>149
>まさにLinqの形なんですね。C#でLinq使ってみて、もしかして・・・と思って
>テストしてみたい次第。
間違った
「テストしてみた次第」
0153デフォルトの名無しさん垢版2018/11/01(木) 09:18:53.50ID:xoDC1qBI
遅延実行とパイプラインは違うよ
遅延実行はオンデマンドの処理で、並行処理になるか一括実行になるかは無関係
イメージとしてはプロキシ
パイプは次を待たずに通常バッファリングされながら並行処理されるもの
イメージはCPUの命令パイプラインそのもの
0154デフォルトの名無しさん垢版2018/11/01(木) 09:21:29.14ID:NMd92bWG
>>151
確かここのサイト
http://tech.guitarrapc.com/entry/2013/03/09/010335

Powershell3.0での結果らしい

forとforeachとforeach-object(パイプライン使用)とかの比較
データサイズやら構造で違いはありそう

.foreach()メソッドでも動作は変わるらしい

foreachだけでコマンド、フィルター、メソッドと3種類あるとか自分にはついていけなかった
0155デフォルトの名無しさん垢版2018/11/01(木) 09:40:09.66ID:NMd92bWG
>>153
わかってなかったわ

遅延実行やら並行処理やらの勉強やら検証方法やら勉強して出直さないとダメだなぁ
0156デフォルトの名無しさん垢版2018/11/01(木) 09:48:43.50ID:mmcP2r/K
>>154
あ〜、これは今回の参考にならないかも
わたしも、ずっと似たような考えをしていたんですよ。
このサイトの例では、一度変数に入れてから、別な処理を
行うという処理なので、遅延実行がされていないです。

私がやったのは、コマンドレットをまたいで遅延実行を
してくれているのだと気が付いてやってみたという例なので。
0157デフォルトの名無しさん垢版2018/11/01(木) 19:18:42.62ID:qmW4m+8w
>>143
>>144
ありがとうございます。
動きました。
願わくば、タイトルバーのフォントも変えたかったのですが
おそらく無理ですよね。
0158デフォルトの名無しさん垢版2018/11/01(木) 21:15:55.85ID:PBz6MbCm
Ruby では、Enumerator::Lazy で、無限リストを遅延処理できる

(1..Float::INFINITY).lazy.map{ |n| n*2 }.first(5)
# => [2, 4, 6, 8, 10]

これをLazyなしだと、先に無限配列を実体化しようとして、フリーズする

(1..Float::INFINITY).map{ |n| n*2 }.first(5)
# => (実行が終わらない...)
0159デフォルトの名無しさん垢版2018/11/01(木) 22:34:36.78ID:j6Caq374
>>158
Rubyの場合も、PowerShellのように、複数のモジュール(PowerShellの場合だとCmdletやスクリプト)をつなげば連動して遅延実行してくれるのでしょうか。
Rubyの方が遅延実行は先駆ということは書かれていたけど。

使うことはないけれども知識として。
0160デフォルトの名無しさん垢版2018/11/01(木) 22:35:45.48ID:j6Caq374
その無限リストというのが、その話なのかな?
0161158垢版2018/11/01(木) 23:09:51.35ID:PBz6MbCm
Ruby では、内部イテレータのEnumerable と、外部イテレータのEnumerator がある

Enumeratorをメソッドチェーンしている間は、リストが実体化されないから、
Enumeratorで続けていって、最後に実体化する

内部イテレータは、イテレータ自身が繰り返し制御を行う。
一方、外部イテレータは、ユーザーが繰り返し制御を行う

外部イテレータでは、2つの配列を1つずつ進めたり、カスタマイズできる
0162デフォルトの名無しさん垢版2018/11/01(木) 23:16:50.68ID:j6Caq374
C#と同じような感じだね

今回はPowerShellで遅延実行すると同じく
実体化されずに次の処理に渡ることが分かったので
こんどはコマンドレットを作ってみようと思う。
0163デフォルトの名無しさん垢版2018/11/02(金) 19:41:44.34ID:mjKfpvc8
19,000,000件、20項目のCSVをimpo-csvで読んで、
group-objectで8x8のクロス集計したら
どうも読んでいる途中でおかしくなったようだ。
原因を探らんと・・・・。
800万件では問題なかったんだが。
0164デフォルトの名無しさん垢版2018/11/02(金) 22:59:49.69ID:KoqyjIsr
インポならオマエのチンポがおかしい
0165デフォルトの名無しさん垢版2018/11/03(土) 21:38:47.42ID:0juc4OvK
遅延実行と聞くとコマンドプロンプトのforが思い浮かぶね
しかし遅延実行じゃなくて困ったことはあるがその逆は無い
遅延実行じゃないほうって何かメリットあるの?
0167デフォルトの名無しさん垢版2018/11/07(水) 16:26:31.91ID:64s9hY5n
リモートデスクトップ接続元がわかる方法ないかな?
クライアントPC名、ログインユーザー名、ipを見たいんだけど…

調べたらPSTerminalServicesってモジュールで出来るらしい記事があったんだけどもうインストーラー配布してないみたいで手詰まりです。
0173デフォルトの名無しさん垢版2018/11/07(水) 19:32:24.46ID:5rQxDZaK
たしかに
もともと、PowerShellが出てきた目的の世界だね
0180デフォルトの名無しさん垢版2018/11/11(日) 07:15:18.30ID:tAZC+CW3
スクリプトブロックに[0]添字で値参照て技があるのか配列なら分かるけどなんか不思議
0181デフォルトの名無しさん垢版2018/11/11(日) 10:05:51.56ID:3JRsWB+V
PowerShellは配列の扱いがかなり独特
単なる数値でも配列扱いすると要素1つだけの配列みたいに振舞う
$a = 1
$a[0] ⇒ 1
$a[1] ⇒ $null
まあ>>177はよく思いついたなって思う
0184デフォルトの名無しさん垢版2018/11/11(日) 15:05:07.40ID:msMOLK59
powershell -v 2だと動かないな
PowerShell 3.0で配列じゃない変数も要素を取得できるようになったから動く
バグではないっぽい
0185デフォルトの名無しさん垢版2018/11/11(日) 18:49:56.37ID:/HpWdlpY
スクリプトブロックでしょ
0186デフォルトの名無しさん垢版2018/11/11(日) 19:06:06.81ID:Fk6I1vC1
事務の仕事で、ファイル処理とかテキスト処理のため、たまにPowerShellを使ってます
挙動の予測ができずトライアンドエラーをする機会がVBAなどより少し多くて
素人にはちょっと難しいのかなあと思ってたのですが
理解不能な技>>177を見て、使いこなせる自信がますます無くなりました
■ このスレッドは過去ログ倉庫に格納されています

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