PowerShell -Part 5

■ このスレッドは過去ログ倉庫に格納されています
2021/03/18(木) 00:29:52.04ID:/MpReTiX
前スレ
PowerShell -Part 4
https://mevius.5ch.net/test/read.cgi/tech/1577862511/

次スレは>>980が立ててね!!
2021/06/02(水) 12:41:40.74ID:zHxHmDvh
>>315
ゲイツはMSから退いてるぞ
2021/06/02(水) 12:47:09.90ID:UfLjqhXv
python作者のことだろ、BDFL(benevolent dictator for life,だっけ)
30年以上歴史あるのに未だにバンバン破壊的変更加えてる姿勢は見習うべき
pwsh core使ってる層にロングタームサポート望んでる人はそんな多くないだろ
堅牢にやりたいならshやwsh、.net framework使え
2021/06/02(水) 13:04:35.43ID:UfLjqhXv
見てきた
Version サポート終了
7.1 2022 年 2 月中旬 (予定)
7.0 2022 年 12 月 3 日 ☆LTS

意外と短かった、こんなもんでいい

python3はマイナーバージョンでも予告なしでAPI変わるけど誰も気にしてない
3.10にして外部ライブラリ入れたら標準ライブラリcollectionsでNotFound頻発してるけど、その場で名前書き変えて問題なし、ヨシ!
って感じだし
2021/06/02(水) 13:11:04.61ID:CFdyIdLe
.>誰も気にしてない
めっちゃ主語でかいなー
そんなわけないだろ
2021/06/02(水) 13:16:47.25ID:UfLjqhXv
ごめん、エンドユーザーじゃなくてライブラリユーザーレベルの話だね
まあ気にしてる作者は仮想環境で複数バージョンテストしてそのうち直すだろ
2021/06/02(水) 13:35:13.53ID:gM4d3FGp
パッケージマネージャに対してversion≧3.3のような、未来バージョンも含めた指定をするのは普通じゃなかろうか
対象に含まれてるはずなのに対応してないってことはそういう事だろ
2021/06/02(水) 14:38:34.65ID:UfLjqhXv
>>314
そういうことかね

ところで.net(core含む)はwindowsコンポーネントではないけど、windows updateでリンクすることは可能なよう

Automatic patching on Windows operating system
All versions of .NET that are supported can be automatically patched via Microsoft Update. This enables organizations to manage all .NET updates in the same way.

ついでにpwshもランタイム分離版(sdkに付いてるdotnetサブコマンドで起動するやつ)を含めてしまえば、停滞も避けれると思うのだけれど

社内デプロイ想定のようだけど、その場合はWindow Updateはむしろ切っときたいというのは、ツッコミどころ?
https://dotnet.microsoft.com/platform/support/policy/dotnet-core
2021/06/02(水) 17:45:18.44ID:eotjJV13
.NET 5のバンドルがありえないならbashのバンドルはもっとありえないだろ
2021/06/02(水) 18:10:19.15ID:F5GxLFUH
WSLはオプションとして既にWindowsにバンドルされていて、Windowsの次期メジャーアップデートではデフォルトで有効化されてコマンド一発でBashが入るようになるよ
2021/06/02(水) 18:11:19.60ID:t4iIkgqg
bashはwindowsには向かないと思うよ…
既にcygwinや派生のmimgwがあるけど、前者は完全にunixっぽい箱庭だし
一応winに適応を試みてる後者も限られた外部コマンド以外は自力移植で苦労ばかり、変に合わせた分むしろunixに慣れたユーザに拒絶されそう

単にunixの資産を活用したいならwslという手段があるので、今更MSが参入するとも思えない
2021/06/02(水) 18:24:43.00ID:t4iIkgqg
(b)sh資産を活用するって言ったって、ファイルシステムやコマンドの振る舞いを決め打ちして書かれた物ばっかりだろ
箱庭にするしかない

