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(水) 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が必要なんじゃない?
2021/06/26(土) 18:15:40.91ID:SGwHfoMZ
そもそも >>404 で無条件にgciに渡してるとこからおかしいと思う
1. まず$sourceにワイルドカード文字が入ってるかどうかを判定する $source -match "[\*\?]"
2. 次にディレクトリ指定かを判定する Test-Path $source -PathType Container
3. そうでないならファイル指定かを判定 Test-Path $source -PathType Leaf
4. これ以外はエラーとする

1と2のケースならgciに掛けて除外したいものをWhere-Objectでフィルタしながら処理する
gci $source -recurse | ?{ $_.FullName -notlike "*SUB_FOLDER*" } | %{ hoge.exe $_.FullName }
3ならそのまま処理する hoge.exe $source
自分ならこんな感じで書くかな
417404
垢版 |
2021/06/26(土) 18:28:02.03ID:hFKbHeBr
>>416
そうですね・・・。
*(ワイルドカード)の有無で分岐する場合は、
Get-ChildItem -Path $source -Recurse #ワイルドカードあり

Get-ChildItem -LiteralPath $source -Recurse #ワイルドカードなし
というふうに両方に-Recurseをつければいいと思いますが、
-Recurseをオフにしちゃうとたぶん想定と違う挙動になりますね・・・。
実際のコードで検証してみます。
ありがとうございます。
418404
垢版 |
2021/06/26(土) 18:42:17.36ID:hFKbHeBr
リロードしてませんでした…。

>>416
想定外の文字列が渡されたケースなどを何も想定せずにいました…。

hoge.exeの引数は、ファイル1個でも、スペース区切りの複数ファイルでも、
フォルダでもワイルドカード付きでも受け取ってくれて処理してくれるのですが、
具体的にどのファイルに対して処理されたのか不安な時があるので
gciによりプロンプト上で確認したいというのが>>404のコードの意図なのですが、
よく考えたらgciの結果と、hoge.exeが処理するファイルが同じになるとは限らないので
筋の悪いことをしていたような気がしてきました。
2021/06/26(土) 19:19:36.00ID:+oUd2Rws
409ので最初のgciにfileオプション付けたらやりたいことできてない?
420404
垢版 |
2021/06/26(土) 20:40:31.67ID:hFKbHeBr
>>419
自宅のPCでやってみたらうまく行かなかったですが(再帰的に取得されてしまう)、
うろ覚えの再現をして何か間違っているかもしれないので、週明けに実際のコードで試してみます。
ありがとうございます。
421409
垢版 |
2021/06/27(日) 00:14:38.21ID:3ZU8XSDE
$sourceがファイル名でなくパス指定だとうまくいかないので

$a = @(Get-ChildItem $source -Recurse -File)
$target = if ( $a[0].Name -eq (Split-Path $source -Leaf) ) { $a[0] } else { $a }

とすべきでした
2021/06/27(日) 17:52:13.26ID:CXPSOiIf
.ps1スクリプトをタスクバーにピン留めして実行たいのですが皆さんどうしてますか
2021/06/27(日) 18:59:55.50ID:4zcgZlyh
ファイラー使ってるなぁ
2021/06/27(日) 19:52:40.86ID:VoyuuGop
>>422
引数付きのpowershell.exeショートカット作ってピン留めしたら?
2021/06/27(日) 20:14:26.80ID:tkVDl+qA
漏れは、デスクトップにショートカットを作る

例えば、WSL2, Ubuntu 18.04 を起動して、
作業フォルダを、Linux 側にあるプロジェクトフォルダに移動してから、
VSCode で、そこを開く

リンク先
C:\Windows\System32\wsl.exe code .

作業フォルダ
\\wsl$\Ubuntu-18.04\home\ユーザー名\proj01
426422
垢版 |
2021/06/28(月) 20:14:33.38ID:3DnBzo4y
>>424
「powershell.exe」でショートカット作成
引数を追加
タスクバーにピン留め
でいけました
ありがとうございます!
2021/07/05(月) 19:41:53.00ID:7JzKdw7c
Windows11入れたけど、PowerShellのバージョンが7.0.0-preview.3になってる
5.1も5.1.22000.1として使える
2021/07/05(月) 20:44:48.06ID:jxTbEq2m
おー、やっぱOS同梱するんだ
ライフサイクルの違いをどう吸収するのか興味深々
429デフォルトの名無しさん
垢版 |
2021/07/08(木) 20:38:28.01ID:zLx0Zsbg
>>387
想像つかない…どんな書き方なのか教えてもらえませんか?
2021/07/09(金) 01:47:38.94ID:iwqakx4X
>>428
Powershell7は.Netごと自動更新にするんじゃね
仕様が変わっちゃいけない用途はPowershell5.1で
2021/07/10(土) 15:14:28.43ID:wJrCg/wx
こっちの環境だとPowershell7はインストールされてないな
5.1.22000.1はインストールされてるけど
2021/07/18(日) 10:38:35.13ID:2Hl3gQcn
11出るのかよ
ずっと10でアップデしそうだから安心と思って10のライセンス買ってしまったぞ
2021/07/18(日) 10:47:51.10ID:/77lPQJR
無償アップグレードのはず
2021/07/18(日) 10:54:20.96ID:YpvM2GEz
>>433
サンキュー、出てるの全く知らなかった…
昔は新バージョン出る時アキバの行列報道とかあったけど、テレビも(AFAIK)無反応だな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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