X



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

レス数が1000を超えています。これ以上書き込みはできません。
2016/11/26(土) 06:30:02.67ID:pZYy6q7Y
前スレ
【最強CUI】PowerShell -Part 1
http://echo.2ch.net/test/read.cgi/tech/1378978504/
2018/09/08(土) 17:33:30.08ID:oTozgSe4
例えば、Active Directory 管理用モジュール「ActiveDirectory」は、現状
powershell.exe でしか動かず、pwsh.exe ではインポートできないわけ。

--------
参考
https://docs.microsoft.com/ja-jp/powershell/scripting/whats-new/breaking-changes-ps6?view=powershell-6
PowerShell スナップインは、PowerShell モジュールの前身ですが、PowerShell コミュニティではあまり使用されていません。
-- snip --
現時点では、Windows および Windows Server 内の ActiveDirectory および DnsClient モジュールに影響します。
--------

というわけで、今俺が作ってるものだと、以下のものが混在してる。
イ)powershell.exe でしか動かない
ロ)pwsh.exe でしか動かない
ハ)どっちでも動く

で、〜.ps1 ファイルを実行する際に、右クリックして「PowerShell で実行」とすると、何もしなければ powershell.exe で
実行される。自分が作ったものはほとんどが(ハ)なんだけど、時々(ロ)もあって、それを実行するときは右クリックして「PowerShell で実行」が出来ないんで面倒。