一応wslからNTFSにもアクセスできるけど、よりファイル属性の少ないext4想定でlnとか使うとおかしな事になるよ
gnuが対応要請に答えるとも思えんし
シンボリックリンク貼りたいならnew-itemを使おう
2021/06/02(水) 18:43:46.15ID:UfLjqhXv
話が噛み合ってない感
2021/06/02(水) 18:46:54.40ID:UfLjqhXv
そもそもwin用シェルとしてbashがマトモに使えるなんて思ってる人なんて居ないだろう
それこそcygwin等の試み見れば明らかなわけで
2021/06/02(水) 18:59:31.15ID:2HVZ8jbI
あとは>>296の知り合いが何でこんな盲言を吐いたかだが
2021/06/02(水) 19:03:10.35ID:3t5/Z9zL
その知り合いのソースは何なんだ
2021/06/02(水) 19:51:52.07ID:24d6Ptrc
ウスターソース
332296
垢版 |
2021/06/02(水) 19:54:46.99ID:WrCWc0lw
すいません、もうちっと前後関係書くべきでした、

私→転職者
ボス→ボス
無くなるさん→Powershell無くなるよさん

ボス「私さん、何がスクリプト言語的なものって扱える?」
私「bashと、Powershellはそこそこ使えます」「あと、おまけ程度ですがVBAも少々」
ボスLinuxとWindows両方いけるんだね」「Powershellは使える人少ないから、助かる!」
無くなるさん「Powershellは無くして、Bashに統合するって言ってるからPowershellなんて使えても意味ないよ」

っていう流れがありました事を、ご報告いたします。

今は7系勉強中です。
2021/06/02(水) 19:59:01.30ID:QekliMfV
スクリプト前提の文脈なんで、なおさらスルーでよさげですね
ただのマウンターにしかみえないっす
2021/06/02(水) 20:05:35.68ID:paXbiIpM
ボスの発言の後でそれ言える勇気は凄いな
詳細thxだけど知り合いにバレないよう気を付けてね
2021/06/02(水) 20:16:35.85ID:bfx/xSx/
wslとか言ってる奴はプロセス制御とかどうする気なのか気になる

winネイティブ実装のbash(msys?)なら原理的には可能とおもうが…
*-Processがそれぞれどのコマンドにマッピングされてるのか気になる
2021/06/02(水) 21:09:20.70ID:hTaL5nRv
公式win版sh系移植が出るんなら、それはそれで裾野が広がるからいいと思う
ただし新規導入されるであろうcomオブジェクトやレジストリ弄りコマンドを、引数補完の弱いbashでやるのは勘弁してほしい
たぶん古き悪き対話式のwinコマンド叩く事になりそう
もしやるならzshで頼む
2021/06/02(水) 21:58:17.73ID:rILnhmEC
シェルスクリプトなんて現システムで動けば十分なのに遠い未来になくなること心配しても意味ないような
2021/06/02(水) 22:02:01.60ID:UfLjqhXv
プロバイダを擬似ファイルシステムとしてマウントしすれば補完できないかな
プロパティやメソッドまでそうすべきかは悩むところ、やりすぎ?

同名の環境変数やコマンドをどうマップするか
unix系pwshは割り切って環境変数は倣ってる($env:プロバイダ以下に)
コマンドレットは命名規則上被らない
win標準エイリアスはwriteとかが被るけどこれも尊重
pwsh -nop
gal write # not found
(gcm write) # /usr/bin/write
らしい
マイナーコマンドなのでもちろんset-aliasしてるが

ポータブルなps1書く時には一般的な名前のwin標準エイリアスは避けた方がいいかもね
2021/06/02(水) 22:05:33.29ID:UfLjqhXv
話が逸れた…
まあ逆移植ではこうなってるという例として
2021/06/02(水) 22:34:03.30ID:tWTDTS70
Write(-Output)はよく使うからwriteで済ましてしまうな
どうせ俺はPublish-Script/Moduleするようなレベルじゃないけど
2021/06/03(木) 02:06:10.68ID:Xmy19u29
パイプラインとリダイレクトの解釈フェーズが独立しているbshの文法では、疑似ファイル方式は難しいと思う

