X



PowerShell -Part 3
レス数が1000を超えています。これ以上書き込みはできません。
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を使うか、コマンドプロンプトで使うしかないだろう
0109デフォルトの名無しさん
垢版 |
2018/10/26(金) 06:31:22.94ID:FXq8Nzbn
Powershellの自動補完のせいじゃないだろ、そんな所でtabを叩く操作がおかしい
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が出てきた目的の世界だね
0178デフォルトの名無しさん
垢版 |
2018/11/09(金) 20:47:10.72ID:V62EYj3k
>>177
キャリッジリターンで上書きしてるだけなのでやや反則か
文字列長は(数字桁+1)文字されてる
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を見て、使いこなせる自信がますます無くなりました
0187デフォルトの名無しさん
垢版 |
2018/11/11(日) 19:37:24.70ID:xpOIALoe
>>184
{abc}[0] #=>abc
これがわかんない
スクリプトブロックで囲むと、なんでabcはエラーにならないの?
普通にabcとやったらコマンドレットじゃないってエラー出るのに
0188デフォルトの名無しさん
垢版 |
2018/11/11(日) 19:39:58.14ID:JFNgNrbU
スクリプトブロックを文字列にキャストすると中身が実行されずに中のコードがそのまま文字列になる
つまり [string]{ fizz } が暗黙になされてるだけ
0189デフォルトの名無しさん
垢版 |
2018/11/11(日) 20:33:31.13ID:tAZC+CW3
その説明もピンと来ないが
&[fizz] や $hoge={Fizz};&$hoge
とすればちゃんとエラーになる。
未実行のスクリプトブロックは一種のヒア文字列扱いとなるということなんだろうか…
0191デフォルトの名無しさん
垢版 |
2018/11/11(日) 20:43:37.28ID:tAZC+CW3
powershell -v 2のエラーメッセージ
"型 System.Management.Automation.ScriptBlock のオブジェクトにインデックスを付けることはできません。"
わかるw
0192デフォルトの名無しさん
垢版 |
2018/11/11(日) 21:03:13.85ID:xpOIALoe
{ abc def ghi} #=> abc def ghi
なんか{}でかこまれた部分がそのまま文字列になってる
なにこれぇ
0193デフォルトの名無しさん
垢版 |
2018/11/11(日) 21:26:24.30ID:v3JXSoAX
1..100|%{"$_`r"+{fizz}[$_%3]+{buzz}[$_%5]}