今検討してるのは、
a) pwsh.exe でしか動かないものは拡張子を .ps6 でにして、Windows に ps6 を pwsh.exe に関連付ける
b) sendto フォルダに pwsh.exe で実行させるバッチファイルを置く
c) バッチファイル (〜.cmd) に、実行環境ごと書いてしまう (参考 http://d.hatena.ne.jp/hake/20180218/p1 )

なんだけど、ほかにやりよう無いかね。
2018/09/08(土) 18:08:00.82ID:+HZWtY92
UNIXシェルのシバンみたいのが理想なら>>928は現実的な最適解だと思うんだけど何故スルー?
2018/09/08(土) 18:26:03.12ID:HSx0xrFN
そんだけならコンテキストメニューを拡張して
「PSV5で実行」を追加すれば良くね
2018/09/08(土) 19:09:29.22ID:nMBTba9u
右クリックなら選べるからコンテキストメニューをどうにかすべきだな。

ダブルクリックの話かと思ってた。
2018/09/08(土) 19:12:14.31ID:nMBTba9u
>>930
環境の問題とプログラム自体を分けておきたいとかあるんじゃないの?
2018/09/08(土) 21:00:30.80ID:oTozgSe4
>>928
イメージとしてはこんな感じかな。たしかにうまくいきそう。
ありがとう、明日試してみる。
-----------
<# ps1 の関連付けが powershell.exe の状態 (デフォルト) で、pwsh.exe で実行させたいものの場合 #>
# 実行環境が ver 5 以下の場合
if ($PSVersionTable.PSVersion.Major -le 5) {
pwsh.exe $MyInvocation.MyCommand.Path
exit
}
# 以下、ver 6 以上で実行させたい内容
2018/09/08(土) 21:11:46.23ID:oTozgSe4
>>931 >>932
もちろんそれでも十分可能なんだけど、以下の理由でできればカスタマイズは避けたいんです。スクリプト内だけで完結させたい。

・マシンがたくさん、OS も複数種類、ユーザプロファイルもたくさんあるので、標準構成からあまりいじりたくない
・お客さんに納品する可能性も考慮
2018/09/09(日) 12:32:25.50ID:CjsffzYn
そんな条件なら最初から全部ver5用に作るわ
2018/09/09(日) 12:54:55.70ID:PZb39582
運用マニュアルなしで議論してもしょうがないでしょ
このスクリプトはver5環境で実行してくださいと一言書いとけば済む話
2018/09/09(日) 13:48:43.10ID:b90Mhdwq
そういう能書きが書いてあっても何のこっちゃ分からんという人に配布しなきゃいけない場合もあるからなぁ
お客さんに運用対応を要求するのも大変なことだし
2018/09/09(日) 14:14:36.64ID:R8hBsgvF
>>937はこの手の仕事したことないんだろ
マニュアル書いても
「ver5環境ってなんだ?」
とか、そもそも説明なんて読んでなくて
「うまく動かないので至急なんとかしてください」
って言われるだけのこと
940デフォルトの名無しさん
垢版 |
2018/09/09(日) 14:39:06.98ID:DLS5Iddq
これで十分
#Requires -Version 5
if ($PSVersionTable.PSEdition -eq 'Core') {
throw 'Powershell Coreでは動作しません。'
}
2018/09/09(日) 14:42:48.50ID:0y2Fjk63
「マニュアル?あぁ読んでないわ。とにかく直しといてね」
2018/09/09(日) 14:47:33.78ID:0y2Fjk63
>>940
「なんか 動作しません て出るんだけど?直しといてね」
943デフォルトの名無しさん
垢版 |
2018/09/09(日) 15:19:04.80ID:DLS5Iddq
「対応するなら○○万円(鬱陶しい顧客リスク分を上乗せして)頂戴します。」
断るならブラック顧客だから切るべし。
断れないならブラック企業だから転職。
2018/09/09(日) 15:28:45.97ID:D8J39mU4
>>943
突っぱねるだけじゃなく、妥協点を見出す、Fail safe, Fool proof ってのも重要なことだよ。
まあ個人のポリシーだから好きにすればいいけど。
2018/09/09(日) 15:31:06.93ID://bKOaXP
無職の妄想かよ w
2018/09/09(日) 15:47:36.82ID:jqHbfRUC
マニュアル書くにしたって、「エラーメッセージが出ます」と一言で説明するだけじゃ不十分
「『ver5環境では動作しません』というメッセージが表示されます。この場合...」と一字一句再現してやらないとわけわからなくなる人が山のようにいるのでね
ウィンドウの背景色やフレームの色まで画像付きで説明されてないと理解できない人もいるし
舐めてると死ぬぞ
2018/09/09(日) 20:12:23.17ID:0ym3cmgA
会計ソフトを出したら、それを買った客が、簿記・会計処理のことを聞いてくるw
女が電話に出ると、何時間でも粘るw

そういう客もいる
2018/09/09(日) 20:24:13.14ID:H4RfJ3jl
>>947
それ、チャンスじゃん。
サポート料を時間当たりいくらと決めとけば良い。
2018/09/09(日) 20:59:40.12ID://bKOaXP
>>947
全然関係ないけど昔生理用品メーカーに納入した機器の入れ替えに行った時に聞いた話だと、お客さんからの問い合わせ(多分クレーム)で長い時は3時間とかかかるって言ってた
950934
垢版 |
2018/09/10(月) 17:56:21.73ID:0jDkILQ9
結局こんなふうにしたよ
https://pastebin.com/9RWLpSC7

>>928
ありがとうごさいました!
ほかの皆さんもありがとうございました!
2018/09/12(水) 08:25:50.66ID:HwQfxVDT
Verifying PowerShell versions…let me count the ways
https://blogs.technet.microsoft.com/laurapark/2018/08/26/verifying-powershell-versions-let-me-count-the-ways/
2018/09/14(金) 07:52:52.25ID:itNItVhP
powershellにはbuild toolないのか
2018/09/14(金) 09:15:39.59ID:u+Z35nAl
Announcing PowerShell Core 6.1
https://blogs.msdn.microsoft.com/powershell/2018/09/13/announcing-powershell-core-6-1/
2018/09/14(金) 10:16:47.60ID:60Mnn9Dg
これは朗報だ!
---------
AWS Lambda は PowerShell Core をサポートします
https://aws.amazon.com/jp/about-aws/whats-new/2018/09/aws-lambda-supports-powershell-core/
2018/09/14(金) 12:28:03.19ID:Z7a8n8W6
6.1日本語使えない?
2018/09/14(金) 13:01:26.89ID:/Xr9NdPd
>>954
PowerShellでWeb API作る需要あるのかな
2018/09/14(金) 14:27:05.47ID:60Mnn9Dg
>>956
自分の場合だけど、Windows の EC2 インスタンスと連携するプログラムを Lambda 上で
作る案件がちょくちょくあって、これまでは Windows 上は PowerShell、Lambda のほうは
P{ython で作ることが多かった。
だけど自分のスキルのせいもあって、PowerShell と Python のコーディングを同時並行で進めると
色々と混乱することが少なくなかったのね。

# 両方 Python で作れば、と思うかもしれんけど、運用の手間を考えると、
# 追加でインストールするものはなるべく少なくしたい

それが、Lambda で PowerShell Core が使えるなら PowerShell で統一できるので、
個人的にすごく捗るな、と。
2018/09/16(日) 13:14:02.90ID:16Y59QgZ
class構文じゃなくて本物の型を定義したい場合にはAdd-Typeしかないのかな
GUI作るときにPSObjectがうまくデータバインドできなくて困った
2018/09/28(金) 12:50:16.79ID:8vtXqMhV
https://news.mynavi.jp/itsearch/article/hardware/4054
Powershell6.1で大分パフォーマンス上がったみたいね

パフォーマンス以外に起動も結構早くなった感じ
2018/09/28(金) 13:35:11.01ID:oUAtTcYe
Macだからかもしれない
Macでの実行環境は最適化する余地が大きく残ってたとかがあり得る
Windowsでどうかは比較してみないとなんとも
2018/09/28(金) 15:32:47.04ID:ExWLpVS+
psわざわざ入れるって無理だな
有り物使うだけだからOSアプデで付くのを待つしかない
2018/10/05(金) 17:32:43.04ID:LWyIHUF+
PowershellはOSによってプリインストールバージョン違うの地味に面倒だな
MS Updateで5.0までは強制的にアップデートしてくれないかな
客先のサーバでSQLモジュールも入って無くてInstall-moduleも入って無くてスクリプト使えなくて困ったわ
2018/10/05(金) 20:42:27.53ID:OkuzM4NB
今の10の1803ってバージョン何が入ってるの
2018/10/05(金) 21:07:07.34ID:YbvjOj4C
5.1
2018/10/06(土) 10:44:13.46ID:fld0/WcD
2.0ベースでなんとかするテクニックは必須ですよね
2018/10/06(土) 14:33:29.33ID:gea8Zy97
テクニックって程のものって何かある?
使える使えないの差ぐらいじゃないの
2018/10/06(土) 16:17:11.73ID:J00E9zwo
再来年1月にはPowershell2.0プリインストール環境が終了するから2.0に合わせた書き方頑張る気力がイマイチ
Windows7とか2008R2は早く死んでくれないかな
2018/10/06(土) 16:48:11.63ID:h/HmdYY4
Windows7とか2008R2は最後のまともなバージョン
2018/10/06(土) 21:18:07.69ID:MlTlM5yZ
Windows 2000 Proが一番良かった。
2018/10/06(土) 23:10:20.08ID:tgEP6apu
>>967
SP1入れずに使ってる環境なんてほぼ無いだろ?なら4.0覚えときゃOK

個人的にはzipクラスがある4.5が望ましい
2018/10/06(土) 23:21:17.76ID:SoS+Fgug
とりあえず3.0以降じゃないとちょっと辛いイメージ
2018/10/07(日) 00:45:26.55ID:/+/kkqPE
何が辛いんだい
ほら言ってごらん
2018/10/07(日) 00:51:14.63ID:KvcjzmFM
3.0以降じゃないとPsCustomObject使えないとか、コマンドレット充実してなくてNETライブラリ使う羽目になって、もうこれC#で書いたほうが良くね?になるあたりかね
2018/10/07(日) 02:34:13.34ID:MeohIHbL
coreに移行して大分経ってからGet-ScheduledTaskとかのWindows専用っぽいコマンドレット無くなってるのに気付いた
まあこれはあんまり使わんしpowershell.exeで実行すりゃいいか
2018/10/07(日) 06:17:50.14ID:mFTX0OZ0
where-objectでフィルタをかける時、複数条件が必要な場合は
パイプでつなぐしかないですかね?andとかあればいいんですけど
where-object 条件1 | where-object 条件2
2018/10/07(日) 06:44:39.40ID:MeohIHbL
論理演算子はもちろんあります
-and -orなど
2018/10/07(日) 10:50:24.18ID:VwaVbKnV
>>975
サンプルだと
? {$arg -eq "test" -or $arg2 -eq "test"}
みたいな感じ
-使う演算子が繋がって違和感あるかもしれんけど
2018/10/07(日) 11:44:45.71ID:I8sm2uyS
そもそもカンマでcriteraの文字列を区切ればor指定になるのでは
2018/10/07(日) 21:44:12.84ID:/+/kkqPE
>>978
どゆこと?
$arg -eq "test1","test2"
とかやってもならないけど
980デフォルトの名無しさん
垢版 |
2018/10/08(月) 20:48:01.10ID:7Fv0bXJp
パワーシェル内でパワーシェルを呼び出す時、どのパワーシェルの処理が成功してるか失敗してるかわかるようにログ出すのはどうすればいいんでしょうか?
2018/10/08(月) 21:56:04.04ID:sIA/07pT
>>980
スクリプトの名前等を頭につけるとか
982デフォルトの名無しさん
垢版 |
2018/10/08(月) 22:04:42.09ID:7Fv0bXJp
ごめん。全然わからん・・・
2018/10/08(月) 22:05:00.95ID:vQC6HMz5
argsでIDを渡すとか
powershell -command { "ID: $($args[0])"} -args 777
984デフォルトの名無しさん
垢版 |
2018/10/08(月) 22:19:23.32ID:7Fv0bXJp
バッチファイルみたいにリダイレクトではログ渡せないのかな?
2>1
みたいなかんじで?
2018/10/08(月) 23:19:17.74ID:nFrei6GD
$?で前回のコマンドの実行結果
$lastexitcodeにexitコマンドで返された値が入る(呼び出したスクリプトはexitに戻り値を付けて終了させないとダメ)

$?だとスクリプト内の最後のコマンドの結果が帰るからスクリプトの作りによっては失敗の判定は出来ないのはバッチとかと一緒
986デフォルトの名無しさん
垢版 |
2018/10/08(月) 23:24:06.69ID:7Fv0bXJp
なるほど
呼び出すスクリプト内にエラーコードで正常か異常か$?で判定させてそれをifかなんかで分岐させてエラーコードを呼び出し元のスクリプトの$lastexitcodeをehcoする感じですかね?
2018/10/08(月) 23:32:12.23ID:rY44Et0R
>>979に答えてくれないか
2018/10/08(月) 23:41:24.75ID:GVMVzq1c
>>980
成否判定ならこれでよくね

hoge.ps1

$hoge = $true
if($hoge){exit 1}
exit 0
-------------

$ps = Start-Process hoge.ps1 -Wait -PassThru
switch($ps.ExitCode) {
0 {
"失敗"
}
1 {
"成功"
}
}
2018/10/08(月) 23:44:14.86ID:L+98sdt+
「どの」を見落としてる
990デフォルトの名無しさん
垢版 |
2018/10/08(月) 23:45:52.94ID:7Fv0bXJp
これを呼び出すスクリプト全部に書くってこと?
呼び出し元と先が複数あって、先を全部修正するのが大変なので出来れば元だけで完結させたい
が、無理そうなのでこれを全てに書いていく?
2018/10/08(月) 23:55:10.73ID:GVMVzq1c
>>990
0で戻ってきたらokにでもすれば
いじらんで良いやろ
2018/10/09(火) 00:01:31.08ID:G4IJkzod
>>990
exitで成否を戻した方がしっかり判定できる
呼び出したスクリプトで何が発生したら失敗とするかをしっかり判定しないの?
結果コードでの判定とか曖昧すぎてトラブルの元と思う
2018/10/09(火) 00:57:32.40ID:VXCTyrZC
>>984
実際にやりたいことがわからないけどエラーメッセージをリダイレクトするだけなら同じようにできるよ
powershell ./hoge.ps1 2>>log.txt
2018/10/09(火) 03:31:08.27ID:0K1bBeTL
>>979
知らないけど、switch 文で、カンマを使うとか?

そういう意味じゃないの?
2018/10/09(火) 05:18:39.42ID:06HomXwK
>>979
-inならいけるけど、まあ違うんだろうな
dir | where { $_.name -in "a1.txt","a2.txt","b1.txt" }
$list = @( "a1.txt","a2.txt","b1.txt" )
dir | where { $_.name -in $list }
2018/10/09(火) 08:24:03.86ID:2kAOJdzZ
>>979
適当こいただけじゃないのかな
PSのカンマ演算子は配列を作り、配列の要素が複数なら内容問わず真になる
そもそもカンマでの結合はORなのかANDなのか意図が曖昧
仕様としても微妙だしバッドプラクティスに思える
2018/10/09(火) 17:47:31.12ID:G4IJkzod
次スレ
PowerShell -Part 3
http://mevius.5ch.net/test/read.cgi/tech/1539074808/
2018/10/09(火) 18:41:58.03ID:iKGY38Kd
>>997

前に同じ名前のスレが落ちてたけどこの板は保守が要るってことかな?
2018/10/09(火) 21:10:27.51ID:PXd6fmY+
>>994-997
ありがとう
2018/10/09(火) 21:31:03.39ID:G4IJkzod
(1..1000 |% {if ($_ -eq 1000) {write-output "1000 complete!"} else { write-output $_}}) -join " "
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 682日 15時間 1分 1秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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