"> /dev/null"なんて使ってないスクリプトの方が稀に思うけど、winの変な"NUL"ファイルに適切に読み替えるには| Out-Fileと>file (またはコマンド置換)が可換である必要があるよね?

powershellでも合法なはずの"> NUL"は普通オープンに失敗するはず
だから自動変数を使った"> $null"、コマンドを使った" | Out-Null"と書けるように>と|を同格にしたわけで

shっぽい言語が使いたいなら、ぱっと見似てる新言語作ったほうが早い
2021/06/03(木) 02:17:23.64ID:Xmy19u29
winの変な仕様に適合する為にpowershellは柔軟な文法になった説
2021/06/03(木) 08:24:01.46ID:xKlnG0sF
>winの変な仕様

具体的に
2021/06/03(木) 09:17:38.99ID:CvOb6PLb
>>335
プロセス制御って?
Windowsの他のプロセスを制御したいならWSLからWindowsのコマンドを呼べばいいし、
Linuxのプロセスなら当然UNIXの世界で管理するだろう
自分自身のプロセスを制御したいなら当然後者だわな
何が問題?
2021/06/03(木) 09:41:56.32ID:CA79M4bt
UNIXの世界
346デフォルトの名無しさん
垢版 |
2021/06/04(金) 06:21:24.37ID:q/6JXt/b
プロンプトからのffmpegの実行で引数として -metadata に指定する値に空白とエスケープシーケンスを含めたく
¥"abc`n def¥"
でできましたが、更に " を含めるにはどうすればいいでしょうか?
"" や `" は駄目でした
2021/06/04(金) 08:07:53.84ID:d2fkafbJ
>write-output "abc`n `"`"def `n`""
abc
""def""

ネイティブアプリ例
>gc ~/bin/args
#!/bin/sh
printf "%d args:" $#; printf " <%s>" "$@"

>args "abc`n `"`"def `n`""
1 args: <abc
""def"">
期待通りでは?

cmd用に書かれたものには、独自のパースをするものがあるので(悪名高いのはruby等)、もしかしたらそれでは?
2021/06/04(金) 08:16:32.83ID:d2fkafbJ
もしかして、こういうことか
>args "`"abc`n def"`" sanitycheck
2 args: <"abc
def"> <sanitycheck>
2021/06/04(金) 08:25:48.17ID:d2fkafbJ
ごめんレスを読み違えてたかも

エスケープシーケンスを渡したい、のなら、ffmpegのエスケープシーケンスを調べて渡すべき
上に挙げた例は「生の」空白と改行と"を、pwshのエスケープシーケンスを用いて渡す、という例
2021/06/04(金) 08:43:46.19ID:d2fkafbJ
winでは所謂c風のargvを使わない、シェルのパースを無視し、コマンドラインを文字列として取得する事、が可能

>>343
コマンドラインの> NULをプログラム側でアドホックに認識して、出力を止める手法が横行した
展開前の環境変数名をエスパーしたりも
cmdで> NULが動く事が多いのもこれ
2021/06/04(金) 08:53:40.98ID:d2fkafbJ
そして\はpwshのエスケープシーケンスではなく、winのエスケープシーケンスだ>>346
2021/06/04(金) 09:45:00.85ID:d2fkafbJ
\"bc\" 文字列 \ + bc\ = \bc\
a"ba" が文字列abaなのと同じ

a"ba"a" は閉じてない文字列
2021/06/04(金) 10:00:36.23ID:IHTmGKSa
え、コマンドプロンプトのエスケープシーケンスと、それが解釈された後のPSのエスケープシーケンスを2重に考えて引数を渡しなさいよってオチじゃないの?
2021/06/04(金) 10:18:52.38ID:d2fkafbJ
cmdと直接の関係はないよ

とりあえず
"\abc改行文字 \"
という文字列をpwshは渡すはずだけど

環境も意図した書式も不明だし、フィードバック無しに詮索はやめとこう
2021/06/04(金) 10:20:17.19ID:d2fkafbJ
\abc改行 def\だねごめん
2021/06/04(金) 10:38:55.66ID:WP3FEn4a
cmd関係なくwindowsだと\はStartProcessコールのエスケープ文字だしな
システムコール自体やcmdに食われるの想定して、余分に付け足したりするプログラムが多いので複雑怪奇になる
そんなwindowsプロセスにも賢く渡す機能が7.2以降に付きそうだけど、これでまたアドホックな要素がまた一つ増える…
2021/06/04(金) 11:31:36.60ID:WP3FEn4a
>>347
linux/macだとpwshは`のみ特別、システムは何もしない、プログラムは(普通)\のみ特別
この上なく分かりやすいという皮肉な
2021/06/06(日) 16:31:42.58ID:MKTuQ6ZL
わかりにくいなら配列$argsにまとめて渡したり' 'で括って_などをreplaceがいいかも