1..100 # 範囲演算子で1から100までのint[]を生成
|   # パイプ演算子
%   # Foreach-Object
{   # スクリプトブロック開始(%の引数)
"   # 文字列開始(二重引用符の中ではエスケープシーケンスが展開される)
$_   # パイプラインの入力を受け取る自動変数
`r   # Carriage returnのエスケープシーケンス。後に続く文字で前の文字を上書きする(なにもない場合上書き無し)
"   # 文字列終了→string型
+   # 加算演算子(左辺がstring型なので右辺をstring型にキャストする)
{   # スクリプトブロック開始
fizz  # コマンド/関数名fizzとして解釈されるがスクリプトブロック内なので実行されない
}   # スクリプトブロック終了→ScriptBlock型
[   # []演算子で左辺を要素数1の配列としてアクセスする。
$_%3 # 配列のインデックス。%(剰余)演算子でパイプラインの入力$_を3で割る
]   # 上の結果が0(→3の倍数)の場合のみスクリプトブロックの要素にアクセス、1以上の場合$null
+   # 加算演算子(左辺がstring型なので右辺をstring型にキャストする)。
{buzz}[$_%5] # fizzと同じ。結果としてstringが評価されコンソールに出力される
}   #スクリプトブロック終了。
0194デフォルトの名無しさん
垢版 |
2018/11/11(日) 21:55:09.88ID:JFNgNrbU
>>189
単にスクリプトブロック型のオブジェクトが中身の生コードを持ってるだけやろ
{fizz}.ToString() しても同じ
ToString()でどういう値を返すかはオブジェクトの種類によって違う
&やコンマやInvokeしたときに初めてスクリプトブロック型オブジェクトが持ってるコードが評価される
0195デフォルトの名無しさん
垢版 |
2018/11/11(日) 22:21:33.88ID:JFNgNrbU
ちょっと舌足らずだった
スクリプトブロック型はToString()したときに
内部に文字列としてもってる生コードを返すってことが言いたかった
実際ソースを読んでるわけじゃないけど
0196デフォルトの名無しさん
垢版 |
2018/11/11(日) 23:20:57.99ID:xpOIALoe
スクリプトブロックは&で評価されるまで中身何もチェックされないみたいですね
一応動作は理解しましたがなんていい加減な言語なんだろ
こんなのどこにも書いてないし今後仕様変わる可能性はありそうですね
ありがとうございました
0197デフォルトの名無しさん
垢版 |
2018/11/12(月) 00:58:57.83ID:3c4TyDT9
こんなのは常識的に理解できる範囲や
パイプラインを考慮した関数をちゃんと作ろうと思ったら頭おかしなるで
0198デフォルトの名無しさん
垢版 |
2018/11/12(月) 06:17:57.42ID:gZOE16Sc
>>193
たいへんに、ありがとうごわす
0200デフォルトの名無しさん
垢版 |
2018/11/12(月) 20:51:57.60ID:ZJicw3nv
しかし、以前に比べて
投稿される内容が良くなってきたね
かつては『○○と比べてなんら』とか
そういう投稿ばかりだったもんね。
0202デフォルトの名無しさん
垢版 |
2018/11/12(月) 23:49:46.46ID:ZJicw3nv
どちらにしても、見てもわからないね
0204デフォルトの名無しさん
垢版 |
2018/11/13(火) 08:37:24.02ID:6YAdmBBQ
3.0からの文法でできるならだれか思いついてそうだったけど検索しても出てこないな
Anarchy GolfにはPowerShell無いし、StackExchangeで58byte、牟田口氏のコードで51byte

いろいろテクニックが載ってて面白い
what is your fave PoSh version of FizzBuzz? : PowerShell
https://www.reddit.com/r/PowerShell/comments/6r06hg/what_is_your_fave_posh_version_of_fizzbuzz/
code golf - Tips for golfing in PowerShell - Programming Puzzles & Code Golf Stack Exchange
https://codegolf.stackexchange.com/questions/191/tips-for-golfing-in-powershell?page=2&;tab=votes#tab-top
0205デフォルトの名無しさん
垢版 |
2018/11/13(火) 18:05:14.16ID:hYk6FFU0
IDがバーベキューだね
0211デフォルトの名無しさん
垢版 |
2018/11/15(木) 00:08:24.89ID:WLDbhFjW
>>209
2か月じゃないか?
0213デフォルトの名無しさん
垢版 |
2018/11/15(木) 00:41:50.91ID:WLDbhFjW
>>212
6.0はOKで6.1がだめと書かれてる
6.1が出たのは2か月前じゃないの
0215デフォルトの名無しさん
垢版 |
2018/11/15(木) 10:35:40.03ID:3jZ436MI
オプションを展開させるうまい方法ってありますか?
たとえば、-WhatIfを付ける/付けないを場合分けしたいときなど。
HogeCmd fuga piyo $whatif
とやると、$whatifは普通の引数になってしまうのでNG。
eval方式(コマンド全体を文字列にしてInvoke-Expressionで呼び出す)もあるけれど、
できれば、オプションのところだけうまいこと展開できればいいな、と。
0218デフォルトの名無しさん
垢版 |
2018/11/15(木) 15:25:38.96ID:VchA8nRa
>>216
横からだが、スプラッティングというものを初めて知って非常に参考になった。ありがとう。
0220デフォルトの名無しさん
垢版 |
2018/11/15(木) 17:07:06.05ID:n3jFLh1o
>>216
サンクス
0225デフォルトの名無しさん
垢版 |
2018/11/16(金) 17:17:39.49ID:h/lypBab
実行ユーザーがSYSTEMな場合の
COMオブジェクト利用がうまくいかないのは回避策ないでしょうか
0229デフォルトの名無しさん
垢版 |
2018/11/17(土) 06:13:16.64ID:bZFmP2aX
>>225
excelとか使うとき普通に使えてるけど
何かうまくいことがあるの?
0230デフォルトの名無しさん
垢版 |
2018/11/17(土) 07:39:47.70ID:tSr/NeZx
>>229
普通の使い方してたらSYSTEMなんかで動かすことはないからサービスとかで動かしたいとかなんだろうと思う
いずれにせよ状況小出しにする奴の相手してもしょうがない
0231デフォルトの名無しさん
垢版 |
2018/11/17(土) 07:47:24.60ID:gKTWKNrR
タスクスケジューラで動かしたいのかも。いずれにせよ具体例を書いて欲しいものだ
0233デフォルトの名無しさん
垢版 |
2018/11/19(月) 16:50:05.08ID:g2+fQFFI
WindowsCompatibilityモジュール試してみたけどFormat-table用の情報とか無いから一部コマンドレットの表示が微妙
いちいちモジュール読み込まんとダメだし
0234デフォルトの名無しさん
垢版 |
2018/11/19(月) 17:10:55.17ID:9fApbElg
>>233
Fomat-Table、モジュールなしだと使えなかったの?
0235デフォルトの名無しさん
垢版 |
2018/11/19(月) 19:27:11.18ID:xl/gDTc+
>>234
いや、そこまでの問題じゃない
Format-Tableで優先表示するプロパティ情報がないだけ
Format-Tableしても要らんプロパティがでてきたりする
Select-objectとかしてあげれば問題ないよ
0237デフォルトの名無しさん
垢版 |
2018/11/19(月) 21:26:04.01ID:Gl33OQrV
投稿がまともになってきた
0238デフォルトの名無しさん
垢版 |
2018/11/23(金) 16:20:10.48ID:5fd0Mgpu
Effective PowerShell的な本ってないの?
普段、使う分には問題なく使えてると思う
でもより上手い書き方があるのでは、良いコーディング習慣を守れてるだろうか、と自問自答すると自信を持てない
人に見せるものでもなく、人のを見る機会もないからどうしても自己流になってしまう
0240デフォルトの名無しさん
垢版 |
2018/11/23(金) 22:36:58.28ID:b8tU0Ani
文法詳説はこの前出た貝殻本が扱ってたけど
読みにくい(演算子の説明が130ページくらいから始まる)
0241デフォルトの名無しさん
垢版 |
2018/11/24(土) 01:01:38.61ID:sK2Z8lS/
バイナリモジュールの情報少ないよなあ
github漁ってもあんまりないし
コマンドレット内でGet-Item呼び出す方法探すだけでだいぶ苦労した
結局ダサいやり方になったけど
0243デフォルトの名無しさん
垢版 |
2018/11/24(土) 03:37:58.44ID:BKTpjWqm
get-netadapterとか見たいに複数の結果を返すようなクラスが作りたいんだけど
どんな感じで書けばいいん?
思い浮かばねえorz
0245デフォルトの名無しさん
垢版 |
2018/11/24(土) 04:04:11.42ID:BKTpjWqm
>>244
ちと理解できてない
例えば、get-netadapterの内容を編集して結果をだすクラスを作るとして
インプットが複数なのでそれを都度かえしていくってことでいいのかな?
0246デフォルトの名無しさん
垢版 |
2018/11/24(土) 05:43:08.48ID:wk1txPAQ
>>245
まず作りたいのはクラスじゃなくてFunction(関数)かメソッドかコマンドレット(外部関数)だよね?
クラスは型であって入力と出力を持つものでは無いし

Get-netadapterも含めて一般的なコマンドレットの出力型は配列で
配列の各要素がクラスになってる

Get-netadapterの結果に編集を加える場合、
入力された値をforeach等で分解して
クラスにAdd-member等で要素(プロパティとか)を加えて毎回出力するとかする

もしくは配列の各要素がPSCustomObjectクラスの変数を作って
それを出力するとかする

サンプルに丁度よい関数とかあればいいけど一端探すのめんどいから割愛
Add-memberとかクラスのメンバーについてはググって調べて下さいな
0247デフォルトの名無しさん
垢版 |
2018/11/24(土) 09:11:34.28ID:kuH8s62I
この手の話題でクラスとインスタンスの区別をせずに語られるとすごくモヤモヤする
0248デフォルトの名無しさん
垢版 |
2018/11/24(土) 12:12:31.33ID:+C2yOPuj
PSVersion 5.1.17763.134
PSEdition Desktop
で Windows.Forms.Timer がちゃんと動いてくれぬ
Tickイベント内の変数の変更を保持してくれない?
0250デフォルトの名無しさん
垢版 |
2018/11/24(土) 13:22:16.60ID:BKTpjWqm
途中で切れてしまった
コンストラクタに引数設定できるでしょ
その引数にget-netadapterの結果みたいなのを使う
で、その値で各プロパティの初期値みたいなのをセット
各引数付きのメソッドを実行すると、引数とプロパティを処理した結果を返すんだけども
get-netadapterみたいに複数がコンストラクタのインプットになるから、どうしたもんかと
やっぱ、無理なのかな
0251デフォルトの名無しさん
垢版 |
2018/11/24(土) 13:44:41.51ID:QuuVAkmI
UTF-8を標準出力に出力するexeの結果を処理したいのですが
特定の文字が入っていると文字コード変換に失敗します
例えば以下の文字列はこのように文字化けします
 「ホスト#01」⇒「ホスチE01」
 「ホスト02」⇒「ホスチE2」

正しくPowerShellで扱える文字列に直す方法をアドバイスいただけないでしょうか

## ソース
$src = [System.Text.Encoding]::UTF8
$dst = [System.Text.Encoding]::Default
$test = & 'C:\test\UTF8.exe'
$bytes = $dst.GetBytes($test)
$result = $dst.GetString([System.Text.Encoding]::Convert($src,$dst,$bytes))


UTF-8を標準出力に出力するサンプルexe(C#)
Console.OutputEncoding = new UTF8Encoding();
Console.WriteLine("ホスト#01\r\nホスト02");
0252デフォルトの名無しさん
垢版 |
2018/11/24(土) 14:43:41.10ID:2Kjdv9to
>UTF-8を標準出力
でぐぐったら
>これで、UTF-8 を使うアプリとの連携もばっちりだ。
そうだ
0254デフォルトの名無しさん
垢版 |
2018/11/24(土) 16:43:37.74ID:QuuVAkmI
>>252
このスレに書き込んで説明するために標準出力って持ってきたのですが
ググってるときは標準出力って思いつかずサイトに巡りあえませんでした
おかげでなんとかなりそうです
ありがとう

>>253
UTF16だという情報もみて変えてみたりもしたのですが、
余計文字化けがひどくなったのでどう対応すべきか悩んでました
0255デフォルトの名無しさん
垢版 |
2018/11/25(日) 01:27:52.64ID:bdma9Nzw
文字コードなど、考えたこともない。
UTF-8 しか使わないし

どのOS・アプリでも内部的には、UTF-16 だろうけど、これを扱うことなどない
0258デフォルトの名無しさん
垢版 |
2018/11/25(日) 19:55:30.63ID:aKGD81aI
パフォーマンス気にして型変換するなら、Powershell使うこと自体が不適
通常は勝手に型変換しないように型付ける

v3のビットシフト演算子が勝手にbyte型をint型にキャストするのマジ糞
0261デフォルトの名無しさん
垢版 |
2018/11/25(日) 21:22:56.96ID:XYd2EWob
未だにバッチをメインで使っている
ぼちぼちPowerShellメインに変えようかと思っているんだが
WSHもどうか?とおもったり
もうWSHは終わりで、PowerShellが延びると思っていて良い?
0262デフォルトの名無しさん
垢版 |
2018/11/25(日) 23:19:09.06ID:NeSEBBpr
VBScriptはちょっとオワコン感出てきたけど、WSH自体はJavaScriptがデフォルトで使えるのでしぶとく残りそう
0263デフォルトの名無しさん
垢版 |
2018/11/25(日) 23:34:35.24ID:tkP11man
>>261
標準で備わってる機能面でwshはPowershellに比べて貧弱だよ
Powershellだとcsv読み込むとかjson処理するとかコマンドレットで用意されてるけどwshだとそれなりのコード書かないと出来ないし
ループ周りもパイプラインに比べると冗長になりがち

ただwshの方がシンプルで学習は楽、Powershellは複雑な部分が多い
学習コストはPythonより高い気がする
0264デフォルトの名無しさん
垢版 |
2018/11/25(日) 23:48:06.15ID:tkP11man
PowershellはMS系クラウドサービスの管理シェルとして伸びるかな
バッチもwshも消えなそうだけど今後の伸びは無さそう
0266デフォルトの名無しさん
垢版 |
2018/11/26(月) 02:57:13.19ID:gMbJcsFf
学習コスト高いというか体系的にまとまった書籍等無いからよくわからずに動く状態になる(配列とか)
Pythonのようにすんなり上達するのではなくて、ある程度学ぶとかえってわからなくなるの繰り返し

それでも今更wshやるよりはいいはず
0267デフォルトの名無しさん
垢版 |
2018/11/26(月) 03:29:58.94ID:x+j35ljp
PowerShellだと学習コストは高いけど
よく使うコマンドレットがそろってる

WSHだとJavaScriptで書けるけど
自作ライブラリみたいの書く手間はある

微妙な勝負だけど今から始めるならもう
Poshを使ってしまった方が良いと思う
0270デフォルトの名無しさん
垢版 |
2018/11/27(火) 07:41:39.02ID:WLNYjP7B
VBSはバリバリ現役よ
うちの社内システム開発・運用は全てVBS
無料であり
バッチファイルより遥かに強力で
仕様が枯れていてVerUPに振り回されることがなく
Javaのように一企業の思惑でライセンス問題が発生することもない神言語
PowerShellはerUPが止まり仕様が枯れるまでは採用しない
0273デフォルトの名無しさん
垢版 |
2018/11/27(火) 09:20:49.19ID:pR/1ZC3V
Win7はあと1年ちょいでサポート終了だしな
その後はWin10のPowershell5.1で標準化するでしょ
今のPowershellは2.0が残ってるのがガンになってる気がする
0277デフォルトの名無しさん
垢版 |
2018/11/27(火) 18:27:04.57ID:7LglyRgp
>>276
どんなのがあったっけ?
0280 ◆QZaw55cn4c
垢版 |
2018/11/27(火) 23:18:31.25ID:X/MEoliS
>>273
win7 はたぶん終了にならないと思います、win10 がクソすぎるからね
0283デフォルトの名無しさん
垢版 |
2018/11/28(水) 12:31:06.61ID:j69eTZ+j
>>282
デフォルトじゃないとだめなの?
0284デフォルトの名無しさん
垢版 |
2018/11/28(水) 12:57:23.83ID:036JocE6
有償で延長サポートの話が出てる以上
それ以外はバッサリ終了に決まってるでしょ
0286デフォルトの名無しさん
垢版 |
2018/11/28(水) 21:40:54.00ID:e3ALQLMX
>>285
なるほどね。仕事内容や立場により、いろいろあるわけね。
0287デフォルトの名無しさん
垢版 |
2018/11/28(水) 21:55:44.64ID:JxqTGA2g
これが5.1だとちゃんと動かねぇ
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

function ShowInfoMain{
$counter = 0
$timerTestTick = {
$label_timer.Text = "{0} 秒" -f $counter++
}
#タイマーの初期化
$timerTest = New-Object Windows.Forms.Timer
$timerTest.Add_Tick($timerTestTick)
$timerTest.Interval = 1000
$timerTest.Enabled = $TRUE
$timerTest.Start()

#フォーム
$Form = New-Object System.Windows.Forms.Form
$Form.Size = "100,100"
$Form.StartPosition = "CenterScreen"

#タイマー
$label_timer = New-Object System.Windows.Forms.Label
$label_timer.Text = '0 秒'
$Form.Controls.Add($label_timer)

$result = $Form.Showdialog()
$timerTest.Dispose()
$Form.Dispose()
}
. ShowInfoMain
0288デフォルトの名無しさん
垢版 |
2018/11/28(水) 23:01:00.54ID:b5TbM/Zv
$counter = 0
$label_timer = New-Object System.Windows.Forms.Label
$timerTestTick = {
$label_timer.Text = "{0} 秒" -f $script:counter++
}
0290デフォルトの名無しさん
垢版 |
2018/11/28(水) 23:27:13.98ID:JxqTGA2g
んがー
スクリプトブロックでのスコープによるものって
認識でよろしいのだろうか…
2.0だと動くのはなんでなのじゃ
0292デフォルトの名無しさん
垢版 |
2018/12/02(日) 21:23:25.18ID:u3CI+74z
PowerShell 3.0での破壊的変更まとめ
https://blog.shibata.tech/entry/2018/12/01/113228

デリゲート代わりに使われるスクリプトブロックのスコープ

PowerShell 3.0からデリゲート代わりに使われるスクリプトブロックが独自のスコープを持つようになっています。
たとえば以下の様な例だとPowerShell 2.0では1を、PowerShell 3.0からは0を返す様になります。

Add-Type @"
public class Invoker
{
public static void Invoke(System.Action<int> func)
{
func(1);
}
}
"@
$a = 0
[Invoker]::Invoke({$a = 1})
$a
0293デフォルトの名無しさん
垢版 |
2018/12/03(月) 14:13:32.11ID:xHLM582p
新しいpowershell では、Get-Clipboard で、クリップボードから文字列も取得できる!
0299デフォルトの名無しさん
垢版 |
2018/12/04(火) 16:12:13.82ID:eKuwOju4
5ch の文章を、テキストエディタへコピペすると、
各行の先頭・末尾に、空白が付くので、これを除去したい

そこで、Ruby でプログラムを作って、
バッチファイルで、そのプログラムをダブルクリックで起動できるようにした

Windows で、クリップボード内の複数行文字列の、各行の先頭・末尾から、
連続する空白類を除去して、クリップボードに入れる

新しいpowershell では、クリップボードから文字列も取得できる

str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換

ary = str.each_line.map( &:strip )

IO.popen( 'clip', 'w:cp932' ) do | clip |
clip.print( ary.join "\n" )
end
0301デフォルトの名無しさん
垢版 |
2018/12/04(火) 17:45:54.20ID:xb7Yz2vd
Ruby挟む意味ないじゃん?バッチも画面が目ざわりだしvbsがいいよ

CreateObject("WScript.Shell").Run "powershell ""gcb | % trim | scb""", 0
0302299
垢版 |
2018/12/04(火) 19:47:12.62ID:eKuwOju4
VBS でも、ダブルクリックで実行できる?
0303299
垢版 |
2018/12/04(火) 19:58:07.57ID:eKuwOju4
ありがとう。
VBS でも、ダブルクリックで実行できた

ただ、黒い画面が表示された方が、わかりやすくない?
何秒ぐらい待つのか、迷う
0306デフォルトの名無しさん
垢版 |
2018/12/04(火) 23:31:35.16ID:RbfFY42H
>>305
Windows 文化と言うより、業務でオツちゃん・オバちゃんに使わせるシステムの場合、
あいだに黒い画面が一瞬出ると「なにこれ?」って無用な問い合わせが入ったり、
場合によっては無理やり閉じられることもある。
fool proof の観点からは黒い画面が無いに越したことはない。
0307デフォルトの名無しさん
垢版 |
2018/12/05(水) 20:37:03.12ID:x9ea9mMQ
" が含まれている文字列を環境変数にいれてnet useコマンドを使うと" がエスケープされず想定通りに処理されないのですがどうエスケープすればいいんでしょうか
シングルコーテート、バックコーテート、ダブルコーテートで"をくくってもだめでした
0309デフォルトの名無しさん
垢版 |
2018/12/05(水) 20:58:21.39ID:x9ea9mMQ
たとえばですが
$pass = test123"45
net use c:¥temp ¥¥192.168.1.10 $pass /user:testuser

とした時にパスワードに含まれている"が文字列として認識されずコマンドが実行されないのです
これをエスケープしようと
$pass = test123"""45
$pass = test123'"45
などとしてもうまくいかない感じです
0310デフォルトの名無しさん
垢版 |
2018/12/05(水) 20:59:28.32ID:0urcwekh
net useはpowershellのコマンドプロンプト用、powershellではNew-Psdriveコマンドレット、powershellのエスケープ文字は基本バックスラッシュ`
0313デフォルトの名無しさん
垢版 |
2018/12/05(水) 21:03:52.33ID:x9ea9mMQ
net use ではなく new-psdriveだとバクスラでエスケープ可能なんですか?
net useだとエスケープできなかったので、ちょっとやってみまふ
0314デフォルトの名無しさん
垢版 |
2018/12/05(水) 21:08:28.49ID:x9ea9mMQ
ちなみにパワーシェルからcmd /cでコマンド呼び出すときのエスケープキーはバクスラと^のどちらですか?
0316デフォルトの名無しさん
垢版 |
2018/12/05(水) 21:16:36.03ID:x9ea9mMQ
シングルコーテートでくくってもエスケープできるんですね
ありがとうございます
0317デフォルトの名無しさん
垢版 |
2018/12/05(水) 21:23:21.81ID:0urcwekh
エスケープじゃなくて、Powershellでは文字列は必ず'か"どっちかで囲う。生身はだめ。'で囲うのは静的リテラルの場合
0318デフォルトの名無しさん
垢版 |
2018/12/05(水) 21:25:50.83ID:jRzepDw/
結局環境変数は関係ないのか?
> " が含まれている文字列を環境変数にいれて
0320デフォルトの名無しさん
垢版 |
2018/12/05(水) 21:57:08.28ID:x9ea9mMQ
なるほどそういうルールあるんですね
プログラムやったことないんでしらんかったす
リテラルってのも意味わからんかったくらいや
0321デフォルトの名無しさん
垢版 |
2018/12/05(水) 22:13:06.29ID:ix5zH8Lr
start-processで終了を待たずにps1実行していくのは疑似並列処理として考えて良いのでしょうか
0325デフォルトの名無しさん
垢版 |
2018/12/06(木) 14:36:39.70ID:8XTishpu
>>309
間違いないよう(見間違いも)にだったらヒアストリングつかったらどうでしょう
行は増えますが、エスケープ考える必要もかいから。

@"
test123"45
"@
0326デフォルトの名無しさん
垢版 |
2018/12/07(金) 00:30:59.21ID:d/eT01GS
whoamlで取得した実行結果のユーザ名を一行で環境変数に入れるにはどうすれば良いでしょうか

whoami 実行
結果 testpc¥user1
と結果が返ってくる場合、
$test = whoami.split("¥")[1]
と言ったかたちで
$testにuser1を格納させたいのですがうまく行きません
0330デフォルトの名無しさん
垢版 |
2018/12/07(金) 08:45:51.25ID:hrhTiXxm
型じゃなく範囲・スコープだよ
環境変数はOSが管理していて、ひとつ値をセットしたら同じ環境内の他プロセス(アプリ)がその値をOSに教えてもらえる
普通の変数はプロセス内で管理されていて、他プロセスは見ることが出来ない
0331デフォルトの名無しさん
垢版 |
2018/12/07(金) 12:18:05.50ID:cSzYN2du
Linux では、~/.bashrc に環境変数を書けば、
自分(そのユーザーだけ)が起動するプロセスから、アクセスできる

etc/ 以下なら、PC 全体の設定になる

~/.bashrc は、Windows ではユーザー環境変数。
一方、システム環境変数は、PC 全体の設定で、すべてのユーザーで共有される

例えば、Tで始まる環境変数なら、
ls env: | Where-Object {$_.name -like "T*"}
0332デフォルトの名無しさん
垢版 |
2018/12/07(金) 12:42:27.81ID:TQVSWTyy
>>326
それを実行している自分自身のユーザ名が欲しいだけなら、わざわざそんなことしなくても
$env:USERNAME
で引っ張ってこれる。

出し惜しみ、小出しにしないで前後関係も話さないと的確なアドバイスが出来ないよ。
0335デフォルトの名無しさん
垢版 |
2018/12/07(金) 17:53:23.13ID:TQVSWTyy
>>334
だね。
どうやら ID:x9ea9mMQ ID:d/eT01GS はネットワークドライブのマウントがやりたいようだけど、
dos batch で使うべき net use や whois を PowerShell で使おうとすることに
無理がある。出来なくもないけどエレガントじゃない。

PowerShell でやるなら New-PSDrive だな。
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-psdrive
-Credential で任意の(自分以外の)クレデンシャルも指定できるから、
ID:x9ea9mMQ の要件も(たぶん)満たせるだろう。
0336デフォルトの名無しさん
垢版 |
2018/12/07(金) 18:35:56.11ID:fTv51LPz
コマンドレット使える所を外部コマンド使うなよとは思うね
出力から値をテキスト抽出で取り出すとかもエレガントではないな

あとlsとかcatとかdirとかのコマンドエイリアス使うのも微妙に感じる
0337デフォルトの名無しさん
垢版 |
2018/12/07(金) 19:53:53.63ID:iBsL10N5
Get-ChileItemに-Depthなんてオプションあったんだな。
うちの会社は↓みたいな整然としたフォルダ構成だから
こういうオプションあるとすごく助かるわ


プロジェクト管理
 └2018年
  └1Q
   └プロジェクトA
   └プロジェクトB
  └2Q
   └プロジェクトC
  └3Q
   └プロジェクトD
  └4Q
   └プロジェクトE
   └プロジェクトF
 └2019年
  └1Q
   └プロジェクトG
0341デフォルトの名無しさん
垢版 |
2018/12/07(金) 21:00:51.64ID:hrhTiXxm
清濁併せ呑んでこそのPowershell
なんたって名前からしてパワーだからな
力業もどんとこい
0342デフォルトの名無しさん
垢版 |
2018/12/08(土) 11:14:58.74ID:j0zdr08g
.NET Core 3.0 Preview 1でWPF、Windows Forms, WinUIが組み込まれてオープンソース化したんか
ほえー
0343デフォルトの名無しさん
垢版 |
2018/12/08(土) 15:04:34.50ID:8f5a0RKW
>>342
Preview出てたんだ
早速使ってみたい
0346デフォルトの名無しさん
垢版 |
2018/12/10(月) 21:47:33.54ID:PtRqcV9k
Linqっぽいことはできる
(1..10).ForEach({ $_ + 100 }).Where({ $_ -gt 105 })

Linqメソッドも呼べるけどC#のようにインスタンスメソッドな感じでは使えない

[Linq.Enumerable]::Where(1..10 -as [int[]], { param($x) $x -gt 5 } -as [Func[int,bool]])
0347デフォルトの名無しさん
垢版 |
2018/12/10(月) 22:38:26.51ID:vOOk2a2h
必要な箇所でC#コード書けばいいじゃん
外人のコード読むと皆そうやってるよ
0351デフォルトの名無しさん
垢版 |
2018/12/14(金) 21:21:08.51ID:xmsOh7Vk
UWPスレが死んでるのでこっちで聞き直すね
起動してるUWPアプリの列挙ってpowershellでどうやればいいですかね?
全く出てこないんですが
0353デフォルトの名無しさん
垢版 |
2018/12/16(日) 12:08:41.16ID:PkDIN57F
>>345
具体的にどんなことをやりたいか書いていただくと
PowerShellでLINQ利用した場合の例を挙げられると思うけど
0354デフォルトの名無しさん
垢版 |
2018/12/16(日) 21:18:15.54ID:XltMT+7i
職場のPC(セキュリティ上の理由でネットに繋がらない)がWin7→Win10になったんだが
PowerShellのヘルプがオンラインヘルプだけになって見れないのでつらい
0356354
垢版 |
2018/12/20(木) 22:28:30.63ID:MSiR3oAq
>>355
遅くなった & 説明が間違えてたごめん

Get-Helpコマンド自体は使えるんだけど-Fullオプション付けても付けない時と同じ内容しか出てこない
つまり使用例が見れないのでPowerShellを最近使い始めた自分にはつらい

ISEもヘルプを見ようとすると「ネットに繋がりません」みたいなエラーになった

もうリファレンス本買うことにするよ・・・orz
0361デフォルトの名無しさん
垢版 |
2018/12/22(土) 12:12:36.07ID:UGqq2IDw
>>360
基本一緒でしょう
GetType()
してみるとわかりますと同じですね。

ただし、${}の指定では配列のインデックス指定できない
${a[0]} とかは許されないですね。

なんでこういうのがあるかは分りません。
0362デフォルトの名無しさん
垢版 |
2018/12/22(土) 14:03:56.67ID:YB2ocxbA
$test = "TEST"
"test$testtest"
"test${test}test"
こういう時にでも使うんじゃねーの
求める形に適当なのを使えばいいんじゃねーかな
0363デフォルトの名無しさん
垢版 |
2018/12/22(土) 15:32:06.19ID:TlQhzlLR
中括弧つければ通常使えない文字も使える

${\(^o^)/} = "オワタ"
${ Hello ?? World! `nby powershell } = "hi"

どんな文字列でも変数名として有効であることが保証されるからコード生成とかで使われるらしい
普通は文字列への埋め込み時くらいしか使わんね
0364デフォルトの名無しさん
垢版 |
2018/12/22(土) 16:16:19.79ID:VDYmdehC
>>360
私はコードの可読性を高めるためになるべく ${hoge} といった形で記述するようにしてます。
あと、文字列をつなぐような場合でも ${hoge} が使われます。

$hoge = "hoge"
echo "${hoge}fuga"
この場合は「hogefuga」が出力されますが、

$hoge = "hoge"
echo "$hogefuga"
これでは$hogefuga という変数を参照することになるので思ったように動作しません。
0365デフォルトの名無しさん
垢版 |
2018/12/22(土) 16:37:26.19ID:UGqq2IDw
なるほどね

$test="TEST"
"test"+$test+"test"

より次の方がスマートかもね
"test${test}test"
0368デフォルトの名無しさん
垢版 |
2018/12/22(土) 17:15:32.75ID:uHYOaa0r
ダブルコーテーション内で変数を値展開させたい場合空白文字で区切られていないとだめ。つまり
echo "$hoge fuga"
であれば
hoge fuga
にはなる。
hogefugaを得たい場合、俺なら
echo ($hoge+"fuga")
と書く
0369デフォルトの名無しさん
垢版 |
2018/12/22(土) 18:16:02.24ID:UGqq2IDw
echoを使う理由はなんかあるのかな?
私はecho自体つかわないので
0370デフォルトの名無しさん
垢版 |
2018/12/22(土) 18:17:09.93ID:UGqq2IDw
>>367
ありがと
それ見たい
0371デフォルトの名無しさん
垢版 |
2018/12/22(土) 18:20:02.63ID:b6CiPLFa
ログを標準出力に出力するときに普通に使う

aho=echo `command`
こうやってコマンドの標準出力の結果を環境変数にいれるときにも
普通に使う


echoなかったらなに使えばいいワケ?
0372デフォルトの名無しさん
垢版 |
2018/12/22(土) 18:30:20.06ID:UGqq2IDw
いや、使う場面がないので聞いただけ
通常ログに返すときにはそのままechoなしで書いているもので

上記のやり取りの例だとechoいらないな〜と思ったまで
0373デフォルトの名無しさん
垢版 |
2018/12/22(土) 19:12:48.17ID:BLULObxH
echo使わなくてもコマンドの標準出力の結果を変数に入れられるのでは?
環境変数???
0374デフォルトの名無しさん
垢版 |
2018/12/22(土) 19:19:04.64ID:TlQhzlLR
オプション付けないなら意味はない
使う機会は-NoEnumerateするときくらいかな
-NoEnumerateすると配列を塊のままパイプに流せる

"1-one","2-two" | foreach { Write-Output ($_ -split "-") } | Write-Host

1
one
2
two

"1-one","2-two" | foreach { Write-Output ($_ -split "-") -NoEnumerate } | Write-Host
1 one
2 two
0375デフォルトの名無しさん
垢版 |
2018/12/22(土) 19:19:11.25ID:b6CiPLFa
失礼した
パワー系池沼シェルについてはオレは知らん
スレタイみずに普通のシェルの話してるかと思ってたわ
0376デフォルトの名無しさん
垢版 |
2018/12/22(土) 19:20:29.55ID:UGqq2IDw
そのまま書けば標準出力先への出力ですよね

私も不勉強なのですが、場合によりほかのシェル言語経験の方で
そちらではそれが普通なので、その習慣で書いているとかないですかね?
PSの環境変数にも特段echoいらないと思うし。
0377デフォルトの名無しさん
垢版 |
2018/12/22(土) 19:39:35.63ID:90OqLo7S
$env:aho = command で普通に入るね
echoとWrite-Outputの役割はpsに慣れてない人への広い意味でのエイリアスだと思う
シェル言語はツールとしての側面があるから、不使用の方が高尚だと矯正するようなものでもないと思う
0379デフォルトの名無しさん
垢版 |
2018/12/22(土) 20:24:16.85ID:SAN+T+wn
(measure-command{
$first = [datetime]"2000/1/1"
$last = [datetime]"2018/1/1"
foreach($t in 0..($last - $first).TotalHours)
{
$first + [timespan]::FromHours($t)
}
}).TotalMilliseconds


$first + [timespan]::FromHours($t)

Write-Output ($first + [timespan]::FromHours($t))
にすると3倍くらいかかる
0381デフォルトの名無しさん
垢版 |
2018/12/22(土) 20:30:19.10ID:VDYmdehC
>>372
> 上記のやり取りの例だとechoいらないな〜と思ったまで

ぜんぜんそれでも文法&動作的にはオッケーです。
可読性、保守性を上げるためのマイルールです。

自分だけがメンテするスクリプトなら問題ありませんが、複数の人間が
読む可能性がある場合は「何をやろうとしているのか」を
明確にするためにそうしています。
PowerShell に明るくない人が読む可能性もありますから。

なお echo は Write-Output のエイリアスですので念のため。
0382デフォルトの名無しさん
垢版 |
2018/12/22(土) 20:45:17.71ID:uHYOaa0r
> なお echo は Write-Output のエイリアスですので念のため。

一言余計、そんなことは誰でも知ってる。勘違い馬鹿なID:b6CiPLFa以外は
0383デフォルトの名無しさん
垢版 |
2018/12/22(土) 20:52:39.16ID:b6CiPLFa
ほらな低学歴ドカタまるだし()
0388デフォルトの名無しさん
垢版 |
2018/12/22(土) 21:24:11.29ID:UGqq2IDw
>>358
あ、用意されていて簡単にできたはずだ。なんだっけな・・・
0391デフォルトの名無しさん
垢版 |
2018/12/22(土) 22:55:05.08ID:84E3pYZa
alias と入力してみ。
漏れは、Linux・コマンドプロンプトのalias を使う

%, ?
cat, cd, chdir, cp, curl, dir, echo, foreach, ls,
man, mv, ps, pwd, ren, rm, rmdir, tee, type, wget, where

たいていは、Ruby からPowerShell(PS) を呼ぶか、
ダブルクリックで起動したい時は、VBScript から呼ぶ

Ruby, PS, VBS が入り乱れる
0392デフォルトの名無しさん
垢版 |
2018/12/23(日) 00:15:24.77ID:qffc/3mK
ps:オレのPC

PS >.\datecount.ps1 > xxx.txt

----

datecount.ps1(>>379)

date
$first = [datetime]"2000/1/1"
$last = [datetime]"2018/1/1"
foreach($t in 0..($last - $first).TotalHours)
{
$first + [timespan]::FromHours($t)
}
date

----

xxx.txt

2018年12月23日 0:02:31 ← 開始
2000年1月1日 0:00:00
2000年1月1日 1:00:00
(-snip-)
2017年12月31日 23:00:00
2018年1月1日 0:00:00
2018年12月23日 0:03:37 ← 終了
0393デフォルトの名無しさん
垢版 |
2018/12/23(日) 00:18:08.99ID:qffc/3mK
bash:オレのPC(>>392と同じ計算機)のvmwareのcentos

$ ./datecount.sh > xxx.txt

----

datecount.sh

#!/bin/bash
date
FIRST=`date +%s -d "2000/1/1 0:00:00"`
LAST=`date +%s -d "2018/1/1 0:00:00"`
A=$((FIRST-=3600))
while [ ${A} -lt ${LAST} ]
do
date -d @$((A+=3600)) "+%Y年%-m月%-d日 %k:%M:%S"
done
date

----

xxx.txt

2018年 12月 22日 土曜日 23:59:44 JST ← 開始
2000年1月1日 0:00:00
2000年1月1日 1:00:00
(-snip-)
2017年12月31日 23:00:00
2018年1月1日 0:00:00
2018年 12月 23日 日曜日 00:01:53 JST ← 終了
0394デフォルトの名無しさん
垢版 |
2018/12/23(日) 00:47:12.06ID:qffc/3mK
改めてパワー系池沼シェルの遅さが実感できたわ

linuxのほうは毎回dateコマンド経由して結果を取得するものすごい悪い条件なのに
パワー系池沼シェルは組込みオブジェクト使ってもこの速度だからな

組込みオブジェクトを使わなかっらどうなるか
つまりそういうことになる

お話にならない。。。
0399デフォルトの名無しさん
垢版 |
2018/12/23(日) 01:52:13.30ID:9E3TCu/N
結果をlogに出力するだけならすぐ終わるべ

2018年12月23日 1:44:41
2000年01月01日 00:00:00
2000年01月01日 01:00:00
2000年01月01日 02:00:00

2017年12月31日 22:00:00
2017年12月31日 23:00:00
2018年01月01日 00:00:00

2018年12月23日 1:44:43
0400デフォルトの名無しさん
垢版 |
2018/12/23(日) 02:02:36.44ID:lfndw29D
ピラフ大王なんて、PowerShell で、5ch のスレをスクレイピングするよw

漏れは、Ruby でやるけど
0402デフォルトの名無しさん
垢版 |
2018/12/23(日) 02:26:18.31ID:zuMyhwwp
>>379は変数への代入とかを想定して書いたんだけどな

値を返すのを関数型言語っぽく式で書けるのはいいけど、
手続き的なコードと混ざる場合もあるからコードの意図が分かりにくくなりがち
0403デフォルトの名無しさん
垢版 |
2018/12/23(日) 02:35:01.23ID:M6Mt1G8k
計算結果をリストに入れるだけなら0.3秒で終わる
つまりほぼ画面出力かかってる時間なのに
それを組み込みオブジェクトがどうのこうの訳わからんこと言ってる馬鹿さよ
0405デフォルトの名無しさん
垢版 |
2018/12/23(日) 08:50:16.09ID:z3o8Rgch
初学者と低能アンチが自らおバカを披露するスレはここですか。
にやにや眺めてる
0406デフォルトの名無しさん
垢版 |
2018/12/23(日) 10:21:20.90ID:qffc/3mK
画面出力()
やはりパワー系池沼シェルは
池沼が使ってるだけあるわ

オレの試験をみて画面に出力してると思ってるなら
相当知能に問題がある
というよりなシェルの仕組み自体を理解してない

コマンドでは両方とも標準出力をファイルにリダイレクトしている

しかもdate使ってるのはlinuxだからな
池沼はパワー系池沼シェルがdate使ってると思ってるらしいわ
普通に外部コマンド呼び出しのほうがオーバーヘッドがあるからな
まずシェルの内部コマンドと外部コマンドの違いすら分かってない

つまり、linuxはもともと相当不利
パワー系池沼シェルがこの部分で速いのはアタリマエ

基本的なことがなにもわかってない

所詮、低学歴知恵遅れのオツムの程度は
この程度

低学歴はいちいちいつも自分は低学歴でバカですと
自白するからな
0407デフォルトの名無しさん
垢版 |
2018/12/23(日) 10:22:49.86ID:zuMyhwwp
いろいろぐじゃぐじゃ言ってるけど、無駄改行も相まって目障りだね
同じ内容で言葉を増やすのはバカでもできて、言葉を減らすには学が必要だ、って誰が言ったんだっけかな
0408デフォルトの名無しさん
垢版 |
2018/12/23(日) 10:24:00.28ID:qffc/3mK
低学歴知恵遅れには
一から十までいわないと分からないからな

クソみたいに知能が低い
0409デフォルトの名無しさん
垢版 |
2018/12/23(日) 10:32:47.68ID:qffc/3mK
ホントなこの板はクソみたいに知能の低いのしかいないのが
よくわかるわ
0410デフォルトの名無しさん
垢版 |
2018/12/23(日) 10:35:50.27ID:M6Mt1G8k
ああよく見たらたしかにリダイレクトしてたわw
でどこがネックになってるの?
内部コマンド使えるpowershellが圧倒的に速かったって言いたかっただけ?
0411デフォルトの名無しさん
垢版 |
2018/12/23(日) 10:43:20.28ID:qffc/3mK
低学歴知恵遅れの池沼は
日付とかmsが事前に用意してくれるオブジェクトしか使わないから
問題ない

低学歴知恵遅れの池沼は
自分で作ったコマンドを標準入出力で組み合わせて使える知能すら備えてないから
問題ない
0413デフォルトの名無しさん
垢版 |
2018/12/23(日) 11:40:26.14ID:M6Mt1G8k
このアスペの相手は無理だわw
低い次元のしょぼい知識でマウントとろうとするし
またそれ自体が目的になってるからみんな戸惑うんだと思うわ
0414デフォルトの名無しさん
垢版 |
2018/12/23(日) 11:57:29.53ID:qffc/3mK
あんな何度もdate呼ぶような、しかもしょうもない処理を何度も使うなら
普通だったらCで書いたコマンドを作るからな

bash:オレのPC(>>392と同じ計算機)のvmwareのcentos

$ ./datecount2.sh > xxx.txt

----

datecount.c

#include <stdio.h>
#include <time.h>

#define FIRST 946652400
#define LAST 1514732400

int main(void) {
struct tm* p_tm;
time_t t = FIRST;
for ( ; t <= LAST; t += 3600) {
p_tm = localtime(&t);
fprintf(stdout, "%d年%d月%d日 %02d:%02d:%02d\n", p_tm->tm_year + 1900, p_tm->tm_mon + 1, p_tm->tm_mday, p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec);
}
return 0;
}
0415デフォルトの名無しさん
垢版 |
2018/12/23(日) 11:58:06.55ID:qffc/3mK
#!/bin/bash
date
./datecount
date

----

xxx.txt

018年 12月 23日 日曜日 11:49:43 JST ← 開始
2000年1月1日 00:00:00
2000年1月1日 01:00:00
(-snip-)
2017年12月31日 23:00:00
2018年1月1日 00:00:00
2018年 12月 23日 日曜日 11:49:43 JST ← 終了


一瞬で終わる
なんでもシェルスクリプトだけでやる必要ななんかまったくない
こういった出力結果を加工するのは、当然標準入出力になる
0416デフォルトの名無しさん
垢版 |
2018/12/23(日) 12:00:27.02ID:qffc/3mK
マウント()

低学歴知恵遅れが
いちいちオレにつかっかてきたくせに
マウントとかいってるわ

マジで低学歴知恵遅れは
ハジというもんがないらしいな

低学歴知恵遅れは
なんの取り柄もないゴミでクズのくせに
プライドだけは高いからな

ホントな低学歴知恵遅れは
どんだけゴミやねんと
0418デフォルトの名無しさん
垢版 |
2018/12/23(日) 12:07:09.12ID:9E3TCu/N
あの...だからストリーム出力が遅いんですよPSちゃん

date
$log = New-Object System.Text.StringBuilder
$first = [datetime]"2000/1/1"
$last = [datetime]"2018/1/1"
foreach($t in 0..($last - $first).TotalHours)
{
[void]$log.AppendLine(($first + [timespan]::FromHours($t)).ToString("yyyy年MM月dd日 HH:mm:ss"))
}
$log.ToString()
date

これでリダイレクトなら2秒弱だけど
素実行でコンソール出力ありだと10秒ほどかかる
0419デフォルトの名無しさん
垢版 |
2018/12/23(日) 12:07:09.97ID:qffc/3mK
低学歴知恵遅れが
ムリして頭いいふりしようとしても
頭悪いのなんかすぐにバレるからな

残念なことに

本人は気付いてないかもしれないが
いちいち頭悪いですと自己紹介するからな

残念なことに
0421デフォルトの名無しさん
垢版 |
2018/12/23(日) 12:08:19.86ID:qffc/3mK
低学歴知恵遅れって
低学歴なのがバレてないと思ってるからな

レスすればするほど
低学歴の自己紹介してるのが
分かってない
0423デフォルトの名無しさん
垢版 |
2018/12/23(日) 12:12:26.40ID:qffc/3mK
自己評価だけは高い低学歴知恵遅れにありがちな典型的なサンプルといっていい

底辺であるほどその傾向が高い傾向にあることは
この板で多くのサンプルをみてきたからすぐにわかるわ
0424デフォルトの名無しさん
垢版 |
2018/12/23(日) 12:14:04.22ID:qffc/3mK
低学歴知恵遅れは自覚がない

そいつが低学歴知恵遅れなのは
低学歴がみればすぐに分かるからな

残念なことに

すぐにバレるのが分かってない
0425デフォルトの名無しさん
垢版 |
2018/12/23(日) 12:19:40.35ID:qffc/3mK
やっぱりな低学歴知恵遅れは板から排除しないといけないわ
まともな人間がよってこない

低学歴知恵遅れの頭悪いレスでうまってたら
まともなヤツはどんびきするからな
しかも頭悪いことを自信満々でいうからな
そして声だけはでかい


バルサン焚いて低学歴知恵遅れを
この板から駆除しないといけない
0427デフォルトの名無しさん
垢版 |
2018/12/23(日) 12:26:07.38ID:qffc/3mK
ほらな身に覚えがあるのが
わらわらこのスレによってきてるわ

誘虫灯になってるわ

図星だからな
0428デフォルトの名無しさん
垢版 |
2018/12/23(日) 12:30:51.58ID:9E3TCu/N
シェルでやる必要ないってなると
そだねーで話し終わるんですけど…
そういう主張だったの?
bash持ち出してきて着地点そこでいいの?
0431デフォルトの名無しさん
垢版 |
2018/12/23(日) 13:02:32.10ID:qffc/3mK
そうオレ以外のレスはまとめてNGで正解
情報価値のある有益なレスはオレのレスしかない

他の低学歴知恵遅れのレスは
情報価値ゼロ
0432デフォルトの名無しさん
垢版 |
2018/12/23(日) 13:18:23.49ID:yKwr45+F
ちなみに、PowerShellらしくこんな感じではどうだろう
私の遅いマシンでもファイル出力いれても2秒ほどで終わる

$first = [datetime]"2000/1/1"
$last = [datetime]"2018/1/1"
$stream = [System.IO.StreamWriter]::new(".\xxx.txt")
$new=0..($last -$first).TotalHours | % {$stream.WriteLine($first.AddHours($_))}
$stream.Close()
0433デフォルトの名無しさん
垢版 |
2018/12/23(日) 13:23:15.06ID:yKwr45+F
あ〜
$new= はいらんかった。
0434デフォルトの名無しさん
垢版 |
2018/12/23(日) 13:29:16.66ID:pDu+7nW/
コマンド実行と同じ行でechoってできますか?
例えば、
echo "cドライブ" dir c:¥
みたいな感じで
0435デフォルトの名無しさん
垢版 |
2018/12/23(日) 13:44:08.05ID:p+GlREN7
>ID:qffc/3mK

それだけ攻撃的な性格で、円滑な社会生活が営めているのか、老婆心ながら心配になってくる。
>ID:qffc/3mK のレスを見て Void (日下部さん) を思い出した俺はもうオッサン
0437デフォルトの名無しさん
垢版 |
2018/12/23(日) 14:25:20.11ID:qffc/3mK
シェルらしく書くならこうなる

param (
[string]
$o,
[datetime]
$first = [datetime]"2000/1/1",
[datetime]
$last = [datetime]"2018/1/1"
)

${datecount} = foreach($t in 0..($last - $first).TotalHours) { $first + [timespan]::FromHours($t) }

if (-not ${o}) {
${out} = ${datecount}
} else {
${out} = ${datecount} | Set-Content ${o}
}

${out}
0438デフォルトの名無しさん
垢版 |
2018/12/23(日) 14:26:52.23ID:yKwr45+F
>>385
>PSの出力をログに同時に吐くようにできませんか?

やっと思い出した。そのための機能がtee-objectだった
get-process |Tee-Object -FilePath dummy.txt

これでコンソール画面とdymmy.txt両方に出力される。
0439デフォルトの名無しさん
垢版 |
2018/12/23(日) 14:27:56.95ID:qffc/3mK
linuxなら指定したファイルにリダイレクトするのも
デバイス(/dev/stdout)にリダイレクトするのも
同じだからな

低学歴知恵遅れたちはなにをリダイレクトといってるのか
意味不明といっていい

池沼の語彙でのリダイレクトはまた違う意味なのか
わかってないでテキトーなこといってんのかよくわからんというより

> これでリダイレクトなら2秒弱だけど
> 素実行でコンソール出力ありだと10秒ほどかかる


きっとなんも分かってない
0440デフォルトの名無しさん
垢版 |
2018/12/23(日) 14:33:14.12ID:qffc/3mK
/dev/pts/0の端末

 $ tty
 /dev/pts/0

 $ ls −la /dev/stdout
 lrwxrwxrwx. 1 root root 15 12月 23 08:20 /dev/stdout −> /proc/self/fd/1
 $ ls −la /proc/self/fd/1
 lrwx−−−−−−. 1 xxxxx xxxxx 64 12月 23 14:06 /proc/self/fd/1 −> /dev/pts/0

 $ ls −la /dev/stderr 
 lrwxrwxrwx. 1 root root 15 12月 23 08:20 /dev/stderr −> /proc/self/fd/2
 $ ls −la /proc/self/fd/2
 lrwx−−−−−−. 1 xxxxx xxxxx 64 12月 23 14:16 /proc/self/fd/2 −> /dev/pts/0

 $ ls −la /dev/pts/0
 crw−−w−−−−. 1 xxxxx tty 136, 0 12月 23 14:07 /dev/pts/0

/dev/pts/1の端末

 $ tty
 /dev/pts/1

 (あとは同じで)/dev/stdoutも/dev/stderrも/dev/pts/1になる
0442デフォルトの名無しさん
垢版 |
2018/12/23(日) 14:35:32.50ID:qffc/3mK
例えばこの↓コマンドを/dev/pts/0の端末で打ったらどうなるか
このスレにいるような低学歴知恵遅れに分からないのは分かるわ

$ echo aho > /dev/pts/1

いずれにせよ
池沼たちのレスみてたらパワー系池沼シェルがいかにウンコかよくわかるわ
その点は有益だったといえる
0444デフォルトの名無しさん
垢版 |
2018/12/23(日) 14:56:40.70ID:yKwr45+F
そだね、Unixのシェル知らないから
何をやっているか自体が分らない
だから答えようもない。
0446デフォルトの名無しさん
垢版 |
2018/12/23(日) 15:10:54.99ID:y1IlhbOh
スレタイを見ずにUNIXシェルと勘違いして見当違いのレスをした上に
恥をかかされたと逆恨みしてスレを荒らす
残念すぎる
0449デフォルトの名無しさん
垢版 |
2018/12/23(日) 15:21:36.51ID:qffc/3mK
荒らしてる?
失敬な

低学歴知恵遅れは
自分が低学歴知恵遅れでなんの役にも立ってないのを
すぐに棚にあげるからな

そもそもオレのレスしか有益な情報がない

分かるやつがスレを読めば
いかにパワー系池沼シェルがウンコか分かる構成のレスになってる

そしてこのスレにも低学歴知恵遅れしかいないことを
十分に証明できるレスの構成になってる

だれかオレ以外にこのスレで有益なレスした?
0450デフォルトの名無しさん
垢版 |
2018/12/23(日) 15:21:46.66ID:yKwr45+F
>>448
演算子ではなくて
行替えしないで1行で書きたいときの単純な区切り
0451デフォルトの名無しさん
垢版 |
2018/12/23(日) 15:24:22.01ID:p+GlREN7
>>448
そうです。他の言語でも文の区切りや行末にセミコロンを使うことが多いので、学習コストを下げるため同じ文字にしたのかもしれませんね。
0452デフォルトの名無しさん
垢版 |
2018/12/23(日) 15:25:34.62ID:yKwr45+F
>>449
そりゃいいんだけど、そのスクリプトが何をやっているかの説明を一緒に
付けてくれないとわからないんで、それを付けて頂戴。

普段UNIX系使っている人ばかりでないし、私は使うことは使うが
普段つかうのがSASなんで、UNIX系のシェルはディレクトリー指定や変更など
本当の基本だけ知っていれば、シェル自体を必要しなくても処理が完結するんで
何を書いているのかがわかんない。
0453デフォルトの名無しさん
垢版 |
2018/12/23(日) 15:46:34.98ID:qffc/3mK
まずどのスクリプトが分からんといってるのかが分からん
一行のコマンド(>>442)なら書いたが
>>440はシンボリックリンクがどうはられてるかのコマンドログだからな
0454デフォルトの名無しさん
垢版 |
2018/12/23(日) 15:47:44.56ID:yKwr45+F
最初のttyって何やってるの?
0455デフォルトの名無しさん
垢版 |
2018/12/23(日) 15:50:21.95ID:qffc/3mK
使ってる端末が
どのデバイスファイルと結びついてるかを返す
これ以上いちいち説明する気はない

やる気があるなら、自分でman読んで覚えたほうがいい
0456デフォルトの名無しさん
垢版 |
2018/12/23(日) 15:58:49.60ID:yKwr45+F
>>455
だから〜
UnixでSAS使っていればシェル使わなくても、自分たちの処理はすんじゃうので
Unixシェル覚える気はさらさらないのよ。
0458デフォルトの名無しさん
垢版 |
2018/12/23(日) 16:22:49.84ID:qffc/3mK
ちなみにオレもSASデータを作成する処理の対応をしたことがある

dbmsの抽出結果を直接投入したりcsvから投入したりしてる
sasは欠損値や日付の取り扱いにクセがあるから
データ加工をちゃんとしないとそのままでは大体投入できない

当然そういったデータ加工もsasへの投入も日次のJOBとして毎日シェルが呼び出されるようになってる
データセットは毎日更新され続ける

データセットを作成したあとは、ほとんどSASだけで完結できるのは、そのとおりだ

それとパワー系池沼シェルがウンコなのとはなんの関係もない
パワー系池沼シェルからexcel操作するのと変わらん話だからな

まずシェルというもんがなにか分かってない
0460デフォルトの名無しさん
垢版 |
2018/12/23(日) 16:37:35.74ID:yKwr45+F
そうですか使ってましたか。
私のところでは、DB自体に投入する前加工もSASでやっている。もう30年になるの
で、SASに投入するデータの加工はSAS事態でやっている。SASに渡すために
前処理する必要は全くなく生データからDBローディングまですべてSASで行っている、
UNIX上で扱うデータなら扱えないデータは基本ないので。
といっても、ここはPowerShellの掲示板なので、以降この話は控えます。
0461デフォルトの名無しさん
垢版 |
2018/12/23(日) 16:59:42.72ID:qffc/3mK
SASなんかで加工してたら
まず限界時間にまに合わない
とてつもない大量のテーブルかつとてつもない大量のレコードがあるからな

SASおいてる計算機では
計算機に休む暇を与えてはいけない
投入以外の余計な処理をしてはいけない
この条件でひたすら投入のみになる
これで限界時間ギリギリになる

こんな状態でも予算つけてくれなかったからな
0462デフォルトの名無しさん
垢版 |
2018/12/23(日) 17:03:29.12ID:vUOt1bO/
>>461
そりゃ逆、あるいは作りが悪いか作っている人が知らないから
私がUnixのシェルを知らないのと同じようにSASを知らない人が
作ってるからだと思う。
0464デフォルトの名無しさん
垢版 |
2018/12/23(日) 18:11:00.48ID:vUOt1bO/
みんな知っていたんだろうが、私は今はじめて気が付いたんだが
import-excel
export-excel
などなどが、知らないうちにサポートされていたんだ。

早速使ってみる。
いままで自分でしこしこやっていた。
0465デフォルトの名無しさん
垢版 |
2018/12/23(日) 18:29:11.84ID:vUOt1bO/
使ってみたが、シートが大きくなるとめちゃくちゃ遅い
う〜〜ん・・・・
0467デフォルトの名無しさん
垢版 |
2018/12/23(日) 19:26:10.52ID:vUOt1bO/
>>466
入れた記憶がないんだけど・・・・それを入れたんだろうな
ボケが始まったかな?

そういえば、excelなしでexcelファイル生成みたいな話でそれをダウンロード
していたかもしれない。ちょっと喜んだんだが、xmlベースでのこの処理は
ちょっと私からすると使い物にならない。

仕方ないんでお手製の、comobject利用で行きたいと思います。
0468デフォルトの名無しさん
垢版 |
2018/12/24(月) 09:16:30.66ID:dTDa6WWm
しかし、この公開モジュールもったいない。改善すれば大変便利
他のサイトで回答したんだけど、データ大きくなければ、結構使える
次の例はexcelブック読んで、性別(列名)の男子だけ抽出して
新たなブック作成した例

(Import-Excel .\Member.xlsx).Where{$_.性別 -eq "男子"}|
Export-Excel .\NewMember.xlsx

これだけでも便利。自分でコマンドレット作っちゃおうかという気が
ムクムクと・・・・
0470デフォルトの名無しさん
垢版 |
2018/12/29(土) 14:12:24.74ID:sblaCsBM
多次元配列$aと$bに数値要素を入れて
それらの要素を同じ要素同士で足したり引いたり掛けたりしたものを
同じ構造の多次元配列$cに入れようとしましたが、

powershellの多次元配列の作り方が分かっていないのか、どうしても1つの成分に1つの数値が入りません

$a=@(@(1,2),@(3,4))
$b=@(@(7,8),@(9,10))

$c = New-Object "object[,]" 2,2
だとダメなんですかね?
0472デフォルトの名無しさん
垢版 |
2018/12/29(土) 15:15:38.87ID:KNALm1aR
>>470
そういう質問もいいけど
一つ上の層に行って、何をしたいかを聞いてみてもいいかもよ。
そこにもっていかなくても良い手段、あるいは適切なコマンドレットが
すでに存在しているかもしれないので。

余計なお世話で失礼かなとは思ったけど。
0474デフォルトの名無しさん
垢版 |
2018/12/29(土) 17:29:03.55ID:sblaCsBM
$a = New-Object "object[,]" 2,2

$a[0,0] = 1
$a[0,1] = 2
$a[1,0] = 3
$a[1,1] = 4

$b = New-Object "object[,]" 2,2

$b[0,0] = 7
$b[0,1] = 8
$b[1,0] = 9
$b[1,1] = 10

$c = New-Object "object[,]" 2,2

$c[0,0] = $a[0,0] + $b[0,0]
$c[0,1] = $a[0,1] + $b[0,1]
$c[1,0] = $a[1,0] + $b[1,0]
$c[1,1] = $a[1,1] + $b[1,1]

echo $c

出来ました
ありがとうございました
0475デフォルトの名無しさん
垢版 |
2018/12/29(土) 17:52:09.19ID:sblaCsBM
$a = New-Object "object[,]" 2,2

$a[0,0] = 1.0
$a[0,1] = 2.0
$a[1,0] = 3.0
$a[1,1] = 4.0

$b = New-Object "object[,]" 2,2

$b[0,0] = 7.0
$b[0,1] = 8.0
$b[1,0] = 9.0
$b[1,1] = 10.0

$c = New-Object "object[,]" 2,2

$c[0,0] = 0.4*$a[1,0] + 0.6*$b[0,1]
$c[0,1] = 1.2*$a[0,0] + 0.2*$b[1,1]
$c[1,0] = 0.6*$a[0,0] + 0.8*$b[1,1]
$c[1,1] = 0.3*$a[1,0] + 0.7*$b[0,1]

echo $c

PS [ディレクトリ] .\array3.ps1
6
3.2
8.6
6.5

こういうのも出来ました
ありがとうございました
2乗とか平方根とかも入れてwhileで多数回回して時代遅れのカオス論ごっこで楽しみます
0476デフォルトの名無しさん
垢版 |
2018/12/30(日) 16:51:48.83ID:Tt0EhWYe
よかったよかった
0478デフォルトの名無しさん
垢版 |
2018/12/31(月) 06:10:51.81ID:hv1/uFm+
>Ruby の行列を使った方が良さそう

わざわざRuby使うくらいならR使うでしょうに
0481デフォルトの名無しさん
垢版 |
2018/12/31(月) 13:52:03.55ID:i7poOdM+
>>479-480
普通に機能してるけど?
cmd.e xeのdir /asみたいなことを期待してるならGet-ChildItem -Force -Systemでいけるかと
0483デフォルトの名無しさん
垢版 |
2019/01/01(火) 03:34:35.89ID:ssh3fXac
Ruby の行列では、

a = Matrix[[1, 2], [3, 4]]
b = Matrix[[7, 8], [9, 10]]

p a + b

結果
[[8, 10], [12, 14]]
0484デフォルトの名無しさん
垢版 |
2019/01/01(火) 09:29:48.04ID:HeFEoGOE
>>482
仕様が違うだけ
Get-ChildItem の -System は単なるフィルター
dir の /a オプションは -Force 相当の機能を含んでる
0485デフォルトの名無しさん
垢版 |
2019/01/01(火) 10:43:40.32ID:ISJZg14N
Rならこんな感じになるのかな?

a <- matrix(1:4, 2, 2, byrow=T)
b <- matrix(7:10, 2, 2, byrow=T)

a <- a[,1]
b <- b[,2]

matrix(c(0.4, 0.6, 1.2, 0.3), 2, 2)
* rbind(rev(a), a)
+ matrix(c(0.6, 0.8, 0.2, 0.7), 2, 2)
* rbind(b, rev(b))

結果をimage関数に渡してループすると綺麗にチカチカするんだろうか
0486デフォルトの名無しさん
垢版 |
2019/01/01(火) 16:03:09.00ID:T6MHXAKy
SAS/IMLだと

a={1 2,3 4};
b={7 8,9 10};
c=a+b;
print c;
0488デフォルトの名無しさん
垢版 |
2019/01/01(火) 16:57:52.05ID:UIhiNbM3
はっきりしているのは、どれもめちゃ遅い
0489デフォルトの名無しさん
垢版 |
2019/01/01(火) 16:59:31.69ID:UIhiNbM3
アルゴリズムを考えたり検証したりには
便利という仕組みですね。
これはこれで価値がある。
0490デフォルトの名無しさん
垢版 |
2019/01/02(水) 00:00:30.28ID:uM4gOpCa
いろんな言語で書いてくれてるけど
元のソースは行列の単純な和なんて求めてないよね
どうせなら元ソースのエレガントな移植が見たい
0491デフォルトの名無しさん
垢版 |
2019/01/02(水) 07:11:32.67ID:JfU1VO50
元のソースは何らかのルールに沿ってたものなのでしょうか
0493デフォルトの名無しさん
垢版 |
2019/01/02(水) 16:52:22.21ID:sVSsgdXZ
まあ、乗ったというより
別にRubyに求めてないし、それが目的なら
もっといいものがあるよいうことを
Rubyフェチの方に教えてあげただけ。
PowerShellはそこを求めたものとちゃうから。
0494デフォルトの名無しさん
垢版 |
2019/01/02(水) 16:57:28.69ID:PMrmWLAE
一般人の正月:和歌を読んで批評し合う
逸般人の正月:コードを書いて批評し合う
0497デフォルトの名無しさん
垢版 |
2019/01/03(木) 14:18:46.18ID:EIDJLiBS
出力内容に日本語(2バイト文字)が含まれているとテーブル表示の際にカラムがズレる、ってのは回避方法がないのかな。
https://i.imgur.com/qMJ9fag.png
chcp 437 で英語モードに、って小細工も、Win10/srv2016 以降は出来なくなってる。

# 今気づいたが Unicode の時代に「2バイト文字」って表現は正しくないな
0499デフォルトの名無しさん
垢版 |
2019/01/08(火) 18:45:23.42ID:EC3N2/DB
パワーシェルってカテゴリ的にはスクリプト・プログラム言語?それともWindowsのソフトウェア?
0500デフォルトの名無しさん
垢版 |
2019/01/08(火) 19:49:18.08ID:GRXV3JJ2
どちらも

シェルと言語に同じ名前が付けられてる(後者はPowerShell Scriptと言ったりするけど)
0501デフォルトの名無しさん
垢版 |
2019/01/08(火) 20:23:14.66ID:twi+nGjw
なるほど
バッチファイルの場合、言語がMS-DOSでソフトウェアの名前がbatって感じかな
0503デフォルトの名無しさん
垢版 |
2019/01/08(火) 20:45:30.53ID:Ri9uFdMr
bashとシェルスクリプト
command.comとバッチスクリプト
コマンドプロンプト(cmd.exe)とバッチスクリプト
powershell.exeとpowershellスクリプト
0504デフォルトの名無しさん
垢版 |
2019/01/08(火) 21:11:05.43ID:Ri9uFdMr
つかシェルとシェルスクリプト
PowershellとPowershellスクリプト
が一番わかり易かったな
0506デフォルトの名無しさん
垢版 |
2019/01/09(水) 02:01:23.48ID:9kxsD7dR
別の言い方としてフロントエンドがある
フロントエンドの形態としてシェル、
シェルの機能としてスクリプトの実行という感じ
0507デフォルトの名無しさん
垢版 |
2019/01/09(水) 14:51:11.50ID:teNQqIfe
PowerShellができるようになると何がいい?
0509デフォルトの名無しさん
垢版 |
2019/01/09(水) 19:51:08.47ID:nNa8IYsJ
>>507
職業で使わない前提なら、
Windowsへの追加のインストールなしにそこそこリッチなツールをスクリプト言語で作れることかな
0510デフォルトの名無しさん
垢版 |
2019/01/09(水) 21:58:57.96ID:LPlKYmug
それな
今どきの企業はセキュリティポリシーがしっかりしていて
PythonだのRubyだの入れたくてもできないからな
0511デフォルトの名無しさん
垢版 |
2019/01/09(水) 22:13:34.50ID:WxZlp6Z9
>>507
事務職の俺が思うメリット・デメリット。

■PowerShellに限らないプログラミングのメリット
PCを使った繰り返し作業を省力化できる。例えば、
ファイルの名前変更と移動を定型で定期的にやるとか、
同じWebサイトにアクセスして毎回似たようなことをするとか、
お客さんとか他の部署から送られてくる使いづらいExcelのデータを
シンプルな表に整形するとか。

■PowerShellならではのメリット
他の人も書いてるけど、Windowsに最初から入ってる。
スクリプトファイルを渡すだけで同僚にも使ってもらえる。
(起動用のbatファイルとか、タスクスケジューラの設定とかは必要だけど)

■デメリット
全くのプログラミング素人には難しいと思う。
初めてなら、Pythonあたりを先に勉強した方がいいかも。
「パイプラインではオブジェクトが受け渡しされる」とかいわれても
初心者には何のことか分からんと思うし(俺もいまだにしっくり来てない)
適当に解説している入門書とかWebサイトには
「retrun文の後ろの値が、関数の戻り値になります」といった、
嘘じゃないけど嘘に等しいことが書いてあって初心者は訳がわからなくなる。
俺もトライアンドエラーばかりで、きちんと習得できてないです。
0513デフォルトの名無しさん
垢版 |
2019/01/09(水) 22:17:35.75ID:nNa8IYsJ
すごいHaskell本を借りて100ページくらい読んだら、PowerShellの関数型風な書き方も割と理解できるようになった
0514デフォルトの名無しさん
垢版 |
2019/01/09(水) 22:19:11.83ID:nNa8IYsJ
関数型風というか勝手にOut-Defaultがつく挙動がそう見えるだけかもしれないけど
0515デフォルトの名無しさん
垢版 |
2019/01/10(木) 00:11:38.57ID:jhx89QXs
関数型は、Ruby, jQuery(JavaScript)。
map というメソッドを頻繁に使う

PowerShell(PS)の延長線上に、Rubyがある

バッチファイル → PS
シェルスクリプト → Ruby

バッチファイル・シェルスクリプトは、とにかく、ハマリが多い!
プログラミングに適さない
0517デフォルトの名無しさん
垢版 |
2019/01/10(木) 00:28:19.57ID:FheW454d
>>515
この人は何でいつも同じような論調でどこにでも現れるのだろうか。
やたらruby推しするわりには具体的なrubyの良さが全く伝わってこなくて、むしろマイナスイメージをばら蒔いているような気がする。
0519デフォルトの名無しさん
垢版 |
2019/01/10(木) 04:58:55.23ID:Pqz/qBav
>>507
batファイルが書けるよりも何が便利かという視点だと、batがひどいからずっとマシというのがある
batでは初歩的な処理もできなかったり、実現までに手間を要したりする
保守性も悪い
0520デフォルトの名無しさん
垢版 |
2019/01/10(木) 05:25:45.52ID:nf36oLbM
>>519
それを言うなら、batとvbsやJscriptを組み合わせてようやく出来てたことが、よりPowershellでは少ないコーディングで同等以上の機能を実現できる。て書こうよ
0521デフォルトの名無しさん
垢版 |
2019/01/10(木) 05:57:47.50ID:Pqz/qBav
>>520
処理をちょっと追加・変更したくなったときにすぐほかの言語の利用や外部コマンド調達が必要になることを含めて、実現までに手間を要する、と言ったんだけどね
vbs等を覚えてそちら主体で書く前提なら、別途そういう視点での比較論を語ってくれ
0522デフォルトの名無しさん
垢版 |
2019/01/10(木) 06:03:49.10ID:nf36oLbM
MSの意図も、現実の普及や活用もvbsはbatの補間機能だよ、それらの一括後継がPowershell、そんなことを今更説明しなきゃならんとは残念至極
つかvbs覚えずにbatだけでwinの管理ワークなんかできなかったよ
0523デフォルトの名無しさん
垢版 |
2019/01/10(木) 07:54:48.12ID:e7V8oUZV
パワーシェルとrubyは似てる言語なの?
僕とかパワーシェルマスターベーションなのでruby勉強してみようかな
0525デフォルトの名無しさん
垢版 |
2019/01/10(木) 17:29:11.64ID:jhx89QXs
そりゃ、Ruby がベスト。
Vagrant, Chef, Homebrew, Redmine も、Ruby

JavaScript(JS)は、Ruby に似せてくるから、扱いやすい。
Node.js のnpm, yarn も、Ruby のBundler そっくり。
GUI は、HTML, CSS, JS

再帰的なディレクトリのファイル操作も、glob がある

オブジェクト指向・関数型・Duck Typing・Open Class など、あらゆるデザインパターンの宝庫

Ruby から、PowerShell も呼べる。
str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換

ダブルクリックで起動したい時だけ、VBS を使っている

ピラフ大王は、PowerShellで、5ch をスクレイピングするほどだけど、
漏れは、Ruby, Selenium Webdriver でやってる

「たのしいRuby 第5版、2016」でも読めば?
0528デフォルトの名無しさん
垢版 |
2019/01/10(木) 18:08:40.70ID:ct6DIWcV
>>525
わざわざ蕎麦好きが集まる蕎麦屋に出向いて、「うどんこそが至高の麺類。なぜなら〜」って
講釈垂れるのと同じくらいヤボだ、って気づくべき。周りは迷惑してるんですよ。
0530525
垢版 |
2019/01/10(木) 18:45:39.00ID:jhx89QXs
漏れは、PowerShell で数行書くなら、Ruby で作ってしまう

クリップボードみたいなのは、Rubyから、PowerShellコマンドを呼ぶ。
ダブルクリックで起動したい時は、VBS・bat を使う

Rubyから、Node.js を呼ぶとか、すべての言語を呼び出せるかも
0533デフォルトの名無しさん
垢版 |
2019/01/10(木) 20:51:10.85ID:UUY7OixD
(かつて)仕様書が存在しない処理系を複製するなんてやってられなくなったんじゃないか?
0534デフォルトの名無しさん
垢版 |
2019/01/14(月) 13:22:32.56ID:i1odpryK
powershellのメリットは対話環境とスクリプトが同一の文法て書けること
ISEやVS codeで小さなブロックの挙動を確認しながら、それらを組み合わせて一連のワークフローを構築できる

『トライ&エラーで作ってる』って方がいたけど、まさにそういったやり方が出来ることが、専門職じゃなくて日常業務の効率化に使ってる自分にとって凄く大きな利点
0535デフォルトの名無しさん
垢版 |
2019/01/14(月) 16:32:26.56ID:mUB6pFvH
>>534
>powershellのメリットは対話環境とスクリプトが同一の文法て書けること

まさに同じ利点なんだけど、TIPS集みたいな感じでテキストファイルに数行のスクリプトをいくつも集めておいて
必要になったらそこからpowershellウインドウにコピペで即実行できるのがいいね
0536デフォルトの名無しさん
垢版 |
2019/01/14(月) 17:38:40.92ID:i1odpryK
>>535
それもあるね
psreadline有効にしておけば履歴から同じようなことできるし
unix系で当たり前だったことが、やっと出来るようになったともいえるけど
0537デフォルトの名無しさん
垢版 |
2019/01/15(火) 07:41:15.21ID:PNg+c5Yb
文化の変化には拒絶反応があるもの
過去のシェルでつけられてきた命令等の名前付けルールを見ても、
今のようにIT文化が広がった時のが目の利用者目線でつけられたものではなく、
あくまでOS周りのシステム開発者と利用者が同一だった時代、要は試行段階の
時代につけられが規則で、今の時代に合わなくなっている。
そこに風穴開けたのは大変良いことだろう。

既存の使い方に慣れた人にとっては、新たな流れは「また覚えることが増える」
「使い方が今までと違う」ということへの拒否反応が少なからずある。

やり取りを見ていて思ったのは、すでに旧来Unix系シェルのルールにのっとって
作られてきたものがレガシーに向かっていると思いたくない、気が付かないひとが
多いこと。時代は変化してゆく。
0539デフォルトの名無しさん
垢版 |
2019/01/16(水) 18:21:31.35ID:Y6YhZRdL
>>538
あんがとさん
0540デフォルトの名無しさん
垢版 |
2019/01/31(木) 21:35:30.95ID:AeQOSKqu
&{
while($true){
(++$i)
sleep -Seconds 1
}
} | Out-GridView

Get-Date

上を実行すると1秒ごとにカウントされた値がウインドウ表示されるけど、
ウインドウを閉じたときにそれ以降のコマンド(Get-Date)が実行されず終了するのどう回避すればいいだろう・・・?
0541デフォルトの名無しさん
垢版 |
2019/01/31(木) 21:44:25.79ID:AeQOSKqu
Whileの継続判定を

$stop_form = Start-Job {
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
Start-Sleep -Milliseconds 500
[System.Windows.Forms.MessageBox]::Show("計測停止ボタン")
}

のフォームを使って

while($stop_form.state -eq "running"){...}

のようにもしてみたけれどウインドウ2個表示されるので方法として頭悪い・・・
0542デフォルトの名無しさん
垢版 |
2019/01/31(木) 22:18:49.56ID:xJsSt9Re
Windows では、よく知らないけど、
Linux では、プロセスに親子関係がある

そして親プロセスが終了すると、子プロセスにも終了メッセージが送られて、
それに何も対処しないと、普通は子プロセスも終了する

つまり、親亀こけたら子亀もこける

シェルから起動したプロセスは、シェルの子プロセスになっている

だからデーモン・サービスのように、親プロセスから切り離すか、
親から終了メッセージが送られても、子が終了しないような工夫をする必要がある

また、パイプラインでは、ジョブという処理単位もあり、
ジョブグループにまとめられて、そのグループ全部に対して作用する
0545 ◆QZaw55cn4c
垢版 |
2019/01/31(木) 23:10:29.40ID:GI5VQ7Hx
>>542
>デーモン・サービスのように、親プロセスから切り離すか
これ、なんか特別なことをしましたっけ…
0546542
垢版 |
2019/01/31(木) 23:44:01.11ID:xJsSt9Re
Windows では知らないけど、

Linux なら、systemd で、サービスを起動できる
0547デフォルトの名無しさん
垢版 |
2019/01/31(木) 23:44:18.82ID:AeQOSKqu
>>543
いにしえのブラクラかと・・・

>>544
一応こんな感じで、runspacepoolで実行するようにはしてみたけれど、
現実にはwhileの中で実行する関数とかをASTの構文解析使って渡してやる必要があって、少し手間なんですよね

Out-GridViewによるプロセス中断を制御できればなと思っていました
0549デフォルトの名無しさん
垢版 |
2019/02/01(金) 07:42:04.59ID:92aZjlm0
>>545
>>542はWindowどころかLinuxもよく理解できてないみたいだからスルーするがよろし
親プロセスなんてどうでも良くてたぶん制御端末がクローズされた時にSIGHUPが送られる話と勘違いしてる
0550デフォルトの名無しさん
垢版 |
2019/02/01(金) 09:45:34.37ID:CxyFcB/M
>>547
パッと思いつきだけで考えたけど、
Start-Job
Workflow
あたりを使うのはどうでしょうね(未確認)。
0551デフォルトの名無しさん
垢版 |
2019/02/01(金) 10:57:54.88ID:Df7lr2kE
>>547
Out-GridView だけを、あちらで実行するとか。
GridView に表示するオブジェクトは、スレッドセーフでないといけないかも。

$run = [RunspaceFactory]::CreateRunspace()
$run.Open()
$ogv = $run.CreatePipeline()
$ogv.Commands.Add('ogv')
$ogv.InvokeAsync()

$exec = {$i = 0; for (;;) {(++$i); sleep 1}}

try {
 & $exec | % {if ($run.RunspaceAvailability -ne 'Busy') {throw} $null = $ogv.Input.Write($_)}
}
catch {
 Write-Warning 'GridView が閉じました。'
}

Get-Date
0552デフォルトの名無しさん
垢版 |
2019/02/02(土) 21:37:38.54ID:GDLTgOlM
もうOut-GridView側の処理は別ps1ファイルで別けて
メイン側からStart-Process に -NoNewWindow -PassThru -Wait つけて終了まで待って
終わったらメイン側の処理に戻ればいいんじゃね
ISEじゃ余分に窓出ちゃうけど直起動なら窓増えないし
結果受け取りが必要なら一手間いるけど
0554デフォルトの名無しさん
垢版 |
2019/02/03(日) 10:45:58.13ID:p2YNM7CO
PS > [bool]""
False
PS > [bool]$s
False

なので$nullではなく空白が代入されてる
代入の時点で型変換されてる?
0556デフォルトの名無しさん
垢版 |
2019/02/03(日) 12:12:22.77ID:p2YNM7CO
PS > [string]$s -eq $null
False
PS > $s -eq $null
True
0558デフォルトの名無しさん
垢版 |
2019/02/03(日) 12:58:35.28ID:jpAIKS8U
$nullの型が何なのか調べればわかること
$null.GetType()
You cannot call a method on a null-valued expression.
At line:1 char:1
+ $null.GetType()
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

まとめ
結構嫌な感じですね。
0559デフォルトの名無しさん
垢版 |
2019/02/03(日) 13:06:40.62ID:KnacfqZI
>>553
[string]::IsNullOrEmpty($s)

NullならTrueが返るから
if([string]::IsNullOrEmpty($s)){ "ぬるだよ"}
0561デフォルトの名無しさん
垢版 |
2019/02/03(日) 14:28:24.77ID:gZVRTEN5
うーむ・・・

[string]$s = $null
$s -eq [string]$null
$s -eq $null
$s.GetType()
True
False

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object


Remove-Variable s
$s -eq [string]$null
$s -eq $null
$s.GetType()
False
True
null 値の式ではメソッドを呼び出せません。
発生場所 行:5 文字:1
+ $s.GetType()
+ ~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) []、RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
0562デフォルトの名無しさん
垢版 |
2019/02/03(日) 14:38:16.60ID:KnacfqZI
>>560
じゃこんな感じで
[string]$s=$null
if($s -eq [string]$null){"ぬるぬるだよ"}
0563デフォルトの名無しさん
垢版 |
2019/02/03(日) 14:53:04.55ID:KnacfqZI
可能であれば [string]$s=$null
でなく    [object]$s=$null でよければ
ならば、普通に比較ができるんだけどね
0564デフォルトの名無しさん
垢版 |
2019/02/03(日) 14:53:36.20ID:KnacfqZI
何でフォントが変わったんだろ?
0565デフォルトの名無しさん
垢版 |
2019/02/03(日) 17:18:00.01ID:gLy6KBGU
stringやintはC#と同じくnull許容型ではないということだな

[string]$s = $null
$s
// 代入時にキャストされ空文字列になる

[int]$i = $null
$i
// 代入時にキャストされ0になる

[Nullable[string]]$s = $null
$s
// $nullが代入できる
0566デフォルトの名無しさん
垢版 |
2019/02/03(日) 17:37:25.59ID:KnacfqZI
>>565
>stringやintはC#と同じくnull許容型ではないということだな

C#にstringのnull許容型ってないよね。
参照型には?を付けられないよね。
0567デフォルトの名無しさん
垢版 |
2019/02/03(日) 17:47:48.25ID:KnacfqZI
>>565
>[Nullable[string]]$s = $null
>$s
>// $nullが代入できる

やってみたら、今度は文字代入するとエラーになるぞよ

Unable to find type [Nullable[string]]. Details: 'System.Nullable`1[T]' 上の Gene
ricArguments[0]、'System.String' が型 'T' の制約に違反しています。
0568デフォルトの名無しさん
垢版 |
2019/02/03(日) 18:06:20.48ID:gLy6KBGU
ああすまん、[Nullable[string]] はダメだったか
intで動作確認してたわ
では訂正
PowerShellのstringはnullを許容しません、だな
0570デフォルトの名無しさん
垢版 |
2019/02/14(木) 06:50:42.41ID:EWDxMe0z
今まであまり気にしてなかったけどPesterってめちゃくちゃ便利なんじゃねえか
他言語で書いたプログラムの結合テストがスゴく書きやすい
0572デフォルトの名無しさん
垢版 |
2019/02/14(木) 22:51:37.48ID:8Eclc9m3
powershellの標準出力やエラー出力を、自分で作成したフォームのTextBoxにリダイレクトできないでしょうか?
C#単体ではできたのですが、powershellの出力の仕組みがよくわからないので。
C#のConsole.SetOutやConsole.SetError相当のがないものかと。
0574デフォルトの名無しさん
垢版 |
2019/02/15(金) 20:32:06.22ID:VV8Lu8eJ
>>570
かんがえてみれば、VSCodeでC#なんかのひな形生成してるのって
PowerShellだね。同じことやってんだろな。
0575デフォルトの名無しさん
垢版 |
2019/02/15(金) 22:37:05.29ID:JVFXEcJ1
>>573
既にpowershellスクリプト内のC#で出力用フォームを作っていて、
シェル上から
[System.Console]::WriteLine("hello from System.Console")
でフォームへの出力までは確認できてるのですが、
"hello from Write-Host" | Write-Host
とかのpowershellのパイプラインと結びつける方法が判りません。
という状態です
0576デフォルトの名無しさん
垢版 |
2019/02/15(金) 23:35:43.92ID:BkaZ3+61
Ruby で、1-liner のフィルタ。
ファイル名を大文字で表示する

ls | ruby -lne 'print $_.upcase'

ARGF を1行ずつ読み込んで、変数$_ に格納する。
ARGF とは、複数のファイルや標準入力を連結して、1つにした仮想ファイル

ruby -lne 'print $_.upcase' a.txt b.txt

sed -n, awk をエミュレートしたもの
0579デフォルトの名無しさん
垢版 |
2019/02/16(土) 12:36:04.55ID:td/FtdQ5
>>572
write-error とか write-warning とか write-output とか他にも
いろいろあるけど、そのこと言ってる?
0580デフォルトの名無しさん
垢版 |
2019/02/17(日) 16:02:03.17ID:jxo9FooS
powershellのソース読むとOut関係はそんなインターフェースが無いっぽいのが判ったので
全部%{[System.Console]::WriteLine($_)}に通すことにしました
0581デフォルトの名無しさん
垢版 |
2019/02/19(火) 01:05:58.24ID:rqZOBHxw
(494,500,"`nズン"),(523,300,"ズ"),(494,250,"ン"),(330,600,"ズン"),(330,250,"ド"),(330,250,"コ")|
%{write-host "`nズン♪";Add-Type -a System.speech;$s=[Speech.Synthesis.SpeechSynthesizer]::new();$s.rate=1;[Console]::Beep(330,500);sleep -m:600}{
write-host -n -f:(10..15|random) "$($_[2])♪";[console]::Beep($_[0],$_[1])}{
write-host -f:(10..15|random) "`n`nキヨシ!!`n";$s.Speak("きいっよおっしぃ いいいっ!");$s.Dispose()}
0583582
垢版 |
2019/02/19(火) 11:20:37.97ID:jsQqlcaV
>>581
喋ったわ、PCの設定の問題だった
0585デフォルトの名無しさん
垢版 |
2019/02/19(火) 15:26:18.95ID:xz+0XgYy
似たようなのは、VSCodeでもあるね。
たとえば、C#のコンソールモジュール作ろうとして
dotnet new console -o xxx とやると
dotnet-new はありませんみたいな
0587デフォルトの名無しさん
垢版 |
2019/02/23(土) 20:34:37.39ID:K6odEV0u
WindowsでしかPS使わないんだけど
早めにWindowsPS5.1から、PS6.1に移行した方がいい?

5.1で作ったスクリプトとか、そのままだと6.1でほぼ動かないよね。

5.1でゴリゴリ作って資産を溜め込むと将来的に困った事になるのかな。
でも、6.1はドキュメントが整備されてなくて、調べるのが辛い。
0588デフォルトの名無しさん
垢版 |
2019/02/23(土) 21:00:34.25ID:mBphVd+l
OSに標準搭載されるならともかく今は現状維持で良いんでない
スクリプトが軒並み動かんような破壊的な変更では無かったと思うけど
0589デフォルトの名無しさん
垢版 |
2019/02/23(土) 21:10:17.16ID:K6odEV0u
.net flamework呼び出すスクリプトが多くて
ここをCoreに置き換えないといけないんだよね?
そこが上手くいけるのかなって。

PS自体の互換性は割と大丈夫っぽいんだけど。
0590デフォルトの名無しさん
垢版 |
2019/02/23(土) 21:26:32.03ID:U8qcMvKV
.NET Coreの範囲だったらいいけど、.NET Frameworkと比べるとすごく狭そうだからなあ
0594デフォルトの名無しさん
垢版 |
2019/02/23(土) 22:42:29.56ID:3sqzQkTc
3.0はdnSpyとか既に導入しているアプリもちょくちょく見るね
SCDにできるのが野良配布の開発者には良さげ
0595デフォルトの名無しさん
垢版 |
2019/02/24(日) 05:23:00.00ID:EIdikGBL
>>587
ほぼ問題なく動いてるよ
0597デフォルトの名無しさん
垢版 |
2019/02/24(日) 16:23:30.62ID:njB6xu8t
OSチームが謎のps推ししてるんだからそう動作が変わるとも思えない(全く信用はしてないが)
0600デフォルトの名無しさん
垢版 |
2019/02/25(月) 06:14:15.76ID:WiC9+kGP
>>595
上で言っているエンコードと、サポートされていない画面系(Forms,WPF)以外は
特段の違いはないと思っていいと思う。
0601デフォルトの名無しさん
垢版 |
2019/02/25(月) 17:25:12.02ID:PrYchFgA
System.Windows.FormsみたいなWindows固有のGUI系はサポートされない。
今のところこれで困ってる。

Core3.0でサポートされるから、将来的には大丈夫なんだろうか。
0603デフォルトの名無しさん
垢版 |
2019/02/26(火) 08:18:02.82ID:OWiOsoxx
誰か教えて下さい
断片化を検知するパワーシェル
一定の断片化でデフラグするパワーシェル
0605デフォルトの名無しさん
垢版 |
2019/02/26(火) 12:06:29.45ID:DYKZ90LU
>>603
とうとうこっちに来たのか…、要件をまとめられない限り、お前さんに仕事は無理、勿論回答も無理。丸投げなどもっての他、はよ仕事降りて病院行け
0608デフォルトの名無しさん
垢版 |
2019/02/26(火) 12:41:56.50ID:5MxkS3P7
断片化?
そんな難しいプログラムを、書けるわけないだろ

断片化を判定するようなコマンドなんて、無いだろ?

そういうのは、それ専門の会社が作っている、アプリを使う。
自作できるようなものじゃない
0612デフォルトの名無しさん
垢版 |
2019/02/26(火) 19:16:16.83ID:OWiOsoxx
PS C:\Users\user> Optimize-Volume -DriveLetter C -Analyze -Verbose
Optimize-Volume : Access denied
Activity ID: {dcf03f92-726b-4adb-a208-4f620c23ef63}
発生場所 行:1 文字:1
+ Optimize-Volume -DriveLetter C -Analyze -Verbose
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (StorageWMI:ROOT/Microsoft/...age/MSFT_Volume) [Optimize-Volume], CimE
xception
+ FullyQualifiedErrorId : StorageWMI 40001,Optimize-Volume
0613デフォルトの名無しさん
垢版 |
2019/02/26(火) 19:17:18.94ID:OWiOsoxx
PS C:\Users\user> Optimize-Volume -DriveLetter C -ReTrim -Verbose
Optimize-Volume : Access denied
Activity ID: {fd9e0378-9517-49a9-874f-49fdbbafec31}
発生場所 行:1 文字:1
+ Optimize-Volume -DriveLetter C -ReTrim -Verbose
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (StorageWMI:ROOT/Microsoft/...age/MSFT_Volume) [Optimize-Volume], CimE
xception
+ FullyQualifiedErrorId : StorageWMI 40001,Optimize-Volume
0614デフォルトの名無しさん
垢版 |
2019/02/26(火) 19:41:44.80ID:4qbJwUeH
これも前ググれと言われてるだろ?
"PermissionDenied"だから原因は明確、PG言語を学ぶ以前の問題
0615デフォルトの名無しさん
垢版 |
2019/02/26(火) 20:11:15.34ID:OWiOsoxx
考えても分からないから寝ます
0617デフォルトの名無しさん
垢版 |
2019/02/26(火) 20:20:24.56ID:OWiOsoxx
分からなくてどうしようもないから質問しているのに
要するにスクリプトの構文の意味から分かっていない
0618デフォルトの名無しさん
垢版 |
2019/02/26(火) 20:43:08.57ID:SZnduWSg
いやPSのエラーは判り難いと思うね
そもそもコマンドライン置き換えたいなら日本語で出すべき
0619デフォルトの名無しさん
垢版 |
2019/02/27(水) 06:31:25.86ID:KDd7+K01
>>618
UNIX系のシェルに比べたら圧倒的にわかりやすいでしょ
0620デフォルトの名無しさん
垢版 |
2019/02/27(水) 07:06:27.77ID:KDd7+K01
>>617
みてると、まるきり一切調べようとせずに
出来上がったコーディング教えろという
感じですよね

しかも、PowerShellだけでなく、使用するユーティリティーに
ついてもどちらもまるきり分らないし調べないでの質問。
0621デフォルトの名無しさん
垢版 |
2019/02/27(水) 07:58:43.59ID:9BuZTaoV
やる気なく、能力も無いと漏らしてるクセに辞退もせず、数ヶ月居座ろうという腹です。
後任に苦労かけるだけ。正常な社会人の要件まとめ能力、調査能力すら失ってるのは精神病としか思えないため、はやく病院に行けと勧めてます
0622デフォルトの名無しさん
垢版 |
2019/02/27(水) 21:51:13.40ID:KyKRLtdw
数十GBのバイナリファイルを2GB毎に分割したいのですがpowershellで効率よい方法あったら教えてください
C#コード埋め込みでも可です
0623デフォルトの名無しさん
垢版 |
2019/02/28(木) 14:47:18.94ID:jurbU8zc
>>622
GNUの split コマンドでええんちゃう?
$ split -d -b 2G src dst.

こんな感じに分割される。
dst.01
dst.02
...
dst.99

結合は、
$ cat dst.* > dst
で終わり。
0627デフォルトの名無しさん
垢版 |
2019/03/01(金) 00:11:45.93ID:GEdFntp5
byeとか再見とか毎回言う外国人居る??
0628デフォルトの名無しさん
垢版 |
2019/03/01(金) 05:49:41.07ID:vonrkHCa
『Youは何しにPowerShellに』の撮影かな?
0629デフォルトの名無しさん
垢版 |
2019/03/01(金) 15:20:53.71ID:o7q1IFCw
powershellでチャットできないですか?
0631デフォルトの名無しさん
垢版 |
2019/03/02(土) 12:30:51.54ID:k1Nl7LaS
>>630
ありがとう。結局サーバー借りた方が楽ですね。
あとtermsとかも無料だし使えそう。
pcからpcってリモデス使用でできそうですね。
なかなか勉強になりますわ。
0633デフォルトの名無しさん
垢版 |
2019/03/21(木) 21:13:15.16ID:Kce5LZBI
>>570
業務でps1ファイルを大量に使ってるような現場だと
今後標準のテストツールとして採用するところが増えそうだね
0634デフォルトの名無しさん
垢版 |
2019/03/23(土) 14:31:45.42ID:zukmvcaU
>>632
調べ物があってググると結構な確率で Qiita でヒットするけど、
「初心者がとりあえずやってみた系」「自分だけが理解できる作業メモ系」が
大部分で、間違ってることも少なくない。
(日本語の IT 系個人ブログの大多数がそうだとも言えるが)

なので、最近はググる際のキーワードは極力英語のみにして、
海外のコンテンツから優先して探すようにしてる。
0635デフォルトの名無しさん
垢版 |
2019/03/23(土) 15:05:59.87ID:AczqyFo9
俺は最初は日本語かな
日本語なら数秒で記事全体を眺めて概要と筆者の腕前を判定できる
そこからちゃんと読むか次のサイトを見るかの見極めが楽
英語だと仮に真実を語っててもそれが期待してた内容と違う場合にそれに気付くまで少し時間がかかる
そもそも英語でも間違ってる記事は少なくない
0636デフォルトの名無しさん
垢版 |
2019/03/23(土) 18:54:02.90ID:sans/OC7
Qiitaが云々っていうより、最近のgoogleで上位に来るのはgoogleのアフリエイトが
使われているものが優先されていて、特に意図的にアフリエイトだけが目的の
コピペサイトが上位に来るので検索エンジンとして役に立たなくなってきてる

まぁ、キーワードうまく絞れば見つかることも多いし、なれと面倒くささも手伝って
google日本語2ページ、google英語2ページ、bing、duckduckgoって感じで最近は
検索してるかな
0637デフォルトの名無しさん
垢版 |
2019/03/23(土) 18:57:03.05ID:sb/buXjf
euの脅しのお陰でchromeのデフォルト検索エンジンにduckduckgo選べるようになってるなw
0638デフォルトの名無しさん
垢版 |
2019/03/23(土) 20:27:48.56ID:9w+Nt8ul
>>634
第三者の情報を利用しているのに、
コミュニティなんだから、自分で精査すればいいだけ。
その手間もおしいとか?w
0641デフォルトの名無しさん
垢版 |
2019/03/25(月) 03:07:23.90ID:UZnjqkvB
ConvertFrom-Csv って、#で始まる行はスキップしてくれるのかな?

Get-Content .\list.txt -Encoding UTF8
url1 file1
#url2 file2
url3 file3

Get-Content .\list.txt -Encoding UTF8 | ConvertFrom-Csv -Delimiter " "
url1 file1
url3 file3

これって、ヘルプに見当たらないんだけど、何かのオプションの初期値で決まってるの?
# PSVersion 5.1.17763.316
https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/ConvertFrom-Csv?view=powershell-5.1
0642デフォルトの名無しさん
垢版 |
2019/03/25(月) 05:27:00.32ID:jHLU9O87
>>641
調べたらコメントとして処理してるわけでもなくてパイプライン入力だと#Typeとかいうよくわからない識別子の判定時に捨てられてるようだ
https://github.com/PowerShell/PowerShell/blob/master/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CSVCommands.cs#L1353
なので一つの文字列として渡すと無視できる

$a = Get-Content .\list.txt -Encoding UTF8
$a -join "`n" | ConvertFrom-Csv -Delimiter " "

あとパイプラインでも改行が\nのみだと挙動が変わったりするけどバグなんじゃないのこれ
0643641
垢版 |
2019/03/25(月) 15:55:58.17ID:UZnjqkvB
>>642
おー、ありがとう(*^▽^*)
確かに Raw オプションで読み込むとスキップされなかった。
Get-Content .\list.txt -Encoding UTF8 -Raw | ConvertFrom-Csv -Delimiter " "

Export-CSVがデフォルトで出力する型情報を無視するようにっていう意図なのかな?
#TYPE System.Management.Automation.PSCustomObject

"#TYPE"始まりを無視しようとして "#"始まりを無視しちゃダメな気がするけど...(´・ω・`)
0644デフォルトの名無しさん
垢版 |
2019/03/25(月) 21:10:47.02ID:E8OEO5vB
powershell謹製の定型入出力処理って大抵どっかが糞だよな
C#でさくっとコード埋め込んだ方が速い
0645641
垢版 |
2019/03/26(火) 03:30:50.37ID:7kgkCpnE
>>643
あ、違うか。 >>642 の言う通り、#TYPEの判定時に捨てられちゃってるんだね。
#始まりで#TYPEだったら型情報を返すけど、そうじゃなかったらnullにしちゃってるから#始まりは(#TYPE以外)一律落ちちゃうってことか。
型情報以外の#はコメントだから落とそうという意図なのか、意図せずなのかはよくわかんないけど。
0646デフォルトの名無しさん
垢版 |
2019/03/26(火) 07:15:12.47ID:yaU1CQab
そういう場合はコメント扱いか将来の予約用として設計するケースが多いかな
癖のある部分がしっかりドキュメント化されてるといいんだけどね
0654デフォルトの名無しさん
垢版 |
2019/04/07(日) 07:15:21.58ID:WD9Sfyky
>>651
当初からの既定路線です
0656デフォルトの名無しさん
垢版 |
2019/04/07(日) 21:27:45.92ID:KO8gpU7g
良かった
これでわざわざコアを入れなくてもWindowsデフォルトのPSがメンテされるのかな?
本家であるWindowsデフォルトのPSを冷遇するMSに腹が立ってたんだ
0658デフォルトの名無しさん
垢版 |
2019/04/08(月) 19:02:08.74ID:sE/xXtkV
それらを即ちオブジェクト指向ってまとめられると語弊があるけど
PowerShellでわざわざクラスをつくるメリットがあまりないんで使わないかな
C#側で作ってそれを利用するモジュールはよく見かける
PowerShellでつかうんならメソッド生やすよりパイプ入力に対応した関数を作ったほうがそれらしいから
0662デフォルトの名無しさん
垢版 |
2019/04/09(火) 06:55:48.14ID:WguqqX2K
>>661
ああ、そういう意味か
その時代は構造体代わりにAdd-Member使う程度だったな
class使えるようになってからは普通にオブジェクト指向って言うか他の言語と変わらん程度には使う
0668デフォルトの名無しさん
垢版 |
2019/04/18(木) 08:38:59.87ID:19FvTfVH
リモートで各Windowsサーバのhostsファイルのメンテナンスをしたいのですが、いいサンプルなどはありませんでしょうか?
0669デフォルトの名無しさん
垢版 |
2019/04/18(木) 08:59:31.67ID:JGuMcupo
サンプルもクソもないだろ…hostsファイル更新は管理権限が必須、それだけの話
0670デフォルトの名無しさん
垢版 |
2019/04/19(金) 07:26:06.94ID:gmGy9oTC
ls -name | ruby -ne 'puts $_.center(20, "-")'

これは、Linux では問題ないけど、
Windows のPowerShell で実行すると、Ruby の文法エラーになる

これで、ダブルクォーテーションをエスケープすると、正常に動く。
\"-\"

どういう事?
" は、Rubyに渡る際に、何かに変換されてしまうのか?

エスケープしない書き方は、出来ますか?
0671670
垢版 |
2019/04/19(金) 07:41:35.36ID:gmGy9oTC
自己解決した!

ls -name | ruby -ne 'puts $_.center(20, "-")'

"-" の部分を、Ruby の% 記法で囲んで、%Q("-") としたら正常に動いた

%Q で、ダブルクォーテーションをエスケープできる。
\"-\"

ただし、Linux では囲んではいけない
0674497
垢版 |
2019/04/20(土) 15:08:25.44ID:59Xq7wbj
Win10_1809 のマシンを新規セットアップ中に気がついたんだが、format-table で
多バイト文字が含まれるデータを表示しても表組みがズレなくなってるな。
https://i.imgur.com/wizludw.png

1809 の改良点かと思って別の 1607 も見てみたら、こちらでもズレなくなってるわ。
Windows Update でいつの間にか修正されてたらしい。良かった、良かった。
0675デフォルトの名無しさん
垢版 |
2019/04/20(土) 19:17:44.43ID:gHzm7Vzg
ps1を別のps1から実行したとき、呼び出したps1の標準出力を呼び出し元のps1で取得する方法ってありますか?
$LASTEXITCODEとか$?には当然入らないですよね
0677デフォルトの名無しさん
垢版 |
2019/04/20(土) 22:27:38.00ID:gHzm7Vzg
A.ps1が呼び出されるps1としてB,ps1で

.\A.ps1

としてるだけなのですが、どう取得すれば良いのでしょう?

A.ps1の中身は例えばこんな感じの標準出力を吐き出してるだけ
Write-Host "test"
0678デフォルトの名無しさん
垢版 |
2019/04/20(土) 22:29:25.41ID:BGbzUadU
Write-Hostは画面に表示するだけ
出力するならWrite-Outputか、そもそもPowerShellでは勝手に出力されるから
"test"
とするだけでいい
0681デフォルトの名無しさん
垢版 |
2019/04/20(土) 22:46:19.99ID:gHzm7Vzg
Write-Hostだと標準出力ですらなくて取得出来ないってことなのかしら?
Write-OutputだとB.ps1側で変数に格納する場合どうすれば?
0682デフォルトの名無しさん
垢版 |
2019/04/20(土) 22:51:17.48ID:BGbzUadU
標準出力されるなら普通に変数に入れればいいんで
$a = .\A.ps1
とすればいいよ
Write-Hostで出力しようとするスクリプト書いた奴が馬鹿なんだから変えるしかない
0683デフォルトの名無しさん
垢版 |
2019/04/20(土) 22:52:47.85ID:gHzm7Vzg
あー、普通にいけるね
Write-Hostで書かれてるから上手くいってなかったのか
ありがとうございました
0685デフォルトの名無しさん
垢版 |
2019/04/21(日) 15:12:23.52ID:DYRtR1tP
>>684
試したところ確かに取得出来ました
2>&1は試していたのですが、6>&1とは初めてみました
6がコンソールなのかな?
助かりました、ありがとうございます
0686デフォルトの名無しさん
垢版 |
2019/04/21(日) 19:32:10.42ID:RVTtJDMW
<Japan>
 <Tokyo>
  <Shinjuku Area="Nishi" Type="Kusai"/>
  <Shinjuku Area="Kabuki" Type="Kitanai"/>
  <Shinjuku Area="Okubo" Type="Ikoku"/>
 </Tokyo>
</Japan>

こういうXMLの場合、Type="Kitanai"の子要素があるAreaを取得するにはどうすればいいの?
0687デフォルトの名無しさん
垢版 |
2019/04/21(日) 20:01:09.97ID:RCGv90ei
$xml = [xml]'<Japan>
 <Tokyo>
  <Shinjuku Area="Nishi" Type="Kusai"/>
  <Shinjuku Area="Kabuki" Type="Kitanai"/>
  <Shinjuku Area="Okubo" Type="Ikoku"/>
 </Tokyo>
</Japan>'

$xml.Japan.Tokyo.Shinjuku |
  Where-Object {$_.Type -eq 'Kitanai'} |
  Foreach-Object {$_.Area}

とか?
0689デフォルトの名無しさん
垢版 |
2019/04/21(日) 21:24:14.09ID:aMzGc0Ck
//Japan/Tokyo/Shinjuku[@Type='Kitanai']

こうかな?
まあ、検索して!

jQuery で、CSS Selector なら、
Japan > Tokyo > Shinjuku[Type="Kitanai"]
0691689
垢版 |
2019/04/22(月) 13:01:10.79ID:A5Rqz7hQ
Ruby のNokogiri では、該当する要素数が0, 1, 複数で、異なる書き方をする。
例えば、該当する最初の1つの要素だけを欲しい場合は、at_css みたいに、at を付ける

jQuery では、それらのすべてで、配列を返すように統一されている

>>689
>//Japan/Tokyo/Shinjuku[@Type='Kitanai']

これは、XPath
0702デフォルトの名無しさん
垢版 |
2019/05/08(水) 07:32:11.87ID:m3CbCT8F
Windows PowerShell ISE なら
$Error[0]. できちんとインテリセンスの候補が出てくるんだけど
PowerShell Core だと配列と勘違いしたままの候補を出してきます。

何か設定しないといけないのかそういう不具合なのかどちらでしょうか
0704デフォルトの名無しさん
垢版 |
2019/05/10(金) 15:15:49.46ID:cKAyPz2z
PowerShell をしばらく使い込んでから久しぶりに bash とかの Shell script をいじると、ものすごく原始的に感じる。
原理主義者から罵声を浴びそうだけど。
0705デフォルトの名無しさん
垢版 |
2019/05/10(金) 15:21:30.53ID:j4eHz/16
bashは速い、コマンド短い、リナ鯖でデフォで動くのでpsとは使い道が違うかな
0708デフォルトの名無しさん
垢版 |
2019/05/17(金) 23:14:58.14ID:84kT7PGy
そもそもLinuxの場合はスクリプトないと使い物にならないという問題があるから。
0709デフォルトの名無しさん
垢版 |
2019/05/18(土) 09:08:41.54ID:CdqDIO7E
バイトストリームしかないくせにテキスト至上主義とか言ってるのはギャグなんだろうか
0710デフォルトの名無しさん
垢版 |
2019/05/21(火) 17:37:00.04ID:nuXn2mIW
sample.csv
---------
A,B,C,D,E
あ,いう,えおか,きくけこ,さしすせそ


Get-Content sample.csv | ConvertFrom-Csv | Format-Table
Get-Content sample.csv | ConvertFrom-Csv | Format-Table | Out-File sample.txt

コンソール画面ではレイアウトは正常なのに、Out-Fileすると半角全角違いの影響なのかレイアウトが崩れてしまう。
コンソール画面のとおりにテキスト出力する方法ありませんか?
0711デフォルトの名無しさん
垢版 |
2019/05/21(火) 18:05:39.20ID:1dtSHonA
コンソールは座標決め打ちできるからじゃねーの
外人がマルチバイトの事なんか考慮してるわけねーよ
0713デフォルトの名無しさん
垢版 |
2019/05/21(火) 18:34:34.88ID:5U/ewrLb
Excelでも使っとけ
0715デフォルトの名無しさん
垢版 |
2019/05/22(水) 07:11:49.10ID:62koVQSH
もうやだこの国
0716デフォルトの名無しさん
垢版 |
2019/05/22(水) 11:47:23.28ID:F+bTsM9Q
そもそも表作るためのソフトじゃないやろ
そういうソフトを組み込むのは簡単ちゅう代物
そこを生かさないとね
0720デフォルトの名無しさん
垢版 |
2019/06/05(水) 15:44:43.15ID:FhACL5FX
chocolateyはpowershellモジュール版もあるけど通常版とは別管理になるのが惜しい
普通に通常版使っといた方が楽なのはわかるんだがコマンド脱却してコマンドレットだけにしたくなる
0722デフォルトの名無しさん
垢版 |
2019/06/11(火) 21:01:49.48ID:6DBwhRzC
Powershellクラスタが騒いでたのはこれか
0723デフォルトの名無しさん
垢版 |
2019/06/12(水) 09:43:55.62ID:kgH69nQx
>>721
4年前の案件では Net.Mail.SmtpClient() を使って処理したな。理由は忘れた。
ところで、非推奨って話の情報源はどちら?探せなかった。
0725デフォルトの名無しさん
垢版 |
2019/06/12(水) 16:39:19.29ID:kgH69nQx
>>724
なるほど〜、これからは MailKit が推奨ってことね。ありがとう。

>>721 だけど、OS 標準機能だけでお手軽に、手っ取り早く SMTP AUTH や
SMTP over SSL でアラートメールを送信するだけなら「アリ」だと思うね。
要するに、「要件次第」。
0726デフォルトの名無しさん
垢版 |
2019/06/13(木) 12:15:28.51ID:p0mjXhjx
質問します

WindowsServer2012R2をWin10からリモートで使っています。

get-ExecutionPolicyは
RemoteSigned

スクリプトは例えばこんな感じです
test.ps1
$AA=Read-Host "入力"

PowerShellSEからtest.ps1は実行成功。
PowerShellを起動し./test..ps1で実行成功。
エクスプローラーからtest.ps1を右クリックからPowerShellで起動しようとすると
一瞬PowerShellが起動するが何も実行されず終了。

どの辺を修正すればよいかアドバイスをいただけますでしょうか
0727デフォルトの名無しさん
垢版 |
2019/06/13(木) 23:02:42.88ID:UGCqyxPq
>>726
リモートデスクトップ試せないけど、とりあえずリモート先のイベントログ見たら?
ローカルなら
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -file ps1フルパス名 -Command if((Get-ExecutionPolicy ) -ne AllSigned) { Set-ExecutionPolicy -Scope Process Bypass }
が実行されるけどね
0728デフォルトの名無しさん
垢版 |
2019/06/16(日) 19:28:37.13ID:sa5lhoiI
-Recurseって、ForechObjectのLazy評価と相性悪いのね。
0729デフォルトの名無しさん
垢版 |
2019/06/18(火) 06:16:59.21ID:3nOE2mBA
プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/

142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
0730デフォルトの名無しさん
垢版 |
2019/06/19(水) 19:17:38.02ID:TWs5Iott
VBAからPowerShell呼びたいのだがシェルコマンドとして実行するしかないのかね?
C#だとSystem.Management.Automationが使えるがCOMじゃないのだよねコレ
0733デフォルトの名無しさん
垢版 |
2019/06/24(月) 23:49:52.33ID:+JWJYT3O
以下の Data.txt と Format.txt がある状態で<実行結果>を得るにはどのようなスクリプトを書けば良いのでしょうか?
Get-Contentを使うのだと思うのですが、改行の入れ方がよくわかりません。


<Data.txtの内容>
1111111111abcde2223333333

<Format.txtの内容>
10
5
3
7

<実行結果>
1111111111
abcde
222
3333333
0734デフォルトの名無しさん
垢版 |
2019/06/25(火) 00:37:21.55ID:crlTuLoY
ひどいレベルの低さだな、変数と代入と展開だけ。試行錯誤すれば5分で答えでるだろ。
0738733
垢版 |
2019/06/25(火) 21:04:00.53ID:SYrWEeYW
>>736
わざわざありがとうございます!
ちょっと動かし方を確認してから動かしてみます。

>>737
そのままPower Shellウインドウに貼り付けたら>>733の<実行結果>を得ることができました。
私には高度ですが調べてみます。ありがとうございます。

>>734-735
Power Shellを始めたばかりなんで一旦ベテランの方の回答を見させてもらおうと考えてしまいまして…
とりあえず頂いた回答を全力で分析します。
0741デフォルトの名無しさん
垢版 |
2019/06/29(土) 06:29:56.03ID:G7+AZKsr
Qiita、GitHub、teratailでもpastebinモジュールが中で使われてるよね、でもpastebin.comは単体で便利
0742デフォルトの名無しさん
垢版 |
2019/07/01(月) 12:57:19.36ID:fiA0UtsU
>>739
ただのGistのパクリなんだが。。
0743デフォルトの名無しさん
垢版 |
2019/07/01(月) 14:19:02.73ID:O1pDJEnN
Ruby で作った

str = "1111111111abcde2223333333"

nums = <<"EOT".lines( chomp: true ).map( &:to_i ) # 数字の配列。改行は削除
10
5
3
7
EOT
#=> [10, 5, 3, 7]

i = 0
nums.each do |num|
puts str[ i, num ] # 位置i から、num個の文字列
i += num
end
0746デフォルトの名無しさん
垢版 |
2019/07/02(火) 21:03:55.04ID:IFMrsVTJ
教えてくださいエロい方
初心者なりに頑張ってwpfでxmlデータをツリー表示させたのですが、
テンプレートで定義したボタンにクリックイベントをつける方法がわかりません・・

@見た目:       xaml
Aデータテンプレート: TreeViewのhierarchicalDataTemplate(xaml)
Bデータソース: xmlをxmlDataProviderに読み込んでAにバインド (起動時コード)

アドバイスをお願いします。
0747デフォルトの名無しさん
垢版 |
2019/07/02(火) 21:36:19.03ID:uMGeffjZ
jQuery なら、後から追加した要素にも、on で、複数のイベントを付けられる

$( 'CSS セレクター' ).on( {
'click': function() { 処理 },

'mouseenter': function() { 処理 }
} );
0748デフォルトの名無しさん
垢版 |
2019/07/02(火) 22:05:43.99ID:IFMrsVTJ
>>747
むー・・・ あと3日WPFで頑張らさせていただきます!
もしそうなったときはHTMLベースのUIに変換するコード書いてjsで制御しようと思います
0750デフォルトの名無しさん
垢版 |
2019/07/02(火) 23:46:29.77ID:TfK25CW5
>>747
後から追加した要素にも、という話ならこっちじゃないのか
$('セレクター1').on('click', 'セレクター2', function() { 処理 });
0751デフォルトの名無しさん
垢版 |
2019/07/03(水) 00:05:26.64ID:CCtfRBKO
ここが優しい世界か・・・
煮詰まってたけど癒やされたよおお

>>747
xamlで書いた表示要素とコード上のオブジェクトを紐付けるのがx:classらしいんですが、
powershellはx:classをパースできなくて落ちてしまいます(T T)

いまxmlDataProviderの継承クラスをつくって、プロパティにICommandのオブジェクト設定する方法やってみようとしています
トライアンドエラーアンド討ち死にを繰り返してます
0752デフォルトの名無しさん
垢版 |
2019/07/03(水) 01:47:49.94ID:CCtfRBKO
ふぁああ・・・
だめだぁ ピクリともしない
0753デフォルトの名無しさん
垢版 |
2019/07/03(水) 12:43:03.67ID:aBGmP+w2
癒やされたよおお
とか、
ふぁああ・・・
とか、顔文字とか気持ち悪い
キャラ作んなくていいから普通に質問して
0754746
垢版 |
2019/07/04(木) 20:57:41.18ID:BTJ6kVqu
解決しました!
@xmlDataProvider継承したViewModelクラスを作る
ARoutedCommand型のオブジェクトを作成して、ViewModelの公開プロパティにする
BTreeView.DataContextに@を設定する
Cイベントハンドラを $doSomething = { }の形で作る
DCommandBindingオブジェクト作成してAとCを紐付ける
ETreeView.CommandBindingsにDを追加する

FXamlのDataTemplateで定義したButtonのCommand属性:
RelativeSourceとPathを併用してTreeView.DataContext.Aを直接指定する
CommandPerameter={Binding}

これでボタンを押すとCが呼ばれて、commandParameterで渡した引数が $_.parameter に入ってきます
0757デフォルトの名無しさん
垢版 |
2019/07/25(木) 18:27:45.21ID:zfVWvI3/
shellからjarを起動したいのですがjarの引数に変数を入れると落ちてしまいます
直接書くと問題なく動くのですがなぜでしょうか?
0758デフォルトの名無しさん
垢版 |
2019/08/12(月) 02:48:57.74ID:kdU0FwTT
PowerShellのGet-HelpコマンドでGetType()についてのヘルプを見るにはどうすればいいのでしょう。
Get-Help -Functionality GetTypeとか
Get-Help -Component GetTypeとか
色々やってみたのですが表示してくれません…。
0759デフォルトの名無しさん
垢版 |
2019/08/12(月) 03:14:57.78ID:k4SaZ4yK
GeTtype()は.NETのオブジェクトのメソッドだからGet-Helpじゃ見れんやろ
Powershellの与り知らんとこだし
0763デフォルトの名無しさん
垢版 |
2019/08/17(土) 18:24:44.34ID:2EecLECc
ここの人がPowershell、vbs、C#に精通していると思い質問させていただきます。
C#もまだ覚え中ですが、vbsをC#に移行していました。
最近Powershellを知って、
C#より分かりづらいですが、同じことがC#より短く書けます。
shellで.NETも使えてほぼ何でもできるPowershellに可能性を感じたのですが、
全然盛り上がっていませんw
Powershellをどんどん使っていくか、
C#を覚えていくか、将来性も含めどちらがいいでしょうか?
0764デフォルトの名無しさん
垢版 |
2019/08/17(土) 18:58:18.44ID:Q0D8gSGr
そんなの状況次第だよ
大雑把に分けるなら
アプリケーションを作りたいならC#
システム管理ツールを作りたいならPowerShell
0765デフォルトの名無しさん
垢版 |
2019/08/17(土) 19:03:01.90ID:CK+x7f61
用途が違うからC#とは並べるものじゃない
windowsがメインならどっちもできるようになった方がいい
複雑なGUIをPowerShellで頑張って作ってる人見るとごくろうさまですとしか思えんし
PowerShellでさくっと書けるCUIをわざわざVisualStudio入れてC#で書いてビルドしてバイナリ配置して
ソースも別の場所でずっと管理してんの見るとアホだなあと思う
修正の度にソース探してまたビルドしてバイナリ配置して・・・ってなるんだし

あとPowershellのスクリプトの中でC#のコードを書いて使うこともできる
これがまた強力だからどっちも覚えて損はない
(速度はC#が圧倒的に速いから速度的にネックになってる部分だけC#でかくということができる)

将来性についてどっちもMSが力入れてるから気にすることはない
vbsに関して言えば所詮道具だから現状やりたいことができているんならわざわざ移行する必要もない
今んとこMSがWSHを切るって話もないし
0766デフォルトの名無しさん
垢版 |
2019/08/17(土) 19:11:51.36ID:Ic+b/2I0
Linux 覚えたほうが良さそうw
0767デフォルトの名無しさん
垢版 |
2019/08/17(土) 20:01:01.84ID:2EecLECc
>>764-765
ありがとうございます
C#はGUIやDLLなどもできるので覚えていきたいです。
最近知ったPowerShellが何でもGUIもできるし、
短く書けておもしろいのでPowerShellに夢中です。
.NETや.csを読み込んで使えたり、
C#も一緒に覚えていけそうです。
用途で併用していきます。

>>766
Linuxもやってますが、PowerShellも入れられるので、
PowerShellが標準になったらうれしいですw
0768デフォルトの名無しさん
垢版 |
2019/08/17(土) 20:37:46.41ID:fWrg11mT
役割違うからどっちも必要だと思う
Windows技術者じゃなく.NET技術者を目指して勉強して欲しい
0769デフォルトの名無しさん
垢版 |
2019/08/18(日) 00:06:00.19ID:26pp6bRY
PowerShell の1つ上は、Ruby。
より複雑な、ファイル操作・CSV・テキスト処理・シェルスクリプトなど

例えば、1-liner で、

Linux では、
ls | ruby -ne 'puts $_.center(20, "-")'

Windows では、
ls -name | ruby -ne 'puts $_.center(20, %Q("-"))'

ただし、Windows では、" をエスケープする必要がある。
"-" の部分を、Ruby の% 記法で囲んで、%Q("-") としたら正常に動いた

%, %Q で、ダブルクォーテーションをエスケープできる。\ と同じ。
\"-\"

まあ、VBScript のスレ主のピッコロ大魔王のように、
PS で、5ch をスクレイピングするような猛者もいるけど、Ruby の方が可読性が高い
0775デフォルトの名無しさん
垢版 |
2019/08/20(火) 08:18:30.85ID:trDWBWGh
>>773
Visual Studio が対応してるし、.NET Framework 上で動く IronPython なんてのがあるくらいだから「アリ」だろうな。
0776デフォルトの名無しさん
垢版 |
2019/08/20(火) 15:46:07.95ID:OusQ3pFE
Windows版のPythonは結構ちゃんと動くし、Python製のGUIアプリもDropboxとかたまにある
WindowsのRubyは非推奨の流れで、WSL使うか仮想環境のLinux使うか
0777デフォルトの名無しさん
垢版 |
2019/08/20(火) 21:28:48.24ID:n/ZUSiaV
昔、七行プログラミングってあったけど、
PowerShellなら7行ですごいことできるよね
0778デフォルトの名無しさん
垢版 |
2019/08/24(土) 01:22:08.40ID:kPbBL5c4
csvファイル内の特定セル?(エクセルでいうところのcells(1,2)みたいな)を変数に格納して、
そのファイルのファイル名にしたいのですが、こういったことはできますか?
0779778
垢版 |
2019/08/24(土) 01:39:25.56ID:kPbBL5c4
できました。import-csvから要素の取り出しをするだけでした。
0781デフォルトの名無しさん
垢版 |
2019/08/26(月) 07:51:25.55ID:LOkM9Twk
コマンドプロンプトで、where notepad
と入力すると、メモ帳のパスが、2つ表示されるが、

C:\Windows\System32\notepad.exe
C:\Windows\notepad.exe

PowerShell(PS)で、Get-Command notepad
と入力すると、上の1つだけが表示される。
つまり、PSと、whereコマンドの挙動が異なる!

コマンドプロンプトで、where where と入力すると、
C:\Windows\System32\where.exe

そこで、PSで、where.exe notepad
と入力すると、whereコマンドを呼び出せたので、2つ表示された
0783デフォルトの名無しさん
垢版 |
2019/08/26(月) 14:58:24.63ID:R1/Rmq9c
>>781
何を主張したいのかが良く分からんレスだな。
困ってるから何とかしてくれ、とでも言いたいのか?

Get-Command notepad

C:\Windows\System32\notepad.exe
が表示されたは、$env:path で一番最初に見つかったものを表示してるだけだ。
試しに $env:path を変更して、C:\Windows\System32 よりも C:\Windows を先にしてみろ。
$env:path を変更したら、念のため Powershell.exe を開きなおすのを忘れんなよ。

あるいは、notepad.exe が二か所にあることが疑問/不満なのか?歴史的な経緯だ。
実態は c:\Windows\WinSxS\ 以下にあるもので、C:\Windows\System32 と C:\Windows に
あるものはハードリンクだ。
三つとも同じハードリンクなので WinSxS\ 以下のものを特別に「実態」と表現するのは本来正しくないが、
WindowsUpdate の仕組み上、便宜的に「実態」と呼んでも差し支えないだろう。
0786デフォルトの名無しさん
垢版 |
2019/08/26(月) 15:27:38.53ID:j8vvMRg5
>>783
独特の文体からして、この板で有名なRuby君かと思われる。話の流れと無関係にRuby推ししてきたり、頓珍漢な知識披露(間違い多数)をしてきたりする奴だから、相手するだけ無駄だよ。
おそらく、ぼくこんなこと気づいたんだよ!って嬉しくて書かずにいられなかっただけだと思う。
0787◆QZaw55cn4c
垢版 |
2019/08/26(月) 19:23:25.35ID:jPNtTojU
>>786
>話の流れと無関係にRuby推ししてきたり
ステキじゃないですか、この前も C/C++ スレに乱入していましたね、これからも頑張って ruby を喧伝してほしいです!
0788デフォルトの名無しさん
垢版 |
2019/08/27(火) 01:45:40.61ID:OLaosybt
DOSメインでPSでしかできない部分だけPSにしてるのをやめて、PS一本化を増やそうかと思い立ったが
そういやDOSからキックしないと動かないのであった
というわけでやはりDOSメイン
0789デフォルトの名無しさん
垢版 |
2019/08/27(火) 01:49:02.45ID:OLaosybt
なんでそんな仕様にしたんだろうね
かといってPS直でやりたいというより、DOSを拡張して欲しかった
0795デフォルトの名無しさん
垢版 |
2019/08/29(木) 03:16:31.66ID:RYMiansx
基本的なことが分かってない気がするのだけど教えてください
get-date, get-childitem, get-location といったコマンドレットの代わりに
get 無しで date, childitem, location と入力しても同じ結果になる
これら get 無しコマンドは get 付きのエイリアスなのか? と最初は思ったのだけど
そんなエイリアスはないと言われる
これらの get 無しコマンド(?) はどういう立ち位置なんでそ?

ちなみに例えば location.bat とかを PATH の通った場所に置いておくと
そっちが実行されるので、これらはサーチパスより優先度が低いようです
0796デフォルトの名無しさん
垢版 |
2019/08/29(木) 04:05:52.42ID:TR1/uwdi
>>795
基本的なことはここにまとまってる
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_command_precedence?view=powershell-6#qualified-names

1. Alias
2. Function
3. Cmdlet
4. Native Windows commands

の順に探す
ただこの文書にはGetを省略した場合について書いてない
以下のコマンドを実行すればだいたいわかる

Trace-Command CommandDiscovery { date } -PSHost

すると上記の1〜4の順に探してもコマンドが見つからなかった場合、以下のようなデバッグ出力が見つかる

>The command [date] was not found, trying again with get-prepended

つまり1〜4でコマンドが見つからなかった場合は、頭にGetを付加してもう一回1〜4を探すよってこと
0797デフォルトの名無しさん
垢版 |
2019/08/29(木) 04:22:51.28ID:RYMiansx
>>796
明快な回答ありがとうございます

> Trace-Command CommandDiscovery { date } -PSHost

これ勉強になりました
0798デフォルトの名無しさん
垢版 |
2019/08/29(木) 19:25:49.72ID:+UUfxV7s
初心者で右も左もわからない状況で申し訳無いのですが、
明示的に設定してる共有ディレクトリとアクセス権を一括で出力ってできたりするんですかね?

Get-wmiobject -class win32_share
だとアクセス権までは出力されなかったんで...

詳しい方教えて頂きたいです。
0799デフォルトの名無しさん
垢版 |
2019/08/30(金) 00:19:55.56ID:kVpvpBih
「powershell アクセス権限 確認」で検索!

こんな感じ?

ls | Get-ACL
0801デフォルトの名無しさん
垢版 |
2019/09/06(金) 17:24:06.26ID:LE0BBPZ5
ふぁあああ・・・・
解決してよかったよぉお
ハロー優しい世界、だねええええ^^
0805デフォルトの名無しさん
垢版 |
2019/09/07(土) 10:39:33.44ID:sSufJvsQ
>>804
俺は >>802 ではないが、Set-Acl は使いづらい。
そもそもの理由は Windows の ACL (ACE) が複雑だからなのだが、対象にセットする ACL オブジェクトを作るのが分かりづらい。

例:All Users のスタートメニューのアクセス権を変更し、一般ユーザにも書き換えられるようにする場合(既存の権限に追加)
https://pastebin.com/R3JBWF2h

他のフォルダなどから ACL オブジェクトをコピーし、それをそのままターゲットに適用するだけなら簡単なのだけど。

>>803
「何が何でもすべて PS でやる!」 というポリシーでないのなら、cscls.exe、icacls.exe のほうがお手軽。
0810デフォルトの名無しさん
垢版 |
2019/09/08(日) 20:21:13.64ID:d6DJW1MN
F:/ に SDカードがマウントされているのを
アンマウントするコマンドは何ですか?
0811デフォルトの名無しさん
垢版 |
2019/09/08(日) 21:55:23.61ID:D+CIKcq7
>>810
(New-Object -comObject Shell.Application).Namespace(17).ParseName('F:').Verbs()|?{$_.Name -match '取り出し'}|%{$_.Doit()}
0813デフォルトの名無しさん
垢版 |
2019/09/10(火) 21:38:04.40ID:Eo4YqZPr
■C:\hoge.txtの内容

aaa
bbb
bbb
bbb
ccc
ccc
ccc
ccc
ccc

↑のようなテキストファイルがある場合に、↓の結果(タブ区切り)を得るにはどうすれば良いのでしょうか?

aaa 1
bbb 3
ccc 5
0818デフォルトの名無しさん
垢版 |
2019/09/11(水) 00:05:23.05ID:TMos3buL
あータブ区切りの文字列にしたいんか
gc hoge.txt | group | foreach { $_.name,$_.count -join "`t" }
0819816
垢版 |
2019/09/12(木) 00:24:07.29ID:W/V8jwbc
>>818
★★★★★
ありがとうございます!
実はまだ試せてないのですが、期待を込めて★5つです!(^_^)
0820デフォルトの名無しさん
垢版 |
2019/09/12(木) 10:44:16.82ID:W/V8jwbc
>>805
icaclsってps1ファイル内でも普通に呼出せるのね
ps1→bat→icaclsみたいに呼出さなきゃならないのかと思った
コマンドというより単なるexeってことか
0822デフォルトの名無しさん
垢版 |
2019/09/12(木) 14:46:18.96ID:pQlsfVOK
ふーむ、アホがアホに同調するアホな好例だな、アホすぎてオレにはよく分らんのだが、アホだということは分かる

アホA「ありがとうございます! まだ試していないけど! ★5つです!(^_^)」
アホB「・・これは良い! これからは★で評価しよう!」
ボク「・・いやいや、まだ試してもいないのだから評価もくそもねーだろ、★2〜3の定義もねーし、こいつらアホの極みだな」
0826デフォルトの名無しさん
垢版 |
2019/09/12(木) 19:50:41.33ID:igJ/H+nC
icaclsとか括弧を多用するコマンドはエスケープうざいですね
ヒアドキュメントみたいな感じでスマートに書けませんか
0827デフォルトの名無しさん
垢版 |
2019/09/13(金) 20:13:01.19ID:Vx47yrR/
PowerShellで非同期処理って酷く書きづらいと思ってるんだが、こんなもんなんか?
変数を渡すのにめっちゃ苦労したんだが…
0829デフォルトの名無しさん
垢版 |
2019/09/13(金) 21:49:24.82ID:Vx47yrR/
あまりにもニッチな製品の負荷テスト用スクリプトだから具体的には言えないが、平たく言えば自作関数とWin標準コマンドを引数変えながら並列投入するだけ
bashと比べちゃ駄目なんだろうが、スクリプト書いててキレそうになったのは久しぶりだわ
0830デフォルトの名無しさん
垢版 |
2019/09/13(金) 23:05:20.75ID:ha69B7nJ
runspaceでやってるのかjobでやってるのか
0832デフォルトの名無しさん
垢版 |
2019/09/14(土) 01:53:38.89ID:ogAZWftq
runspaceの中で親スコープで宣言した関数を(特に書き換えずに)呼ぼうとするとややこしい
ちょっとggって出てくる方法だと面倒
https://devblogs.microsoft.com/scripting/powertip-add-custom-function-to-runspace-pool/


解決策:まとめて文字列にして渡す

# runspaceで実行したいスクリプトブロック
$cmd = {
param($func_parent)
$func_current = Get-ChildItem function: | %{$_.ScriptBlock.Ast.ToString()} # カレント(子)スコープの関数リスト
compare-object $func_current $func_parent | % inputobject | Invoke-Expression # 親スコープで宣言した関数のみを定義する

<# 実行したい処理 #>

}

$func = Get-ChildItem function: | %{$_.ScriptBlock.Ast.ToString()} # カレント(親)スコープの関数リスト

$ps = [PowerShell]::Create()
$ps.AddScript($cmd).AddArgument($func) | Out-Null

$result = $ps.BeginInvoke()
$ps.EndInvoke()
$ps.Dispose()
}
0837デフォルトの名無しさん
垢版 |
2019/09/14(土) 21:11:58.91ID:ogAZWftq
>>836
>>832のスクリプトブロック内のInvoke-Expressionをした時点で渡した関数(というか親スコープの関数全部)使える
特定の関数にしたかったら$function:関数名.Ast.ToString()で必要分を配列に突っ込んで渡してiexするだけや
0840デフォルトの名無しさん
垢版 |
2019/09/15(日) 15:45:03.86ID:4TgO8+RX
>>813-819
大文字小文字が区別されないから、-CaseSensitive オプションも付けた方がよい

"Aa", "b", "aa" | group-object -noelement | where {$_.Count -gt 1}

出力
2 Aa

"A", "a" | group-object -noelement -CaseSensitive

出力
1 A
1 a
0841デフォルトの名無しさん
垢版 |
2019/09/15(日) 17:42:03.16ID:tc+PQ4bB
5.1から4.0に戻さないと日本語でいろいろ書いてくれないからわからないんです…
どうやって戻したらいいんでしょうか…(´・ω・`)
0843デフォルトの名無しさん
垢版 |
2019/09/15(日) 19:37:50.46ID:tc+PQ4bB
(´・ω・`)すみません自己解決しました 更新プログラムの一部を削除したら望む結果が得られました お騒がせしました
0845デフォルトの名無しさん
垢版 |
2019/09/15(日) 20:48:36.32ID:ORV+CvDJ
win7pcのPSを5.1にした時に日本語化探したけどわかんなかったから詳しく書いてほしかった感
0846デフォルトの名無しさん
垢版 |
2019/09/15(日) 22:28:51.53ID:tc+PQ4bB
>>844
たぶんそれですお騒がせしました
これから精進していきます
0847デフォルトの名無しさん
垢版 |
2019/09/15(日) 22:30:29.90ID:tc+PQ4bB
>>845
ざっくり言うと
コントロールパネルからプログラムと機能に行って
インストールされた更新プログラムの項目を開いて
WMF5をアンインストールしたという流れです
0849デフォルトの名無しさん
垢版 |
2019/09/18(水) 12:47:39.59ID:iUGh13ZQ
バッチファイルでいう、
echo %errorlevel%
はパワーシェルではどうやればいいんでしょうか?
0851デフォルトの名無しさん
垢版 |
2019/09/23(月) 16:12:06.99ID:yWN8gkqC
[2018.11.27] 納品書A社
[2018.11.29] 納品書B社
[181129] 納品書C社

このようなフォルダ構造になっている状態で、
このフォルダ階層だけ
3行目の"[YYMMDD] 〜〜"のような書式にフォルダ名を変更したいと思っています。
" 納品書A社"などはそのままで
元の日付も保持します

正規表現では"([2][0][1][0-9])\.([01][0-9])\.([0-3][0-9])"
に反応するものだけで出来ればと思います
どのように書けばよいのでしょうか?
0852デフォルトの名無しさん
垢版 |
2019/09/23(月) 18:10:16.40ID:mK3aarjp
>>851
Get-ChildItem -Directory |
Where-Object Name -match "^\[20(1[0-9])\.([01][0-9])\.([0-3][0-9])\](.*)" |
Rename-Item -NewName { "[{0}{1}{2}]{3}" -f $Matches[1..4] } -PassThru

これ日付の妥当性チェックはガバいけどそれは別にいいんでしょ
-match演算子を使ったらその結果は変数$Matchesに入ってることを覚えておくといい
0853デフォルトの名無しさん
垢版 |
2019/09/23(月) 22:41:23.65ID:CUAPT5Qo
NewNameにスクリプトブロック渡せるんだ
%{〜}の中で整形して渡す発想しかなかった
0854デフォルトの名無しさん
垢版 |
2019/09/23(月) 22:54:01.34ID:GUxJcSSn
DIRとって一つずつ条件に合致するオブジェジェクトをパイプ渡しするだけだよ
0855デフォルトの名無しさん
垢版 |
2019/09/23(月) 23:39:14.69ID:mK3aarjp
>>853
Delay Bindingっていって以下の条件を満たすパラメータにスクリプトブロックを渡すと
パイプラインから値が入ってくる度にパラメータの値を評価してくれる

・ ByValue, ByPropertyName属性が付加されてること
・ 型が明示的に指定されてること(ただし[scriptblock]または[object]以外)
0857851
垢版 |
2019/09/24(火) 15:33:38.23ID:SPmBMSDI
>>852
やりたいことが出来ました。ありがとう!
0860デフォルトの名無しさん
垢版 |
2019/10/14(月) 15:09:43.96ID:WeKpLulI
LL言語入門で有名なM.Hiroiさんは
なんでpowershellにかたくなに手を出さんのかと思ってたけど
bashとかシェルスクリプト方面は全く手を付けてないので納得

今はまさかのtcltkのページを更新中というマイペースぶり
0863デフォルトの名無しさん
垢版 |
2019/10/23(水) 08:54:10.32ID:1cyp8e5C
>>861
開発案件ではなく Windows のインフラ運用系案件の求人数が及ぼした結果だと思う。
求人の要件には「必須スキル」と「スキルが有るなら尚可」とあるけど、PowerShell のスキルは
後者じゃないかと推測。

Windows 系以外でも最近は管理用のスクリプティング環境として PowerShell の採用例が
いくつかあるから、そういう案件もカウントされてるかもしれない。
自分がガッツリ使ってるところだと vSphere かな。これのスクリプティング環境 (PowerCLI) は非常に整備されてて、とても便利。
0864デフォルトの名無しさん
垢版 |
2019/10/27(日) 10:53:22.24ID:NsKzBf3L
詳しい方、教えて下さい!

シェバン記法でバッチファイル化して実行したいのですが、自スクリプトパスを取得する方法がわかりません。
誰か教えて下さい。
0867デフォルトの名無しさん
垢版 |
2019/10/27(日) 11:42:15.29ID:NsKzBf3L
>>866
以下を頭につけて拡張子を.batにするとダブルクリック実行できるようになるという記法のことです。

@powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[scriptblock]::create((gc \"%~f0\"|?{$_.readcount -gt 1})-join\"`n\");&$s" %*&goto:eof
0869デフォルトの名無しさん
垢版 |
2019/10/27(日) 11:48:06.40ID:hJUpCTqv
Ruby では、__FILE__ が現在評価中のスクリプトファイル名

シェバンは、Linux では、
#!/usr/bin/ruby

Windows に、シェバンってあるの?

.bat に、ruby .\script.rb
と書いて、ダブルクリックで起動したりする事はあるけど

.vbs でも、起動ファイルを作れる
0870869
垢版 |
2019/10/27(日) 11:52:51.51ID:hJUpCTqv
.bat に、powershell .\script.ps1
と書けば、ダブルクリックで起動できないか?

または、.vbs に、
CreateObject("WScript.Shell").Run "powershell .\script.ps1", 0
0872869
垢版 |
2019/10/27(日) 12:21:42.69ID:hJUpCTqv
よく知らないけど、powershell は、ダブルクリックで起動するような、

危険なことは出来ないのじゃないか?
0874869
垢版 |
2019/10/27(日) 12:54:36.77ID:hJUpCTqv
ダブルクリックで起動するのは、危険!
あくまで、個人用途

仕事ではやらない方が良い。
危険すぎる
0877デフォルトの名無しさん
垢版 |
2019/10/27(日) 13:40:21.93ID:Lik42TLZ
>>874
ダブルクリックで起動するのは危険だから
コマンドラインから起動してください。
危険なコードでもコマンドラインから起動すれば、安全です。

こうですか?
0878デフォルトの名無しさん
垢版 |
2019/10/27(日) 13:50:19.81ID:NsKzBf3L
>>874
どう危険なのですか?顧客提供して不特定多数が使うわけでもないのに何が危険なのですか?

>>875
シェバンした場合、それだと動作しません。

>>876
なぜ?
0879869
垢版 |
2019/10/27(日) 14:01:18.04ID:hJUpCTqv
ダブルクリックで起動するのは、危険!

ファイルをちょっと触っただけでも、
ダブルクリックになって起動起動されてしまうから、Microsoft も禁止してる!

Linux のシェバンでも、
ファイル名だけじゃ起動できないようにしてるだろ

./ファイル名
みたいに、パス付きじゃないと起動しないようにしてる

これも、ファイル名だけでリターンキーを触ってしまうと、起動されてしまって危険だから!

ダブルクリック起動では、多くの被害者が出てる
0881デフォルトの名無しさん
垢版 |
2019/10/27(日) 14:05:49.29ID:Lik42TLZ
ダブルクリックは危険!
ファイルをクリックしただけで起動しちゃう!
エクスプローラーからファイルをクリックできない
全部開いちゃう!

こうですか?
0882デフォルトの名無しさん
垢版 |
2019/10/27(日) 14:06:46.38ID:v/8cx3Zl
危険はexeでもバッチでも同じだろうに
powershellスクリプトだけを危険とする理由はない
0883デフォルトの名無しさん
垢版 |
2019/10/27(日) 14:13:43.83ID:Lik42TLZ
バッチファイルは危険じゃない!
APIが使えない。PowerShellスクリプトは何でもできる!
バッチファイルは他のスクリプトを呼び出すぐらいしかできない!

こうなるんですかね?
0884デフォルトの名無しさん
垢版 |
2019/10/27(日) 14:22:52.49ID:4/fJTv/Q
>>878
引数の名前を指定して%~dpnx0を渡せばいいのでは

# D:\a.bat
@powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[scriptblock]::create((gc \"%~f0\"|?{$_.readcount -gt 1})-join\"`n\"); & $s" -hoge %~dpnx0 %* & goto:eof

Param(
[string]$hoge
)
Write-Host $hoge
Write-Host $args[0]
Write-Host $args[1]
Write-Host $args[2]
pause
# D:\a.bat eof


D:\>a 0 1 2
D:\a.bat
0
1
2
続行するには、Enter キーを押してください...:
0886デフォルトの名無しさん
垢版 |
2019/10/27(日) 14:31:11.79ID:vcUKQgsd
>>878
> シェバンした場合、それだと動作しません。
そりゃスクリプトを動的に作ってるんだからスクリプトファイルなんてないからね
バッチファイルのパスを知りたいならバッチから引数で渡せばいいだけ
0889デフォルトの名無しさん
垢版 |
2019/10/27(日) 15:18:23.27ID:FsLuN3Ol
前から気になってたんだがダブルクリックでps1が起動できない設計にどれだけのセキュリティの効能があるんだろな
batの中にPSスクリプトを埋め込んで実行ポリシーも上書きできるなら実質batのセキュリティレベルまで落ちる
batをメールに添付すると自動でフィルタリングされるけどps1なら安全だからフィルタされず拡張子を書き換える手間が省ける、というレベルの価値なのかな
0890デフォルトの名無しさん
垢版 |
2019/10/27(日) 15:40:44.98ID:Lik42TLZ
>>885
WSLから実行

$ time cmd.exe /c echo ok
ok

real 0m0.051s
user 0m0.000s
sys 0m0.016s

$ time powershell.exe -Command echo ok
ok

real 0m0.355s
user 0m0.000s
sys 0m0.016s


これは遅すぎる。
0895デフォルトの名無しさん
垢版 |
2019/10/27(日) 16:00:15.75ID:Lik42TLZ
>>894
だからどれくらいのスペックを買えば良いのか
お前のスペックとお前の実行時間を教えてくれと言ってるんだよ
CPUを強化すれば速くなるのか?SSDを速くすれば良いのか?
0896デフォルトの名無しさん
垢版 |
2019/10/27(日) 16:37:26.26ID:rrcAfXPk
>>895
遅いと思う感覚が人によって違うから他人に聞いてもしょうがないだろ
そんなこともわからんのか?
0897デフォルトの名無しさん
垢版 |
2019/10/27(日) 16:42:00.99ID:ElQsR2/N
>>896
だからどれくらい時間がかかるか聞いてるんだがw
お前にとって遅いかどうかなんて聞いてねーよ
0898デフォルトの名無しさん
垢版 |
2019/10/27(日) 17:18:28.01ID:cWrRHY0n
ColorTool を使わずに同等のことって出来ませんかね。客先のマシンなので入れられないんです。
powershell.exe から ssh で Linux につないでるんだけど、青と黒の色が似通ってて、すごく見づらいのをなんとかしたいです。
0901デフォルトの名無しさん
垢版 |
2019/10/27(日) 19:03:23.84ID:vcUKQgsd
>>897
日本語理解できないのか?
お前がどんだけ時間が掛かっちゃ遅いと思うかなんてわからんし、その時間をなぜ俺が検証してやらんといかんのだよ
無能が甘えんなよw
0903デフォルトの名無しさん
垢版 |
2019/10/27(日) 21:04:44.37ID:jAqyy8Vt
>>889
batファイルも外部からDLしたデータなら実行前に確認画面出るでしょ
もちろん悪意のある内部犯なら無意味だけど
0904デフォルトの名無しさん
垢版 |
2019/10/28(月) 00:41:43.54ID:T67vLNbE
>>903
出るでしょ、と言われてもそれ俺の疑問とズレてると思うんだが…
その理屈だと、ネットワークから入手したときに警告が出るからbatもそれなりに安全
ps1も同じように警告が出るなら同じように安全
だったらダブルクリックで実行できない仕様にしたことにはあまり意味がなかった、という結論だと受け取って良い?
0905デフォルトの名無しさん
垢版 |
2019/10/28(月) 00:48:33.12ID:ML+fUsJB
ダブルクリック実行が危険ってのは、オペレーション次第で意図しないタイミングで実行されるからだろ
別に実行されても問題ないタイプのものならいいけど
ファイル削除系とか実行されたら何らかの情報が変化しちゃう系だと困るってことだよ
あと、ダウンロードでフラグが立つのはNTFSに落とした場合のみでFATなら警告なしだよ
0906デフォルトの名無しさん
垢版 |
2019/10/28(月) 02:25:37.55ID:bqlyCkZ6
読み込むアセンブリを減らしたりして0.1秒減らした。
これでコマンド実行時間が0.45秒ぐらいになった。
でもPowerShellの起動時間0.3秒がやはり大きい
ネイティブexeにすりゃいいんだろうけど、そうすると気軽じゃなくなるからな
VBScriptでAPIが使えるならそっちのほうが速くなりそうだけど
0907デフォルトの名無しさん
垢版 |
2019/10/28(月) 06:35:24.37ID:kjzN6NI8
>>890
漏れは、パソコン工房のノートPC、CPU-i3, メモリ8GB, SSD-128GB で、
WSL, Ubuntu 16.04 で、2秒ぐらいw

~$ time powershell.exe -Command echo ok
ok

real 0m1.944s
user 0m0.000s
sys 0m0.031s
0908907
垢版 |
2019/10/28(月) 06:41:24.18ID:kjzN6NI8
ただし、漏れはいつも、ノートPC を、
CPUを1つだけ使う、省エネモードにして使っている

それで、コンパイルが遅いのかも?
0909デフォルトの名無しさん
垢版 |
2019/10/28(月) 08:13:17.35ID:SMRk50Ri
>>904
ダブルクリックだけでは実行できなくなってるからいいんじゃない?
さすがにFATは知らんけど
0910デフォルトの名無しさん
垢版 |
2019/10/28(月) 11:15:58.10ID:tEsfLTI+
>>907
うわっ、マジか。そりゃきついな
タイプして2秒はありえない。

VBScriptでの実装も考えてみたが難しいし
こりゃもうCででも作るかな?
でもCOM触るの面倒なんだよな。
0911デフォルトの名無しさん
垢版 |
2019/10/28(月) 12:44:27.32ID:tEsfLTI+
Windows Updateしたら大幅に下がったwww
今裏でなにかビルドしてるんかな? ngenとか?

$ time powershell.exe -Command echo ok
ok

real 0m1.390s
user 0m0.000s
sys 0m0.016s
0913デフォルトの名無しさん
垢版 |
2019/10/28(月) 13:15:03.68ID:tEsfLTI+
なにかやったような記憶をたどり、

https://superuser.com/questions/1212442/powershell-slow-starting-on-windows-10

. (Join-Path ([Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()) ngen.exe) update

↑これをPowerShell(管理者)で実行したら速くなった。(もとに戻った)
でも、一部指定されたファイルが見つかりません。とかエラーがでる。

よくわからんけど、このコマンドを実行してるだけ?
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe update
0915デフォルトの名無しさん
垢版 |
2019/10/28(月) 13:28:19.78ID:tEsfLTI+
Windows Updateしたせいかとも思ったけど、Visual Studio入れたからかもしれんな
ともかく、ngen updateしたらもとに戻った。
しばらく放置してても治るんだろうけど
0916デフォルトの名無しさん
垢版 |
2019/10/28(月) 21:32:05.62ID:WDVIXPLl
強力そうなので始めてみたんだけど、たかが文字コード変換がなんで
さらっとできないんだろう…
0917デフォルトの名無しさん
垢版 |
2019/10/28(月) 22:42:59.54ID:8eaZgTeu
C#もどうせ遅いんだろ?と思ってやってみたら単純なHello Worldだと0.1秒程度だった
PowerShellよりマシなのか。読み込むアセンブリで変わってくるとは思うけど
C++だと0.05秒。圧倒的だが情報が少なすぎる。
0919デフォルトの名無しさん
垢版 |
2019/10/29(火) 02:18:49.94ID:vBIRwBaE
echoが遅いことが判明

$ time powershell.exe -Command echo 1
1

real 0m0.378s
user 0m0.000s
sys 0m0.000s

$ time powershell.exe -Command 1
1

real 0m0.264s
user 0m0.000s
sys 0m0.000s

$ time powershell.exe -Command "[Console]::WriteLine(1)"
1

real 0m0.243s
user 0m0.000s
sys 0m0.000s
0921デフォルトの名無しさん
垢版 |
2019/10/29(火) 03:55:39.34ID:vBIRwBaE
>>920
そうなんだろうなって気はしてた。
まだどれがコマンドレットかそうでないかよくわかってないレベルだけどw

間にハイフンで区切られてて、呼び出しにカッコがいらないのはコマンドレットだよな?
Where-Objectとかもなくせば速くなるんだろうか?

ようやくC++で実装できそうな情報が溜まってきた。
Unicodeとか訳わかんねぇ。情報がバラバラで多すぎてわからん。
たったこれだけ、たったこれだけなのに!


C++で実装したら0.1秒。だけどバイナリのビルドが必要
PowerShellだと0.45秒。
CLIコマンドとしてサクッと実行したときの体感速度が違いすぎる。
0922デフォルトの名無しさん
垢版 |
2019/10/29(火) 04:14:17.53ID:rBco2ITF
>>921
Where-Objectはめちゃくちゃ遅くて遅いコマンドレットの代表みたいな奴だから俺はスクリプトでは一切使わない
同様にForEach-Objectも遅い

何作ってるのか知らんけどC++はスレ違いだからあとはC++のスレでやった方がいい
powershell自体の起動も含めてC++で作ったバイナリより遅いとかいう情報は当然すぎるから要らない
0923デフォルトの名無しさん
垢版 |
2019/10/29(火) 05:02:05.41ID:CowX2GWO
Ruby が良い。
Rubyから、クリップボード・powershell も使える。
CP932・UTF-8 の変換もできる

C++ は、コンパイル済みだろ。
コンパイル自体に時間が掛かるのは、Rubyも同じ

# クリップボード内の複数行文字列の、各行の先頭・末尾から、
# 連続する空白類を除去して、クリップボードに入れる

str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換

ary = str.each_line.map( &:strip ) # 連続する空白類を除去する

IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end
0924デフォルトの名無しさん
垢版 |
2019/10/29(火) 08:28:11.85ID:+8XugnXa
速いに越したことはないけど、PowerShel は速さを追求するもんじゃないだろうに。

>>923
お前は今すぐ呼吸するのをやめろ。お前に吸わせる酸素がもったいない。
0925デフォルトの名無しさん
垢版 |
2019/10/29(火) 20:44:54.51ID:ltL5L5Cn
こっちのスレにも書いておくわ
Windows 10 1903、PowerShell 5.1.18362.145
コマンドプロンプトを起動して

C:\Users\user> powershell.exe -Command [Console]::OutputEncoding
BodyName : iso-2022-jp
EncodingName : 日本語 (シフト JIS)
HeaderName : iso-2022-jp
WebName : shift_jis
WindowsCodePage : 932
IsSingleByte : False
EncoderFallback : System.Text.InternalEncoderBestFitFallback
DecoderFallback : System.Text.InternalDecoderBestFitFallback
IsReadOnly : True
CodePage : 932

C:\Users\user> powershell.exe -Command [Console]::OutputEncoding = [Text.Encoding]::UTF8
UTF8に変更する。

C:\Users\user>powershell.exe -Command [Console]::OutputEncoding
BodyName : utf-8
EncodingName : Unicode (UTF-8)
HeaderName : utf-8
WebName : utf-8
WindowsCodePage : 1200
IsSingleByte : False
EncoderFallback : System.Text.EncoderReplacementFallback
DecoderFallback : System.Text.DecoderReplacementFallback
IsReadOnly : True
CodePage : 65001

それぞれ、別々のコマンドとして実行してるのに、状態が変わるのはなんで?
0926デフォルトの名無しさん
垢版 |
2019/10/29(火) 20:47:41.08ID:ltL5L5Cn
しかも powershell.exe だけに影響する話じゃなくて、

UTF8で書いたファイルを、コマンドプロンプト起動直後、
シフトJISモードのときにtypeしたら文字化けし、

UTF8に変更してからtypeしたら文字化けしない
明らかにコマンドプロンプトの状態が変わってる。

だけどchcpの値は932のままかわらない
ただ、PowerShellを使ってUTF8モードに切り替えると、
chcpすると「Active code page: 932」と英語で表示される。
0928デフォルトの名無しさん
垢版 |
2019/11/02(土) 12:30:04.56ID:1PdjBp7d
この場合は True が返るんだけど(当然)、
Test-Path ${home}\ntuser.dat

こうした場合は False になる。
$a = [xml]('<?xml version="1.0"?><File>${home}\ntuser.dat</File>')
Test-Path $a.File

XML の値は、
"${home}\ntuser.dat" こうじゃなくて
'${home}\ntuser.dat' というふうに格納されてるようなんだけど、変数を展開するにはどうすればいいだろう?
0930デフォルトの名無しさん
垢版 |
2019/11/02(土) 13:07:31.37ID:esIitHWU
>>928
そりゃ ' ' で囲ってりゃ展開しないだろ…
$a = [xml]"<?xml version=""1.0""?><File>${home}\ntuser.dat</File>"
0931928
垢版 |
2019/11/02(土) 13:33:24.00ID:1PdjBp7d
>>929
できた、ありがとう。

>>930
>>928 のサンプルの提示の仕方が悪かったが、実際には XML ファイルを読み込んでるので >>928 の形になります。
0932デフォルトの名無しさん
垢版 |
2019/11/02(土) 18:11:26.52ID:71SUtLbe
Powershellの演算子の優先順位が判るサイトが見当たらないんですがどっかにないですかね
演算子をカテゴリ毎に紹介してるサイトは多く見かけるんですが
0936デフォルトの名無しさん
垢版 |
2019/11/05(火) 23:35:55.67ID:ocMK86pm
m(_ _)m誰か教えて下さい。

フォーム上にコンボボックスを大量配置したいのですが、一つずつ以下みたいに書くと大変です。
これを関数化する方法を教えて下さい。

$Combo = New-Object System.Windows.Forms.Combobox
$Combo.Location = New-Object System.Drawing.Point(10,10)
$Combo.size = New-Object System.Drawing.Size(150,30)
0937デフォルトの名無しさん
垢版 |
2019/11/06(水) 02:58:52.99ID:+N82MWJ/
>>936
普通に$comboを返す関数を作ればいい
winforms書く時は使えるバージョンならusing namespaceを使った方がすっきりする
個人的にNew-Objectは遅いだけなのでなるべく使わない
暗黙の型変換を積極的に使うとすっきりする

using namespace System.Windows.Forms
Add-Type -AssemblyName System.Windows.Forms

function Create-ComboBox($Left, $Top, $Width, $Height) {
  $combo = [ComboBox]::new()
  $combo.Location = "$Left, $Top"
  $combo.size = "$Width, $Height"
  $combo
}

$form = [Form]::new()
$form.Size = "200,200"

$combo1 = Create-ComboBox -Left 10 -Top 50 -Width 160 -Height 30
$form.Controls.Add($combo1)

$form.ShowDialog()
0939936
垢版 |
2019/11/06(水) 11:38:21.31ID:viRYf3W9
>>937
大変ありがとうございました。助かりました。

なおWin7環境なのでusing...はカットして使ってます。
0940デフォルトの名無しさん
垢版 |
2019/11/06(水) 19:25:34.62ID:du9DeY6n
>>939
5.0以上にアップグレードすればWin7でも使えるんじゃないの?インストール不可なだめだけど
0941936
垢版 |
2019/11/08(金) 09:54:16.57ID:RMGDBEVY
緊急でお願いします。マルチバイト文字のパディングのやり方を教えて下さい。サンプルコードがあると嬉しいです。
0943デフォルトの名無しさん
垢版 |
2019/11/08(金) 10:20:37.27ID:bpFYbH+Z
うっかり bash と間違えて ctrl+R と打ってしまったんだけど、PowerShel でも同じように機能したんだな。
軽く感動したわ。
0945デフォルトの名無しさん
垢版 |
2019/11/08(金) 11:47:48.53ID:bt2cbsd4
PowerShellにディレクトリ、ファイル名以外の
補完機能ってあるの?
0946デフォルトの名無しさん
垢版 |
2019/11/08(金) 12:27:29.71ID:CJ6EXBGx
>>945
オプションとかオプションの値が選択肢ならそれも補完する
ユーザーが作ったコマンドでも補完できるから地味に便利
0948デフォルトの名無しさん
垢版 |
2019/11/08(金) 14:41:45.11ID:wfK2aVsO
ついでに以下のコマンドで画面だしとけばチートシートになるよ

Get-PSReadLineKeyHandler | ogv
0950デフォルトの名無しさん
垢版 |
2019/11/09(土) 17:39:02.10ID:LvjWth2U
powershellで海外にアクセスできないように設定できますか?
0953デフォルトの名無しさん
垢版 |
2019/11/10(日) 16:21:24.11ID:LxY6Tlm9
海外鯖を経由しない通信にしたい。
それか海外からの通信をファイアウォールで
全部ブロックしたい。
って考えたらhostsしかないかな?
めんどくさいな。
0956デフォルトの名無しさん
垢版 |
2019/11/10(日) 17:17:57.36ID:uhrgfz89
hostsに一体いくつ「海外」とやらのホストを指定するのやら
OS側でやるのが適当なのかそれ
業務用なのか個人用なのかもわからん
0958デフォルトの名無しさん
垢版 |
2019/11/10(日) 20:34:29.07ID:LxY6Tlm9
すみませんでした。そうなるとなんかややこしくなりそうなのでやめます。
ブラウザの拡張でやりますわ。
ありがとうございました。
0960デフォルトの名無しさん
垢版 |
2019/11/11(月) 17:18:43.20ID:WYwNeQAp
ありがとうございました。
0961デフォルトの名無しさん
垢版 |
2019/11/18(月) 08:47:59.75ID:604fXs7f
タブストップ中コンボボックスの文字の背景色を青ではなく薄水色にしたいのですが、やり方がわかりません。ご存知の方、よろしくお願い申し上げます。
0964デフォルトの名無しさん
垢版 |
2019/11/18(月) 15:10:33.45ID:Crm1ovkb
Windows 10 に標準搭載された OpenSSH と PowerShell の機能だけを使用して、公開鍵をサーバにアップロードしたいと考えています。
(ssh-copy-id は shell スクリプトなので Windows 版の OpenSSH には含まれていない)
0965デフォルトの名無しさん
垢版 |
2019/11/18(月) 15:11:33.77ID:Crm1ovkb
調べた結果、まず以下のコマンドが cmd.exe 上では完璧に動作することを確認しました。
※元のコードを貼ると 403 Forbidden となるので Pastebin を使ってます
https://pastebin.com/kCqKQm9T

これを以下の通り PowerShel に置き換えました。
https://pastebin.com/CSE9sCnB

一応、公開鍵のアップロードまでは出来たんですけど、ssh.exe のプロセスが終了しません。
(wait = $true にした場合はプロンプトが返ってこない)
何が悪いんでしょうね。
0966デフォルトの名無しさん
垢版 |
2019/11/18(月) 15:15:42.87ID:Crm1ovkb
追伸:CloudFlare で 403 Forbidden になってたのはレスに cmd.exe という文字列が含まれいたのが原因のようです。コードは関係なかったっぽい。
0967デフォルトの名無しさん
垢版 |
2019/11/18(月) 15:35:44.61ID:Crm1ovkb
どうやら、ssh.exe に対して公開鍵の文字列をパイプで渡した場合は正常終了するのですが、標準入力で渡した場合はプロセスが残ることが分かりました。
cmd.exe 上でも、標準入力で渡した場合はプロセスが残ります。
Start-Process は「You cannot pipe input to this cmdlet.」とのことでパイプからの入力を受け付けないんですけど、なにか良い手はないですかね?
0968デフォルトの名無しさん
垢版 |
2019/11/18(月) 16:07:26.07ID:Crm1ovkb
何度もすみません、自己レス。

パイプならよかろう、ということで以下の3パターンで試したところ、ssh.exe は正しく終了するようになったのですが、authorized_keys には CL+LF が追加されてしまいました。
$PubKey = Get-Content "${home}\.ssh\id_rsa.pub"
Write-Output $PubKey -NoEnumerate | ssh root@${DST} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys"
Out-String -InputObject $PubKey | ssh root@${DST} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys"
type "${home}\.ssh\id_rsa.pub" | ssh root@${DST} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys"

最終的に、これで妥協しました。ダサい。もっとスマートな書き方はないものだろうか。
https://pastebin.com/KpKkuGcQ
0969デフォルトの名無しさん
垢版 |
2019/11/18(月) 16:13:01.04ID:Crm1ovkb
ごめんなさい、標準入力では ssh.exe が終了しない原因が分かりました。
sshkeygen で生成された id_rsa.pub は、行末で改行していないためでした。
エディタで開いて改行させたところ、
https://pastebin.com/CSE9sCnB
これでも動作しました。

お騒がせしました。
0972デフォルトの名無しさん
垢版 |
2019/11/24(日) 16:11:02.22ID:UhvIpOa2
Get-ChildItemで困っている事があります。
解決方法を知っている方がいましたら教えてください。

*.txt *.bin
などの拡張子を持つファイルを一括して集める場合
$result = Get-ChildItem *.txt,*.bin
とすれば集まりますが
hoge,hage.txt
というファイル名に、 ',' が含まれているファイル名があると、 *.txt,*.bin のようなセパレーターとして認識してしまい
ワイルドカードにヒットするbase nameが hoge までになってしまい$resultに値が入ってきません。
','などのセパレーターを含むファイル名を Get-ChildItem でワイルドカード指定するにはどうすればよいでしょうか?
0973デフォルトの名無しさん
垢版 |
2019/11/24(日) 16:29:56.73ID:E4b/CXSq
>>972
何をしたいのかいまいちよくわからんがとりあえず
Get-ChildItem 'hoge,hage.*', '*.txt'
とかでいいんじゃね?
0974デフォルトの名無しさん
垢版 |
2019/11/24(日) 20:06:33.13ID:JDFz9pDe
うちはGet-ChildItem *.txt,*.binで引っかかるけど
dir *.txt,*.bin | ?{ $_.Name -like "h*"}でフィルタして確認してみれば?
0975デフォルトの名無しさん
垢版 |
2019/11/28(木) 17:33:57.96ID:G1SJ/xZS
スクリプトで
VPNセッションを張って、opensshでLinuxサーバーにログインしたいんですが、クレデンシャル情報ってどう引き渡せば良いですか?
0977デフォルトの名無しさん
垢版 |
2019/11/28(木) 17:40:45.55ID:G1SJ/xZS
>>976
ssh、vpnのコマンドにです
0979デフォルトの名無しさん
垢版 |
2019/11/28(木) 17:42:46.64ID:KHBZf3ql
ssh、vpnにクレデンシャル情報を渡すとどうなるんです?
どうなるように設定したんですか?
0980デフォルトの名無しさん
垢版 |
2019/11/28(木) 18:10:58.12ID:G1SJ/xZS
すいません。
ここで聞いたのが間違いでした。
Linuxサーバーにログインしたいと書いてあるのにどうしたいと言われても困りますので。
では。
0982デフォルトの名無しさん
垢版 |
2019/11/28(木) 19:03:26.14ID:o2XGBpkX
VPN関係あるの?
ssh -i 秘密キーファイル ユーザー名
という外部コマンドの呼び出し方を聞いてるの?
0983デフォルトの名無しさん
垢版 |
2019/12/18(水) 06:19:20.47ID:DPpTEq4j
ちょっと気づいたのでメモ

ハッシュテーブルからいろいろな型にキャストするのがわりといろんな場面で使える
例えば>>936は次のように書ける

using namespace System.Windows.Forms
Add-Type -AssemblyName System.Windows.Forms

$form = [Form]@{ Size = "200,200" }
$combo = [ComboBox]@{ Location = "10,50"; Size = "160,30" }
$form.Controls.Add($combo)

$form.ShowDialog()


もし"200,200"ってのが気持ち悪いならさらに

$form = [Form]@{ Size = @{ Width = 200; Height = 200 } }

としてもいい
0987デフォルトの名無しさん
垢版 |
2019/12/31(火) 07:16:04.44ID:xfr0s5Fj
怒らないで教えて欲しいんだが

WSLでよくね?
0993デフォルトの名無しさん
垢版 |
2019/12/31(火) 21:58:25.71ID:ajjU1twk
事情があって嫌々ながらLinux使わざるをえないWindowsユーザーがPowershell採用してる
1000小倉優子 ◆YUKOH0W58Q
垢版 |
2020/01/01(水) 15:20:34.34ID:IT8L/q0G
  ∧,,,∧ 
 (  ・∀・) 1000ならジュースでも飲むか
  (    ) 
  し─J 
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 448日 21時間 33分 46秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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