クオートが続くと''→'、""→"となるcmdっぽい例外は抹消してほしい
クオートされた文字列とされてない文字列は併置で連接されるけど、例外になってしまう
2021/06/06(日) 16:38:11.80ID:MKTuQ6ZL
最後の引数に限るけど、--%で以降のパースを全て止めてしまうのも便利
単語分割もされない
2021/06/06(日) 16:59:25.93ID:I2RNTewS
文字列メソッド使うのが一番頭使わなくて良い
2021/06/06(日) 19:16:20.18ID:OPfMT94L
>>358
> クオートされた文字列とされてない文字列は併置で連接されるけど、例外になってしまう
何の話?
2021/06/11(金) 08:48:29.09ID:nMyRbz+O
PowerCLIの話ってここでいいのかな
モジュールコマンドレットの引数ってとう調べればいいんだろ
2021/06/11(金) 17:03:16.40ID:iy4yRVw6
すんません自己解決です。
Module内のpsm1ファイルとかにありました。
2021/06/15(火) 11:09:45.95ID:vhbon9Jn
スクリプト、シェル関数、フィルター、モジュール等々
コメントや引数からのヘルプ生成いいよね、(MSサイトのアヤシイ自動翻訳と比べれば)割と読める
ghできてびっくりした
2021/06/15(火) 22:37:29.05ID:sMCwQ3p2
powershellなかったらWindows10嫌いになってた
まあ嫌いだけど
2021/06/15(火) 23:16:19.96ID:tENeeutP
昔からあるがな
2021/06/16(水) 08:41:42.53ID:tdb40TiY
スマホでPowerShell使いたい人っているの?

Distribution Support Request: PowerShell for Android
https://github.com/PowerShell/PowerShell/issues/15556
Distribution Support Request: PowerShell for iOS
https://github.com/PowerShell/PowerShell/issues/15563
2021/06/16(水) 08:50:31.44ID:drc75L4c
ぶっちゃけplaystoreで何回も検索してるけど引っかからなくて悲しんでる
about_*をブラウザで読んでた方が百倍マシな紙芝居チュートリアルみたいのは存在してる(検索ノイズ)

アンドロの採用してるmkshへのインターフェイス提供するアプリは、個人投稿ぽいのがいっぱい出てくるんだけども…
2021/06/16(水) 08:54:13.04ID:drc75L4c
携帯端末で特に何がしたいって訳でもないけど、思い付きのアイデアを手軽にインタプリタで検証したい時は割とある
野良でもいいけど、公式から出るんならなおさら嬉しい
2021/06/16(水) 09:09:48.51ID:drc75L4c
色々電卓代わりのインタプリタ試したけど、今のところgforthが最良
ソフトキーボードと喧嘩しないし、pc版と同じヘルプ補完を提供してるいいもの
ただ言語コアが小さいので、そのままでは四則くらいしかできない

一般的な言語は()を行き戻りするのが辛い、数学関数揃ってるRPN/コマンド言語が求められる

[math]::funcとか手軽に引けるだろうことは嬉しい
RPN言語側での候補は数学関数揃ってるpost/ghostscriptだけど、これもrepl移植が見つからない、悲しい
2021/06/16(水) 09:22:11.80ID:drc75L4c
式を置き去り(最初のワードがコマンドでない場合)にしたら勝手に評価して表示してくれるのもいいね
10Kをintと解釈してくれるような、かわいい機能群も生きそう
スマホ関数電卓界のホープになれる
2021/06/16(水) 09:32:04.79ID:XFhGw2Fv
(mk?)shへの対話モードはAndroidのネイティブシェルだから、ガワ被せるだけの野良実装が多いのは理解できるんだけど
入力が不便なスマホで一体何に使うのな気になってる、やけにダウンロード数多いし
マゾいexprで電卓したり、まさかスクリプティングするわけでもなかろうに
2021/06/16(水) 10:03:11.27ID:drc75L4c
unixの伝統的な外部コマンドはアンドロイドにはあんまり入ってなかったはず
別途入れるかバンドルされてるのを探すかしなければならないけど、bcやimagemagikを(多分)叩けるのは有意義だと思う
まあそれ以外の用途は浮かばないけど、広告まみれの電卓/画像変換アプリ使うよりはずっと良さそう

ちょっと試してみるかな
2021/06/16(水) 10:39:58.25ID:4tVAxrDR
携帯端末でshを使う需要でとりあえず思いつくのは
httpクライアントでエロ画像根こそぎ落としたり
出先からPCやサーバが仕事してるかsshクライアントで確認&ジョブ投げたり?

とりあえずロートルでも単純なコマンドさえ発行できれば十分なのでは
pwsh(android/ios)にはそれ以上を期待したいけど
2021/06/16(水) 11:36:53.15ID:drc75L4c
携帯デバイス上のsshデフォルトシェルに便利な気がする
動的に画面に合わせたビューが提供できるのが活きそう

確かにソフトキーで一行コマンド送るならshを設定しても大して変わらないけど、
大きいディスプレイ向けにハードコードされたunix/winコマンドの出力なんてスマホやタブで読めたもんじゃない

逆にデフォルトで簡潔なビュー(.ps1xml)が同梱されないなら、多分俺は電卓としてしか使わないわ
2021/06/16(水) 11:39:42.68ID:MMsGiHbd
>>367
PSは.NETやWin32API呼び出しとC#が使えるのが肝だからなあ
スマホじゃ適当なシェルでいいんじゃないか
PSのパイプとか遅いだけだし
2021/06/16(水) 12:11:49.40ID:1tyDQMTR
.netアプリなんてapple/play storeに溢れてるのでは?
と思ってたらこれ、ランタイム方式じゃないのね…

iOS/Androidの.net(monoやxamarin)は、必要なコードだけ抽出し.apk等にコンパイルされているようで
粗末な出来なのに~50MBくらいある奴が典型的
明らかにxamarin, monoのランタイム(~100MB以下)を共有した方が経済的だと思うんだけど、何か大人の事情があるのだろうか
2021/06/16(水) 12:16:49.70ID:iyOIJAkk
別にスマホのシス管するわけでもなし、xamarinやmonoから必要なAPI引いて自己完結なポートでもいいと思うけどね
2021/06/16(水) 12:37:37.60ID:drc75L4c
>>367
5日放置かー、あんまり興味ないのかね

モバイル疎いのでmono, xamarinはよく分からんけど、とりあえず.net coreもiOS, Androidサポートしてるようす
https://github.com/dotnet/core/blob/main/release-notes/6.0/supported-os.md

.net実装少なくなったね
monoもxamarinも買収で半分MS公式だし、コードベースもほぼほぼ共有しちゃってるし
野良実装がわらわら溢れてた時期は、これからは.netという安心感があったなぁ
2021/06/16(水) 12:38:42.86ID:drc75L4c
asp coreわすれてた
2021/06/16(水) 12:42:45.75ID:McZtCmJH
実用性よりもCore系なら移植性抜群ですよっていうデモ的な意味合いが大きい気がする
2021/06/16(水) 12:49:41.03ID:drc75L4c
そうだね、ぶっちゃけ知らなかったし
一応遊んでみようと思う
2021/06/16(水) 13:00:48.00ID:V4BV8dHx
MS公式、準公式で少なくとも4つ実装がある意義とは
野良実装の存在は健全な発展に必須だろうに、なぜ淘汰してしまったのか
2021/06/16(水) 13:59:07.75ID:MMsGiHbd
スマホにドトネトて、既にあるラッパーのラッパーを作ることに相当するよね
スマホのアップデートなんて限定的だし定期的に買い換えても機種が違えば中身もゴッソリ変ってるし
どうせroot化でもしない限り大した事できないしあんま深く知りたいわけでもない
automateみたいな事が普通にできれば十分かな
2021/06/16(水) 14:59:31.40ID:mh5WwISX
なんでスマホでやらなあかんねん
という部分がまずクリアできない
2021/06/16(水) 15:07:02.37ID:drc75L4c
ちょっと気付くの遅いけど、まだスレで言及されてないようなので

8 Apr commit
" Vim filetype plugin file
" Language: Windows PowerShell

https://github.com/vim/vim/blob/master/runtime/ftplugin/ps1.vim
https://github.com/vim/vim/blob/master/runtime/syntax/ps1.vim
etc

まあ俺が使ってたhttps://github.com/PProvost/vim-ps1を公式がマージしただけなんだが
やはり嬉しいものだ
2021/06/16(水) 15:23:11.73ID:drc75L4c
本当に最低限のサポートだけど
vimの補完関数に外部コマンドとしてpsreadlineの晒してるAPIを指定するだけで、replと同等の編集ができるよ
(about_PSReadlineとかそんな感じの参照)
2021/06/16(水) 16:01:42.73ID:OMTSZTs5
MSのサイトでPowerShellのlsp書式(VSCodeのプラグイン形式)公開してるから、vimのlspサーバ付きビルドなら標準でVSCode同等機能で書けるよ

PSReadlineのバックエンドも多分これだし、間接的には同じことかも?
あくまでライン編集用なので、まだ保存してない定義参照など文脈読むのはvim担当になる
ただしパスにカレントディレクトリを加えておけば、保存した時点でのパラメータ等はPSReadlineが勝手に読んで候補に加えてくれるから、暗黙のうちに候補に加わる
ちょっと複雑だな

もしかするとロースペックだとラグいかも
外部呼び出しはブロックするし、キャッシュの存在し得ないファイル(現在編集中)を読むので…

何もインストールしなくていい手軽さと、自動でget-helpする小窓を常時表示したり、カスタマイズ性の高いvimからPSReadlineを呼びだしを推したい
2021/06/16(水) 19:31:22.10ID:VY79GhSm
ブラックボックスなプラグインをぶちこむ
うごけばいいんだよ
2021/06/17(木) 08:03:45.47ID:dBxnMxux
Preview updating PowerShell 7.2 with Microsoft Update
https://devblogs.microsoft.com/powershell/preview-updating-powershell-7-2-with-microsoft-update/
2021/06/20(日) 23:45:59.70ID:x08lLT64
2exeが仕事で役に立ったわ
exeじゃないとアイコン設定できなかったりするから必須機能だな
2021/06/21(月) 19:28:55.69ID:zJyyyGxF
7.2に上げたついでにinstall-module PSReadline -AllowPreview -force的な事したらコケたわ(2.2
replに入るとPSReadlineが死ぬ
レポジトリの会話見ると7.2で結構変更あるのでまだ2.2で対応してないと
pwsh -noni -nop -c '&{uninstall-module PSReadline}'的なのをcmdから打ってちゃんと最新が消えて2.1にロールバック、問題なし

迂闊なアップデきよつける
2021/06/21(月) 22:13:51.12ID:zJyyyGxF
>>390
Windows Updateに乗(せられ)るのね、ちょうど上の方で話題になっててタイムリー?
2021/06/22(火) 11:36:31.82ID:pmPJw99A
>>357
-[not]match, -[e|c]replace の右辺(パターン)も`にして欲しかったわ
winのパスの'path\to\somewhere'がめんどくさい
[regex]::escape メソッドが用意されてるけど、メタ文字っぽいの全部エスケープしちゃうので
先頭アンカーの^をメタ文字にするときは
'^' + escape('path\to\somewhere')
なんか汚い…
.もパスによく出てくるので面倒

いい書き方ないかな?
2021/06/22(火) 14:32:20.14ID:dyR+eSpW
pwshからドトネトも学ぼうとsdk入れたら500MBも吸われてしまった…
F#を恥ずかしながら知らなかったんだかど、MLとC#を悪魔合体したみたいで面白いねこれ
ps1内でおもむろに
Add-Type ... @'
F#スニペット
'@
と書いてすぐ走る利便性すごい

けどやっぱりsdkがでかい…
複数言語の処理系入ってると思えばでかくないかもしれないけど

でかい
2021/06/22(火) 14:51:05.02ID:xDMJNZcH
ヒアストリングはエディタに文字列扱いされてハイライトも補完も効かないので分けてGet-Contentしてる
ソラで書ける程度ならいいけど
2021/06/22(火) 17:18:07.98ID:WY3z1yEU
いいと思うよ
大体の人は1ファイルに収めたいからヒアドキュメント使うわけで
2021/06/22(火) 18:07:25.83ID:RxGUKVcL
>>395
F#登場時に『OCamlを参考にした』ってよく紹介されてて、それで初めてMLの存在を知ったわ
F#走らせるだけならSDKまでいれなくてもF#のランタイムだけで動作するはず
pwshオンリーの環境で試したこと無いから、だめかもしれんけど
でも、add-typeしてF#動かせるならf#スクリプトも動くと思うんでpwsh経由にする必要ないんでわ?
2021/06/22(火) 19:04:57.19ID:pmPJw99A
F#は見た目キレイなocamlで好きだよ、;で諦めた

インラインは読み込み時に都度メモリ上にコンパイルするので、初読み込み時のオーバーヘッドはあるかと
まあdllやら作り直すより楽なので、困るまではインラインでいい
なんなら@"で文字列補間できるしな
2021/06/22(火) 19:55:16.74ID:G2b0CX3R
遊ぶくらいだけど困ったらpwshで生やせるメンバをニョキっとできるしな
公式サイト見るとdiscouraged styleだけど
ドマイナー言語だけど入門にはちょうどいいかも
2021/06/25(金) 14:50:04.75ID:yduSg49I
今のところPowerShell7+をWindows11に標準搭載する予定はない
.NETのサポート期間の短さが問題になっている

https://twitter.com/natiTDD/status/1408114326137982986
https://twitter.com/Steve_MSFT/status/1408135314464378883
https://twitter.com/5chan_nel (5ch newer account)
2021/06/25(金) 16:13:53.08ID:X/DsUG+x
some ideasとはなんぞ。
2021/06/25(金) 17:07:37.16ID:czBKz/U/
>>402
期待したい
2021/06/25(金) 20:51:38.19ID:DaFL93KC
function ConvertTo-Hoge($source) {
Write-Output '次のファイルたちに対して処理を実行します。'
Get-ChildItem -Path $source -Recurse
# 外部コマンドによる処理。
hoge.exe $source
}
ConvertTo-Hoge 'c:\data\source.txt'

上記のコード内のGet-ChildItemで取得されるのは、引数として指定した
 c:\data\source.txt
だけと想定していましたが、実際は、
 c:\data\SUB_FOLDER\source.txt
といったサブディレクトリ内の同名ファイルも取得されてしまいます。
ファイルを指定した場合は-Recurseパラメータが無視されると勝手に思い込んでいたので、
こういうかたちで再帰的な取得をするのは面食らいました。

ファイルを指定した場合に再帰取得を抑制する方法はないでしょうか。
'c:\data\' や 'c:\data\*' といったパスを渡すケースもあるので
-Recurseパラメータを外したり、-Pathを-LiteralPathに換えるわけにはいかないです。
2021/06/25(金) 21:15:44.26ID:RnIW6d/1
Powershellのコマンドレットにはあまり期待するな
2021/06/25(金) 22:33:40.40ID:gHkCbSTz
>>404
当たり前でしょ
c:\data\source.txt がファイルかどうかは調べるまでわからないんだし
そもそもc:\data\source.txtがなくてc:\data\SUB_FOLDER\source.txtがあるならc:\data\SUB_FOLDER\source.txtは欲しいんでしょ?

> ファイルを指定した場合に再帰取得を抑制する方法はないでしょうか。
指定したのがファイルなら-Recurse外せばいいだけじゃないの?
2021/06/25(金) 23:34:28.71ID:DaFL93KC
>>405
そんなあ…。
>>406
ありがとうございます。
Get-ChildItemの前に検査するしかないんですね。
なお、c:\data\source.txt も c:\data\SUB_FOLDER\source.txt も両方存在しています。
Get-ChildItem -Recurse で両方を取得してしまいますが
SUB_FOLDERの方は処理から除外したいやつで欲しくないのです。
2021/06/26(土) 04:19:56.86ID:SGwHfoMZ
Get-ChildItemのオプションは沢山あるからよく調べて除外指定すりゃいいし
パイプでWhere-Objectに渡して要らないのをフィルタするという手もある
409デフォルトの名無しさん
垢版 |
2021/06/26(土) 08:07:50.32ID:PnU/npNW
$a = @(Get-ChildItem -Path $source -Recurse)
$target = if ( $a[0].Name -eq $source ) { $a[0] } else { $a }

するぐらいかなぁ
要件満たせてるのかわかんないけど
2021/06/26(土) 08:10:50.49ID:W7G/Wq0v
Get-ChildItemのオプションで除外するかWhere-Objectでフィルタか
両者にはどんな得意不得意があるの?
411404
垢版 |
2021/06/26(土) 10:25:46.45ID:hFKbHeBr
>>408
自分が理解できる範囲でオプションを組み合わせてもうまくいかなかったのですが、
そういえばパスに*が含まれる場合は-Path、そうじゃない場合は-LiteralPathにすれば
想定する動作になるのかなと思いました。
コードが手元にないのであとでやってみます。
Where-Objectに渡すのは、すみません今回の場合にどうフィルタするのか想像つきません。
どうもありがとうございます。

>>409
これでうまくいきそうに思います。
*の有無で分岐するのと両方を試してみたいと思います。
どうもありがとうございます。
2021/06/26(土) 10:58:10.50ID:XYwUNHu1
>>411
こんな感じでよくない?
Get-ChildItem -Path $source -Recurse:(Test-Path $source -PathType Container)

hoge.exe の仕様にもよるけれど、-File とかも指定しないと変かも。
413404
垢版 |
2021/06/26(土) 11:51:34.42ID:hFKbHeBr
>>412
こういった、パラメータの後ろに:をつけてオンオフを切り替える書き方を知りませんでした。
この方法でもできそうなので試してみます。
勉強になります。
どうもありがとうございます。
2021/06/26(土) 14:42:37.37ID:+oUd2Rws
>>412
$sourceにワイルドカード含まれてたら意図した動作にならないかと思ったけど、そんなことない?
2021/06/26(土) 17:37:56.83ID:+oUd2Rws
>>411
ワイルドカードが含まれない場合でもフォルダー指定ならrecurseが必要なんじゃない?
■ このスレッドは過去ログ倉庫に格納されています