X

PowerShell -Part 5

レス数が1000を超えています。これ以上書き込みはできません。
2021/03/18(木) 00:29:52.04ID:/MpReTiX
前スレ
PowerShell -Part 4
https://mevius.5ch.net/test/read.cgi/tech/1577862511/

次スレは>>980が立ててね!!
2021/03/18(木) 01:54:43.20ID:KHyuuwNF
echo 保守しとくけど多分朝には落ちてる
2021/03/18(木) 02:11:36.48ID:LDDTgdRP
>>1
おつ
2021/03/18(木) 02:41:58.78ID:k7pgRAR8
パワー
2021/03/18(木) 12:05:10.24ID:t06qOp3P
パイプやリダイレクトが微妙
結局 cmd /C を使うはめに
2021/03/18(木) 14:38:25.42ID:CPg6C46D
Call native operator #13068
https://github.com/PowerShell/PowerShell/issues/13068
2021/03/18(木) 15:14:55.38ID:6Ys2lBRM
未経験新卒で入社してからLinux関連の開発しかしてこなかった俺がふとpowershellの勉強始めてるんだが、なかなか慣れんわ
まあ出来ることから地道に使い込んでいくしかないか…
2021/03/18(木) 16:29:17.47ID:7c+GTWi3
あるオブジェクトのプロパティ(数や名前は不明)を全て取得して
別に新規作成するPScustomObjectのプロパティとして設定したいのですか
どのようにすれば実現出来ますでしょうか?
2021/03/18(木) 16:30:46.69ID:7c+GTWi3
補足です。
あるオブジェクトのプロパティの値は必要ありません。
新しいPScustomObjectのプロパティの値は別のものをセットします。
2021/03/18(木) 17:04:09.34ID:5geAwNmp
get-memberでプロパティでフィルタしてadd-memberかな?
2021/03/18(木) 17:40:50.17ID:Zj9YO3RT
アナル。
後からオブジェクト追加ですね。
初心者なのでPScustomObject作成時にプロパティ指定しか頭になかったです。
サンクソ。
2021/03/19(金) 04:00:45.99ID:RMQx/osX
>>7
linuxだけど俺も周りもPowerShellしか使ってねえわ
2021/03/19(金) 04:02:37.40ID:RMQx/osX
まあ部署で統一図ったってだけだけどな
linuxのログインシェルにPowerShellはまだまだマイノリティ
2021/03/19(金) 09:44:27.09ID:ubz8QMhD
Select-Objectでプロパティを取り出す際に@{name=〜;expession={〜}}
って指定方法があると思いますが、
@data=@{"key1"=@(1,2);"key2"=@(3,4)}
という配列を値に持つハッシュ@dataから
1,3;2,4
と言う風にデータを取り出したいのですが
(各配列の要素0から順番に)

@data|Select-Object @{name="out";expession={ ($_.key1 + "," + $_.key2) -join ";"}}
だと
1;2;,;3;4
になってしまいます。

1,3;2,4
と取り出すにはどうすれば良いでしょうか?
2021/03/19(金) 09:45:14.92ID:ubz8QMhD
訂正
@data は $data の間違いです。
2021/03/19(金) 14:52:27.90ID:z8FPp2cZ
$data|Select-Object @{name="out";expression={ ($_.key1 -join ",") + ";" + ($_.key2 -join ",") }}


配列の加算
https://docs.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/everything-about-arrays#array-addition
2021/03/19(金) 17:10:06.64ID:Lmt+5Mde
>>16
う〜ん。これだと
1,2;3,4
と出力されてしまいます。

説明が悪かったです。
配列毎に順番に出力ではなく、
全配列の若い要素から順番に出力です。

配列Aの要素0,配列Bの要素0;
配列Aの要素1,配列Bの要素1;
配列Aの要素2,配列Bの要素2;



と言うふうに、
$dataの場合は
1,3;2,4
と出力したいのです。
2021/03/19(金) 17:23:02.60ID:e41Lj/Gw
スクリプト内の、Start-Processで起動したプロセスが、「別の」プロセスを起動します。
この「別の」プロセスのPIDを取るに、確実性のある方法ってありますでしょうか。

具体的に申し上げますと、TeratTermマクロの実行ファイル(以下、ttpmacro.exe)を、Start-Processで呼び出すと
ttpmacro.exeが、Teraterm本体を呼び出します。

以下の、@でttpmacro.exeのPIDは取れるのですが、ttpmacro.exeが呼び出した
Teraterm本体のPIDは取れません。

現状Aの方法、ttpmacro.exeをStart-Processで起動→3秒待ち(起動待ち)→Get-Processで最新のTeraterm本体のPIDを取る
で間に合ってはいるのですが、不確実性があります。

これの対処に、確実性のある方法があったら教えてください。

Get-ProcessのStart-Timeが〇秒以内の場合〜というのも考えたんですが、
やっぱり不確実があるのでまだ導入はしてません。

よろしくお願いいたします。

以下ソースコード一部抜粋しました。ご参照ください。

$ttl_macro=Teratemマクロのファイルパス
$ttpm_bin="C:\Program Files (x86)\teraterm\ttpmacro.exe"

@$ttl_pid=(Start-Process -PassThru -FilePath $ttpm_bin -ArgumentList "/V $ttl_macro $log_full_path")

sleep 3 #Teraterm本体の起動待ち用。

A$ttp_pid=((Get-Process -name "ttermpro") | Select-Object id,StartTime,name | Sort-Object -Property Starttime | Select-Object -Last 1)
2021/03/19(金) 17:37:54.61ID:jH8qf1vo
>>17
Keyは固定でいいのね
なら
($data.Key1.GetLowerBound(0) .. $data.Key1.GetUpperBound(0) | %{ $data.Key1[$_], $data.Key2[$_] -join ',' }) -join ';'
でいいかと
2021/03/19(金) 17:48:29.69ID:eKviOhZZ
>>19
て、天才か…!?
ありがとうございます。m(_ _)m

しかし、書いてる内容がわからん過ぎて自分で応用出来そうにないな…
2021/03/19(金) 18:11:41.22ID:jH8qf1vo
>>20
要するに配列の添字を0, 1, 2, ...のように変えながら
$data.Key1[添字], $data.Key2[添字] -join ','
を実行してそれらを ';' で繋いでるだけ
2021/03/19(金) 18:53:58.30ID:qinkf1Gp
>>18
そういう場合小プロセスのppidを調べる
下のコードは未確認
Get-CimInstance Win32_Process -Filter "ParentProcessId = $pid"
2021/03/20(土) 01:13:04.71ID:jX8BSYxa
>>22
ありがとうございます。
超絶ばっちり拾えました。

Get-CimInstance
これいろいろ拾えるみたいですんごい便利そうですね。
ありがとうございました。
2021/03/20(土) 14:13:24.65ID:n5hjp+Ey
いえいえ
25デフォルトの名無しさん
垢版 |
2021/03/20(土) 14:57:52.11ID:Af+N2/eO
Windows Terminal について質問、コンソールウィンドウをキーボード操作で編集モードにする方法ってある?
PowerShellでできそうかな?
2021/03/20(土) 15:52:35.96ID:IyzEzHor
>>14
Ruby で作った

hash = { 1 => [ 11, 12, 13 ], 2 => [ 21, 22, 23 ] }

# zip で、行列の転置・transpose で、
# 2次元配列・[[11, 21], [12, 22], [13, 23]]

result = hash[ 1 ].zip( hash[ 2 ] ).
map{ |ary| ary.join( "," ) }.join( ";" )

puts result #=> 11,21;12,22;13,23
2021/03/21(日) 09:27:35.68ID:smBpkDl7
サーバ運用などにpowershellのおすすめの参考書教えてください
プログラムの基礎的な内容はおさえていて、vbsで簡単なスクリプトは作れるレベルです。
2021/03/21(日) 09:58:35.32ID:+Ri9vB82
今のPowerShellって実は既に非推奨なんで、MSの方針に従うなら今出ている参考書はほとんどお勧めできないってことになる
最新のPowerShell Coreについてはまあ参考書はほとんどなくて、ググってみりゃわかるがお勧め以前に参考書は国内では一つしか出ていないから選択の余地はない
2021/03/21(日) 10:31:27.07ID:Duyg5pmm
pwsh(core)ってやつ
チュートリアルならMSのサイト、get-helpでunix系のman相当のマニュアル読める
結構快適だよ
2021/03/21(日) 11:20:17.33ID:zQZFaxjB
でもわざわざpsの最新版入れ直す所なんて希だから知ってて損はない
2021/03/21(日) 14:34:20.67ID:Vq6bDiDx
Windows PowerShell実践システム管理ガイド 第3版
https://shop.nikkeibp.co.jp/front/commodity/0000/P53610/
Office 365管理者のための逆引きPowerShellハンドブック
https://www.nikkeibp.co.jp/atclpubmkt/book/18/P53740/
ネットワーク管理に使うWMI―PowerShellによるWindowsマシン管理
https://www.cutt.co.jp/book/978-4-87783-363-3.html
2021/03/22(月) 08:28:30.57ID:4wth7cze
ありがとうございます
今過渡期なんですね
Windows Server2012R2とかまだ使っているので
coreはまだ早い気がしました。
2021/03/22(月) 14:44:54.86ID:SMRpwF7a
PowerShellによるWindowsサーバ管理術
https://www.sbcr.jp/product/4797350180/
2021/03/23(火) 08:58:24.17ID:8+XYsK7R
いまだに関数の書き方が覚束ない
制約みたいなやつ
2021/03/23(火) 09:22:40.57ID:JJxzU/30
基本知識はPowerShell7系とWindows PowerShell(Ver5.1)は一緒だから若干古い書籍でも役に立つ
PowerShell6以降の機能は別で勉強すればいい
それにPowerShell7で5系との互換性はかなり良いから上記資料で役に立ちそう
過渡期でも勉強しといて損は無い
2021/03/23(火) 13:24:21.91ID:5uqNZIW5
>>34
他人の作ってくれた関数をコピペして、少しずつ変えながら色々試せばいい
2021/03/24(水) 19:11:26.80ID:uucEMUEW
Get-ChildItemで得た音声ファイルのオブジェクトに
  Get-ChildItemが返したオブジェクト
  ├Name(ファイル名)
  ├FullName(フルパス名)
   :
  └Audio(追加の音声プロパティオブジェクト)
   ├Channels(2とか6とか)
   ├SampleRate(44100とか96000とか)
    :
って感じで音声プロパティを追加して
  Get-ChildItem audio.flac | Add-AudioProp | Format-Table -Property Name や
  (Get-ChildItem audio.flac | Add-AudioProp).Audio | Format-Table -Property SampleRate,Channels
なんかはうまく行くんだけど
  Get-ChildItem audio.flac | Add-AudioProp | Format-Table -Property Name,SampleRate
みたいにオブジェクトをまたがる表示ができない。どうすりゃいいん(´・ω・`)
追加の音声プロパティをName,FullNameなんかとベタに並べるしかないんですかね
2021/03/24(水) 21:35:32.59ID:ilsWDePV
Get-ChildItem audio.flac | Add-AudioProp | Format-Table -Property Name,@{n="SampleRate";e={$_.Audio.SampleRate}}
2021/03/25(木) 02:25:42.71ID:4SLhQZZk
>>38
バッチリです!ヘルプにある
> 集計プロパティを作成するには、ハッシュ テーブルを使用します。有効なキーは次のとおりです。
ってこれの事だったのかぁ。nとかeってNameやExpressionの頭文字ですよね。頭1文字でもいいのか…
力技で一オブジェクトに集めるパイプ関数挟んでしのいでたけど取り外す事ができました
2021/03/25(木) 08:55:03.92ID:xal9z6Jt
About calculated properties
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_calculated_properties

The hashtable keys need not be spelled out as long as the specified name prefix is unambiguous.
For example, n can be used in lieu of Name and e can be used in lieu of Expression.
2021/03/25(木) 09:34:11.49ID:Ci3DTkl1
>>38
それって最後は
ft Name,Audio.SampleRate
じゃだめなの?
省略表現て意味じゃなくてAudio.SampleRateプロパティでなら取得出来るって意味で
2021/03/25(木) 18:33:30.59ID:4SLhQZZk
>>41
Audio.SampleRate ←値が空。"Audio.SampleRate"って名前のプロパティ探そうとして失敗か
Audio[SampleRate]やAudio["SampleRate"] ←値どころか項目名すら表に出てこない
$_下にないプロパティはハッシュテーブルで名前(任意のラベル名)と値を定義しないとダメっぽい
2021/03/25(木) 19:19:25.64ID:14yHEEO8
へー
2021/03/26(金) 17:33:31.93ID:4XawFn4z
外部コマンドの標準入力にバイナリファイル渡したいけどPowerShell直接はムリ?
2021/03/26(金) 20:10:55.77ID:yyPdQtcN
標準入力を受ける側が対応してればできるんじゃね
2021/03/26(金) 20:24:11.39ID:4XawFn4z
コマンドは対応してるけどPowerShellが受け付けてくれない

PowerShell> sox --info - < .\audio.flac
演算子 '<' は、今後の使用のために予約されています。

PowerShell> Invoke-Expression "sox --info - < .\audio.flac"
Invoke-Expression : 演算子 '<' は、今後の使用のために予約されています。

PowerShell> Get-Content .\audio.flac | sox --info -
(返ってこない。メモリ消費が物凄い事に。Ctrl+Cでは終われる。)

PowerShell> cmd /c sox --info - < .\audio.flac
演算子 '<' は、今後の使用のために予約されています。

PowerShell> sox --info - `< .\audio.flac
(外部コマンドから見たら"<"と".\audio.flac"の引数2つで標準入力にならない)

PowerShell> cmd /c sox --info - `< .\audio.flac
PowerShell> cmd /c "sox --info - < .\audio.flac"
→OK
2021/03/26(金) 20:43:07.66ID:CR/1QuGC
PowerShell関係なく、そもそも標準入出力ってバイナリデータ扱えるものなの?
2021/03/26(金) 20:45:38.66ID:MahXm1Ia
Start-Process -RedirectStandardInputでなんとかなんじゃね
2021/03/26(金) 21:15:57.38ID:MahXm1Ia
こんな感じか?試せる環境がないので分からん
Start-Process sox -ArgumentList "--info" -RedirectStandardInput ".\audio.flac"
2021/03/26(金) 21:18:29.13ID:SIEsHqNB
>>46
たまには頑張って調べてみた。

Get-Content .\0321.wav | sox --info -

soxコマンドはパス通してから、これで行けた。
2021/03/26(金) 21:22:13.21ID:SIEsHqNB
>>50
ダメだ、イケてない・・・
正しくわたってない、無かったことにしてください。
ごめんなさい。調子ぶっこきました。
2021/03/26(金) 21:27:33.53ID:dswi0/Vv
>>47
扱える
2021/03/26(金) 23:53:54.40ID:4XawFn4z
>>49
Start-Process sox -ArgumentList "--info","-" -RedirectStandardInput .\audio.flac
で実行できた。ただ、これだと別ウィンドウで実行されて(-Waitを付けても)すぐ消える
-NoNewWindow付けるとコンソール出力されて直接実行の目的は果たせた。ありがとう

ただ、別プロセスのせいか$capture = Start-Process .(ryで出力キャプチャできない
-RedirectStandardOutputでファイル出力はできるけど
出力キャプチャは今んとこcmd経由しか思いつかないな・・・

>>51
Get-Contentはファイル読んでPSオブジェクト作るからwavみたいな巨大ファイル喰わせると
消費メモリがとんでもない事になってよろしくないみたい。
command1 | comannd2でパイプで繋ぐのもそうなのかも(?)
PowerShell使い始めたばかりでまだ仕組みわかってないのでアレですが
2021/03/27(土) 09:30:15.39ID:9NUR6gaS
パワーシェルとWindowsバッチってどう違うの?
2021/03/27(土) 09:34:24.56ID:cvT0SSdW
異なるスクリプト言語
2021/03/27(土) 10:40:57.10ID:TlGVFU3L
PowerShellはシェル
バッチはコマンドを連続して実行すること
PowerShell上でバッチを動かすことも可能
2021/03/27(土) 20:22:03.71ID:uSYmOJju
powershellは起動時のロードがクソ遅いからログインスクリプトとかで迂闊に使えない
vbsとバッチは相変わらず超速
58デフォルトの名無しさん
垢版 |
2021/03/27(土) 21:16:23.22ID:17oRwajB
1000台規模のネットブートシステムでスタートアップ・ログオンスクリプト共々PowerShellで組んでるけど遅いときなんて一度も無いな
PowerShellの起動が遅いと感じたのはWindows7の頃が最後だな
2021/03/27(土) 21:51:02.28ID:XCgMDSTR
そりゃそんなんじゃ起動の遅さなんて気にならんだろ。
2021/03/27(土) 21:52:07.31ID:c8B2TB9l
遅い(ストレージがHDD)
2021/03/28(日) 09:17:08.07ID:bwt8R5Sf
>>53
PowerShell Teamのブログに今月こんなのが出た

PowerShell Team 2021 Investments
https://devblogs.microsoft.com/powershell/powershell-team-2021-investments/

この中に

Improve native command experience
One of the goals of PowerShell 7.1 was to improve the shell experience. This includes using native commands within PowerShell more intuitively like other shells.

って節があるのだけど、そこで挙げてる3項目の一つが

PowerShell currently treats all output from native commands as text. This means that binary output from commands is converted to text, resulting in data loss, even if the intent is to redirect that output to a file or another command that accepts the binary output.

バイナリ出力が扱えるようになればバイナリ入力もできるようになるだろう
もしかすると年内に実現するかもしれない

やっと他のシェルを経由しなくてもすむようになる
それにしても今頃こんなところに手を入れるなんて遅すぎるとしか言いようがない
2021/03/28(日) 11:25:17.75ID:6r1EOw6A
カレントディレクトリにあるスクリプトファイルを
フルパスでなくファイル名だけ指定しても実行できないのはどうしてでしょうか?
2021/03/28(日) 11:35:58.09ID:WPyWLlG4
セキュリティ上の配慮だと初期バージョンの頃から明言されていた
2021/03/28(日) 11:58:30.02ID:G6KSiarP
linuxやって検索パスにカレントディレクトリ"."を入れてないと実行出来へんので違和感無し。

検索パスにカレントディレクトリを含めるのはセキュリティ上非推奨やしな。
2021/03/28(日) 12:14:42.01ID:6r1EOw6A
ありがとう

なんとかマイクロソフトのページ検索できた
確かにセキュリティの機能としてそうなってるって書いてた
2021/03/28(日) 12:24:21.92ID:qLGWMSxC
まぁフルパスやなくて相対パスでええしな。
2021/03/28(日) 12:29:47.73ID:wpKLokvI
>>58
> 1000台規模のネットブートシステム

これってWindowsをディスクレスでネットワークブートできるってこと?
2021/03/28(日) 14:06:49.10ID:NjmNZXxg
#!/usr/bin/env ruby

puts RUBY_VERSION #=> 2.6.6

Linux でも、こういう内容の、a.rb ファイルを作って、
a.rb と実行してもエラー。
そもそも、bash で入力補完もできないし

./a.rb なら実行できるし、
./a と打っても、入力補完も働く

シバンに、/usr/bin/ruby ではなく、env を使っているのは、
anyenv/rbenv で、複数のバージョンを切り替えているため、
/usr/bin/ruby は存在しない
2021/03/28(日) 15:12:05.97ID:xIH5FjVn
PowerShellだろうがbashだろうがzshだろうがtcshだろうが
コマンドの検索パスに . が入っているかどうかだけの問題
入っていればカレントディレクトリの実行ファイルがパスなしで動く
PowerShellの場合でも$env:PATHに入れてやれば動く
入ってなくても動くcmd.exeとかcommand.comが特殊なだけ
2021/03/29(月) 00:14:19.86ID:AC49a7XE
$ping_result=(Test-Connection -count 2 8.8.8.8)
$ping_result #@

Source Destination IPV4Address IPV6Address Bytes Time(ms)
------ ----------- ----------- ----------- ----- --------
DESKTOP-E1... 8.8.8.8 8.8.4.4 32 3
DESKTOP-E1... 8.8.8.8 8.8.4.4 32 3

$proc_result=(Get-Process)
$proc_result #A

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
547 32 19840 10308 2.72 11144 1 ApplicationFrameHost
123 8 1564 1552 3404 0 armsvc

@とAの後ろに、| select-objectを付けると

 @は、TAB補完で IPV4Address、 IPV6Address だけが出てきます。
 Aは、Handles〜ProcessNameまで全部出てきます。

Get-memberしても、列タイトルと名前が一致しません。
例えば、$ping_resultのTime(ms) はReplyTimesという名前で値が入ってます

ほかのコマンドでもちらちらこういう、「コマンドレット実行したときに表示されるタイトルと、実際に.プロパティ名で取る際の名前が違う」
というのがあります。こういう違いって何か明確な区分けがあるんでしょうか?よろしくお願いいたします。
2021/03/29(月) 14:41:37.92ID:+vuzzbeH
出力の仕様は書式設定ファイルで定義されている
ファイルの中では表示したいプロパティの名前を指定してもいいし、結果を計算するスクリプトブロックを指定してもいい

about_Format.ps1xml
https://docs.microsoft.com/ja-jp/previous-versions/windows/powershell-scripting/hh847831(v=wps.640)
2021/03/30(火) 23:15:43.59ID:AnfR1yyf
無限ループにして走らせておきたいスクリプトがあって
コマンドプロンプトの画面で実行させてるけど邪魔
見えないようにして、かつ終了もさせられるようにするにはどうしたらいい?
2021/03/31(水) 00:36:37.55ID:bnFDknJn
よからぬ事に使う目的にしか見えない
2021/03/31(水) 09:05:46.55ID:Y3PcTBvP
>>72
タスクで別ユーザで実行させとけばいいんじゃね
2021/03/31(水) 09:38:27.22ID:YEibHbKm
ウィンドウの位置とサイズを固定させる用途だから、ユーザが自分でないと
2021/03/31(水) 10:00:59.54ID:gA7tKZjY
仮想デスクトップ分ければ?
2021/03/31(水) 10:10:11.65ID:YEibHbKm
仮想デスクトップでばっちり
2021/03/31(水) 15:09:07.56ID:GYCr8oLd
タスクトレイに常駐させるのがスマートだけど
それのイベント拾う非表示のウィンドウが必要なんだよな
作り方は他の言語と同じだから全省略するね
2021/03/31(水) 15:21:44.88ID:AtIsL56M
pwsh --helpで出てくる公知なことを隠す必要なんてないと思うが…

スクリプトの実行ポリシーはガッチガチだし、ドキュメントどころか--helpすら読まない奴はスクリプトキディにもなれんだろうから安心
2021/03/31(水) 23:05:55.25ID:M9w8Znx+
[System.DateTime]::Now.kind

@これを読むとすると
system.date.timeクラスの、nowメソッドのkindプロパティでいいでしょうか。
違ってたら読み方?教えてください

Aこういうのってどっかに一覧があるんでしょうか

Bこういうのを使うとPowershellらしい、新しい書き方になると思ってるんですが
実際の所はどうなんでしょうか?使う人のほうが少ないんしょうか。
例えば、[System.DateTime]::Nowであれば、Get-Date と同じものなので、
わざわざこういう書き方をしないで、コマンドレットの読みやすい表記を使う人のほうが多いんでしょうか
2021/03/31(水) 23:43:46.86ID:mCZD0Ait
>>80
System名前空間のDateTime構造体の静的Nowプロパティが返す(System.DateTime型の)オブジェクトのKindプロパティかな

https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime
2021/03/31(水) 23:59:39.51ID:XczoOgFc
構造体ってなんぞ?
2021/04/01(木) 00:23:39.07ID:PSFjtGJo
>>82
プロパティのみのクラスオブジェクトなんじゃね
2021/04/01(木) 00:38:41.91ID:u/4v0CTW
なるほどなるほど
2021/04/01(木) 04:57:15.84ID:xXKhkzDq
>>82-84
構造体にもメソッドあるぞ
クラスは参照型、構造体は値型
詳しくはWebで ⇒ https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/
86デフォルトの名無しさん
垢版 |
2021/04/01(木) 07:41:37.81ID:klwu+MWY
powershellのタブ補完はディレクトリ末尾にバックスラッシュを付与するので、多くのWin32アプリが引数をうまく受け取れないってのは既知?
2021/04/01(木) 19:32:54.94ID:T6HNdWih
スラッシュならともかくバックスラッシュなら処理できるんじゃね
2021/04/01(木) 20:43:50.58ID:M+/UvE/I
ディレクトリの場合は末尾にバックスラッシュ補完してくれるほうがありがたいが、
アプリは引数のディレクトリ末尾にバックスラッシュあるとうまく受け取れないん?
2021/04/01(木) 20:45:21.44ID:SMpNE7HF
あってもなくても正しく動くように全員が実装している必要がある
2021/04/03(土) 02:27:37.45ID:KxHmdFnt
職場でPowerShell書いたらバッチでいいと言われたよ
2021/04/03(土) 05:39:47.61ID:1anAZoL9
設定しないと動かないからな
92デフォルトの名無しさん
垢版 |
2021/04/03(土) 08:07:25.49ID:EzmFJzRe
新しく作るスクリプトに関してはもうバッチ使わないで欲しいよな
2021/04/03(土) 08:10:54.91ID:GvC+rDGr
標準ではps1の実行権限ついてないから配布する場合はちょっと面倒なんだよね
2021/04/03(土) 09:26:04.03ID:inQlliUt
他人に使ってもらう必要がある奴はバッチにPowerShellを埋め込んで配布してる
https://www.pg-fl.jp/program/tips/ps1bat2.htm
2021/04/03(土) 10:15:30.26ID:1anAZoL9
ウィルスのような手口
2021/04/03(土) 10:55:18.98ID:sC0R2LUF
バッチだと悪さができないとでも?w
2021/04/03(土) 11:16:34.59ID:zA7glofo
1行batとの2ファイル構成が楽でいい
先人はよくもbatなんかを使い続けてきたものよな
2021/04/03(土) 12:16:39.84ID:GvC+rDGr
>>94
その方法管理者権限必要だろ
2021/04/03(土) 12:35:34.20ID:1anAZoL9
インストールマニュアルとセットにして、正攻法で使って貰うのが一番だな
2021/04/03(土) 13:31:57.32ID:vSOTAguS
>>99
ガチガチに管理されたPCには無理な方法
2021/04/03(土) 13:47:46.96ID:1anAZoL9
ネット経由で持ってきたファイルだと、batファイルも実行不可能なのな
よくできてる
2021/04/03(土) 13:55:06.60ID:PDe42KrN
むしろガチガチに管理してくれれば個別にスクリプト実行なんてしなくて済むのに
2021/04/03(土) 14:11:40.41ID:Bi+zSKdB
batで済む事はbatが無難
済まない事はps1よりもexeが無難
2021/04/03(土) 14:26:34.09ID:vSOTAguS
>>101
ZoneIDのセキュリティブロックのことなら、イントラネットや信頼されたサイトだと問題ない
2021/04/03(土) 14:32:21.88ID:1anAZoL9
自分の別のPCからteamsのファイル共有で持ってきただけなんだけどね
2021/04/03(土) 15:18:17.29ID:sC0R2LUF
>>98
ExecutionPolicy の話?
なら、-Command 使ってるから要らんよ
他にもバイパスする方法は色々あるし
https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/
107デフォルトの名無しさん
垢版 |
2021/04/03(土) 20:22:37.90ID:1+c+Mqlb
-Scope CurrentUser なら権限いらないんじゃね
2021/04/03(土) 21:42:59.31ID:pdE0Ehe0
PwerShell はファイル行数を取得しようとうっかり wc -l ファイルパス を呼ぶと延々と戻ってこない
2021/04/04(日) 14:18:40.58ID:wP1wKXuq
> Get-Command wc
Get-Command : 用語 'wc' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されま
せん。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してく
ださい。
2021/04/04(日) 14:52:39.08ID:GCV7dd01
>>108
即座にエラー出るけどな
2021/04/04(日) 15:36:10.86ID:/BDkV6c4
>>109,110
失礼。 書き間違えた。wc はGit for Windowsに付属のwc.exeのこと。
正しくは以下のとおり。
cat ファイルパス | wc -l

catが遅いのかパイプが遅いのか両方なのか。
2021/04/04(日) 15:41:20.32ID:BHN4NYpU
cygwinやmsysだとか、c:直下に入りたがるintel系のコンパイラとか、あちこちにパス通してると遅くなった気がする
ハッシュとかしてないんだろうか?する方法あったら知りたい
2021/04/04(日) 15:43:52.16ID:BHN4NYpU
とりあえずパスの先の方に移してみたら、win/unix-likeで同名コマンド結構あるので衝突気にしないならだが
2021/04/04(日) 15:45:18.85ID:/BDkV6c4
>>112
cat はcat.exeじゃなくてGet-Contentのaliasでした
wc -l ファイルパス は普通に速いからwc.exeの問題でもない
よって Get-Contentまたはパイプの問題ってことになりそう
2021/04/04(日) 15:53:23.09ID:/BDkV6c4
Get-Contentのcatだけじゃなくて cat.exe も遅いのか判断しようにもリダイレクトやパイプが関係してきて計時できない
2021/04/04(日) 15:58:56.72ID:2OR59bwQ
concatenateの略だということはもう忘れられている
2021/04/04(日) 16:00:48.51ID:BHN4NYpU
>>114
gcは何も言わなければStringのObject[]を返すと思うので、ストリームを期待しているだろうwcの移植に渡すのは気持ち悪い感じがするぞ(そのwc.exeを持ってないので推測だが
-bytestreamやら-rawやら色々オプションあるので、適切なのを探そう
パイプのバッファリングもstdbufに頼るlinuxよりは柔軟なので、もし駄目ならそっち方面調べてみて
2021/04/04(日) 16:07:02.09ID:BHN4NYpU
面倒でもあるけどなー
2021/04/04(日) 16:22:26.07ID:oGhQpAP5
catは猫被ってるからな
(cat .profile)[-1]
2021/04/04(日) 17:39:37.67ID:2IYRpr9r
>>112
ハッシュするって何?
2021/04/04(日) 18:05:16.10ID:S6//fvIQ
>>120
一部のシェルではコマンドとコマンドパスの対応をハッシュテーブルで管理して高速化を図ってるものがある
なのでサーチパスを追加したりコマンドを追加したらrehashコマンドでハッシュテーブルを再構築する必要がある
って話じゃね?
2021/04/04(日) 18:08:31.30ID:Oo+bypI+
ほほぅ。
2021/04/04(日) 19:21:56.56ID:0E2xLu47
うちは6885行のtxtでGet-Contentもcat.exeも体感差はないな。しかしPSのパイプは遅い

PS> foreach ($i in (1..5)) {(Measure-Command { Get-Content hoge.txt | wc -l }).TotalMilliseconds}
2959.9704
3016.5222
3007.6643
3010.2928
3009.264

PS> foreach ($i in (1..5)) {(Measure-Command { cat.exe hoge.txt | wc -l }).TotalMilliseconds}
2908.5588
2900.6436
2905.2317
2962.6119
2895.1269

PS> foreach ($i in (1..5)) {(Measure-Command { wc -l hoge.txt }).TotalMilliseconds}
62.3373
61.1564
78.0376
62.6787
61.2903
2021/04/04(日) 19:22:33.43ID:0E2xLu47
bash> time (cat hoge.txt | wc -l)
6885

real 0m0.047s
user 0m0.060s
sys 0m0.030s

bash> time wc -l hoge.txt
6885 hoge.txt

real 0m0.016s
user 0m0.030s
sys 0m0.031s
2021/04/04(日) 20:38:15.51ID:DK2CM63v
そもそもそのwc.exeってファイル引数とか取ってくれないの?
2021/04/04(日) 20:48:48.02ID:wHZAJdLa
PowerShellでファイルの行数を知りたいなら
Get-Content ファイルパス | Measure-Object -Line

Measure-Object
https://docs.microsoft.com/ja-jp/previous-versions/dd315251(v=technet.10)

-Line
入力オブジェクトの行数をカウントします。
2021/04/04(日) 20:54:21.66ID:7FHk/GbQ
まさか行数を数えたいだけってオチ?
>>126
行数だけなら単に.count属性見ればいいのではないかと
(cat file).count
2021/04/04(日) 20:57:30.83ID:7FHk/GbQ
あと一行毎に読み込んで処理するような作業でなければ、-readcount を大きく取れば比例して速くなるかと
2021/04/04(日) 21:53:57.59ID:BHN4NYpU
完全に同じ物かは分からんが、一般的なwcコマンドはファイル引数取るね
わざわざgcでメモリに読み込んで渡すという奇怪なことはしなくていいと思う
行じゃなくて単語を数えるなら-Delimiterでよしなに分割してCount 属性見るとか

ただ、生gcで全部メモリに載せて属性見るのはスケーラブルでない事に注意
2021/04/04(日) 22:07:08.65ID:BHN4NYpU
-Delimiterに空白扱いしたい文字を渡すだけではちゃんと連続スペースを圧縮してくれるかとか怪しいので、やめといたほうがいいか
せっかくwc.exeがあるんだから任せるのが無難
2021/04/07(水) 05:39:22.19ID:vrmwo0xd
オワコン利用者が宗教がかってくるのはどんな分野でも似た感じだね
2021/04/07(水) 12:11:53.76ID:qt/+ncLt
なんでや、perl関係ないやろ
2021/04/07(水) 21:20:44.96ID:MHznIgE8
HTMLファイルを[xml]に変換して $obj.html.bodyとか参照したいんですが、
↓のサイトで紹介されてる方法
https://win.just4fun.biz/?PowerShell/HTMLのtableタグをスクレイピング
$obj = [xml](Get-Content ファイル名)

この方法ではタグが対応してないとエラーが出てしまいます。素のHTMLなので当然なのですが。
タグが対応してないHTML前提で何か良い方法ありますか。
2021/04/07(水) 23:40:53.08ID:Y4NtoFD8
Powershellで時間だけの計算の方法を教えてください。

$s=((New-TimeSpan -Hours 50 -Minutes 35) + (New-TimeSpan -Hours 1 -Minutes 25)).TotalSeconds
$ts =[timespan]::FromSeconds($s)
("{0:hh\:mm\:ss}" -f $ts)

ググった結果ここまではいきついたのですが、24時間を超えると、桁が日に上がってしまいます。

24時間を超えた場合でも、25:00や、123:35のようにする方法を教えてください。
また、もう少し楽な書き方Excelライクに、10:15 + 20:45 = 31:00、みたいな楽な書き方があったら教えて下さい。
2021/04/08(木) 04:25:58.89ID:kPGnX96o
>>129
7z -e -so 2021-04-01.log.zip | wc -l
みたいな事もやりたいのかも。わざわざパイプにしてるって事は

それにしてもPowerShellは数字で始まるコマンドはそのままじゃダメなのか
&7zだとイケるけど…癖のあるシェルですな
2021/04/11(日) 22:42:10.00ID:2GAqbccY
>>134
MSDNのTimeSpan構造体を調べてみるといいですよ
時単位の出力はTotalHoursプロパティです
137デフォルトの名無しさん
垢版 |
2021/04/11(日) 22:52:32.66ID:2GAqbccY
$ts = [timespan]'10:15' + [timespan]'20:45'
'{0:00}:{1:00}' -f $ts.TotalHours, $ts.Minutes

こんな感じ
2021/04/12(月) 21:18:29.84ID:6c3X7Cef
>>136
>>137
ありがとうございました。

最終的にこんな感じになりました。

$TimeSpan = [timespan]::new(10,15,0) + [timespan]::new(24,45,0)
'{0:00}:{1:00}' -f $TimeSpan.TotalHours, $TimeSpan.Minutes
2021/04/12(月) 22:12:38.04ID:zW+k7vD0
質問したいんだけど、だれか教えて下さい。

外部アプリによるリネームの追跡をしたいんです。
リネームをする外部アプリで、リネームされたファイル名を拾いたいんです。

詳細
https://qiita.com/mtujikawa/questions/a0b4b36bc91585388cf2

だれか教えて下さい。
2021/04/12(月) 23:31:54.87ID:rYIhIPBW
>>139
windows 名前の変更 監査
でぐぐるといくつか出てくるよ
2021/04/13(火) 17:45:40.70ID:fWoCeTea
vbs速いって言うけどUTF8扱うようになる(ADODBでゴニョゴニョ)と
powershellが逆転するね
2021/04/13(火) 17:58:30.89ID:u1AIe1VJ
>>141
そうなんですか
2021/04/13(火) 19:01:37.43ID:HcUSKQeT
$ts = [timespan]'0:15' + [timespan]'0:40' ; '{0:00}:{1:00}' -f $ts.TotalHours, $ts.Minutes
01:55
144デフォルトの名無しさん
垢版 |
2021/04/18(日) 15:36:47.84ID:d2aF4PUW
数値を強制的に2桁にする方法ですが、
3桁以上は上位2桁、1桁の場合は右詰めで0追加
とするためにはどうすればいいでしょうか?
整数以外の入力は考えなくて大丈夫です

(例)
12345 → 12
67 → 67
8 → 80
2021/04/18(日) 16:03:54.38ID:NvNv7S6I
if文で分岐して10をかけたり割ったりするだけじゃだめなんですか?
2021/04/18(日) 16:34:37.11ID:Y0OFPTQB
12345,67,8|%{[math]::floor($_/[math]::pow(10,[math]::floor([math]::log10($_))-1))}
2021/04/18(日) 17:19:19.04ID:yV0lWVbT
すごいのう
2021/04/18(日) 17:26:13.82ID:okYCh92Q
無条件に最後に0を付けて左から2桁取ればいいのでは
2021/04/18(日) 17:57:57.50ID:ZsDsAuud
そんなんで表示されても判らんけどな
2021/04/18(日) 20:02:19.21ID:NvNv7S6I
>>148
これだな
2021/04/18(日) 21:04:21.53ID:Y0OFPTQB
その方が簡単だな。146は数値計算で済ませる思いつき
2021/04/18(日) 21:53:28.24ID:a2J8UULJ
>>149
分かるだろ
2021/04/18(日) 21:59:30.04ID:qI95yZS9
#/bin/sh
result=21
result2=3.1415
echo "$result * 10" | bc | cut -c 1-2 # 実行結果:21
echo "scale=5; $result2 * 10" | bc | cut -c 1-2 # 実行結果:31
2021/04/19(月) 08:23:13.80ID:tyk9bMXM
中古シェルだとたかが数値計算すらbcなんてコマンドをわざわざ使わなきゃいけないのか
しかも結果が文字列ってアホすぎ
2021/04/19(月) 08:49:51.52ID:Igt3l5xr
bashって外部コマンド使わずに純粋にシェルの機能だけだとまともな事出来ないの?
2021/04/19(月) 15:00:37.86ID:5FdprbjY
12345,67,8|% {($_ * 10).ToString().SubString(0,2).ToInt32($null)}
2021/04/19(月) 15:52:01.50ID:HBn8astV
分かりやすい
158デフォルトの名無しさん
垢版 |
2021/04/19(月) 17:18:39.52ID:J8N2amqC
テキストファイルを読み込んで置換したりしているのですが、改行コードがマッチしません

function test($file){
$content = Get-Content -Encoding UTF8 $file
$content = $content -replace "`n", "HOGE"
$content
}

これで改行をHOGEにしようとしてもできません
`n を `r`n や \n や \r\n にしてもだめです(テキストエディタで見るとエンコードはUTF8、改行はCR+LFとなっています)
タブ文字は `t でできています
どのような理由が考えられるでしょうか?
2021/04/19(月) 17:22:33.20ID:UiFLtBUU
改行コードと文字コードは、もう一度地球をやり直すしか
2021/04/19(月) 17:32:10.70ID:J8N2amqC
ちなみに同じテキストファイルは
秀丸エディタだと普通に \n で検索、置換ができています
2021/04/19(月) 18:06:13.50ID:yrdOfXex
>>155
この程度はbashでできるけど外部コマンドの橋渡しが基本。プログラム言語じゃないしな
for i in 12345 67 8; do y=${i}0; y=${y:0:2}; echo $y; done
変数は$(())で数値計算できる
PowerShell
12345,67,8 | %{[int]([string]$_+0).substring(0,2)}
156は古いPowerShellだとエラーになる([System.String]にToInt32がない)
2021/04/19(月) 18:32:19.33ID:nuzEjzy+
>>158
$content = Get-Content $file -Raw -Encoding UTF8
2021/04/19(月) 18:34:53.66ID:nsBabrZy
ワロタ
2021/04/19(月) 18:47:03.91ID:qG+FkDTL
>>158
> どのような理由が考えられるでしょうか?
Get-Contentは改行で区切られた行を配列にして返す
なので返された内容には改行は無いよ
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12183750652
2021/04/19(月) 18:54:06.68ID:PAGvXSVw
>>144は、結果の数値に応じて場合分けするのに
最初の2桁を使いたいからその方法を聞いてるの?
166デフォルトの名無しさん
垢版 |
2021/04/19(月) 19:31:30.77ID:d6EDPzDg
148が言ってるみたいに文字列で処理した方が簡単かなぁ

PS C:\> $x = 1..5 |% { Get-Random -min 1 -max 20 }
PS C:\> $x
4
10
6
17
12
PS C:\> $x |% { -join ('{0}0' -f $_)[0..1] }
40
10
60
17
12
2021/04/19(月) 19:31:51.71ID:J8N2amqC
>>162 でできました!
2021/04/22(木) 12:55:52.92ID:dQFy3Puj
bash/linux使っててpwsh初めましただけど
env:とかalias:とか疑似ファイルシステムみたいに潜れるの楽しい
-からの補完でロングオプション(パラメータ?)出てヘルプすら見ずとも取り敢えず動くのが素敵
もちろんオンラインヘルプもman以上に充実で素晴らしい

困った方も挙げとく
折角両方のコマンド使えるのでcatだけ本物に置き換えてる、pwshのgcとwinのtypeはそのまま

ただcdはbashビルトインで実体が無いので困った
子bashでglobal宣言しても$env:CDPATHに反映されてない?
何かワークアラウンドはないでしょうか?ヘビーユーザなので寂しい
勉強も兼ねてcdをpwshで書くのもいいかもしれないけど
2021/04/22(木) 12:59:06.25ID:dQFy3Puj
行/列(オブジェクト/プロパティ)をピボットテーブルみたいにグリグリ出来るのも楽しいね
そういうインタラクティブデータ分析はpython/pandasでやってたけど、pwshの方が楽かもしれない
2021/04/22(木) 13:13:23.93ID:fmuwQogZ
他の言語で書いたらかなりの分量になるところを、psだと異様に短くなる
というケースが楽しい
2021/04/22(木) 13:22:29.78ID:dQFy3Puj
echoしなくていいとか、?、%、&(call operator)、$_とか使いたくなりますね
perl臭がしてくるけど
2021/04/22(木) 13:30:39.34ID:dQFy3Puj
かっちり書けばほぼC#なのもいいところ
前からネットでサンプルコードちらほら見かけてたけど、そういうのはエイリアス無し&キャメルケースの厳つい見た目なので敬遠してしまってた

小文字でも構わないし、標準エイリアス&短縮規約(Get-Verb)あるんだって入れるまで知らなかった
2021/04/23(金) 09:46:07.10ID:+Mo8SLKI
pwsh慣れた後にbash勉強したら面倒なんだけどみんなどう思ってる?
2021/04/23(金) 10:01:56.87ID:sYoV5rep
>>172
C#だと思って使うとドツボにはまる
パイプラインをちゃんと使ってPowerShellらしく書くか、それが嫌ならインラインでC#書いたほうがマシだ
まあいずれ分かる
2021/04/23(金) 10:48:54.99ID:lAPyDVC2
>>173
bashから入ってPS勉強中の俺には
ログインシェルとしては面倒
スクリプトとしては便利
と思ってる。本気で使おうと思ってないから効率的な使い方知らんだけだと思うが、メンバ確認でgm叩くのが面倒lessがないのも辛い

この時点でかなり億劫
スクリプトはどーせvscode使うからあまり気にならないんだが…
2021/04/23(金) 11:06:13.19ID:sgIhdz3d
何でもpsでやろう、という気にはならないかな
psが向いてる用途にぴったりはまると気持ちいい
2021/04/23(金) 12:01:02.99ID:tWGuVFO6
非表示オプションにしてもコンソールが一瞬表示される問題さえ解決すればそのまま納品物にできるんだがなあ
今はPS2EXEでEXEにして納品してる
2021/04/23(金) 13:14:07.27ID:qwQTUI3N
>>175
lessはbashの一部ではなくてコマンドではあるけど気持ちは分かるかな
自分はlinux環境でもbatやfd-find、ripgrepに切り替えててwindowsでもchocolateyで導入してるんで、同じ環境になってきました
2021/04/23(金) 15:21:26.04ID:cVnO9LUt
Powershell(でなくてもいいがwindowsで)で「tail -f」したい。。
2021/04/23(金) 15:43:23.54ID:qwQTUI3N
>>179
baretail はどう?
https://baremetalsoft.com/baretail/
2021/04/23(金) 15:49:10.77ID:qwQTUI3N
あとはget-contentにwaitオプションつけるとか
baretailは大きなサイズのファイルでもサクサク開けるのでビュワーとしても使える
2021/04/23(金) 16:04:17.49ID:S2TaYi95
Unixツールのtail.exeを入れてるけど
2021/04/23(金) 17:48:18.62ID:V+AIjWKb
ちょっと昔まではバッチとの比較がほとんどだったのに
時代の流れを感じる
2021/04/23(金) 18:49:11.49ID:dmQwGyWy
Git for Windows入れたらtail.exeとかも使えるようになる
2021/04/23(金) 21:13:11.15ID:X1KZalWz
param()と書くだけで
自分で書いたスクリプトもちゃんとパラメータ補完してくれるの偉い
自分の書いたの程覚えられない()
先頭複数行コメントがget-helpできるのも便利そう、思うだけでやってないが

bash/readlineもコマンド補完に力入れてる方だけど、コマンド毎のデータは誰かが手打ちしなきゃならないし、ちょっと仕様が複雑すぎる
まあpwshもpsとcmdlet以外はそうだけど、#!/usr/bin/pwsh、param、startするだけのラッパ書けばよい
ところでwslの人はポータブルにps1書けるの?シバンを認識するかとか、認識にps1拡張子必要かとか
まだ配布できる完成度じゃないけど、折角ならポータブルなスクリプトを書きたい
2021/04/24(土) 00:07:18.71ID:zsZadCrK
>>184
そこまでするならWSL2の方がいいんでは?
git for windows SDKならpacmanでいろいろ入れられるから便利かとは思いますが
2021/04/24(土) 16:21:27.70ID:eHVgMjKX
>>176
向いてる用途ってどういうのですか?
逆に向いてないのは?
2021/04/24(土) 16:42:22.65ID:w/nYR7g5
windowsの内臓に手を突っ込むようなのが向いてる
2021/04/24(土) 17:03:59.31ID:BpMFGApW
windowsにプリインストールされてる対話環境もあるスクリプト言語っていう意味では向いてる、のかな???
2021/04/24(土) 19:56:10.43ID:t2qu3ovB
正直wikdows周りの事には使ってない唐突にcosとか呼べるので(i)pythonから移行した

オブジェクトを置き去りにするとテーブル表示になって、ピボットテーブルみたいにグリグリできるのでデータ分析にもオッケー、パイプで書けるのも素直
csv, json, xmlもそのまま読み書きできる
高度な関数や重い行列計算はさすがにOctaveとかに投げるが
学習コスト下げたい人はR, Python, Octaveで自己完結した方がいいかも
2021/04/24(土) 19:59:04.19ID:t2qu3ovB
Out-GridView(ogv)が個人的にキラーcmdlet

あとシェルとしても使える()
2021/04/24(土) 20:01:35.65ID:t2qu3ovB
偏った見方なのは承知してるけど、インタラクティブにエクセル職人的な事やりたいなら、現状で最適なソフトかなと
2021/04/24(土) 20:12:31.38ID:w/nYR7g5
PC起動したら、起動時刻と前回立ち下げ時刻をサーバのエクセルに追記させる
みたいなことを、他の言語でやろうとしたら大変
2021/04/24(土) 22:11:52.14ID:zsZadCrK
>>191
たしかにogvはお手軽に結果一覧するには超便利ですね
195187
垢版 |
2021/04/24(土) 23:12:45.35ID:eHVgMjKX
皆さんありがとうございます
2021/04/25(日) 05:08:51.91ID:Xjg3V2+s
お知恵をお貸し頂きたく…。

Excnange Online に接続して Get で出力したんですが、
波括弧{}でくくられた情報が wrap しても out-file してもどうしても省略されます。
これを全部表示する方法をどなたかご存じでしょうか…。
197196
垢版 |
2021/04/25(日) 05:11:37.83ID:Xjg3V2+s
言葉足らずでした。
{192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4,...}
みたいに途中で切れてしまうアレです…。
2021/04/25(日) 05:32:42.88ID:2+KF94a+
Out-GridVewもいいけどfzfをPowerShellで使えるようにしたほうが一貫性があっていいと思うけど
2021/04/25(日) 14:29:14.34ID:Jy5Y44+Q
>>198
PSFzf
https://www.powershellgallery.com/packages/PSFzf/
2021/04/25(日) 18:02:45.39ID:Vn29MKgq
>>197
exchange onlineを触ったことが無いのでお困りの内容が正確にはわかってないのですが、対象のコレクションに対してforeach-objectするのはうまくいかないんでしょうか?
cmdletを記載してくれればもう少し分かるかも
2021/04/25(日) 18:53:01.63ID:s++hWM3P
テキストファイルの空白行を連番で
[1]
[2]
のように置換するにはどうするといいでしょうか???
2021/04/25(日) 19:15:47.03ID:byqvN0Ft
>>201
$i=1
foreach ($l in Get-Content test.txt) {
if ($l.Length -eq 0){
Write-Output ("[" + $i.ToString() + "]")
$i=$i+1
}else{
$l
}

}

こういう感じでいかがでしょうか。
あんまりうまくないと思いますが・・・。
2021/04/25(日) 19:22:08.51ID:/7sF+uPH
>>201
下手だけどワンライナーだとこんな感じ
$i=0;Get-Content test.txt|ForEach-Object {if($_ -eq ""){$i++;"[$i]"}else{$_}}
2021/04/25(日) 20:28:53.03ID:s++hWM3P
なるほど
2021/04/26(月) 01:03:37.54ID:BYmi+i0r
>>196
Exchenge Online使ってないから入力や出力したい形式が分からないけど
$var | Out-File var.txt
だと表形式で長い値は省略されて
$var | Format-Table -Wrap | Out-File var.txt
だと省略されずに保存される
2021/04/26(月) 17:17:59.89ID:iZOPqzuA
Get-Contetは何で標準入力を受け取らないんだろう?
wshはできたのにな
2021/04/26(月) 22:25:20.75ID:a3SG/c+a
開発側がそんな機能使ってないからだろう
2021/04/26(月) 23:42:37.65ID:oRZNh3Qz
>>206
イメージ湧かないんですが、どういった使い方を想定されてるんでしょう?
2021/04/26(月) 23:57:32.20ID:3GJ+33uE
たし蟹
2021/04/27(火) 00:21:38.16ID:UNWScvKY
catみたいに標準入力の結果を吐いてほしいんじゃないの
PowerShellはシェルとしての使いやすさよりも直行性を重視してるところがあるので、単に設計思想の違いだろう
2021/04/27(火) 03:10:21.87ID:SJKbfdaZ
標準入力を受け取らない理由なんてないし、実際受け取るんだけども…
get-contentという名前から、何を入力として期待しているのか考えてみなよ
2021/04/27(火) 06:30:59.80ID:Q96mKs6z
PoweShellはWSLが普及したらオワコン化するってホント?
2021/04/27(火) 08:35:24.00ID:5DBHgWrV
>>211
「内容を取得せよ」という名前なんだからcatみたいに標準入力があれば標準入力の内容も出力してくれても別におかしくはないでしょ
PowerShellのget-contentに同様の機能があれば君も普通に使ってると思うぞ
とはいえ、あれば便利だからといって何でも入れたら神コマンド化するから、そこは直行性とのバランスで取捨選択した結果なんだろう
2021/04/27(火) 09:10:46.77ID:x4iH29Y2
その反応はアドバイスに対して論理が微妙じゃね
「『内容を取得せよ』という名前なんだから標準入力から受け取ったファイル名を元に内容を取り出す仕様でも別におかしくはないでしょ」っていうのもまんま成り立つよな
二通りの仕様が考えられるときにcatと同じじゃないのはおかしいというのは先入観に引きずられすぎ
ゼロベースで考えたらGet-Contentの今の仕様は妥当だと思う

Poweshellで標準入力を標準出力にパイプしたいときにcatじゃなきゃいけない理由ってあるの?
2021/04/27(火) 10:03:00.94ID:5DBHgWrV
catは echo abc | cat x.txt - y.txt で x.txt と文字列 "abc" と y.txt を順に結合できる
同じことをpwshでやろうとすると少し頭使うだろう
pwshにはエイリアスにlsとかあったりするのに、MSがget-contentを設計する際にcatを全く意識せずゼロベースで考えたというのはさすがに普通に考えてありえない
意思を持ってcatと同じにしなかったのだろうし、別にそれが間違っているとは思わない
2021/04/27(火) 11:22:55.90ID:VpxSAxjv
あー、concatinateとして使いたいってことか
普通のcatもその使い方しないから全然気づけなかった
2021/04/27(火) 12:44:35.43ID:a/NQjOQm
なるほどね、208の質問にそう答えてくれてればスムーズに話が進んでたと思うよ
直行性という意味ではjoinなどの結合操作だね
書き方に悩むのはどっちに慣れてるかってことでしかないと思う
歴史的経緯でこんがらがった過去のシェル環境達を負の遺産ごと継承するよりも改めて再整理したいって話と、わかりやすいエイリアスを付けてあげたいってのもまた別の話
2021/04/27(火) 13:21:29.99ID:LEUYIDaT
wshはできるの意味がさっぱり分からん
2021/04/27(火) 13:45:18.43ID:P9G7ihch
>>166
単項の-join -splitあるなんて知らなかった…
2021/04/27(火) 14:42:03.79ID:y9F4OEgN
get-contentで検索文字列をテキストから取得し変数に入れているのですが、
*検索文字1*,*検索文字2*
と変数に入れると何も返ってこなくなります。検索文字列が一つだけなら問題なにのですが…
変数 = テキストファイル
get-content パス $変数
です。カンマをエスケープさせるのかアスタリスクをエスケープさせるのかこんがらがってきました…
知見を下さい…
2021/04/27(火) 14:55:56.07ID:y9F4OEgN
>>220
変数使う所はget-childitemでした。
2021/04/27(火) 15:14:13.72ID:y9F4OEgN
>>220
分かりにくいですね…
要はget-childitemで複数のファイルを検索するためにテキストファイルを使いたいって事です。
2021/04/27(火) 20:30:55.10ID:8D7txu9u
テキストの中身をカンマじゃなくて改行で区切ればそんな苦労しなくて済むぞ
あと余計なお世話だけどGet-ChildItemが手打ちで動くことは確認した?
パラメーターがちょい怪しい気がするんだが…
2021/04/27(火) 20:51:05.42ID:P9G7ihch
>>220
リテラルではカンマで渡してるから配列にしないとダメみたいね

test.txtの内容:
*.jpg,*.png

$r = gc test.txt
gci パス\* -Include ($r -split ",")

パスがカレントフォルダなら
gci ($r -split ",")
または
gci .\* -Include ($r -split ",")
または
gci * -Include ($r -split ",")
2021/04/28(水) 09:11:25.07ID:BmPpt58I
なんかテキストベースの志向してる人多くない?
テキストベースのデータは最低限配列化して扱うもんじゃないの?
2021/04/28(水) 10:37:10.61ID:mkVGlKi3
PowerShellで配列を明示的に使うのはダサいしハマりやすいよ
パイプに任せた方がいい
2021/04/28(水) 11:05:06.60ID:DwQIIr/C
他のシェルではテキストベースが普通というかむしろpwshが異端だしなぁ
手段を選ばなけりゃpwshでもInvoke-Expression使えるし
2021/04/28(水) 15:44:13.18ID:6n3amPUA
>>224
現在、環境がないので後日試してみます!ありがとうございます。
>>223
ファイルを使わずコマンド単体なら複数検索でも動くのですが…改行で動くのですか?カンマに捕らわれすぎてたかもしれません。試してみます!
2021/04/29(木) 12:08:07.23ID:1cDcYESD
略称としてはpwshが今公式に推されている?
しかしposh呼びしているMSドキュメントも多い
拡張子的にはps

pshとか収まり良いけど既にあったりして紛らわしい系?
2021/04/29(木) 12:47:36.17ID:Gvkp+FCp
推すとかじゃなくPowerShell6から実行ファイル名がpwshになった
コマンドとしてpwshが正式名称
2021/04/29(木) 12:58:06.09ID:h5Kbt4/j
pwshへのリネームはとんでもない破壊的変更なわけだけど、今後どうするんだろうね
powershellをpwshのエイリアスにしたらそれこそ阿鼻叫喚だろうからそれもなさそう
5は凍結して、そのうちWindowsにデフォルトでは入らなくてオプションで入れるようになるんだろうか
2021/04/29(木) 13:49:20.18ID:zjFXGfaT
実行ファイルの名前以前にwindows由来のモジュールが分離されてインポート必須になってるから、移行するんであればスクリプトの修正は必須ですね
2021/04/29(木) 16:15:10.36ID:BF1GEXOZ
複数バージョンの同居認めてるからその辺は問題にならないと思う
つーかログオンスクリプトで既にガンガン使ってるから5が標準で消えたら死ぬ
2021/04/29(木) 16:25:44.14ID:1cDcYESD
6はapt経由で7-preview入れたら塗りつぶされたけど、大体互換だからかな?
とりあえず俺は問題起きてないしよしとしよう
2021/04/29(木) 16:35:06.74ID:LBeD0nWX
当面はIEとEdgeみたいに行くんじゃないかな
2021/04/29(木) 21:07:38.49ID:XqZ5GoqI
やっぱ、バッチだろ?
2021/04/29(木) 21:34:01.87ID:tWFzcYm5
自分のスクリプト用はPowershell7
社内スクリプトやらはWindows Powershell(5系)
MSは互換性維持の為に古いものを限界まで残す所だから当面問題は無いと思う
ただPowershell7系はそろそろ安定して快適だしWindows標準で入れてくれて良いと思う
2021/04/29(木) 23:43:33.70ID:BF1GEXOZ
7ってWindows7でも動くんだな
2021/04/30(金) 02:48:31.39ID:YlfW6qtC
6→7では||とか&&とか?:とか演算子かなり増えたと思ったけど
6で実行すると将来の拡張に予約的なメッセージが出たはず
後方互換性はちゃっかり確保してるのね
2021/04/30(金) 03:23:30.90ID:YlfW6qtC
>>238
バックエンドの.NETが提供される限り、言語の部分に関してプラットフォームは関係ないからね
(俺は7持ってないから確認は出来ないが)

シス管機能に関わるプロバイダの部分は、VistaくらいからCim規格準拠(WMIとして)に力入れてるので、それも寄与してるかと

まだ公式リリースされてないが、 linuxでは特にUbuntuもCim準拠に力入れてる
近いうちにpwshのプラットフォーム間相互運用性の確保(pwshコードベースのメンテコスト)はかなり楽になるだろう

今はまだ統一的に見えるユーザーエクスペリエンスは、対応するAPIを繋ぎ合わせたアドホック実装されてる

アドホック実装が減ればコードベースが削減されるわけで、伝統シェルに劣るとされるファイルサイズデカい問題も解消されると期待している
2021/04/30(金) 04:34:13.88ID:wKh1zPtl
>>229
そこらの経緯はこの記事にまとまってるよ

PowerShell 6.0からPowerShellのプログラム名がpwshに変わります
https://blog.shibata.tech/entry/2017/10/19/073001

元々、略称はposh呼びが多かったみたい(容易に発音可能だし)
pshはPerl Shellと被るので避けたそうだ
2021/04/30(金) 04:37:38.21ID:wKh1zPtl
マルチプラットフォーム化の為に作り替えて、
違う系統であることが明確になるよう、名前も変えてたね
(.NETと同じく過渡的な措置だったのだろうけど)

Windows PowerShell(5系以前) → PowerShell Core(6系) → PowerShell(7系以降)
2021/04/30(金) 09:49:22.19ID:jI6ILm2+
PowerShell core(6系)の時はWindowsの内部操作系(IP確認やら)はホントまともに動かなかった
それがPowerShell7になったら殆ど動く様になった時は感動したわ、Out-GridViewも復活したし
2021/04/30(金) 11:12:11.62ID:vAph35tm
略称を作る時に母音を飛ばすのは普通なので、poshよりはpwshの方がまとも
posh1が上品とかの意味を持つ既存の英単語だから、わざとそう呼んだ
posh2として軽蔑する時に発する音、という意味もあるのでなおさら
2021/04/30(金) 11:38:19.70ID:wi8S/EBa
>>243
言語の移植はそれほど難しくないけど環境依存のコードを含むコマンドレットとかは地道にやるしかないからIP確認とかが遅れるのはしゃーない
2021/04/30(金) 15:57:16.65ID:YlfW6qtC
名前にdefine使って、偶然7時点で将来に予約メッセージを受けた
まあこんな一般的な単語をユーザーが使うべきではないというのは置いといて…
2021/04/30(金) 18:32:28.97ID:EP14bd4r
わりと1の時点から将来的に使いそうなのは予約語に入ってたよ、classとか
2021/04/30(金) 21:39:12.47ID:YlfW6qtC
>>227
WYSIWYGじゃないからなあ
掴めてない人はget-formatdataで標準の表示書式拾ってちょっと手を加えて遊ぶといいかも
2021/04/30(金) 21:42:27.17ID:YlfW6qtC
標準はちょっとverboseすぎるから、共通パラメータやメンバを無視して表示くらいの設定はしておきたい
2021/04/30(金) 23:05:03.03ID:HzZKeJse
GetTypeとか存在すると分かりきってて、定義も自明なのはする必要ないね

高度なメタプログラミングしてたら別だけれども
2021/05/13(木) 00:10:17.01ID:JmJXN960
PowerShell7のGet-ClipboardにFormatパラメータ的なものないの?
PowerShell5ではそれを指定してクリップボード内の画像だったりを取得できたと思うが
2021/05/13(木) 08:30:28.50ID:D1RFiq2C
>>251
https://github.com/PowerShell/PowerShell/pull/10340#issuecomment-546443768
2021/05/13(木) 08:47:27.44ID:GPaJZvxF
>>251
クロスプラットフォーム化でテキスト以外のサポートはなくなった
画像とか取得したければ、面倒だけど自前でSystem.Windows.Forms.Clipboard使ってやるしかないね
こういうやつ↓
https://qiita.com/saggie/items/44cb8b317fe0effa5891
2021/05/13(木) 13:12:28.84ID:RarJcXhy
>>252
>>253
ありがとう
取り敢えず>>253の方法を使うことにします
2021/05/13(木) 20:36:41.84ID:6FdqfrSd
>>252-253
この調子でバージョンアップすると機能が劣化していくのか…
変な方向に向かってるな
2021/05/13(木) 22:30:23.52ID:gFpazqk/
マチルプラットフォーム化すると各プラットフォームの最小公倍数の機能になっちゃうからね
2021/05/13(木) 23:15:59.38ID:QRC6YBG4
なら高機能化しているな
2021/05/14(金) 19:43:20.62ID:0BboAQlT
Windows PowerShellとか処理は遅いし使えない機能は多いわ文字コードはSJISがデフォルトだったりとか仕様も古くて微妙だしな
一部機能は使えなくてもPowerShell7はかなり進化してるわ
2021/05/14(金) 20:03:04.00ID:SDgEiaJx
それでもWindows PowerShellが好き
2021/05/19(水) 03:38:40.25ID:ZyjXFBY0
winのクリップボードはやけに高機能だよな
田+vで履歴、それを再編集、ピン留め等
gui環境ならコマンドヒストリの代わりにもなる、というかより便利
rtfはターミナル民的には興味ないけど、pwsh がコマンドライン上でサポートしなくても、ターミナルアプリの設定あたりで補えるのでは
(wtの設定にはある)
2021/05/19(水) 03:42:31.56ID:ZyjXFBY0
プレーンテキストといえど、所詮リッチテキストはマークアップされたプレーンテキストなのだから、適当にエスケープするように*-clipboard cmdletsをラップしてしまえば良いのでは
思い付きなんで上手くいくかはわからんが
2021/05/24(月) 18:38:56.02ID:BIWUkQ+d
TCP IPをPowerShellでさわったことある人いたらクライアントで受信する方法について教えてほしい
何から手を付けたらいいかわからん
2021/05/24(月) 18:53:53.78ID:cJIXfLgE
>>262
まずは何をしたいのか書くところからかな
TCP/IP上に独自プロコトルでデータやり取りしたいとか言うならPowerShellよりC#とかの方が楽かもしれないからPowerShellでやりたい理由も書いてくれるといいかも
2021/05/24(月) 19:40:52.20ID:CXmqjMeO
Powershellでやる場合はC#と同じく.NET FrameworkのSystem.Net.Socketsを使うことになるだろうから
他の言語でのやり方を知ってるなら下ののC#(.NET)の箇所を参考にすればいいのでは
https://www.ne.jp/asahi/hishidama/home/tech/lang/socket.html
2021/05/24(月) 20:40:25.85ID:ux+C+2yc
まずは、やりたい事を説明出来るレベルにまではなってからじゃないと無理ゲーじゃね?
2021/05/24(月) 20:41:05.87ID:ux+C+2yc
ワシの日本語なんか変だな。
人の事言えんかったわw
267デフォルトの名無しさん
垢版 |
2021/05/24(月) 20:48:57.94ID:w2G2xBi9
今帰宅した262です。
>>263
やりたいことは限りなくデフォルトのwindowsで動くTCP IPのクライアントを作ること。
お客さんに納品する機械がTCP IPでしか操作できないらしいので出来るだけ環境構築やインストール作業の必要ないクライアントを作る必要があったからなんだ。

>>264のレス見たらなんとなくわかった気がする。今の問題としては、適当に作ったサーバーに送信したものを返させてテストしてるけど数字しか帰ってこなくて困っていた。
とりま今あるスクリプト晒します。

$socket = New-Object System.Net.Sockets.TcpClient("127.0.0.1",40001)
$stream = $socket.GetStream()
$reader = New-Object System.IO.StreamReader($stream)
$writer = New-Object System.IO.StreamWriter($stream)
$writer.AutoFlush = $TRUE
$buffer = New-Object System.Byte[] 1024
while ($TRUE) {
$data = Read-Host("command?>>> ")
if ($data -eq "q") {
break
}elseif ($data) {
$writer.WriteLine($data) | Out-Null
$rawresponse = $reader.Read($buffer,0,1024)
Write-Output $rawresponse.GetType()
$response = [System.Text.Encoding]::Default.GetString($rawresponse)
Write-Output $response

}
}
$socket.Close()
2021/05/24(月) 21:18:25.42ID:cJIXfLgE
>>267
> 数字しか帰ってこなくて困っていた。
> $rawresponse = $reader.Read($buffer,0,1024)
そりゃReadメソッドの戻り値は数値(読み取った文字数)だから当たり前かと
PowerShell は文字列と数値を適宜変換しちゃったりするからC#やC++が使えるならそっちの方がデバッグが楽だと思う
2021/05/24(月) 21:35:34.82ID:w2G2xBi9
>>268
exe形式で渡せるならその2つの言語は選択してたかもなぁ
C#でGUIにしたら、パソコンわからんお客さんでも触れるかもしれんし。今回は規模小さいしPowershell使いたいかな。
2021/05/24(月) 22:01:00.03ID:uBa1LY8b
Ruby on Rails のテストでは、

HTTP のREST API なら、curl, Postman。
VSCode の拡張機能なら、REST Client, Thunder Client

REST Client では、コマンドパレットのGenerate Code Snippet で、
Ruby, PowerShell など、各言語のコードに変換してくれる!

TCP と言うのは、あまりに原始的過ぎて、よく分からない。
curlで出来るかも知れない

新し目のWindows 10 には、curl.exe も入った。
コマンドプロンプトで、where curl と入力すると、
C:\Windows\System32\curl.exe

なお、PowerShell内でcurlを使うのには注意が必要。
デフォルトで「Invoke-WebRequest」コマンドのエイリアスとして、curlが設定されている。
このため、PowerShell内でcurlコマンドを使うには、
フルパスを指定するか、curl.exeと指定する必要がある

Linux のcurlと区別するため、
漏れは、Invoke-WebRequest は、curlモドキ・なんちゃってcurlなどと呼んでいる
2021/05/24(月) 22:03:00.09ID:CXmqjMeO
C#で書いてAdd-Typeで貼り付ければpowershellとして納品できるよ
下手にC#のコードをpowershellで書き直してもややこしくなるだけと俺は思う
C#のusingとか便利な機能はpowershellじゃ使えないし
2021/05/24(月) 22:06:04.28ID:JeDrA5YU
>>271
同意
pwshから使いやすい様に多少注意して書けば問題なし
273270
垢版 |
2021/05/24(月) 22:12:06.08ID:uBa1LY8b
例えば、HTTP のREST API で、VSCode の拡張機能・REST Client で、
コマンドパレットのGenerate Code Snippet から、
PowerShell のInvoke-WebRequest に変換すると、

POST http://localhost:8888/ HTTP/1.1
content-type: application/json

[[0,0],[10,20],[10,10]]

変換後は、

$headers=@{}
$headers.Add("user-agent", "vscode-restclient")
$headers.Add("content-type", "application/json")

$response = Invoke-WebRequest -Uri 'http://localhost:8888/'
-Method POST -Headers $headers -ContentType 'application/json'
-Body '[[0,0],[10,20],[10,10]]'
2021/05/24(月) 22:44:21.48ID:w2G2xBi9
>>271
いいこと聞いた!
敷居高そうだけどちょっと手を出してみる。
2021/05/25(火) 00:37:08.72ID:BrdQ0eWW
俺ならGo使うかな
2021/05/25(火) 01:23:28.04ID:HjVIkAeM
>>274
rawresponseじゃなくてbufferをencodingしてあげればいいところまでできてるんだから、このままpowershellでいいんでない?
2021/05/25(火) 08:42:47.61ID:ENuLboQX
>>276
そうなん?
bufferを出力してもゼロの羅列しか帰ってこないから何も入ってないと思ってた
2021/05/25(火) 09:15:13.27ID:aFPnVfgm
readlineしたら解決しました。CUIだめって言われたらC#に手を出そうと思いますありがとうございました
2021/05/26(水) 22:31:01.46ID:MX2vxe2/
xargs -I @に変わるものって何かあります?
2021/05/26(水) 23:15:56.00ID:MX2vxe2/
自己解決しました
$_にすでに代入されてました
2021/05/31(月) 00:53:31.89ID:jC76eDpN
サーバーのログファイルが24時越えの時刻形式で出力してくるんだけど
これをDateTime型に変換するもっとスマートな方法ありませんか?

$Date = "20210531285930"

# 24時超えなのでDateTime型に変換できない
[DateTime]::ParseExact($Date,"yyyyMMddHHmmss",$null)

# HH部分を-24でDateTime型に変換してからAddDays
[DateTime]::ParseExact(($Date.Insert(8,"{0:D2}" -f ($Date.Substring(8,2) -24))).Remove(10,2),"yyyyMMddHHmmss",$null).AddDays(1)

# 各部を切り出して-24でDateTime型に変換してからAddDays
([DateTime]($Date.SubString(0,4) + "/" + $Date.SubString(4,2) + "/" + $Date.SubString(6,2) + " {0:D2}" -f ($Date.SubString(8,2) -24) + ":" + $Date.SubString(10,2))).AddDays(1)
2021/05/31(月) 00:57:08.36ID:jC76eDpN
一番下のやつ秒2桁が抜けてた・・
283デフォルトの名無しさん
垢版 |
2021/05/31(月) 04:45:30.44ID:c+QWTXgx
ごく普通のやり方しか思いつかんかった

if ('20210531285931' -match '(\d{8})(\d\d)(\d\d)(\d\d)') {
$date = [datetime]::ParseExact($Matches[1],'yyyyMMdd', $null)
$h = $null
$date = $date.AddDays([math]::DivRem($Matches[2], 24, [ref]$h))
$date += [TimeSpan]::new($h, $Matches[3], $Matches[4])
$date.ToString('yyyyMMddhhmmss')
}
284デフォルトの名無しさん
垢版 |
2021/05/31(月) 07:24:21.11ID:M6x27Cpl
>>281
24からいくつまで考慮すればいいですか?
2021/05/31(月) 09:41:49.56ID:etoumxTf
0〜23時は、そのまま

24〜47時は、24 を引いて、0〜23 にして、1日足す
2021/05/31(月) 09:54:44.55ID:FG6+Y3f8
Javaだと勝手に繰り上げてむしろ頼んでねーよと思ったけどシェルスクリプトであるPSにはLenientな日付解釈が見当たらないな
ままならないね
2021/05/31(月) 11:40:17.32ID:96kHy/rj
整数の24で割って割った値を日付に加算、余りを時間にすればいいんじゃね
2021/05/31(月) 16:07:40.72ID:HhBT8tJD
>>287
コード化するとこんな感じスかねぇ

$Date = "20210531285930"
if ($Date -match '(\d{8})(\d\d)(\d{4})') {
[DateTime]::ParseExact(
$matches[1] + "{0:00}" -f ($matches[2] % 24) + $Matches[3],
"yyyyMMddHHmmss",$null).AddDays([Math]::Truncate($matches[2] / 24))
}

結果
2021年6月1日 4:59:30
2021/05/31(月) 17:54:07.74ID:Ji9/Q1Oe
短くできたw

if ('20210531285930' -match '(¥d{8})(¥d¥d)(¥d¥d)(¥d¥d)') {
$date = [datetime]::ParseExact($Matches[1],'yyyyMMdd', $null)
$date = $date.AddSeconds(3600 * $Matches[2] + 60 * $Matches[3] + $Matches[4])
}
290283
垢版 |
2021/05/31(月) 18:14:56.90ID:c+QWTXgx
>>289
コレがいいね
291sage
垢版 |
2021/05/31(月) 22:04:33.58ID:u2buNtAx
普通にtimespanを足せば良いのでは
if ('20210531285930' -match '(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)') {
$date = [datetime]::new($Matches[1],$Matches[2],$Matches[3]) + [timespan]::new($Matches[4],$Matches[5],$Matches[6])
}
2021/05/31(月) 22:21:34.37ID:Xrj+zWn5
それで良さそう
2021/05/31(月) 22:56:32.02ID:Jlz0F1qQ
なんや?!
みんな天才か〜?
294283
垢版 |
2021/06/01(火) 11:56:40.00ID:j5BVtDLr
>>291
なぜ最初にコレを思いつかなかったのか…
2021/06/01(火) 14:33:19.17ID:XU9T32gU
うむ。.netのクラスとか俺ほとんど知らんしなw
2021/06/01(火) 22:23:28.52ID:9NYpA/Ih
Powershellって無くなるって本当ですか?

ある人が言うには、マイクロソフトが公式で
「Powershellは無くして、Bashに統合するって言ってるからPowershellなんて使えても意味ないよ」<ほぼ原文

という事らしいです。

 @そのものズバリの公式案内って出てますか?
 A「xxを拡大解釈して、↑のような話と勘違いしてるのではないか」というのがあったら教えてください。
2021/06/01(火) 22:39:23.71ID:4GbGJr6m
無くすとしても10年くらいかかりそう
2021/06/01(火) 23:08:56.48ID:j5BVtDLr
powershell 5.1じゃなくて.Net Coreベースのpowershell 7を学習しようとかじゃなくて、まるっきりbashに置き換わるってなると妄想レベルとしか
2021/06/01(火) 23:19:45.60ID:zB/DdO2P
マイクロソフト公式がそう言ってるならその発言ソースをググって見つければいい
公式→ある人→296→いまここ
なので、しょうもない伝言ゲームだろうね
2021/06/02(水) 00:33:14.18ID:eotjJV13
そんな発言があれば間違いなくニュースになってる
2021/06/02(水) 01:29:05.02ID:bSFCodu+
まあ無くなるかはともかく、pscoreでちょっと怪しくなってきたよね
pscoreが今後Windowsにバンドルされることは恐らくないだろうから、PowerShellはWindowsOSの一部から単なるアプリの一つへとある意味格下げされたわけだ
それについてはMSも公式に明言している(https://docs.microsoft.com/ja-jp/powershell/scripting/powershell-support-lifecycle?view=powershell-7.1)
そしてps5の方は既に完全にメンテナンスモード入りしており、今後の進化は無いし、いずれはWindowsにバンドルされなくなるだろう
PowerShellはWindowsプラットフォームにおいて特別な存在ではなくなりつつあり、bashと同じ土俵に降りるんだよ
2021/06/02(水) 01:51:03.87ID:2CEtavTf
正直bash標準はイヤだな
PowerShellと比較して仕様が古臭過ぎる
2021/06/02(水) 07:37:21.92ID:GaFo88h4
bashでwindowsの中身いじるのができなかったからpowershell作る必要があった訳で
2021/06/02(水) 08:00:00.07ID:QekliMfV
>>301
.NET 5か6がOSリリースに組み込まれるようになれば一緒に置き換わるでしょ
インタラクティブなシェル機能だけが重要でbashというかreadlineが使いたいなら使えばよいけど、.NETをbashから使える仕組みってできてるんだっけ?
2021/06/02(水) 08:48:27.00ID:UfLjqhXv
bashとかを置き換えるつもりだと思ってたんだけど…
もうちょい野心持っていいのよ?

wsl使ってるけど$profileとか共有できてすごく便利なんだけど

bashもよく使うが、補完が各コマンドにハードコード対応してる仕組みなので、GNU Readlineが生きてないなと
PSReadline/pwshみたいにユーザースクリプトにParam記述できる仕様じゃないとインタラクティブシェルとして将来性が無いと思う

逆に言えば、コメントに#Param記述して読んで補完くれるbsh系があれば便利ね
コメントなら互換性も問題ないでしょ
2021/06/02(水) 08:52:13.04ID:UfLjqhXv
wslスレ覗くとpwsh使ってる人結構多いように思える

まあ変なのいっぱい居てアレ過ぎるスレだが、蛇足
2021/06/02(水) 09:04:39.46ID:Q9QmX+x6
Windows Subsystem for Linux に関してよく寄せられる質問
https://docs.microsoft.com/ja-jp/windows/wsl/faq#powershell-----------------

PowerShell においてこれは何を意味しますか。

OSS プロジェクトでの作業中、PowerShell プロンプトから Bash を実行すると非常に役立つシナリオが多数あります。
Bash のサポートは補完的なものであり、Windows でのそのコマンド ラインの価値を高め、
PowerShell と PowerShell コミュニティでその他の一般的なテクノロジを利用できるようにします。

詳細については、PowerShell チームのブログ「Windows の Bash:それがすばらしい理由と PowerShell における意味」をお読みください
https://devblogs.microsoft.com/powershell/bash-for-windows-why-its-awesome-and-what-it-means-for-powershell/
2021/06/02(水) 09:37:33.58ID:F5GxLFUH
>>304
.NET5以降がWindowsにバンドルされることはないでしょ
ライフサイクルをWindowsに拘束されたくないから.NET Coreは完全なサイドバイサイドとSCDを実現したのに、そんなことをしたら台無し
.NETを使うならpwshというのはこれからもずっと変わらないだろうし、一貫したコマンドレットの体系でWindowsのサーバー管理ができるという強みもあるけど、後者については案外突然.NET非依存のWindows CLIとか出るかもよ
Azure CLIだってPythonで書かれてるんだし
2021/06/02(水) 09:53:48.83ID:IMALmVrS
それもしかして、WSHというヤツでは?
まあ好きでもないし新しいのに置き換えてくれるのは歓迎だよ

$wsh = new-object -com w/cscript.shell
みたいにしてたまにメソッドこねこねするけど、COMオブジェクトのインターフェイス備えるなら今まで通り叩けるんじゃない
2021/06/02(水) 11:02:38.88ID:CFdyIdLe
C#越しとかでローレベルAPI叩けたり大丈夫かこれって思ってたらやっぱ消えるのか・・・
2021/06/02(水) 11:07:50.97ID:E0Lr8asm
>>310
消えないよ
2021/06/02(水) 11:15:29.60ID:UfLjqhXv
.net coreの実装はいっぱいあるからバックエンドは心配ないんじゃない?
MS推奨の.net core, asp core, 使ったことないがMSから少し離れてもmonoとか他にも

.net core(linux)は50MBくらいにまとまってたかと
2021/06/02(水) 11:35:59.36ID:UfLjqhXv
>>308
winへの巨大なpythonランタイムのバンドルが許されるんなら、.net coreもバンドルしていいんじゃないかな(並存で)

.net coreはpythonライブラリとしても便利だし、今時数百MBくらいケチらないで両方入れて欲しい
スマホにすら.net core以上相当のXamarinやmono入ってるだろ(多分ストアから依存経由で)
2021/06/02(水) 12:14:47.64ID:F5GxLFUH
>>313
WindowsにバンドルされてしまうとMSはそれをWindowsの一部としてサポートしなければならなくなり、.NETのモダンライフサイクルポリシーと矛盾する
また、Windowsにバンドルされているバージョン以外はほとんど利用されなくなり、プラットフォームの進化が停滞する
もしpwshをWindowsにバンドルするならSCDにして.NETのライフサイクルから分離してしまうしかないだろうけど、
それはそれで.NETランタイムのバージョンがpwshにバンドルされているものに拘束されることになり、pwshエコシステムの外にある.NET資産との連携がしづらくなるだろうから難しいところだな
2021/06/02(水) 12:36:23.07ID:rkuOfU34
winはサードパーティの物はバンドルしない方針じゃない?ルールになってるかはしらんが
まあ善き終身独裁者はMS社員なので、pythonがMSサポートになる可能性はあるかも?

最近サポート切れた2.7をバンドルし、ディストリ拡張に汎用してたlinuxは現に大変なことなってるし、止めといた方がいい
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が必要なんじゃない?
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)無反応だな
2021/07/18(日) 20:02:18.33ID:1Kc/AZp0
>>434
正式版は出てないけど
2021/07/24(土) 08:32:00.72ID:+h0yrKJy
PowerShell始まったな

v7.2.0-preview.8 Release of PowerShell
https://github.com/PowerShell/PowerShell/releases/tag/v7.2.0-preview.8
> Add support to colorize FileInfo file names (#14403)
https://github.com/PowerShell/PowerShell/pull/14403
2021/07/24(土) 18:02:44.97ID:77oXDTTE
素人ですいません
デバイスとプリンターの中にあるスマホ「sh-08」をBtのアクセスポイント接続させるのは
コマンドラインではどう書けばいいんでしょうか?
2021/07/24(土) 18:19:05.10ID:VrPEdYlD
Connect-Me sh-08 -Through Bluetooth
2021/07/24(土) 19:35:50.21ID:pyapQHEM
嘘はいいです
2021/07/25(日) 08:38:03.39ID:c5+NRcB7
ツッコミどころ満載なリクエストだな
2021/07/25(日) 14:36:00.14ID:uBtwZZWI
Windows PowerShellでBluetoothを接続および削除する方法
https://base64.work/so/powershell/1664979
2021/07/25(日) 14:46:31.15ID:rfVczbW/
ヒントありがとうございます やっぱちょい難しそうですね
2021/07/25(日) 15:15:38.30ID:AEWDeocZ
昇格されたアクセス許可が必要って時点でもう何か違うような
2021/07/25(日) 20:56:19.00ID:MU31hGNj
get-wmiobjectでインスタンス見つけて接続すりゃいいんだろうけど、PC側からスマホに接続するって、どんな用途なのかな?
スマホ側の写真をPCに転送するぐらいでしかBluetooth使ったことないので、なんか便利なこと出来るなら教えて欲しい
445437
垢版 |
2021/07/25(日) 22:39:31.80ID:rfVczbW/
普段の回線だと5ch規制で書けないのでBtテザリングのスマホ回線に切り替えるわけですが
いちいちスマホのアイコンを右クリッタするのが面倒なのでバッチファイルで接続できないかなと
メトリック値の書き換えで回線切り替えるのはできてるんですが
2021/07/25(日) 23:06:54.56ID:WJtzD90t
なるほど
常に接続してるなら静的ルート設定するなりしておけばいいんだろうけど、スマホだとそうもいかないから、書き込むときだけモバイル回線使うようにしたいってことね
2021/07/25(日) 23:22:27.51ID:AEWDeocZ
スマホのアイコンの右クリックとかの操作をするだけならシェル名前空間の範囲でできそうだね
$shapp = new-object -com "Shell.Application"
$folder = $shapp.Namespace([System.Environment]::GetFolderPath("desktop"))
foreach ($item in $folder.Items()) {
if ($item.Name -like '*スマホ名*') {
foreach ($Verb in $item.Verbs()) {
if ($Verb.Name -like '*接続とか何とか*') {
$Verb.DoIt();
}
}
}
}
2021/07/27(火) 04:10:09.87ID:MxdGAs2p
カスタムオブジェクトを返すコマンドレットを作って戻り値を変数に割り当てた時、
変数名の後にメンバーが補完される場合とされない場合があるんだけど何が基準なんだろう?
2021/08/04(水) 01:55:31.71ID:0L18Nxkj
>>231
実行ファイル名の変更はマジで影響でかそうだよね。
例えばリモートデスクトップだって実行ファイル名はいまだに大昔の
mstsc(Microsoft Terminal Services Client の略称)のまま変えてないというのに。。
2021/08/04(水) 08:23:43.34ID:HT9phpQf
.NETのサポート期間はLTSでも3年なので、今後もしWindowsに標準で入れるなら3年ごとにWindowsUpdateで破壊的変更が入るという冗談のようなシェルになる
どうせ誰も移行しないんだから問題ないよ
2021/08/04(水) 09:26:01.56ID:DV/IEEV3
このスレに来るくらいのヘビーユーザー以外は大した移行コストを払うほどスクリプトを書いてないんんじゃね
少なくとも俺が書いたスクリプトは修正した記憶がない
2021/08/04(水) 09:29:59.39ID:DV/IEEV3
何年か前からアナウンスしても移行が破綻するほどに互換性が皆無なら、言語そのものが致命的な破壊的変更すぎるということだし
そうでないならどこかのタイミングでエイリアス化してもそこまで困らない
ちょうどいまのIEとEdgeに似た状況なのでは
2021/08/04(水) 09:42:06.91ID:L56ZMFZY
powershellってスクリプトそれ自体が資産というよりは、特定の環境とセットで動きゃOKな書き捨てスクリプトがほとんどだろうから、
現実には.NETランタイムもpwshも自分で入れてサポート期限なんか無視してバージョン固定で塩漬けだろうね
むしろ勝手に更新される心配がない分嬉しいまである
社用端末のログインスクリプトだったり、厳密にサポート期限を気にして更新していかなきゃいけないような案件だったら使い物にならんわな
2021/08/05(木) 04:38:47.31ID:Tf/rxMp6
>>453
>社用端末のログインスクリプトだったり、厳密にサポート期限を気にして更新していかなきゃいけないような案件だったら使い物にならんわな

夜間バッチをbatで書いてたのを全部powershellに書き換えた企業とかあるけど、後悔あとに立たずだろうなあw
2021/08/05(木) 06:00:44.46ID:DkKGSCcN
>>454
なんで?
動くだろ
2021/08/05(木) 08:17:53.45ID:aTGdTUkH
そんな古臭い現場が移行するわけないでしょ
最終的にはps6以降のシリーズよりもps5の方が長くサポートされるだらうから何の問題もないよw
2021/08/05(木) 08:52:46.08ID:P8xbWRAo
互換性がどの程度でメンテや疎通のコストがどれほど必要になるのかを考えずに騒ぐのってどうなの
ワクチンの0.0014%の死亡率を見て、危険!ありえない!と叫ぶような非論理性を感じる
2021/08/05(木) 09:53:34.22ID:RzFkoDJo
コストは連続じゃないからね
実務経験あるならわかると思うけど、更新しなきゃいけない、更新したら壊れるかもしれない、最低限動作確認しなきゃいけない、
そういうことを考慮しなければならない時点で大きなコストなんだよ
その定量的な頻度や程度はあまり関係なくて、定性的にあるかないかで非連続なコストが発生するの
2021/08/05(木) 12:40:39.61ID:0ODnTX6h
Powershellでどんだけ巨大なシステム組んでんだろw
2021/08/05(木) 12:42:01.42ID:0ODnTX6h
pwsh.exe、psh.exe、ps.exeと3年毎に名前が変わったら俺もキレると思う
2021/08/05(木) 14:02:00.09ID:BRBZpMlk
別バージョンはちがう名前と考えれば納得いく
2021/08/05(木) 17:14:02.32ID:n+pQsKjw
>>458
結局、それが「考慮しなければならない」とか「定性的にあるかないか」っていう判断をするボーダーラインがあるって事だろ
>>457が言ってる程度の問題と本質的に変わらない
2021/08/05(木) 21:43:19.74ID:2EEp5i6b
コンソール無し版のpowershellwはまだですかいのう
2021/08/06(金) 00:16:50.16ID:qtuT33q6
何に使うのそれ・・・
2021/08/06(金) 02:36:04.91ID:kh9nM6mS
>>464
https://zenn.dev/kumarstack55/articles/2021-01-25-powershell-hide-window
2021/08/09(月) 13:18:29.21ID:cnxPPV9E
ISEは便利そうと思いつつ放置してるんだけどpwsh7xも使えるっぽいとどこかで読んだ
試してみるか
2021/08/09(月) 13:50:21.79ID:10+Ek5eo
なぜいまISE?
msはISEの開発を止めてVS Codeに軸足を移してるから今始めるならVS Codeじゃないのかな
統合エディタだから学習コストも増えるけどモダンエディタを知らずに過ごすのはそれはそれでもったいない
2021/08/09(月) 15:52:32.05ID:HsfcqsrB
>>467
VSCodeでデバッグしてると、たまに挙動おかしくなる(ブレークポイントで止まらなくなったり)んだが、ISEだと問題なかったりする。

こういうときは諦めてISE使うしかないの?
2021/08/09(月) 17:36:09.94ID:oYIWlVz7
>>468
そんな挙動に出くわしたこと無いなぁ
2021/08/09(月) 18:44:32.05ID:cLprbED+
>>460
unix系だとシバンで困る
7系をパッケージマネージャで入れるとパスにはpwsh-previewなる実行ファイルが置かれる
8になったら今度はそれがpwsh-previewだろうし
せめてpwsh7とか、あんまり攻めない内容ならpwshでざっくり指定させて欲しい

勝手にni pwsh -target pwsh-preview -itemtype symboliclinkしてるけど
2021/08/10(火) 00:57:50.39ID:KvFy61fq
単にブレークポイントまでたどり着いて無いんじゃないのか
VSCodeで実行毎にPowerShellの環境作り直してくれる機能がないとデバッグできないわ
2021/08/14(土) 20:57:32.62ID:SLWROWoW
v7.0.7
https://github.com/PowerShell/PowerShell/releases/tag/v7.0.7
v7.1.4
https://github.com/PowerShell/PowerShell/releases/tag/v7.1.4
2021/08/15(日) 20:51:02.97ID:cCxAlcwE
(1 -eq 1 -eq 1) #True
(1 -le 2 -le 3) #True
(1 -lt 2 -lt 3) #False

何で3行目だけTrueではなくFalseになるの?誰か教えて
2021/08/15(日) 21:21:37.29ID:E1VQb9fL
1 -lt [int](2 -lt 3) って扱いになってるのかな
2021/08/15(日) 22:20:12.40ID:Z12lyLwX
比較演算子の左がブール値なら右の値もブール値として扱われるから0以外は全部trueになるってことやろね
2021/08/19(木) 18:57:52.65ID:HBxan8+j
.NetCore版って起動の高速化できないのかな
自分で使う分にはいいんだけど、スクリプト使ってもらう時に不安がられる
2021/08/20(金) 02:15:53.16ID:1z1ABMWo
わかる
2021/08/20(金) 03:36:25.48ID:fkNLvzJY
なんかしら起動中の表示してくれたらいいんだけどな
batファイルからPowershellスクリプト実行すれば似たようなことできるが、そのために態々batファイル作るのなんか嫌だ
2021/08/20(金) 17:22:54.58ID:iiwGu2qc
スクリプトに一行足して拡張子.batにするだけだと思うけど、何が嫌なのかな?
2021/08/20(金) 17:39:03.48ID:fkNLvzJY
PowerShell単体で渡せなくなるじゃん
2021/08/20(金) 17:46:31.39ID:fkNLvzJY
>>479
よく読んだら「スクリプトに一行足して拡張子.batにする」って
Powershellスクリプトをbatファイルとして保存して実行する方法があるって事?
2021/08/20(金) 20:05:06.99ID:iiwGu2qc
>>481
この記事のbase64の前に書いてあるのがそれ
https://qiita.com/cd01/items/82829ba0ec0f59e1b04d
2021/08/20(金) 20:06:46.01ID:iiwGu2qc
> やってることは、両方ともバッチファイルの中で自分自身を呼び出して、その呼び出す記述を呼び出す側で無視するという感じ。
484デフォルトの名無しさん
垢版 |
2021/08/22(日) 07:57:55.97ID:0Cz6ueFz
Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています

Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます

Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ

なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?

Nimの実験的特徴 バージョン1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html

第二プログラミング言語として Rust はオススメしません Nim をやるのです
https://wolfbash.hateblo.jp/entry/2017/07/30/193412


Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる

「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
2021/08/22(日) 16:22:22.41ID:wJpTfwln
batから呼び出す奴はこんなのもあるね
ttps://reosablo.hatenablog.jp/entry/2016/07/09/193617

.batのセキュリティゆるゆるなのを利用して実行権限無しでpowershellスクリプトを走らしちゃう感じらしい
2021/08/22(日) 18:32:28.29ID:Itquj+z7
簡易版はホントに短くまとまっててよいですね
今度から俺もこっちにしよう
2021/08/22(日) 19:00:26.43ID:uP295b6W
すげーなこういうのよく思い付くな
知ってしまえば簡単な仕組みだけど、
単一ファイルで動かすって発想がなかったから素直に感心する
488デフォルトの名無しさん
垢版 |
2021/08/22(日) 19:00:34.83ID:Itquj+z7
ExecutionPolicyを指定してこんな感じかな

@powershell/exe un /nop '#'+(gc \"%~f0\"-ra)^|iex&exit/b
489デフォルトの名無しさん
垢版 |
2021/08/22(日) 19:05:56.51ID:Itquj+z7
unじゃなくてuだけでよかった
490デフォルトの名無しさん
垢版 |
2021/08/22(日) 19:08:51.09ID:Itquj+z7
こうか
@powershell/ex u /nop '#'+(gc \"%~f0\"-ra)^|iex&exit/b
2021/08/22(日) 21:59:38.51ID:aqCRpfAk
例えば漏れは、デスクトップにショートカットを作って、
ダブルクリックで、Ruby スクリプトを起動してる。
同様に、PowerShell スクリプトも起動できないの?

リンク先
C:\Windows\System32\cmd@.exe /k "ruby C:/Users/Owner/Documents/a.rb"

注意。投稿できないので、間に@を入れました

作業フォルダ
C:\Users\Owner\Desktop
2021/08/22(日) 22:06:23.04ID:uP295b6W
>>491
だからrubyキチはバカって言われるんだよ
2021/08/22(日) 23:05:00.65ID:bImPNL7l
>>491
1ファイルで実行したいって言ってるのにショートカット作るのかよw
2021/08/23(月) 21:31:06.73ID:KSZvfVlM
てすと
C:\Windows\System32\cmd.exe
2021/08/24(火) 07:37:43.99ID:ttKQ7L6u
cmd&#46;exe
2021/08/25(水) 10:04:47.88ID:fqAWoYoi
バッチファイルに埋め込むときはシフトJISにしないといけないのがチョイ面倒ですね
昨今だとメモ帳もutf-8ですし
2021/08/26(木) 00:11:52.59ID:nRffzhpX
コードページ変えられるよ
2021/08/26(木) 00:12:33.27ID:nRffzhpX
chcp 65001
2021/08/26(木) 00:27:24.00ID:gGZ1hKqh
コードページ変更っていろいろ罠があったような…
フォントを変えておかないとダメとか
コマンドの一部は期待どおりに動作しないとか
2021/08/26(木) 09:51:33.43ID:ACJcVgWm
シフトJISにしておけばget-contentでエンコーディング指定も不要なので、まぁ、いいかなと
VS codeでオープン時or保存時にシフトJISにするだけですし
2021/08/26(木) 10:33:43.73ID:+CO4gcjh
$PSDefaultParameterValue["*:Encodings"] = "utf8NoBom"にしてるけど大体大丈夫だ
コマンドレットには全て暗黙に渡るので一貫性は保てる
Core 6/7だと空でもこれがデフォルトのはず
cmdはレジストリのどっかでchcp 65001指定した、とりあえず今まで問題はない、気がする
2021/08/26(木) 10:37:16.39ID:+CO4gcjh
utf8は低レベルでの扱いがめんどいから、固定長utf-32か、ほぼ固定長のutf-16が流行ってくれた方が嬉しかったんだけれども…
2021/08/26(木) 11:30:02.61ID:ZNJjgCSR
非圧縮だと通信速度が4倍遅くなる可能性があるけどよいか?
2021/08/26(木) 12:31:14.96ID:+CO4gcjh
デコードに結構計算要るし、最悪ケースで一番容量食うのはutf-8だったりするので、俺はそのへん懐疑的
まあ普及してしまったものは仕方ない
2021/08/26(木) 12:41:27.12ID:+CO4gcjh
パイプでネイティブコマンド繋いだりすると化けることあるな
普通のは大丈夫、less.exeとかmingw64配布のネイティブバイナリが怪しい?

sasp を付けて流し込むと直る模様、エンコ調べてハードコードより手軽かつ変更に強そうなのでおすすめ
2021/08/26(木) 12:47:48.74ID:+CO4gcjh
preference variableのエンコード指定はコマンドレットに適用されるので、native.exeは面倒見てくれないけど、saps exe -nonewなら見てくれる
ってことかな
2021/08/26(木) 13:49:51.35ID:nnRqDEk/
win用ページャはvimがいい
マニュアル読むにもデフォルトでpowershellのシンタックスハイライトあるし、読み書きエンコードがコマンドラインオプション指定できて、高度なコマンドも渡せるフィルターとして使える
2021/08/26(木) 15:27:38.41ID:ACJcVgWm
vs code使ってるから、インテリセンスで大体事足りるし、ショートカットキーでオンラインヘルプがブラウザでひらくから、あんま困ったことないかなぁ
2021/08/26(木) 17:57:13.12ID:+CO4gcjh
フィルターというと
gc file |vim - -Es -c ":set fenc=sjis" -c
%p | ...
みたいな使い方か、nkfでもいいけど
sedが多バイト文字怪しかったりbom有りで死んだりするのでvim -c "s/foo/bar/g" -c "wq"で、文法がほぼ同じなvimで代用したりはする
機能的にはsedの上位版ではあるけど、一度バッファに全て読み込むのでスケーラブルじゃないね

先読み後読み駆使した複雑な正規表現ではコンパイルして使い回せるpwshに軍配が挙がる
2021/08/28(土) 21:15:44.38ID:ClOfPjkS
初心者ですが、PowerShell でスクレイピングしたいので正規表現について教えてください。

$aa = Invoke-WebRequest https://www.epson.jp/products/colorio/ep982a3/spec.htm
$bb = [Text.Encoding]::GetEncoding("UTF-8").GetString( [Text.Encoding]::GetEncoding("ISO-8859-1").GetBytes($aa.Content) )
$cc = ($bb -replace '<[^>]+>','')
$dd = $cc.split("`n").trim() | ?{$_ -ne ""}

$dd | more
  :
消費電力
約17W(スタンドアローンコピー時)
電源電圧
AC100V 50/60Hz
外形寸法(幅×奥行×高さ)収納時
479×356×148(mm)
外形寸法(幅×奥行×高さ)使用時
479×668×295(mm)
質量
(注)本体のみ
約8.5kg
  :


電源電圧  をキーとして、
AC100V 50/60Hz

質量  をキーとして、
約8.5kg

正規表現でマッチした次の行、次の次の行を得るには どう記述すればいいでしょうか?
2021/08/28(土) 22:13:51.92ID:+Hoc5wa5
$aa = Invoke-WebRequest https://www.epson.jp/products/colorio/ep982a3/spec.htm
$bb = [Text.Encoding]::GetEncoding("UTF-8").GetString( [Text.Encoding]::GetEncoding("ISO-8859-1").GetBytes($aa.Content) )
$cc = ($bb -replace '<[^>]+>','')

if ($cc -match '電源電圧\r\n *(.*?)\r\n') {
$Matches[1]
}
if ($cc -match '質量\r\n.+?\r\n *(.*?)\r\n') {
$Matches[1]
}
2021/08/28(土) 22:18:47.92ID:ClOfPjkS
ありがとうございました!
2021/08/30(月) 10:04:38.64ID:AbACJw8j
正規表現マスターおるね
2021/08/30(月) 13:35:00.90ID:VkQf119i
カッコのネストに対応してないのが気になる
正規表現はテスターサイトが色々あるから、とりあえず、色々試しながら覚えるのが手っ取り早いと思う
.netの正規表現ならregex stormが老舗
昔はよくお世話になってました
2021/08/30(月) 20:36:24.39ID:J14B/D7S
大昔awkで書いてた時にマッチしたら次の1行読むって処理にしてたのを思い出した
2021/08/30(月) 22:50:28.00ID:9GCOMhSC
Seleniumの勉強中なのでSelenium版

$Driver = Start-SeFirefox
Enter-SeUrl 'https://www.epson.jp/products/colorio/ep982a3/spec.htm' -Driver $Driver

$Element = Find-SeElement -Driver $Driver -XPath '//th[text() = "消費電力"]/following-sibling::td'
Write-Host $Element.Text
$Element = Find-SeElement -Driver $Driver -XPath '//th[text() = "質量"]/following-sibling::td'
Write-Host $Element.Text
$Driver.Quit()
2021/08/31(火) 01:30:20.09ID:Ee2Wu2cn
playwrightもpowershellともう少し親和性高いアセンブリ用意して欲しいところ
2021/09/10(金) 11:07:31.69ID:4cohbW8+
ランチャーからPowerShellのスクリプトを実行したいのですが、以下のコマンドラインだと警告が出ます。
powershell -ExecutionPolicy RemoteSigned -f Y:\ps\hoge.ps1

> セキュリティ警告
> 信頼するスクリプトのみを実行してください。インターネットから入手したスクリプトは便利ですが、コンピューターに危害を及ぼ
> す可能性があります。このスクリプトを信頼する場合は、この警告メッセージが表示されないように、Unblock-File
> コマンドレットを使用して、スクリプトの実行を許可してください。Y:\ps\hoge.ps1 を実行しますか?
> [D] 実行しない(D) [R] 一度だけ実行する(R) [S] 中断(S) [?] ヘルプ (既定値は "D"):

警告を出さずに実行するにはどうすれば良いでしょうか。

Unblock-File -Path Y:\PS\hoge.ps1 は実行しています。
2021/09/10(金) 19:51:15.31ID:G99+MXml
RemoteSignedを別のに変える
520デフォルトの名無しさん
垢版 |
2021/09/10(金) 21:42:08.30ID:SltSonmt
ランチャーってのが何を指してるのかよくわからんけど
HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell\0\Command
でGet-ExecutionPolicyの結果がAllSignedでない時はSet-ExecutionPolicyしてるから,そのせいでは?
2021/09/11(土) 00:04:02.84ID:IblrjkB0
>>516
XPath を使っているの?

CSS セレクターも使えるの?
2021/09/12(日) 00:15:16.54ID:MdBr1Okr
>>521
使えるよ
2021/09/15(水) 21:42:25.76ID:iYdwhCOo
tasklistの/fi “status eq not responding”を毎回入力するのがくそめんどいんだけど省略形ってない?
2021/09/15(水) 22:11:56.20ID:VNs9ID1i
>>523
フィルタ済みのコマンドにエイリアスをセットして使ったら?
https://tks2.co.jp/2020/04/05/power-shell/
2021/09/16(木) 06:56:04.46ID:vPAKZgzi
>>524
遅くなったがエイリアスで解決したわサンクス
しかしbashやzshなら便利なエイリアスが最初からたくさんあるのにPowershellって本当に使い辛いな
特にPascal CaseとKebab Caseで命名されてるCmdletのクソさが半端じゃないわ
2021/09/16(木) 07:26:20.86ID:1vkERD+L
ならbash使えば良いじゃん
2021/09/16(木) 08:36:27.53ID:YRR26wx4
PSスレで質問に答えてもらって感謝しつつPSをめいっぱいdisって周囲をイラつかせてから去っていくスタイル
これは天然だなw
2021/09/16(木) 08:42:51.38ID:d2OD6VRD
そもそもbashに標準でエイリアスなんて定義されてなくね?
ディストリビュータが各々初期設定用意してることはあるが
優しいdebian系で両方使ってるけど、ls, grepに--color=auto付けるのと、オプション付けた変種のll, egrep, fgrep etc.で多分一桁だと思う

pwshはコマンドレット自体はもちろん、パラメータにもエイリアスの概念があって便利よ
標準では接頭語で定義されてる、曖昧さの生じない限り受け付ける
例:-OutputVariable、-ErrorActionは-ov, -ea等、-Name/-Countは-n/-c等
なんなら-na/-nam/-counでもよい、キモいけど

そもそも毎回パラメータ渡すのが面倒なら、暗黙に渡すようデフォルト設定できるぞ(about_Parameters_Default_Value)
2021/09/16(木) 08:53:37.34ID:d2OD6VRD
ネイティブコマンドは/?を見てシグネチャを書き写し、引数丸投げするツーライナースクリプトを用意すると便利よ
パスに置いておけば勝手に補完が効くので、保管用ディレクトリを作っておき、コマンドラインからリダイレクトで適宜追記してる

自分でオプション文字列をパースするロジックを書き、それをcompletionコマンドで登録していく方式のbash_completionより便利
2021/09/16(木) 09:31:01.40ID:d2OD6VRD
あとwin限定だけど、tcsh-likeな伝統的aliasコマンドが好きならdoskey コマンドが全く等価
doskey ls=dir /ad
のように使う

名の示す通りレガシーかつunix/linuxと$profileが共有できないので、*-aliasか、シェル関数を推奨
2021/09/16(木) 10:03:53.37ID:4L00LZ3y
doskeyは外部コマンドだからpwshからも使えるはずだけど、f7でのヒストリ表示とかが効かん
古いコンソールAPI使ってTUIレンダリングアップするからターミナル依存かも?
2021/09/16(木) 11:11:11.19ID:80LkMEQe
win/coreならヒストリが少なくとも3つあるので競合してる可能性が大

doskey /hと同様にpowershellビルトインのヒストリもF7で表示されることになってるけど、PSReadlineをロードしてれば実際はそっちに吸われる
試しにremove-moduleすればわかる、設定弄って共存も可能とは思うけど、素直にPSReadlineがいいと思うけど

doskey自体は完全にシェル非依存、mingwのsh.exeですら使える事を確認済
/execmd=sh.exe, pwsh.exeの指定を忘れずに
2021/09/16(木) 11:17:45.26ID:80LkMEQe
そしてPSReadlineのデフォルトではF7にヒストリ表示をバインドしてないので何も起きない

Set-PSReadlineKeyHandler -Key F7 コマンド
でバインドできるのでビルトイン、doskey、その他お好みのを
2021/09/16(木) 11:32:09.09ID:80LkMEQe
doskeyは標準コマンドだしちょっとしたコンソールアプリにラインエディット機能付けるのに未だに便利だったりする

readlineやlinenoiseは大げさ過ぎるし、rlwrapはwin環境に入ってない事が多いし
2021/09/16(木) 11:45:45.62ID:4L00LZ3y
windows 11でPSCore7が標準装備になるらしいし、気兼ねなくPSReadlineでインタプリタとか書けるようになるんかね
536デフォルトの名無しさん
垢版 |
2021/09/16(木) 11:46:52.35ID:6/uu001h
psのコンソールでVZエディタのファイラーみたいにファイル選択できるのありますか?
2021/09/16(木) 11:59:04.94ID:4L00LZ3y
俺はvimのnetrw(標準プラグイン)使ってるな
unix/linuxなら大体入ってるし、winでもwinget install vimだけで導入が楽、同じように使えるのがよい
プロトコルもcurlを使うのでwinならscp等殆ど使える、linuxでは標準コマンドじゃないけど、まあ大体入ってるでしょう

ブックマーク、複数選択してまとめて移動、パターンで一括リネームなど地味に高機能でおすすめ
538デフォルトの名無しさん
垢版 |
2021/09/17(金) 16:40:15.99ID:J/w/zJeW
仕事が生きがい?会社員の分際で?そろそろ認めなさい…あなたたちは単なる駒です
⇒赤羽の父ひろゆきが教える仕事の本質とやりたいことの違いが凄過ぎて感動が止まらない…
https://www.youtube.com/watch?v=zkwQOdq17dI
【ひろゆき/切り抜き】サラリーマンって資本主義の奴隷なの?
https://www.youtube.com/watch?v=Vi-dvyd5ksE&;t=74s
【ひろゆき】社会人語っちゃうサラリーマンについて語りました
https://www.youtube.com/watch?v=pX7NHj_rIBg
奴隷は身近にある?日本の奴隷について【ひろゆき 切り抜き】
https://www.youtube.com/watch?v=evQjCUWIHV4
【ひろゆき】会社員なんて楽しくない?⇒楽しいしラクな仕事の仕方とは※サラリーマン必見!
https://www.youtube.com/watch?v=T95-FS8sT3w&;t=390s
【ひろゆき】日本のサラリーマン制度...終わってますよwww
https://www.youtube.com/watch?v=Y-30zk2zDn0
【ひろゆき】視聴者の質問そっちのけで虚言癖アピールするひろゆき
https://www.youtube.com/watch?v=cMjk9B4J2n4
【ひろゆき/切り抜き】虚言癖ってどうやって直せばいい?
https://www.youtube.com/watch?v=5cS7vyb0tfE
2021/09/17(金) 18:09:35.08ID:ELLRTb6O
コンソール上でコマンドレットに複数の引数をパイプラインで渡したいとき、一々
$temp = New-TemporaryFile
notepad $temp
cat $temp|渡し先
rm $temp
ってやってるんだけど、一々一時ファイル作るのが面倒です

・実行するとテキストエディタが開く
・保存して閉じたら、その内容が改行で区切られてパイプラインに渡される
・保存したファイルは勝手に消える
みたいなのをやりたいのですが何かいい方法はないでしょうか。

vimとやらでいい具体に出来そうな気がするのですが
2021/09/17(金) 18:37:18.96ID:h9YhuTVR
書いてる一連の処理をスクリプトにまとめるのではダメなの?
2021/09/17(金) 18:41:27.24ID:h9YhuTVR
エディタで編集したいってのが要件でないのなら、powershellのコンソールから配列作ってパイプに渡せばいいんじゃない?
2021/09/17(金) 18:49:09.93ID:h9YhuTVR
配列だとクォート面倒だからヒアドキュメントの方がいいか
2021/09/17(金) 18:49:56.37ID:8dXhLdl/
そもそもテキストエディタ使う時点わけわからん
普通にこんな感じでカンマ区切りで複数の値ぶち込んで一行で終わりで良くね
"値1","値2","値3","値4"|コマンドレット
2021/09/17(金) 19:28:59.09ID:WV0Z1neM
一時ファイルを要求してるのはpwshじゃなくてnotepadの方だからなあ
formsで複数行入力できるテキストエリアでも作ったらいいんじゃないの
2021/09/17(金) 19:36:59.65ID:ELLRTb6O
すいません

$temp = New-TemporaryFile
notepad $temp
部分をbegin、

cat $temp
部分をproccess、

rm $temp
部分をend、

にそれぞれ設定したコマンドレット作ったら解決しました。

>>543
スクリプトならともかく、毎回"a","b",ってやるの大変過ぎません・・・?
テキストエディタで書けばコピペやちょっとした編集も出来るし便利だと思ったんですが
2021/09/17(金) 20:19:24.87ID:HNxzcP2W
grep使えるテキストエディタなら一瞬だし
2021/09/17(金) 20:43:16.94ID:ELLRTb6O
>>546
詳しくお願いします
548デフォルトの名無しさん
垢版 |
2021/09/17(金) 23:17:28.58ID:f6z6dViq
542も書いてるけどヒアドキュメントでいいのでは?

PS C:\> -split @"
>> りんご
>> ゴリラ
>> ラッパ
>> パンツ
>> "@ |% { $_ * $_.length }
りんごりんごりんご
ゴリラゴリラゴリラ
ラッパラッパラッパ
パンツパンツパンツ

普通にコピペもできるし
2021/09/19(日) 06:06:12.94ID:WE3+ZJYa
>>535
> windows 11でPSCore7が標準装備になるらしいし、

どこの情報?
Previewにあるのは正式版ではごっそり消えることあるよ
2021/09/19(日) 06:28:42.01ID:WE3+ZJYa
>>318
3.10はまだrc
551デフォルトの名無しさん
垢版 |
2021/09/19(日) 18:29:20.62ID:8fpQIVxp
>>535
Windows11いれてみたけどPowershellは5.1で、pwshコマンドはないな…。
2021/09/21(火) 10:41:16.50ID:IpiCAawJ
>>1
>>301のリンク先にPowerShell のサポートライフサイクル書いてあるよ
>PowerShell Coreサポート終了日
7.1 2022 年 2 月中旬 (予定)
7.0 2022 年 12 月 3 日
6.2 2020 年 9 月 4 日
6.1 2019 年 9 月 28 日
6.0 2019 年 2 月 13 日
このドキュメントでは、PowerShell Core のサポートについて説明します。Windows PowerShell (1.0 から 5.1) は、Windows OS のコンポーネントです。 コンポーネントは、親製品または親プラットフォームと同様のサポートを受けます。

PowerShell 7.1 (現在) .NET 5.0 (最新) 上に構築されています。
PowerShell 7.0 (LTS) .NET Core 3.1 (LTS) 上に構築されています。
PowerShell 5.1 Windows 10 Anniversary Update および Windows Server 2016 でリリースされました。
PowerShell 4.0 Windows 8.1 および Windows Server 2012 R2 に統合されています。 Windows 7 SP1、Windows Server 2008 R2 SP1、Windows Server 2012 にインストールできます。
2021/09/21(火) 11:09:28.80ID:nttPkmcf
.net (core) に紐付くpwshとOSに紐付くpowershellか
11がpwshのみになったら、結構なインパクトだね
2021/09/21(火) 11:22:39.67ID:Da3XTUmu
まさかpowershellがこんなに早く泥沼レガシー化するとはな
まあPowerShellが成功したことの裏返しではあるが
2021/09/21(火) 11:32:16.53ID:nttPkmcf
まだ、pwsh一本になるかわからんのでは?
まぁ、自分はpwshになっても困らんけど
2021/09/21(火) 13:22:46.25ID:/2oLRKWG
>>553
powershellにどっぷり依存したスクリプトは死亡か
2021/09/21(火) 18:35:29.10ID:M4Sh91tB
2年弱で開発会社から使うなと言われる言語/バージョンなんて使えねぇ。
ソフト開発中に期限切れになる。
2021/09/21(火) 19:45:57.83ID:+NRxBuUH
Windows PowerShell 5.1使っておけばいいんじゃね
2021/09/22(水) 08:31:43.75ID:FN2sBDTe
>>557
それじゃあJavaが糞みたいじゃないか

https://www.infoq.com/jp/news/2021/08/java-17-glass/

多くのチームが6か月サイクルのメジャーリリース番号と一致するようにJavaバージョンをアップグレードしているという証拠はない。
New Relicの顧客ベース(数千万の本番JVMを含む)のデータによると、LTS以外のJavaバージョンが1.5%を超える市場シェアに至ったことは一度もない。
LTS以外のJavaバージョンのほとんどは、リリースから数か月以内に、0〜0.5%に低下する。

むしろ、市場全体としてはJava 8と11を使用し続けている。これには、Oracleから離れ、8と11の増分更新の提供を別のベンダーに依存している場合も含まれる。
現在、2つのLTSバージョンが市場シェアの二分しつつある(統計的なノイズレベルを下回る非LTSバージョンもある)。
これは、Java 8が普及した速さと比較して、Java 11の普及がはるかに遅いことを表している(3年で約50%の市場シェア)。
2021/09/22(水) 09:19:00.25ID:tSQB3N1g
>>559
Javaはクソだし脱Oracleの流れは相変わらず進んでるしで未来はないだろ
代わりの効かない言語でもなくなっちゃったし
2021/09/22(水) 20:05:39.38ID:3C9wtQqc
みずほ銀は Java 変えるの不可能なんじゃね
2021/09/23(木) 05:09:50.35ID:zN5TM8vm
そりゃまだCOBOLメインテナンスしてるとこもある
2021/09/23(木) 15:45:46.23ID:emRd8wBh
短期のリリースサイクルが困るならLTSのみ使って、インターネット接続がない特殊な用途なら、別途、MSと相談かwindows使わないことを検討したほうがいい
まぁ、ちょっと前だと新生銀行のATMとか、最近でもデジタルサイネージで再起動促すダイアログでて止まってたりするの見かけたけど

普通の使い方ならバージョン固定にしてセキュリテイパッチあてない運用は取り得無いから、ガンガン更新するしかないよね
2021/09/23(木) 19:44:57.25ID:vr6lr97h
ISO 規格になってる言語は安心だな。
古い規格で作成したシステムも、いつまでも正々堂々と使える。
使うなとは誰も言わないし、ライセンス料も請求されないし、訴訟も起こされない。 後方互換もばっちり。

Java は 1CPU あたり年60万円請求される。 マルチCPU、クラスタシステム、マルチサーバならサーバ側だけでも途方もない金額になるし、
それに加えクライアントPCにも使用者指名ごとに料金が発生する。
2021/09/23(木) 20:46:27.83ID:6yVIV0g8
> ISO 規格になってる言語は安心だな。

やはりC#の勝利か

ISO/IEC 23270:2018
Information technology - Programming languages - C#
https://www.iso.org/standard/75178.html
2021/09/23(木) 22:34:58.67ID:zvLE5dwK
C#の規格って全然更新されてなくて、実質的に全く意味をなしてないぞ
2021/09/23(木) 22:41:18.72ID:ELm2gUfv
更新されないのはいいことだ
2021/09/23(木) 22:58:53.32ID:0/zDNCjz
標準規格は「存在している」ことに意味がある
Rubyなんかもそうだけど、実際には更新されてなくて規格自体の利用価値は皆無だとしても、採用を後押しするための営業トークとしては有効だ
実際564や565は騙されてるわけだしな
2021/09/24(金) 00:30:37.06ID:0A2A7GYN
>>564
今はJRE使わない選択もできるけど、
新規はOracleと関わるの避けるだろうからJavaは緩やかに死んでいくと見た
2021/09/24(金) 00:49:07.36ID:Sk1oVFyh
OpenJDKで何一つ困ってないからなあ
Oracleがライセンス変更で一儲け狙ったのに、AmazonとかのOpenJDKのディストリビューションにJava市場がごっそり流れた
焦ったOracleがバージョン17から少しの間無償に戻しますんでどうかまた使ってくださいと懇願中(今ここ)
OracleJDKの有償サポートを望んでいる顧客がほとんどいなかったという結論が出たのでOpenJDKさえあればいい
2021/09/24(金) 02:02:31.19ID:LQ0rd/n8
>>567
実装の方がどんどん更新されてる
2021/09/25(土) 21:04:24.06ID:9x+/yV3L
Java の 3rd デベロッパを排除するため、Oracle が Java に機能追加して、
OpenJDK などのプロジェクトが Java に準拠していないと嫌がらせ訴訟することはできる。

Oracle が Microsoft に Java 訴訟したときの言いがかり内容は違うけど、同じ手法を使わないとは言えない。

スレチだから そろそろおしまい。
2021/09/25(土) 21:42:09.17ID:cC0TU6KS
自分が言いたいこと言い終わったからおしまいか
2021/09/25(土) 22:33:53.09ID:Y1lLm4iT
WinRMはいつまで生き残るんだろうね?
OpenSSHに取って代わられることになるのかなぁ
2021/09/29(水) 23:56:59.06ID:fF+iSaYJ
>>545
そこでcmd |vim -Es -c ':g/re/p'
>>574
sshもwinRMも気兼ねなく両方使えばいいのでは
unixとlinuxが接続先ならssh、rshにpwshを設定するのはあまり想定されてないのか設定がちょっと面倒

だとしても、両方標準でサポートしてるwinはやはりunix/linuxよりリモート向きOSだと思ってます
2021/10/01(金) 00:56:43.69ID:vAUcQRYE
適当なのを探すのが面倒でリマインダーアプリをpowershell(C#)辺りで作ろうかと思うんだが
UIをwinformにするかWeb系にするか迷ってる
2021/10/01(金) 01:47:02.72ID:9Tf9Sjyk
Windows.UI.Notificationsを使うという手も
https://den.dev/blog/powershell-windows-notification/
2021/10/03(日) 20:53:35.06ID:GJ3xKl9+
ver7.1のConvertFrom-Jsonで取得したPSCustomObject/Hashtableが
{ "name"="foo"; "count"=1}
となっていて、key名に"count"が使われている為、
$v.count
$v['count']
等の値の取得でエラーになってしまうんですが、どうにか取得する方法は無いですか?
自分にはjsonの原文をreplaceするぐらいしか方法が見つかりませんでした。orz
2021/10/03(日) 21:17:26.86ID:RfSUiDPv
どんなJSONを使ったのか書いてくれ
580578
垢版 |
2021/10/03(日) 21:20:02.89ID:GJ3xKl9+
すみません。別の理由でエラーが出てたみたいで、ちゃんと取得できました。
申し訳ないです。
2021/10/05(火) 14:45:19.45ID:Vzh0q/ov
名前被ってても普通に$hash.count/$hash["count"]で.Valuesのcountが引かれる筈だけど、それがハッシュの文法なので

むしろコレクションのpropertyのCountが隠されるのが問題、こちらが確実に欲しければ$hash.Values.Count等と書くのが安全

$hash.Keys.countも同じ値を返すけど、これはKeysからキー"count"を引いてるように読まれる可能性が高いので勧めない
2021/10/06(水) 13:37:05.91ID:Y3s6WLpv
>>581
$hash = @{Values = @{Count = -1}} とかだと、駄目だよね。

これ、本当に確実に取得するのは、わりと面倒なのかも。普通の使い方なら、
$hash.get_Count() とか、$hash.psbase.Count とかでいいとは思う。でも、

$hash | Add-Member ScriptMethod get_Count {-1} -Force

とかされると、get_Count() は使えなくなる。

$hash | Add-Member NoteProperty psbase @{Count = -1} -Force

とかはエラーになるけれど、

$psbase = New-Object Management.Automation.PSNoteProperty psbase, @{Count = -1}
$hash.psobject.Members.Add($psbase, $true)

とか強引に追加すると、妙なことになって、psbase.Count も使えなくなる。

本当に確実そうな方法は、(New-Object hashtable $hash).psbase.Count とか、
$hash.GetType().GetProperty('Count').GetValue($hash) とか?
583デフォルトの名無しさん
垢版 |
2021/10/14(木) 16:20:34.79ID:Zuo7IXnW
powershellのcd (Get-Childitem)には、CDPATHに相当するもの(か概念)って無いのでしょうか?
(行きたいディレクトリに簡単に行けなくて 不便を感じてるのですが)
2021/10/14(木) 17:12:51.73ID:F6GJrbHM
ZLocationがおすすめ
https://github.com/vors/ZLocation
585デフォルトの名無しさん
垢版 |
2021/10/14(木) 17:56:55.09ID:Zuo7IXnW
>>584 情報ありがとうございます
まぁたしかに 何でも「つくればある」のだから、自分なりに工夫してみようかと思いました
586デフォルトの名無しさん
垢版 |
2021/10/14(木) 18:22:20.84ID:Zuo7IXnW
>>583
ついでに言えば…Set-Location の間違いでした (笑) 使い始めて二日目なもので...
2021/10/14(木) 21:15:12.30ID:loydBA97
ディレクトリをSet-Locationしたら.NETのAPI側も合わせないとずれたままだぞ
だから次のような2行書いとく習慣付けるといいかも
カレントパス指定なんてめったに使わないけど
Set-Location -Path パス名
[IO.Directory]::SetCurrentDirectory((Get-Location).ProviderPath)
2021/10/14(木) 23:40:28.07ID:aRG2i7ze
それこそGetCurrentDirectory使うときだけの話だよな
対話的にSet-Location使う程度では必要ないだろう
べつに(pwd).Pathとかも渡せるし

CDPATH 
pwshでそんな移動しまくらないからワイには必要ないな
2021/10/15(金) 01:03:33.08ID:P3+DrVIB
適当に$CDPATH=Get-Locationとかやってりゃいいんじゃない?
2021/10/15(金) 22:58:53.33ID:KlL89mo2
v7.0.8
https://github.com/PowerShell/PowerShell/releases/tag/v7.0.8
v7.1.5
https://github.com/PowerShell/PowerShell/releases/tag/v7.1.5
2021/10/19(火) 14:42:15.67ID:1a7BUMOp
一旦powershellで作ったはいいものの
起動が遅くてバッチやvbsで作り直す
常駐物ならC#で書き直す
2021/10/19(火) 20:57:46.00ID:aBJ6lObS
一旦powershellで作ったのはいいものでした
2021/10/19(火) 21:23:11.41ID:90J0NSJZ
PowerShellの起動が遅いと思うような環境ならC#アプリの起動も遅そうな気がするんだが
2021/10/20(水) 12:22:16.87ID:yLBdcth0
>>593
バッチやvbsだとpowershellが起動するまでに処理が終わってるし
C#に関しては話にならんほど差が出る
powershellの起動の問題は.NETランタイム以外にあるんじゃないの
サクっと作れるのは評価するが本番運用ではとても使えない
2021/10/20(水) 12:56:45.87ID:ngUNbqNs
要件次第としか
2021/10/20(水) 13:47:15.88ID:CIRlmBOD
起動時間シビアに気にするような本番運用ばかりじゃないしな
2021/10/20(水) 20:57:29.51ID:3GaA8N5r
ネットワークが遅いのでは?
起動時にインターネット接続見に行くので、ネットワーク遅いと辛いことに
スクリプト実行するだけなら、noprofile, noninteractive付けると良いですよ
2021/10/20(水) 20:57:35.93ID:3tEv1Sl5
PowerShellの起動が遅い人はプロファイルで時間がかかる処理してるんじゃないの
2021/10/20(水) 21:53:25.89ID:U4hhSk0+
イニシャルローディング時間が遅いだけで初回限りの現象なのでは?
2021/10/20(水) 23:22:34.38ID:P5BDeiqM
ネットワーク見てたのchocolatyのプロファイル読んでたからでしたわw
2021/10/21(木) 04:01:48.12ID:ehpI/07M
ふざけんな
2021/10/21(木) 12:31:37.50ID:kkshIJkE
PowershellでExcel操作できるの素晴らしくて信者になりそう
VBAやったことないけどVScodeで書きにくいってだけで敬遠する
2021/10/21(木) 12:48:08.17ID:WbB1T+tY
流石にVBAの方が使いやすいぞ
でもpwshでやるのが好き
2021/10/21(木) 12:51:21.99ID:yR1RZl9g
ExelがインストールされてるならCOM経由で操作できると思うけど、インストールされてない環境ならC#用のライブラリ使う感じかな
2021/10/21(木) 12:52:01.86ID:yR1RZl9g
VBAは遅すぎてなぁ
2021/10/21(木) 19:59:19.64ID:9KFcOoVu
チャートぐらい.NETの機能で描けるしExcelもVBAもいらない
2021/10/21(木) 22:53:22.14ID:snz0FCDA
excelはやたら高度な因子分析機能やソルバ(非線形、進化的最適化)ついてるから侮れない
2021/10/21(木) 23:03:44.60ID:fjfGcsWO
チャート描くのが目的なら使わなくていいんじゃない?
Exelの資料を編集するのが目的なら、COMかライブラリ使うしかない
2021/10/22(金) 08:29:48.79ID:tVaBgZ6B
エクセルよくわからんけどA.xslxのあるセルの値をB.xlsxのある場所に移す簡単なプログラム依頼されてて、VBA使えばできるんだろうけどわざわざシートにバインドされたマクロ書くのが無駄に感じるからpowershellで済ませようとしている...ダメ?
2021/10/22(金) 09:07:19.52ID:RUjjkZxa
好きにしろ
611デフォルトの名無しさん
垢版 |
2021/10/22(金) 10:07:54.24ID:EjatPKif
.psファイルは普通のPCでは実行できないよ
2021/10/22(金) 10:55:51.24ID:/YA0OWyv
>>611
誰もポストスクリプトファイル実行する話なんかしてないけどね
2021/10/22(金) 13:06:34.54ID:SA+7zjBD
上の方にあるpowershellスクリプトをバッチファイル内に埋め込む方法使えば、普通のWindows 10 PCなら動かせますよ
ポストスクリプトも一応チューリング完全だから、実行系さえあれば動かせますねwww
2021/10/22(金) 20:46:03.99ID:6MiPd5ZV
あーウゼー
2021/10/22(金) 21:21:39.78ID:EVzz2nOu
>>611
拡張子間違ってるぞ
2021/10/22(金) 22:24:13.62ID:8L7RGAQS
VSCode の拡張機能・GrapeCity のExcel Viewer じゃ、ダメなのか?

他にも、Rainbow CSV とか
2021/10/22(金) 23:08:57.50ID:fpd3u34i
>>616
スレチ
2021/10/23(土) 00:12:21.69ID:pYmoDx9D
代替案を出しただけでスレチとか
世界征服したいですとか質問が来たらどうすんだ
2021/10/23(土) 07:48:25.45ID:YfqEVQfQ
バカじゃねぇの?
2021/10/23(土) 08:53:25.35ID:p7WIutVI
>>618
PSで解決できる案を出せばそれはスレの趣旨に沿うだろ
2021/10/23(土) 10:07:48.57ID:bwy1yWHL
PSで世界征服
2021/10/23(土) 10:22:51.64ID:LN9x/bbj
Excel入ってない環境で内容を確認するだけなら使えそう
同じ処理を繰り返し実行するならスクリプト作るのがベスト
CSVなら外部ライブラリ導入せずともpowershellだけで処理出来るし
心を込めた手作業派はスレチ
2021/10/23(土) 21:14:23.04ID:j/f4QfO8
powershellの方がVBより文法的に楽だろJK
2021/10/23(土) 21:31:40.91ID:Q4dm2fcp
シジルが気になる人はそれなりにいるんじゃないかな?
まぁ、俺もVBの文法は肌に合わなくて、どうしてもマクロじゃないとダメって時だけしか触りたくないけど
2021/10/23(土) 22:19:22.89ID:EHtNtO17
VBAマクロはGitとかの管理がしんどくてコードレビューも辛い
2021/10/23(土) 23:12:10.13ID:ChfdQawL
PowerShellでCOMのIDispatchな操作やるとオブジェクト参照リークしまくるから別の専用プロセスでやるよね?
627デフォルトの名無しさん
垢版 |
2021/10/24(日) 07:49:15.35ID:9JgQl7FC
連想配列を学習中なのですが…
$a = @{"a"=10 ; "b"=20; "c"=30 } などとして連想配列を作り
> $a.count
3 # たしかに要素数は 3

なのに
> $a.length
1

lengthは 1 になるのは何故? …っていうか、1って何の長さ?
普通の配列だと、要素数は lengthでも countでも同じなのに
2021/10/24(日) 07:57:43.39ID:l/N511if
>>626
別プロセスでもよいけど、スクリプトブロック内で参照するオブジェクト作って、ブロックの外側でGC呼び出すだけでも十分じゃない?
629デフォルトの名無しさん
垢版 |
2021/10/24(日) 08:09:09.46ID:l/N511if
>>627
$a | Get-Member
すると表示されるプロパティには"length"は無いし,いっつもタブ補完してるからlengthプロパティ見たことなかったけど,確かに1って表示されるね
630デフォルトの名無しさん
垢版 |
2021/10/24(日) 08:14:44.25ID:l/N511if
配列は
$a = 1,2,3
,$a | gm
するとCountがAliasPropertyでLengthがPropertyって出てくるね
2021/10/24(日) 08:17:36.78ID:j8yOk2Jj
New V3 Language Features
https://devblogs.microsoft.com/powershell/new-v3-language-features/

You can now use Count or Length on any object, even if it didn’t have the property.
If the object didn’t have a Count or Length property, it will will return 1 (or 0 for $null).
Objects that have Count or Length properties will continue to work as they always have.

PS> $a = 42
PS> $a.Count
1
2021/10/24(日) 08:23:20.00ID:l/N511if
なるほどー
勉強になりました。ありがとう
633デフォルトの名無しさん
垢版 |
2021/10/24(日) 08:28:32.82ID:9JgQl7FC
つまり lengthなんてのが無くても 1は返る…と.
たしかに tabキーでの補完は出なかったけれど
でも 配列には lengthあるし、個人的にはrubyでもlength使えてたので…うっかり書きそうな気はするが、
…とりあえず勉強になりました
2021/10/24(日) 08:29:58.92ID:l/N511if
>>600
pwshだと起動時に更新チェックしてますよ
環境変数でオフに出来るみたいだけど
2021/10/24(日) 08:35:16.11ID:l/N511if
自分もRuby使ってるから分かりますわー
powershellではプロパティを大文字始まりのCamelCaseで書く様にすると
慣れるの早くなると思います
2021/10/24(日) 08:46:22.73ID:JG8zeEOx
$a.Countで1が変えるよりエラーを返して欲しいな
637デフォルトの名無しさん
垢版 |
2021/10/24(日) 09:21:28.43ID:l/N511if
blogの記事読むとForEach-Objectした際に
列挙可能なものかそうでないかの判定を行わずに済ませるためみたいです
確かにv2の頃は出力が一個だけだった時のために@()でくくってましたわ
それよりもForEach-Objectの省略記法で
(ls).FullName
ができるの初めて知りました.これは便利
2021/10/24(日) 09:51:12.20ID:1SVJ9Wvp
>>631
なんでこんな余計な機能をつけるんだろうね
>>636が言うように素直にエラーにして欲しいわ
2021/10/24(日) 10:47:06.59ID:l/N511if
foreachできるかいちいち判定するより便利だし、よいと思うけどな
実際、自分で書くスクリプトはめっちゃ恩恵にあずかってる
2021/10/24(日) 11:21:20.50ID:7IRX6L2k
知ってれば便利だし、知らなくてもあまり害にならないからね
今回の質問のケースも調べる気がなく急いでたならCount使えばいい案件
シェル言語は厳格さより楽さ優先でいい
惜しむらくはPSがもっと普及していれば変な癖も含めて常識になるけど、そこまで至ってないところ
641sage
垢版 |
2021/10/24(日) 13:02:54.56ID:cIzJWM7z
こんな感じのコードでもエラーが出ない為と書いてあったね

$x = dir
for ($i = 0; $i –lt $x.Count; $i++)
{
$x[$i] …
}

$x.gettype() で調べると値が1つならSystem.IO.FileSystemInfo
2つ以上ならSystem.Arrayで配列
配列と1つの値で同じコードで出来るのは個人的には楽でいいと思う
2021/10/24(日) 15:45:25.76ID:dQwbGYLm
jQuery Object も、0, 1, 2以上でも、配列として同じ書き方ができる。
0でもエラーにならず、単にループしないだけ

0, 1, 2以上で、表現・型を変えるものは、大変
2021/10/24(日) 17:38:58.32ID:jz1DejpB
>>641
配列を期待してるのに1要素が返る場合に配列で返らないのは階層データ構造を作る場合とても困る
gcはいつも$hagelist = [string[]](gc hage.txt)
ってやってるわら
ハゲが一人だと配列にならないしハゲがいないと$nullになるし
要素数0、1、2以上で型が変わる仕様はいつ見ても気持ち悪い
2021/10/24(日) 18:40:57.32ID:1SVJ9Wvp
まあこの手の仕様はどっちが正解とかはないので結局は好き嫌いでしかないよね
個人的には単一の値と配列を同一に扱いたい時は@(…)で充分なような気がする
645デフォルトの名無しさん
垢版 |
2021/10/25(月) 07:12:04.32ID:UuRFLqCB
ForEach-Objectだと配列のネストをフラットにしてくれるけどforeachだとそうならないから
@()でくくるので全て解決ってことにはならないんじゃないかな
あと,エラー出してくれる動作の方が好みなら
Set-StrictMode -Version Latest
にするとエラーになりますよ
2021/10/25(月) 23:46:47.63ID:ahXaOei7
countが使えるから何だって感じ
外部テキストファイル扱う時は0バイト、1行のみ、複数行のテスト必須だな
2021/10/26(火) 00:05:31.73ID:lX9x28FW
そうしたければそうすればいいんじゃないかな?
俺は必須だとは思わないけど
2021/10/26(火) 09:37:37.38ID:t3bhaUes
いちいちバイト数や行数を調べるより
何も考えずに@()を使ったほうが分かりやすい
649デフォルトの名無しさん
垢版 |
2021/10/26(火) 11:39:01.57ID:lX9x28FW
配列に$nullや空文字列が含まれる場合のチェックはどのみち必要になるだろうからv3記法がスッキリ書けて嬉しい
@()で括るのは想定外の挙動になるのと、もうすでにもっと簡易な記法が言語サポートされてるんだから使う必要ない
650デフォルトの名無しさん
垢版 |
2021/10/28(木) 11:41:35.91ID:d18Bz9B/
powershelle初心者だけどこんなバッチファイルを書き換えたい場合どうやって置き換えたらいいかな?
%%j(2番目トークン)の参照方法が分からないので教えてください。

for /F "tokens=1-2" %%i in (%TBL%) do (
if "%1" == "%%i" (
set MSG=%%j
  )
)
651デフォルトの名無しさん
垢版 |
2021/10/28(木) 12:37:45.38ID:ZmBUU4bO
対応が付きやすいようになるべく同じかきかたしたらこんな感じかな
Get-Content $env:TBL -Encoding Oem | ForEach-Object {
$a, $b = -split $_
if ( $args[0] -eq $a ) {
$msg = $b
}
}
652デフォルトの名無しさん
垢版 |
2021/10/28(木) 12:38:27.35ID:ZmBUU4bO
半角スペースが消えちゃって見辛い(泣
653デフォルトの名無しさん
垢版 |
2021/10/28(木) 12:57:14.68ID:d18Bz9B/
>>652
ForEach-ObjectはXargsの様なものだと認識してるのですが少し齧ったレベルだと動きがよく分かりませんね…
後で実際に動かしてみます!どうもありがとうございます
654653
垢版 |
2021/10/28(木) 16:19:34.64ID:rsKCMs1x
>>651でやりたい動きになりました!
本当にありがとうございます!
2021/10/28(木) 21:48:59.07ID:ZmBUU4bO
ForEach-Objectはパイプからの入力を逐次に処理するイメージなので、なるべくまとめて処理するxargsとは逆の動作かな
Get-Contentはオプションなしだと行区切りの配列を返すので
自動変数$_には一行文の文字列が入る
-split演算子は右辺のみだと右辺の文字列を空白区切りで配列にして返すので
先頭の2つを受け取って処理してると

バッチと違って、対話環境で一つずつ動作を確認しながら動かせるので
いろいろ試して見ると早く慣れると思う
2021/10/28(木) 22:57:28.09ID:BKXGS6EF
みんなForeach-objectってよく覚えてるよね
省略形の%ばっかり使ってて忘れがちだわ
2021/10/29(金) 09:10:35.42ID:354Lg8uj
vscodeでスクリプト書いてると略すなって怒られるからね
2021/10/29(金) 13:55:51.86ID:o1+BEtnt
ターミナルでポチポチ動かす時は%や?を使ってる
コマンドレットもlsやcdを使ってるし
スクリプトはvscで指摘されるし補完も効くからエイリアス使わないかな
2021/10/29(金) 14:41:44.53ID:+PKyqpbv
>>656
まあ% = foreach-objectが染み付いてれば書くのも読むのも%のが早くはある
文法忘れるぐらいの頻度でしか触らない人は何じゃこりゃ!?ってなるが
2021/10/29(金) 18:01:47.11ID:83FlvPlk
スクリプトで低速のforeach-objectなんて使わないから、
結局本名で書く機会なんて無い。
2021/10/29(金) 19:43:20.82ID:o1+BEtnt
俺は結構使ってるなあ
2021/10/29(金) 22:42:07.83ID:354Lg8uj
>>660
PSで書くからには速度気にするべきじゃないと思うけどな
なんならパイプが遅いし
2021/10/29(金) 22:52:08.43ID:AeZX10et
ボトルネックになるような場所に使うなってのは当然だが
使う場所が無いってのはどうなんだろ
2021/10/30(土) 00:33:36.76ID:AwW6Wn8r
早すぎる最適化は諸悪の根源定期
性能改善を覚えるとそれが目的化するんや
そこに山があるんや
2021/11/02(火) 01:45:01.96ID:MFLvMhie
ForEach-Objectとわざわざ書く

%自体を使わない

がごっちゃになってるな

>>656
これが既成事実になってる気がする
別にみんな覚えてないだろ
補完は覚えているに入りません
2021/11/02(火) 01:50:33.01ID:MFLvMhie
iwr や gciなども アイリアス元なんか覚えてない
2021/11/02(火) 01:51:33.79ID:MFLvMhie
>>660
バッチファイルのfor /f(だっけ?)だし使わないわけない
目的が違うとしか言いようがない
2021/11/02(火) 07:40:44.52ID:+RlBaHPb
>>667
いや実際使ってないな
スクリプトブロックを&とかで呼び出して回した方が早いし書きやすいし
2021/11/02(火) 07:45:59.56ID:BCReJeM/
gciは使わないなぁ
lsか、補完でエイリアス元を使うかどっちか
オプション指定が必要な時はget-childitemですね

invoke-restmethodはproxy指定しないといけないから、コマンド履歴から呼び出してる
本当によく使うならプロファイルに書くんだけど、そこまででもない
2021/11/02(火) 07:53:21.41ID:BCReJeM/
>>668
どういうこと?
$array.ForEach{}みたいなのはforeach()の方が早いと思うけど
スクリプトブロックで回すってのがわかんないので、教えてもらいたいです
2021/11/02(火) 18:18:01.02ID:xDEug3LM
>>670
$array | &{process{ 何か処理 }}
スクリプトブロックのprocess部はパイプから受け取ったオブジェクトを1つずつ処理するのでこれでループ処理書ける

良いところ
パイプから渡せる
当然begin部とend部も使える
動作速度は%どころかforeach文すら上回る

悪いところ
&で呼び出すとスコープ周りが面倒臭い(ドットソースで呼べばいいだけだが)
2021/11/02(火) 18:52:00.08ID:BCReJeM/
すげー!
見た目Foreach-Objectと大して変わんないように見えるけど、なんで早いんだろう?
673デフォルトの名無しさん
垢版 |
2021/11/02(火) 19:10:27.17ID:BCReJeM/
全然意味ない例だけど試してみた

PS C:\> Measure-Command { ls -Recurse c:\Qt | & { process{$_.fullname > $null} } }
Days : 0
Hours : 0
Minutes : 0
Seconds : 5
Milliseconds : 196
Ticks : 51967700
TotalDays : 6.01478009259259E-05
TotalHours : 0.00144354722222222
TotalMinutes : 0.0866128333333333
TotalSeconds : 5.19677
TotalMilliseconds : 5196.77

PS C:\> Measure-Command { ls -Recurse c:\Qt | % {$_.fullname > $null} }
Days : 0
Hours : 0
Minutes : 0
Seconds : 6
Milliseconds : 190
Ticks : 61909279
TotalDays : 7.16542581018519E-05
TotalHours : 0.00171970219444444
TotalMinutes : 0.103182131666667
TotalSeconds : 6.1909279
TotalMilliseconds : 6190.9279

確かに速いね!不思議
2021/11/02(火) 20:10:29.35ID:cNrRrDlB
裏を返せばforeachは毎回スコープの是正処理が走るから遅いということか
675デフォルトの名無しさん
垢版 |
2021/11/02(火) 21:22:55.57ID:BCReJeM/
PS C:\> Measure-Command { ls -Rec c:\Qt |&{Begin{$f = [System.Collections.ArrayList]::new(); $d = [System.Collections.ArrayList]::new()} Process{if($_.Mode[0] -eq 'd'){$d.Add($_)}else{$f.Add($_)}} End{Write-Host "Directory: $($d.count), File: $($f.count)"}} }
Directory: 4915, File: 50123

Days : 0
Hours : 0
Minutes : 0
Seconds : 5
Milliseconds : 645
Ticks : 56455459
TotalDays : 6.53419664351852E-05
TotalHours : 0.00156820719444444
TotalMinutes : 0.0940924316666667
TotalSeconds : 5.6455459
TotalMilliseconds : 5645.5459


PS C:\> Measure-Command { ls -Rec c:\Qt |ForEach-Object -Begin{$f = [System.Collections.ArrayList]::new(); $d = [System.Collections.ArrayList]::new()} -Process{if($_.Mode[0] -eq 'd'){$d.Add($_)}else{$f.Add($_)}} -End{Write-Host "Directory: $($d.count), File: $($f.count)"} }
Directory: 4915, File: 50123

Days : 0
Hours : 0
Minutes : 0
Seconds : 6
Milliseconds : 736
Ticks : 67362805
TotalDays : 7.79662094907407E-05
TotalHours : 0.00187118902777778
TotalMinutes : 0.112271341666667
TotalSeconds : 6.7362805
TotalMilliseconds : 6736.2805

なるほどなぁ
2021/11/02(火) 21:31:08.82ID:k6b2gzuo
PowerShellのForeach-Objectは一体何をしているのか
https://tech.guitarrapc.com/entry/2013/03/09/210303
2021/11/02(火) 21:53:02.25ID:0RYZAUU5
凄い懐かしい書き込みを見てしまった、書いた記憶ないよ
2021/11/02(火) 22:32:36.74ID:BCReJeM/
え?もしかして???
実践ガイドブック買ってましたよ!
会社の備品でですが
2021/11/03(水) 00:42:33.36ID:5s18AOu6
2022/1からの電子帳簿保存法改正の関係で、フォルダに格納した電子取引のファイルを
検索できるようにするためにWindowsPowerShellを使ってみようかと思っています。

ひとまずファイルの命名規則を社員に周知して、それを
 Get-ChildItem -Name -Recurse | Where-Object { $_ -match ・・・
で正規表現で検索できそうなのは分かったのですが、これをサーバーの上位階層で使うと
それなりに時間がかかりそうです。

そこで以下質問なのですが、
電子取引ファイルを格納するフォルダにも新たに命名規則を適用したうえで
 Get-ChildItem * | Where-Object { $_.PSIsContainer }
のようにフォルダ名のみを検索するコマンドを使って、

「サーバー上位階層以下の全てのフォルダから、
 複数のAAAで始まるフォルダ名のフォルダの中のみを対象に
 BBBで始まる電子取引ファイルのみを表示する」

というコマンドは可能でしょうか?
680デフォルトの名無しさん
垢版 |
2021/11/03(水) 03:45:40.30ID:RbvYqhXw
こんな感じですかね

$dir_list = Get-ChildItem -rec -Directory -Filter 'AAA*'
foreach($d in $dir_list) { Get-ChildItem "$($d.FullName)\BBB*" -File }
2021/11/03(水) 03:55:12.55ID:XfZZ+0lv
Ruby で作った

# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠し directory, file は抽出されない
src_dir = "C:/Users/Owner/Documents/Ruby/test"
glob_pattern = src_dir + "/**/*" # 以下のすべてのファイル

# 指定する語句
dir_substr = "/test1"
file_substr = "test"

target_files = Dir.glob( glob_pattern )
.select { |full_path| File.file?( full_path ) } # ファイルのみ
.select { |full_path|
# フルパスのフォルダ名だけを取り出して、その先頭から、src_dirの部分を削除する。
# つまり、src_dir見た、相対パスのフォルダパスだけにする。
# そこから、include?で、指定の語句で始まる、フォルダ名を含むものだけを抽出する
File.dirname( full_path ).delete_prefix( src_dir ).
include?( dir_substr )
}
.select { |full_path|
# ファイル名だけを取り出して、指定の語句で始まる、ファイル名を含むものだけを抽出する
File.basename( full_path ).start_with?( file_substr )
}

puts target_files

出力
C:/Users/Owner/Documents/Ruby/test/csv/test10/test10.rb
C:/Users/Owner/Documents/Ruby/test/test141/test.ini
682681
垢版 |
2021/11/03(水) 09:08:04.21ID:XfZZ+0lv
>>681
基準とするフォルダが、C:/Users/Owner/Documents/Ruby/test の時、

出力
C:/Users/Owner/Documents/Ruby/test/csv/test10/test10.rb
C:/Users/Owner/Documents/Ruby/test/test141/test.ini

は、
基準フォルダのフルパス/csv/test10/test10.rb
基準フォルダのフルパス/test141/test.ini

そこで、フォルダ名に含まれる語句が、test1 の場合、
基準フォルダの直下・子だけでなく、/csv/test10/test10.rb など、
子孫のフォルダ名に含まれる場合も抽出している
2021/11/03(水) 09:42:35.20ID:ZuZHjCnO
これはRuby信者を装ったRubyアンチ
2021/11/03(水) 12:57:54.90ID:iUEuUW7J
ファイルシステム走査するのが遅いのは仕方ないからCSVでパスと検索フラグ保持するのがよさそう
2021/11/03(水) 13:30:44.29ID:Xpnui0Lt
ローカルドライブの話ならWindows Searchサービスの機能って使えないの
あれ何なの
2021/11/03(水) 14:28:09.82ID:S9aFy+Xx
ゴミ
2021/11/03(水) 14:45:47.88ID:Sv+q3Yur
Windowsサーチ-C#での全文検索
https://www.webdevqa.jp.net/ja/c%23/windows%E3%82%B5%E3%83%BC%E3%83%81c%EF%BC%83%E3%81%A7%E3%81%AE%E5%85%A8%E6%96%87%E6%A4%9C%E7%B4%A2/1073089363/
Windows Search
https://docs.microsoft.com/en-us/windows/win32/search/windows-search
2021/11/03(水) 14:46:11.73ID:RbvYqhXw
検索出来ればよいだけで、サーバーがWindowsなら、Everything使ってもいいんじゃないでしょうか
2021/11/03(水) 14:47:13.93ID:NXjfZMEM
インデックス貼ればいいんでは。知らんけど。
2021/11/03(水) 14:48:03.76ID:RbvYqhXw
https://forest.watch.impress.co.jp/library/software/everything/
2021/11/03(水) 14:54:32.83ID:RbvYqhXw
ファイル名検索で十分そうなんで、全文検索の例は違うかと
2021/11/03(水) 15:12:50.54ID:A+jxlAHC
まずは目標性能を提示した上で実測するところからじゃろ
2021/11/03(水) 15:25:21.20ID:RbvYqhXw
680で試してもらって、もっと速度が必要ならEverythingを検討するのがよいと思います
694601
垢版 |
2021/11/03(水) 16:05:48.67ID:5s18AOu6
ありがとうございます。

PGかじっただけの事務方でWindowsPowerShellも5日くらい前から
仕事の合間に調べ始めた初心者なので>>680の中身もパッと見よくわかりませんが
明日にでも調べながら試してみます。

Rubyは名前しか知らないのでごめんなさい。

上手くいかないようならEverythingというのを試してみます。
695679
垢版 |
2021/11/03(水) 16:06:34.89ID:5s18AOu6
↑なぜか名前が601になってました
2021/11/03(水) 20:50:39.41ID:RbvYqhXw
ここら辺が参考になると思います

https://docs.microsoft.com/en-us/powershell/scripting/learn/deep-dives/everything-about-string-substitutions?view=powershell-5.1

https://docs.microsoft.com/en-us/dotnet/api/system.io.directoryinfo?view=net-5.0&;viewFallbackFrom=net-4.8#properties
697681
垢版 |
2021/11/03(水) 22:48:52.74ID:XfZZ+0lv
漏れがテストしたら、

>>680
>>681
は、同じ結果になった
2021/11/05(金) 03:47:54.25ID:UB8UVAT8
>>673
実は配列にもドット演算子が定義されていて、こういう書き方も出来る
処理も速く、書きやすいので記述量のコスパがいい

配列.要素のプロパティ名 → 要素のプロパティ名配列

Measure-Command { (ls -Recurse c:\Qt).fullname > $null} }
2021/11/05(金) 04:18:51.55ID:UB8UVAT8
>>679
自分もファイル検索するスクリプト作ってるが、
速度は Where-Object と -match がボトルネックになってた

PSは特定の演算子の左オペランドを配列にすることでフィルタになるんだが、
これは処理が速いので置き換えた方がいい

配列 | Where-Object{ if($_ -match "正規表現"){$_} }

は、

配列 -match "正規表現"

で置き換えられる。
ただしパイプ処理ではなくなるので使用メモリは増える。
2021/11/05(金) 04:57:04.64ID:booIrJ0X
ワイルドカードで事足りるならget-childitemのfilterオプションが早いんじゃない?
2021/11/05(金) 05:09:54.73ID:UB8UVAT8
確かに
2021/11/07(日) 20:09:58.83ID:xhLNYeNd
シェルスクリプト板にも書いてしまったんやが
スクリプト内で関数をサブプロセスで動かして出力も表示させる書き方ってどうすればええんや?
shでの func & 的なことをしたい
703679
垢版 |
2021/11/07(日) 21:31:53.47ID:eC/ipH+D
脱線話になってしまうんですが、そもそもの国税庁の通達らしきものが全く流れてきていない中で
営業チラシとかからこの電子帳簿保存法の話を知って自分で調べている次第で…

で、調べてみると
https://www.nta.go.jp/law/joho-zeikaishaku/sonota/jirei/pdf/0021005-038.pdf
の2ページ目、検索要件として
「@取引年月日・取引先・金額で検索できること」
「A日付または金額の指定範囲検索」
「B2つ以上の任意の項目による検索」
とあり、そうなるとファイル名の命名規則に上記3項目を組み込み、
正規表現で検索する必要があるかな、という結論になったわけですが…

どうもこの2ページ目の※1に該当してABが不要になる可能性があり、
さらには
https://www.nta.go.jp/law/joho-zeikaishaku/sonota/jirei/pdf/0021006-031_06.pdf
の問12によると、そもそも既存のファイル管理だけしていれば検索機能要らないんじゃ…
というところに行きついたのが先週金曜の夜になります。

税理士に聞いても持ってる情報はこちらと大差なく、どう転んでいくか分からない状況 (;´д`)
2021/11/08(月) 00:13:47.57ID:bmKVlrQF
大変ですね。。。
税務署に問い合わせれば教えてくれるもんなんでしょうか?
2021/11/08(月) 00:23:43.73ID:bmKVlrQF
>>702
バックグラウンドで動かすのはstart-jobだけど、receive-jobしないといけないから、shと同じ雰囲気で動かすのは難しいんじゃないかな?
2021/11/08(月) 00:48:09.32ID:j5xrb+V9
>>705
ありがとう
諦める
2021/11/08(月) 01:18:37.98ID:bmKVlrQF
標準出力じゃなくてファイルに出力するなら、何も考えなくてよくて簡単なんですけどねぇ
2021/11/08(月) 14:40:09.96ID:ATC6W+sR
(echo foo &) | Receive-Job -Wait
709デフォルトの名無しさん
垢版 |
2021/11/08(月) 15:36:36.21ID:J2dLpPYS
配列にしてファイル名取得してコピーする動きさせたです
以下のようなイメージを浮かべていますが上手くいかなくてどう書いたらいいか有識者の方教えてください

$aaa[0]=〜.txt
$aaa[1]=〜.log
$aaa[2]=〜.sh

foreach($i in 0..2){
copy-item -force aaa[$i] $コピー先


$?で戻り値判定
710デフォルトの名無しさん
垢版 |
2021/11/08(月) 15:58:10.99ID:J2dLpPYS
自己解決したかも
下記でうまく動きましたわ頭悪い書き方かもしれないが

$aaa=@(ファイルパス,ファイルパス,ファイルパス)
$aaa | foreach-object { copy-item -force $aaa コピー先}
2021/11/08(月) 17:02:26.88ID:UsmHmtDw
パスの引数はliteralpath使った方がいいよ
普通のpathだとワイルドカードが有効になって面倒なことになる
712デフォルトの名無しさん
垢版 |
2021/11/08(月) 17:32:28.75ID:bmKVlrQF
literalpathを使った方が安全安心というのはその通りとして
戻り値チェックがなくなってるけど,それでよいのならこれでもいいんじゃないかと

foreach($i in ファイルパス,ファイルパス,ファイルパス){
copy-item -force $i コピー先
713デフォルトの名無しさん
垢版 |
2021/11/08(月) 17:45:54.79ID:J2dLpPYS
>>711
literalpath知りませんでした…
>>712
僕がしたかったのはその書き方です!そういう書き方の方が何してるのかわかりやすいと思うので

戻り値の件は書き損ねているだけなので大丈夫です
お二方ともご丁寧にどうもありがとうございます!
2021/11/08(月) 19:18:19.58ID:bmKVlrQF
[]*なんかはファイル名としては普通に使えるけどpowershellではワイルドカードとして扱われるんでliteralpath使うとよいです
2021/11/08(月) 20:03:51.47ID:Rlzdbs4L
さすがに * は使えないよ
2021/11/08(月) 21:40:49.31ID:Umd1M9Ks
*は使えないけど*は使える
<>は使えないけど<>は使える
つまり
717デフォルトの名無しさん
垢版 |
2021/11/08(月) 22:58:01.79ID:bmKVlrQF
>>715
ご指摘ありがとう
普通に間違えたw
2021/11/09(火) 09:20:55.86ID:6HgHkORr
v7.2.0
https://github.com/PowerShell/PowerShell/releases/tag/v7.2.0
PowerShell 7.2 の新機能
https://docs.microsoft.com/ja-jp/powershell/scripting/whats-new/what-s-new-in-powershell-72
2021/11/09(火) 18:10:17.23ID:m+qVFCof
>>703
YouTube に、ベストセラー『さおだけ屋はなぜ潰れないのか?』の著者・山田 真哉の動画がある

今現在も刻々と、変わり続けている
2021/11/09(火) 18:14:06.31ID:m+qVFCof
>>703
Libre Office を使えないの?

それで、何か問題でもあるのか?
721719
垢版 |
2021/11/09(火) 18:25:01.42ID:m+qVFCof
CSV なら、
VSCode の拡張機能・Rainbow CSV で、
RainBow Query Language(RBQL)とか、

GrapeCity のExcel Viewer などで、フィルター出来るのでは?
2021/11/10(水) 23:58:41.48ID:s7s2g3pi
Objectの配列ってあるやん?
例えばGet-childitemで返ってくるような奴。
こいつのあるプロパティの値で検索かけて、ヒットするオブジェクトを返してくれるコマンドレットってある?
2021/11/11(木) 07:34:27.20ID:rdUNi5nM
Where-Object
てかそれ知らなくても
Get-Childitem | %{ if($_.プロパティ -eq 'xxxx') $_ }
ってやればいいだけ
2021/11/11(木) 08:50:00.49ID:UywKMbXB
パイプラインからオブジェクトを削除する (Where-Object)
https://docs.microsoft.com/ja-jp/powershell/scripting/samples/removing-objects-from-the-pipeline--where-object-

PowerShell には、Where-Object コマンドレットがあります。これを使用すると、パイプラインの各オブジェクトをテストし、特定のテスト条件を満たしている場合にのみ、オブジェクトをパイプラインに沿って渡すことができます。 テストを通過しなかったオブジェクトは、パイプラインから削除されます。 テスト条件は、FilterScript パラメーターの値として指定します。
2021/11/11(木) 09:52:00.76ID:73eTlo3I
>>723
サンクス。
2021/11/11(木) 09:52:38.35ID:73eTlo3I
>>724
サンクス。
2021/11/11(木) 09:58:56.40ID:GzUsv1SA
プロパティの名前で検索するならこんな方法もありますよ

https://stackoverflow.com/questions/26997511/how-can-you-test-if-an-object-has-a-specific-property
2021/11/11(木) 13:58:48.12ID:AMbWD73B
質問です。

連想配列Aがあって、このAのkeyを要素とする配列Bがあります。
この配列Bの各要素の値のkeyを連想配列Aで対応するValueに全て置き換えたいのですがどうすれば良いでしょう?

新たに配列Cを作ってそこに置き換えた値を代入でもかまいません。

シンプルに出来れば良いのですが。
729728
垢版 |
2021/11/11(木) 14:20:34.82ID:7Xqdpo5k
重要な事書き忘れてました。

配列Bの要素にマッチする連想配列Aのkeyが存在しなければ、その配列の要素自体削除したい。
730デフォルトの名無しさん
垢版 |
2021/11/11(木) 14:30:48.53ID:GzUsv1SA
新規に$cを作ってよいのなら
PS C:\> $a = @{ a=1; b=2; c=3}
PS C:\> $b = @('a','b','c','d')
PS C:\> $c = @()
PS C:\> foreach ( $k in $b ) {
>> if ( $k -in $a.keys ) {
>> $c += $a[$k]
>> }
>> }
PS C:\> $c
1
2
3
PS C:\>

ではどうでしょう?
2021/11/11(木) 16:10:35.43ID:VwMpkHW9
>> if ( $k -in $a.keys ) {
>> $c += $a[$k]
keysで文字列の配列を作って更にそれを[]で検索して値を得る
って凄く無駄な気がするんだけど
KeyValuePairってPowerSellで使えないんだっけ
2021/11/11(木) 17:00:05.70ID:GzUsv1SA
getenumeratorでとれますね
733デフォルトの名無しさん
垢版 |
2021/11/11(木) 17:08:23.09ID:GzUsv1SA
valueが$nullではない,もしくは,valueが$nullの場合は$cに含めなくてもよいなら
ifの条件を( $null -ne $a[$k] )にできるね
$aの要素がたくさんあるならgetenumeratorでforeachを回して
$bから見つかった要素を削除するのがよいのかな?
2021/11/11(木) 22:45:45.51ID:opowWSFy
$a = @{a=1;b=2;c=3}
$b = @("a", "z", "c")
$c = $b | %{ $a[$_] }
これで出来てる?
2021/11/12(金) 01:15:10.90ID:M7lyd7nj
Ruby なら、配列同士の積を使える

hash = { "a"=>1, "b"=>2, "c"=>3 }

p hash.keys #=> ["a", "b", "c"]
p hash.values #=> [1, 2, 3]

ary_1 = [ "c", "x", "b" ]
p ary_2 = ary_1 & hash.keys #=> ["c", "b"]
736デフォルトの名無しさん
垢版 |
2021/11/12(金) 04:44:44.57ID:ZAoNN4kS
GetEnumerator使ったらこんな感じ
$a.GetEnumerator() |? {$_.key -in $b} | select -exp value
737デフォルトの名無しさん
垢版 |
2021/11/12(金) 04:50:17.45ID:ZAoNN4kS
これでも
$a.GetEnumerator() | &{process{if ($_.key -in $b) {$_.value}}}
2021/11/12(金) 16:12:33.21ID:xE6WDQNQ
やたら凝った回答が多いけど、素直に>>734でいいと思うんだが・・・
2021/11/12(金) 19:04:08.47ID:a3j0d+bF
だめじゃね?
$c[1] に $null が入るよ
仕様は
> 配列Bの要素にマッチする連想配列Aのkeyが存在しなければ、その配列の要素自体削除したい。
だし
2021/11/12(金) 19:19:41.08ID:0Z8rlyMb
$a.GetEnumerator() |?{$_.key -in $b} |% valueか
GetEnumeratorってすぐ忘れそうだけど補完で出てくるからいっか
2021/11/12(金) 19:38:43.32ID:ZAoNN4kS
おー、Foreach-Objectの短縮記法か
オシャレっすね
そう書けるのは知識として知ってるんだけど、全然出てきませんわ
Select-Object -ExpandProperty使っちゃう
2021/11/12(金) 19:54:08.84ID:a3j0d+bF
> valueが$nullの場合は$cに含めなくてもよい
が許されるなら
$a[$b] -ne $null
でいけそうだけどあとで何やってるのかわからなるなw
2021/11/12(金) 22:25:34.60ID:bmw0W+Zd
>>739
$nullは標準出力に出ないのか
配列のデフォルトの表示形式どうしてこうなった
$c -join ","とかで確認しないといけない
2021/11/12(金) 22:36:54.20ID:bmw0W+Zd
>>740
というか$a.GetEnumerator()から順序が考慮されないから正しい実装としては下記と思われる
$c = $b | ?{$a.contains($_)} | %{ $a[$_] }
2021/11/12(金) 23:08:41.99ID:ZAoNN4kS
730に戻ったね
2021/11/13(土) 00:03:49.31ID:IngrJLwZ
>>739
確認したから嘘だろと思ったら本当に入ってた・・・
表示されないのか

じゃあ途中でキーの有無を確認すればいいから、
$b | ?{ $a.ContainsKey($_) } | %{ $a[$_] }
でどうだろう。
「aのキーにあれば出力」をそのまま描いた感じ
2021/11/13(土) 00:04:11.42ID:IngrJLwZ
>>744でもう書かれてた
2021/11/13(土) 07:10:49.19ID:ugM6VKHw
順序気にするなら[ordered]を付ければいい
$a = [ordered]@{a=1;b=2;c=3}
2021/11/13(土) 12:11:25.74ID:DOOK67wF
質問よく見てないからかもしれんけど、$aの順序じゃなくて$bの順序を保証しないとだから意味ない
2021/11/13(土) 13:11:51.91ID:Z2vNsa/D
最初の質問も曖昧な点多くてグダグダになってる感
こんなんでいいか?

$a=@{a=1;b=2;c=3}
$b=@("a","z","c")
$c=[ordered]@{}
$b|? {$_ -in $a.keys}|% {$c[$_]=$a[$_]}
2021/11/13(土) 13:40:06.49ID:P6Qu4JtN
a 暗号解読用テーブル
b 暗号化された本文
て感じ?
2021/11/13(土) 14:05:31.30ID:DncAOgGY
>>750
元の$bと同じ単純配列が欲しいって書いてあるのにわざわざ連想配列作るとかグダグタになってるのはお前だけだろw
2021/11/15(月) 09:18:13.04ID:xJpmlO5M
>>750
チラ読みしただけだけど、キーの配列でテーブルを引きたいのなら、単に配列を添字にすればいいのでは?
$b[$a]
対応するキーが無いところはヌルが返る
2021/11/15(月) 09:24:47.63ID:xJpmlO5M
すぐ上に同じような事書いてたごめん>>742
valueが$nullな病的なケースまでは扱いたくないから知らん
2021/11/16(火) 08:21:35.56ID:lP4cPAw+
($b | %{ $a[$_] }) -ne $null が好きだな
-ne はこのための仕様なので合目的的
わかりにくさが不安ならコメントを添えてもいい
containsとアクセサでハッシュテーブルを2回ずつ検索するより好き
2021/11/17(水) 16:30:42.17ID:DmPYFyCr
>>755
結果は同じだけど定義通りじゃないのがな
存在しないキーの値がたまたまnullだった、フィルタしたら偶然求めたい値と一致したに過ぎない
既に言われてるけどValueがnullだと食い違う

やはりcontainsKeyが1番だと思う
パイプが連続してる方がシェルっぽくて見た目もかっこいいし
2021/11/17(水) 17:05:17.34ID:npYvnyKq
ああその違いがあったのか
でも発注者が本当に求めている条件がどっちなのかはかなり怪しい事例だと思う(言い訳)
2021/11/17(水) 18:52:13.63ID:80lHh4r4
>>756
存在しない値を参照するのは自分も抵抗ある
エラーで止まる可能性もあるしね
Powershellはそういうエラーは起こしにくいけど型付け言語ではアウトな気もする
2021/11/17(水) 20:15:51.70ID:ZRqEMafB
せめてベースの.NETと同じ方針にしてくり
2021/11/20(土) 14:03:27.82ID:mhCLQeY0
copy-itemでフォルダコピーする際、
サブディレクトリにあるフォルダ名やファイル名に特定の文字列 @("*hoge*","*huga*")
が含まれている場合除外したいのですが、
一通りググった方法を試しても上手くいきません。

get-childitemの有無等幾つか方法はあるみたいですが、どうやっても除外ができない。

上手くいく方法をご存知でしたら教えて頂けませんか。
2021/11/20(土) 14:19:09.90ID:brX6qPUI
robocopyを使う
2021/11/20(土) 14:29:08.15ID:foKEgqXu
>>760
Get-ChildItemでファイル列挙して正規表現かなんかでコピー対象のファイルなのか一個ずつ判定して一個ずつCopy-Itemすりゃいいんじゃないの
763デフォルトの名無しさん
垢版 |
2021/11/20(土) 14:39:59.37ID:ebQnhsZ6
除外より特定のに引っ掛ける方が楽じゃないか?
2021/11/20(土) 16:27:45.77ID:7hjyIAPL
>>760
そのフォルダだけじゃなく、

起点のフォルダ以下を、再帰的にすべてコピーするという意味か?
765sage
垢版 |
2021/11/20(土) 17:01:16.86ID:KK9A6rpv
>>760
以下みたいな感じでGet-ChildItemの出力にWhere-Objectに-notlikeでフィルタしてCopy-itemすればいい
-Recurse付けたがサブディレクトリ含めなければ外せばいい

Get-ChildItemとWhere-Objectを組み合わせてググれば他の活用も見つかるはず

Get-ChildItem -Recurse|
Where-Object {$_.Name -notlike "*foo*" -and $_.Name -notlike "*bar*"} |
ForEach-Object {Copy-Item $_.Fullname -Destination "出力先フォルダ" -Recurse}
766sage
垢版 |
2021/11/20(土) 17:24:30.70ID:KK9A6rpv
>>765
考えてみたらGet-ChildItem に -Recurseつけたら階層が再現しない
コピー元から階層で処理するならこのコードじゃ動かないわ
2021/11/20(土) 17:29:07.00ID:mhCLQeY0
皆様ありがとうございます。
頂いたアドバイスを受けて、正規表現を使ったりして試しているところです。
解決したら改めて報告します。

ちなみに要件としては、
「起点のフォルダを再起的に全てコピー(同じ階層構造)」となります。
2021/11/20(土) 17:35:03.97ID:mhCLQeY0
すみません、「起点のフォルダ以下を再起的に」ですね。
2021/11/20(土) 18:08:26.07ID:tZNHbLNh
>「起点のフォルダを再起的に全てコピー(同じ階層構造)」
パイプを繋げていくとこの点が不安になってくる。
コピー元のフルパスを正規表現で整形すれば良いだけだけど、何だかなって気分になる。
powershellが管理用途を目指したなら何でrobocopy相当の機能を提供しなかったんだろうか。
770sage
垢版 |
2021/11/20(土) 18:22:44.14ID:KK9A6rpv
起点のパスからパイプつなげて階層コピーとかやろうとすると大変なのね
Get-ChildItemだと起点パスからの相対パスが出てこないからこんな汚いコードしか作れなかったわ

Push-Location "コピー元パス"
Get-ChildItem -Recurse|
Where-Object {$_.Name -notlike "*foo*"} |
Where-Object {$_.Name -notlike "*bar*"} |
ForEach-Object {Copy-Item $_.FullName -Destination ("コピー先パス"+(Resolve-Path $_.FullName -Relative))}
2021/11/20(土) 19:23:56.73ID:ytLaGTl4
robocopyで十分ならrobocopy使うべき
2021/11/20(土) 19:24:28.43ID:ytLaGTl4
マルチスレッドで速いし
2021/11/20(土) 19:29:39.45ID:7hjyIAPL
https://stackoverflow.com/questions/32101358/copy-all-files-and-folders-except-few-in-ruby

Ruby では、Dir.glob("**/*") で再帰的に、起点フォルダ以下のすべてのファイルを配列に入れて、
そこから、コピーしないファイルを削除する

そして、再帰的にコピーする

FileUtils.cp_r( 配列, destination_folder )
2021/11/20(土) 21:10:31.67ID:ytLaGTl4
powershellでやるなら、一旦、まるっとコピーして、コピー先から不要なファイル消すのが簡単
2021/11/20(土) 22:41:40.55ID:foKEgqXu
面白そうだから作ってみた
.NETクラス使ったら負けというポリシーの人には受け入れられないかもしれんが

$SrcPath #コピー元
$DstPath #コピー先

[System.IO.Directory]::EnumerateFiles($SrcPath, "*", [System.IO.SearchOption]::AllDirectories) |
Where-Object { $_ -notlike "*foo*" } |
Where-Object { $_ -notlike "*bar*"} |
Select-Object @{Name = "FPath"; Expression = {$_} }, @{Name = "RPath"; Expression = {$_.SubString($SrcPath.Length)}} |
ForEach-Object { `
[System.IO.Directory]::CreateDirectory(([System.IO.Path]::GetDirectoryName($DstPath + $_.RPath))) | Out-Null; `
Copy-Item $_.FPath -Destination ($DstPath + $_.RPath) `
}
2021/11/21(日) 09:11:58.65ID:mz7l6eLz
わざわざ.NETクラス使った>>775は、>>770に比べてどんな良い事があるの?
2021/11/21(日) 10:22:51.55ID:GghqNAbU
.NETクラス使える俺スゲー君なんだろ
まあ $DstPath + $_.RPath なんて書いてるから中途半端な知識しかなさそうだけど
2021/11/21(日) 13:09:01.33ID:03fh42bF
>>777
Path.Combine使ってほしかったってこと?
2021/11/21(日) 13:14:19.30ID:03fh42bF
>>776
コピー先のフォルダーがあらかじめ作成されなくてもエラーにならないこと
2021/11/21(日) 14:06:02.04ID:/SaMuAE1
フォルダ名のファイルがあったらエラーになると思うけど
2021/11/21(日) 14:12:17.11ID:03fh42bF
>>780
それはエラーで正しい
2021/11/21(日) 15:37:22.85ID:rt6j8p0A
どうでもいいけど -notmatch 'foo|bar' でよくね
783デフォルトの名無しさん
垢版 |
2021/11/21(日) 23:12:49.29ID:ny8+2EkL
先日の質問者です。
下記コードで、想定通りの動作を確認しました。

事前に展開するディレクトリを作成する必要はありますが、
正規表現で抽出して、「Join-Path $DstPath $_.FullName.Substring($SrcPath.Length)」で
展開先ディレクトリに取得した要素を展開する感じです。

色々とアドバイス頂きありがとうございました。

---------------------------------------------------------------------------------
#出力先ディレクトリ
$SrcPath = 任意のディレクトリ

#出力先ディレクトリ(スクリプトの置き場 + 展開するディレクトリ)
$DstPath = Join-Path (Split-Path $MyInvocation.MyCommand.path) ("\test")

#抽出&コピー
Get-ChildItem -Recurse $SrcPath | ?{ $_.FullName -match "^(?!.*file)"} | `
Copy-Item -Destination {Join-Path $DstPath $_.FullName.Substring($SrcPath.Length)}
784デフォルトの名無しさん
垢版 |
2021/11/21(日) 23:14:57.70ID:ny8+2EkL
誤字が酷い・・・
以下の通り訂正します。

#コピー元ディレクトリ
$SrcPath = 任意のディレクトリ
2021/11/22(月) 01:24:51.37ID:DJE+GLbt
除外するのがファイルなら、全部コピーしてから消す方が、考える時間ノータイムでできるから、自分ならそうしちゃうな
ディレクトリ除外するなら素直にrobocopy使っちゃう
2021/11/22(月) 02:13:30.35ID:l3U7Q7kM
除外する理由も不明で全部コピーとか機械オンチかな
ストレージは有限リソースだぞ
2021/11/22(月) 02:45:11.19ID:49bPrPzL
Join-Pathのところ
$_.Fullname.replace($SrcPath,$DstPath)
でもよさそう
2021/11/22(月) 04:31:54.22ID:y2hovgGl
除外したいファイルが巨大ファイルかもしれないのに一旦コピーしてから削除とかアホやろ
2021/11/22(月) 10:05:58.61ID:xI4p9npJ
巨大ファイルかもしれないし小さいファイルかもしれない
質問者がまだ開示してない範囲なのでアイデアは言うだけタダだし叩くいわれもないだろう
2021/11/22(月) 10:12:16.38ID:xI4p9npJ
せっかく何でも呼べるシェルなのにrobocopyを呼ばない理由があるのかは知らん
純PSを使いたいという拘りは遊びや向学の範囲ならありだと思うけど
2021/11/22(月) 10:58:52.55ID:ssU9K32s
流石にコピーしてから削除は素人くさくて人には見せられないコードだな
792デフォルトの名無しさん
垢版 |
2021/11/22(月) 11:21:13.08ID:JeDQJ1PF
対象のファイル存在判定判定を行いたいんだけど
get-childitemで「〜が存在しない為検出できません」と表示されてFalseが返ってくる時と、対象ファイルはないけど何も表示されずにTrueが返ってくる時の違いって何でしょうか?

正規表現で複数のファイルを探してる時と限定して一つを探してる時の差って認識で合ってますでしょうか

認識が合ってるのであれば、Falseが返ってくる際のファイル存在判定ってどうやって行ったらいいですかね
2021/11/22(月) 11:32:08.25ID:y2hovgGl
>>792
Test-Path
2021/11/22(月) 11:57:50.46ID:vpaN3qMO
robocopyという既存で使えるコマンドがあることはわかりました。

しかし、それを承知の上で、純PowerShellのコマンドで実現できる方法を探していました。

ストレージにも容量があるため、抽出とコピーを同時に済ませたかった次第です。
2021/11/22(月) 12:33:14.41ID:DJE+GLbt
あ、やっぱスクリプト書くのが目的なんですね
それならそれでよいと思います
ぱぱっと仕事を済ませるために使えるものを使うのであれば
そういう考え方もあるってことで
もちろん、コピー不要なファイルのサイズが大きすぎたりしたときは使えませんが

ただ、エラー時のリトライとかマルチスレッドをpowershellで実装するのは面倒なのでrobocopyかrsync使うことをお勧めします
自分しかアクセスしない領域を扱うなら、ここに書かれていた例でも十分かと思います
796デフォルトの名無しさん
垢版 |
2021/11/22(月) 12:46:04.31ID:JeDQJ1PF
>>793
test-pathって複数ファイル判定できるのか?
797デフォルトの名無しさん
垢版 |
2021/11/22(月) 13:07:04.73ID:DJE+GLbt
test-pathはstring[]を引数に取れて、それぞれの判定結果を返しますね
2021/11/22(月) 13:52:50.70ID:jUHFyU9k
>>791
SSDを殺すツールでも作るのかね?
2021/11/22(月) 20:21:46.68ID:nGTeQ/fQ
仕事で使うならrobocopyだな
2021/11/22(月) 22:15:42.91ID:EOO8UMxm
今回の目的だとRobocopyで良いんだが
Powershellなら複数の条件のandでフィルターしたり正規表現でのフィルターやらリネームしながらのコピーとか活用シーンはあるわ
2021/11/23(火) 00:34:07.96ID:co/a4Nbp
>>787
大文字小文字の差異が発生したときにちゃんと動かないと思う
2021/11/23(火) 17:04:45.84ID:d0x80b5K
じゃあ -reprace 演算子で
2021/11/23(火) 20:11:06.49ID:LL+Lkvmb
せめて-creplaceと書いとけ
2021/11/23(火) 21:13:38.28ID:td4eh3RA
Copy-Itemって時刻や属性とかACLやらもコピーされるんかな
同じにしといてや
2021/11/23(火) 21:15:13.83ID:d0x80b5K
>>803
大文字と小文字の差を無視したいんじゃないの?
806デフォルトの名無しさん
垢版 |
2021/11/25(木) 06:55:00.80ID:wkKQrHcX
質問です / たとえば…
膨大にファイルがあるディレクトリ以下から 古いファイルを探そうと思って
ls -r |? lastwritetime -lt "2015/10/10"
などとしたら…思いがけなく 沢山のファイルが該当したとき、
「この結果…変数に入れとけばよかったなぁ…そうすれば後で絞り込んだりできるし」
と思うことが あるのですが

でも、あらかじめ
$list = ls -r |? lastwritetime -lt "2015/10/10"
などとすると、検索中は 表示が見えない.

…というわけで、変数に入れつつ 表示させる手段を 今、探していますが なんだか分からず.
今のところは、「ファイルにリダイレクトしながら tee」ってのが、近いけど
使うかどうかわからない結果について、いちいちファイル作りたく無い気持ち(笑)はあったり
807デフォルトの名無しさん
垢版 |
2021/11/25(木) 07:19:34.90ID:wkKQrHcX
(これも 検索でも分からなかったのですが)
昔unixを使ってた慣れから pushd と popd を使うことがあるのですが
スタックの中身って見れないのでしょうか (dirsみたいな)
2021/11/25(木) 07:47:43.37ID:tyDWZMxk
>>806
Where-Object -OutVariableとかでできなかったっけ
809デフォルトの名無しさん
垢版 |
2021/11/25(木) 09:20:52.19ID:e/X72gP4
>>808 ありがとうございました
ls -r |? lastwritetime -lt "2015/10/10" -OutVariable list
知らなかった…調べてみると すべてのコマンドレットに備わってるんですね
810デフォルトの名無しさん
垢版 |
2021/11/25(木) 09:38:35.33ID:e/X72gP4
>>809
-OutVariableは -ov が省略形.
あと tee -Va list でもできちゃう.
2021/11/26(金) 10:20:48.79ID:ncT7Zn6W
>>807
gl -stack
2021/11/26(金) 11:04:55.34ID:ncT7Zn6W
遅レスだけど>>583にも関連ありそうなのでアンカー付けとく、slじゃなくてpush/pop-locationだけど

CDPATH的なモノはsl -で参照できることから存在してるとおもうけど、もっと柔軟に数の引数取りたい、とかなら簡単なシェル関数書けば良いかと
function cd($bwd=1){iex "cd -;" * $bwd}
さらに
{iex "sl ..;" * $up},
{iex "sl +;" * $fwd}…等
(cdのremove-alias、引数を読んでディスパッチ等はよしなに)

まあ気が散るからlocationスタックに慣れた方がいいとは思う
2021/11/29(月) 19:58:38.42ID:FW3KUWhD
$hoge = Invoke-Command -ComputerName 192.168.0.1 -Credential $cred -ScriptBlock {C:\script\cpu.bat}

こんな感じでリモートPCのCPUの情報を取得したんだけど、
リモート側では返り値の型が Hashtable で連想配列なんだけど、実行する側のPCだと Object[] になって配列になるんだけど
これって仕様なの?
連想配列のまま$hogeで受け取る方法とかない?
2021/11/29(月) 20:04:41.43ID:xU0y2yzX
無い
2021/11/29(月) 20:07:54.41ID:FW3KUWhD
無いのかw
PowerShell初めて触ってるんだけど、こいつ癖が強いなぁw
2021/12/04(土) 15:49:34.45ID:3yJp3Bv8
パイプのあくの強さに辟易してからが本番
2021/12/04(土) 15:57:56.73ID:lpLqhZbS
パイプの魅力に取り憑かれたらもう後には戻れない
2021/12/04(土) 20:29:02.53ID:dom41WHA
>>816
パイプってそんなにアク強かったっけ?
むしろ配列の方がトラップ満載な気がするが
2021/12/04(土) 20:33:23.88ID:12OWCJtV
パイプラインが気に入らなかったら使わなきゃ良いんだけど
配列は気に入らなくても使わざるを得ないんだよな
2021/12/04(土) 20:59:45.48ID:NLsksufL
初代プレステみたいな拡張子以外ないの?
もうちょっとかっちょいい拡張子使いたい
821デフォルトの名無しさん
垢版 |
2021/12/04(土) 21:10:22.01ID:jlXR6Mjx
pwshも起動遅いよな
NGenも上手く行かんし。起動の遅さには目をつぶって使ってる感じ?
2021/12/04(土) 22:01:12.10ID:3yJp3Bv8
毎回pwsh起動時に最新バージョンのpwshかWebサイトに確認しにいってる予感
2021/12/05(日) 16:39:28.02ID:iTfrMGLj
24時間ごとに最初のセッションでバージョンチェックが走るので、テレメトリーを無効にすればちょっとだけ起動が速くなるかも

https://github.com/PowerShell/PowerShell/issues/16234

POWERSHELL_UPDATECHECKは通知の制御だけで、バージョンチェック(を含む通信)はテレメトリー自体を止めないとダメみたい
2021/12/05(日) 21:30:10.95ID:4E92Wydv
PowerShellを使っている人はWindows Terminalも使っていること多いでしょ
どっちも素のコマンドプロンプトに比べて起動に時間がかかる
2021/12/05(日) 22:44:22.34ID:MGzOS3+Z
WSL2 で、Linux も使っている人は、Windows Terminal が便利。
ctrl + c でコピーできる

Linux の端末では、右クリックメニューからコピーしないといけない
2021/12/05(日) 23:06:07.82ID:2W/PRbgG
無変換キーで@が入力されるの治ってほしい…
2021/12/05(日) 23:08:46.06ID:EbpaPfY1
>>826
なにそれ
2021/12/05(日) 23:17:25.58ID:2W/PRbgG
Windows Terminal上でPowershellを使ってるとき、IME OFFに割り当てた無変換キーを空打ちすると@が入力されちゃう
2021/12/05(日) 23:46:17.42ID:EbpaPfY1
>>828
再現せんなあ
2021/12/06(月) 00:19:03.74ID:l+QuXC+3
これか
https://twitter.com/nejigami/status/1381587748260249601
https://twitter.com/5chan_nel (5ch newer account)
2021/12/06(月) 16:19:41.17ID:eOuwgSss
psreadlineでバインドし直せばいいんでないの?
2021/12/06(月) 16:45:47.86ID:RFIhcWIP
>>828
Ahkで無変換をime off機能に割り当てて対策してる。
2021/12/06(月) 16:54:29.37ID:eOuwgSss
psreadlineに渡る前にwtに吸われてるのなら無力だったな
めんご
2021/12/08(水) 18:02:05.74ID:fwBoA4il
>>832
AutoHotkeyで解決した、ありがとう
2021/12/11(土) 17:33:02.92ID:lpfa5wkz
今回リモートPCの使用状況をlog化して通知するシステムに利用したんだけど、
みんなは何にPowerShell使ってんの?やっぱり反復処理とか?イマイチ使いみちが思いつかないw
2021/12/11(土) 18:31:42.90ID:l4zQKEWJ
分かってる人には当たり前のことなのかもしれないけど、 Set-PSReadLineOption -EditMode Emacs で
Emacs風味キーバインドにしたらCtrl+DでPowerShellが終了するね
2021/12/11(土) 19:33:39.75ID:Jze+N/0t
Ctrl+Dでの終了はzshでも有効にしてるので、違和感なく使ってました
2021/12/11(土) 19:42:02.74ID:Jze+N/0t
日常的に使ってるのは、VPN接続とリモート接続のログイン自動化スクリプトですね
2021/12/11(土) 21:55:48.50ID:vdCi5/VF
>>834
そんな大層なことしなくても
gci -pa HKLM:/system -rec -inc keyboard* -ea ignore
とかでキーマップが引っかかったと思うから、$profileにブチこんどけばいいんじゃないの、シェル閉じた時のリストア処理も書けるし
2021/12/11(土) 21:58:38.54ID:vdCi5/VF
ターミナル(wt.exe)の問題なら.jsonにキーマップ書けたはずで、それが一番礼儀正しいが
2021/12/11(土) 22:11:14.55ID:T5tvegM+
レジストリはすぐどこ触ったか分からんくなるから$profileか、pwshの外ならuser\**\startupにコマンド書いて設定した方がいい
少なくとも何を触ったかは記録に残る
できれば初期値についてのコメントも

シェル/環境変数みたいにシャドウイングできるといいんだけど
2021/12/12(日) 00:04:01.85ID:kmuza9nw
wsl --help の出力結果をパイプやファイルにリダイレクトすると、PowerShellとWSLが不?戴天の仇らしいことがよくわかる
2021/12/12(日) 21:13:44.01ID:tlt3McAx
Windows PowerShell Inventor Jeffrey Snover Interview
https://evrone.com/jeffrey-snover-interview
2021/12/13(月) 13:52:11.42ID:MDj1w4qb
>>842
とりあえず|out-file -enc 色々噛ませてみては
2021/12/14(火) 06:17:10.79ID:5jyEPH53
なんで不?戴天になってしまったのかと思ったら環境依存文字使ってたからか

不倶戴天 (環境依存文字なし)
不俱戴天 (環境依存文字あり)
846デフォルトの名無しさん
垢版 |
2021/12/14(火) 15:19:22.77ID:6iAGSMwm
お前らlinuxマシンにpwsh入れてる?
2021/12/14(火) 15:49:09.33ID:mpAOsF0a
入れるわけないだろ
こんなもんWindows以外では絶対使わん
2021/12/14(火) 15:54:44.60ID:vLIDlmgW
たぶん、PowerShell が、UTF-8 だからじゃないの?

コマンドプロンプトで、
wsl --help > a.txt
とすると、UTF-16LE になり、VSCode・サクラエディタでも見れる

でも、Windows Terminal(WT)では、PowerShell・コマンドプロンプト・WSL のLinux の3つが使えるけど、
そのコマンドプロンプトでやったら、文字化けして見れない

WT は、UTF-8 だから文字化けするのかも

だから、アプリによる
849デフォルトの名無しさん
垢版 |
2021/12/14(火) 16:00:11.41ID:5jyEPH53
>>848
違うぞ
PowerShellの惨めな現実を受け入れろ
2021/12/14(火) 19:12:38.50ID:HCC7MYbd
パワーー
2021/12/14(火) 20:06:47.20ID:lHfIhTrg
はい
2021/12/15(水) 12:02:30.22ID:PaPmsmcA
まあでもWindows上で使ってるぶんには安定してるな。
当たり前だけどw
2021/12/15(水) 20:55:34.12ID:zohMO0ui
v7.2.1
https://github.com/PowerShell/PowerShell/releases/tag/v7.2.1
854デフォルトの名無しさん
垢版 |
2021/12/16(木) 03:32:22.22ID:V72yjyE9
PowerShell上で非ANSIコードページ文字列をパイプやリダイレクトするには以下のようにcmd /C を使うしかない
cmd /C 'wsl --help > aaa.txt'
「ねぇどんな気持ち?」のクマAAをPowerShell愛好家に贈りたい
855848
垢版 |
2021/12/16(木) 12:30:02.79ID:pA5H+adw
コマンドプロンプトを使わずに、PowerShell で、
wsl --help を文字化けせずに、ファイルへ保存する方法はないのか?

>>848
修正

>でも、Windows Terminal(WT)では、PowerShell・コマンドプロンプト・WSL のLinux の3つが使えるけど、
>そのコマンドプロンプトでやったら、文字化けして見れない。
>WT は、UTF-8 だから文字化けするのかも

Windows Terminal(WT)のコマンドプロンプトで、
もう一度やってみたら、正常に表示された!

ちなみにコマンドプロンプトも、WTのコマンドプロンプトも、両方とも、CP932 でした

chcp
#=> 932
2021/12/16(木) 14:46:23.47ID:fd1vO2kC
Correct output in CMD, but incorrect output to a file in PowerShell #16012
https://github.com/PowerShell/PowerShell/issues/16012
857デフォルトの名無しさん
垢版 |
2021/12/16(木) 15:06:10.72ID:V72yjyE9
PowerShellの定番質問に知ったかぶりしてOutputEncodingを変えろと回答する人って自分で試さないんだろうか?
それとも質問を理解できるだけの国語力がないのか?
2021/12/16(木) 15:11:12.80ID:ywwvfrpp
負けた気がするけどロケールはもう諦めてen_us、圧力掛けるのはおまいらに任せた

あえて真っ白linuxでは使わんけどwslは快適になるな
$profile |add-member -noteprop
で属性付けて
. $profile.common; .$profile.platform
とそーすしてる
2021/12/16(木) 15:23:47.31ID:9aNyIMSV
そんなことより
左辺コレクションの-eqのフィルタの罠に見事に引っ掛かったわ
2021/12/16(木) 15:41:05.53ID:ywwvfrpp
-eq(ual elements are...)と読み慣わしてる
861848
垢版 |
2021/12/16(木) 16:19:44.83ID:pA5H+adw
OutputEncoding を変えるぐらいでは、出来ないだろ。
PowerShell(PS)は、迷走しまくっている

UTF-16LE とか、あるのか?

PS 6 では、BOM 無しUTF-8 も出来るらしいけど
862848
垢版 |
2021/12/16(木) 16:24:12.96ID:pA5H+adw
Windows は、CP932, BOM 有りUTF-8/BOM 無しUTF-8, UTF-16LE が入り乱れて、
外部と日本語でやり取りできないw

一方、Linux は、UTF-8 で統一されているから、全く問題ない。
Ubuntu は、UTF-32 らしいけど、外部には関係ない
863デフォルトの名無しさん
垢版 |
2021/12/16(木) 16:37:31.00ID:V72yjyE9
>>861
Input Encodingがシステムコードページ一択(日本語版Windowsだと932)になってることが原因だよ
UTF16-LEの文字列をSJISとみなしてOutputEncodingに変換するから文字化けしているのが真相

このPowerShellのおバカ仕様のせいでMINGWのUTF-8対応済みアプリの恩恵をまったく活かせない
864848
垢版 |
2021/12/16(木) 18:10:47.68ID:pA5H+adw
>UTF16-LEの文字列を、SJISとみなして

すごい。文字化けの謎を解明してくれたのか!
865848
垢版 |
2021/12/16(木) 18:13:34.65ID:pA5H+adw
と言うことは、逆変換すればどうかな?

SJIS → UTF16-LE
866848
垢版 |
2021/12/16(木) 18:19:40.99ID:pA5H+adw
それか、あらかじめデータを、SJIS へ変換しておいてから渡すとか

Ruby では、色々な携帯の機種依存の日本語を変換するのに、
最長6パスとか掛かるものもあるらしい
2021/12/16(木) 18:50:41.75ID:qMSlwGZE
[console]::OutputEncoding = [System.Text.Encoding]::Unicode

v5環境だけどこれでファイル出力の文字化けは解消できた
ただ改行コード\nが全部\r\nになる
2021/12/16(木) 18:55:45.31ID:bRV7vQKn
v7だと多分問題はない、よろしくやってくれてるんだと思う
mingwは使ってないから知らんが少なくとも標準パッケマネのwingetで入るやつ(gnuwinポート)でエンコで困った事はない
869デフォルトの名無しさん
垢版 |
2021/12/16(木) 19:06:43.69ID:V72yjyE9
>>867-868
デタラメを書くな
君らは問題を理解できてない
2021/12/16(木) 19:15:07.46ID:bRV7vQKn
とりあえず環境を(ターミナルも)書いてくれないとアドバイスのしようがない
>>856の対処は試した?
871デフォルトの名無しさん
垢版 |
2021/12/16(木) 19:24:43.19ID:V72yjyE9
>>870
以下コマンドをそれぞれコマンドプロンプトとPowerShellで実行して、aaa.txtに何が書き込まれているか確認してくれ
wsl --help > aaa.txt

あと「>>856の対処」とは何を指すのか具体的に示して
872デフォルトの名無しさん
垢版 |
2021/12/16(木) 19:27:32.35ID:V72yjyE9
マイクロソフトが関与するオープンソース・コミュニティーは問題が解決してないのに解決したことにしてしまうずさんな所が多い
バグ票を閉じることを優先する隠蔽体質あると思う
873デフォルトの名無しさん
垢版 |
2021/12/16(木) 19:34:07.64ID:V72yjyE9
共産圏の人間が仕切ってるのかと思うような閉じられ方する、まさにノルマ
2021/12/16(木) 20:11:17.38ID:q0ua6jst
そうだね
875デフォルトの名無しさん
垢版 |
2021/12/16(木) 20:20:13.49ID:Y2CVy/MB
マイクロソフト文化圏。
2021/12/16(木) 21:09:01.98ID:VSm+B60n
>>871
> is not a raw-bytes conduit to a file in PowerShell, unlike in cmd.exe.

Instead, PowerShell always decodes output from external programs (into .NET strings) before further processing (but not when printing directly to the display), based on the character encoding stored in [Console]::OutputEncoding.

Therefore, before your external-program call, you must (at least temporarily) set [Console]::OutputEncoding to match the actual character encoding used in your external program's output; e.g., [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
877デフォルトの名無しさん
垢版 |
2021/12/16(木) 21:15:42.41ID:V72yjyE9
従来型のパイプラインを選べない時点で設計思想がおかしいんですよ
$(xxx) みたいな特殊表現によるパイプが提供されてしかるべき
というかPowerShellのパイプラインを特殊表現に閉じ込めるべき
878デフォルトの名無しさん
垢版 |
2021/12/16(木) 21:56:24.21ID:V72yjyE9
OutputEncodingとコードページがごっちゃになってるのもよくない
OutputEncodingをUTF8に指定したら、cmd /? で英語ヘルプが返されるようになってしまう
この挙動は、コマンドプロンプト上のchcp コマンドでコードページを変えたときのcmd /?の挙動と同じ
2021/12/16(木) 22:23:10.88ID:ywwvfrpp
>>877
そもそも従来型のパイプラインは生バイト晒してたように聞こえるんだが、テキストモード(ascii)IOを忘れてないか

fopen等システムコールに行儀良く"b"フラグ渡してれば問題はないが、そうでない時にcmdはtypeや |を処理する際にコンソールのファント設定見に行く等奇怪な挙動をしてた
でもたまに制御文字をtypeして死んだり…

テキストモードを排除できれば可能かも
2021/12/16(木) 22:31:55.77ID:ywwvfrpp
gnuとかのプログラムは今でもioモード切り替えフラグ付いてたりするね

生バイトが欲しければProcessInfoとかからstdin/stdout引っこ抜いてIO.BinaryWriterに渡すとか
2021/12/16(木) 22:47:57.71ID:peIHdemY
文字列中に紛れたeof文字相当のバイトを見ても読み込みを続ける挙動は多分windows的には正しくないよな
そんな文字無くしてしまえ、と思うけど
882デフォルトの名無しさん
垢版 |
2021/12/17(金) 06:27:47.69ID:cFRRrt8D
wsl --helpのみっともない改行はUTF-16のL"\r\n"をテキストモードで出力するwslの変態行為がそもそもの原因だし

https://docs.microsoft.com/en-us/cpp/c-runtime-library/unicode-stream-i-o-in-text-and-binary-modes?view=msvc-170
883デフォルトの名無しさん
垢版 |
2021/12/17(金) 06:36:45.15ID:cFRRrt8D
PowerShell固有のパイプラインに、|, >, >> を使うのをやめて
例えば $|, $>, $>> のような特殊表現に閉じ込めてほしいんだが
今さら無理か
884デフォルトの名無しさん
垢版 |
2021/12/17(金) 07:27:36.04ID:cFRRrt8D
昔、MINGWのcatコマンドが0x0aを勝手に0x0d,0x0aへテキストモード変換する迷惑行為で人知れず苦しんだ人は多かったと思う
2021/12/17(金) 08:47:10.04ID:+hqMWYwb
c標準ライブラリの"t"フラグはホスト側でよしなに変換してくれという表明だけど、たぶん行論理セパレータ\n↔\r\n変換してくれるやつくらいに考えてる人が多いんじゃねえかな
2021/12/17(金) 09:02:49.38ID:z0PRPnA0
"t"はc規格には無いか、無指定の"w"フラグ等がテキストモードにデフォルトするというだけで
cっぽいopen関数備えてる言語(pythonとか)だと"b"との区別を意識させる為に"wt"とか受け付けるけど
2021/12/17(金) 09:38:27.97ID:cFRRrt8D
マイクロソフト謹製アプリが率先してやらかしてるってところが肝
2021/12/17(金) 10:04:59.46ID:YK+z10uu
それと直接関係あるかは再現しないのでちょっと不明
>>871はconhostをsjisに設定してない?
2021/12/17(金) 10:07:35.81ID:YK+z10uu
v7.2/wt(preview)
[console]のioデフォルトはutf8(=旧nobom)になってた
890デフォルトの名無しさん
垢版 |
2021/12/17(金) 10:09:02.77ID:cFRRrt8D
>>888
CP932は日本語OSの規定の設定だよ
再現しないとか何言ってるのかわからない
作られたファイルaaa.txtの文字コードの確認さえできないんなら回答しなくていいよ
2021/12/17(金) 10:14:30.90ID:YK+z10uu
>>890
原因分かってんのなら変えなよ…
win10パッケージ版(us_en)に日本語パック追加で入れるとデフォルトはこうなると思う
2021/12/17(金) 10:27:09.40ID:YK+z10uu
あとwin11非対応マシンでms配布のロールバック用iso(非ローカライズ版)イメージで再インストール→日本語パック選択した人も該当するはず
oem版はsjisが多いと思う
893デフォルトの名無しさん
垢版 |
2021/12/17(金) 10:32:50.05ID:cFRRrt8D
>>891
Windows Terminalでも起きるんだからconhost.exeは関係ないぞ
2021/12/17(金) 10:42:00.46ID:YK+z10uu
>>893
conhostも[console]もシステムのcpから拾ってくる
wtに関してはsetting.jsonからも設定できる
様々なエンコーディング切り替えられないソフトが混在してて、グローバルに切り替えるのがためらわれるならば
ps/cmd>ms-settings:~(スタート>歯車のやつ)からアプリ毎にエンコーディング設定するのがおすすめ
895デフォルトの名無しさん
垢版 |
2021/12/17(金) 10:56:53.95ID:cFRRrt8D
エンコーディング機能にAutoDetectがあれば良いだけなんだがな
簡単なことを難しくしてしまうのは無能の証なんだよ
PowerShellみててつくづくそう思う
2021/12/17(金) 11:26:52.18ID:aYaid5rJ
オートディテクトはギルティ、頭抱える事になるぞ
素性の良いデータで大体動けばいいような自動化なら、古き良きnkfでも噛ませ
ポータブルにしたいならPSGalleryに純pwsh実装のモジュールが転がってる、クオリティは知らん

i/oエンコーディングをシェルレベルで扱えるのはバベルの塔なwindows環境では重宝する
897デフォルトの名無しさん
垢版 |
2021/12/17(金) 11:27:13.62ID:cFRRrt8D
PowerShellのパイプラインそれ自体がすでに低速なのに文字コードの自動判定すらないとか無能すぎでしょ
898デフォルトの名無しさん
垢版 |
2021/12/17(金) 11:29:06.56ID:cFRRrt8D
>>896
古き良きnkfを噛ませられないからもめてるですよ
パイプでnkfに入力された時点で汚染されてるから
時すでにお寿司なのがPowerShell
2021/12/17(金) 12:26:32.74ID:YK+z10uu
リダイレクトの挙動が不自然に感じるのは、ホストの概念で躓いてるのでは
ホストはコンソールとも限らないし、coreバンドルのコンソールホスト以外にもiseやらaspやら色々あるわけで
なんで設定が分かれてるのか考えるべき
900デフォルトの名無しさん
垢版 |
2021/12/17(金) 12:35:31.53ID:cFRRrt8D
>>899
別にいろんなホストがあってもいいんだよ
昔ながらの標準入出力と棲み分けして提供すべきだったってこと
だけど、十把一絡げにしたせいで昔ながらのパイプ処理まで低速になってしまった
2021/12/17(金) 12:48:55.55ID:BQzVpcl1
>>900
>>856からrelatedで飛べる
https://github.com/PowerShell/PowerShell/issues/1908
で提案されてるような構文はあったら確かに便利かと思う

もちろんcoreの設計とは相容れないから、追加モジュールかwindows pwsh(新)でリリースすることになると思うけど
イイね押しとこう
902デフォルトの名無しさん
垢版 |
2021/12/17(金) 13:16:49.94ID:cFRRrt8D
むしろPowerShelll固有の構文を新しい構文に移行させてほしいくらいだわ
パイプラインにテキスト縛りがある時点でPowerShellは欠陥品なんだよ
903デフォルトの名無しさん
垢版 |
2021/12/29(水) 20:28:55.03ID:/Pws6ORw
PowerShellは以下コマンドをFunction化できない。
[console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(932); $OutputEncoding = [Text.Encoding]::GetEncoding(932);

Function内でしかスコープが有効でないことが原因。$global:OutputEncodingを変えてもダメ。
なのでchcpコマンド相当のことをやろうとしたら手入力するしかない

なんというか、PowerShellは他のシェル言語でできいることができない残念なシェル言語。
オワコン化待ったなし
904デフォルトの名無しさん
垢版 |
2021/12/29(水) 20:49:49.82ID:/Pws6ORw
([console])::OutputEncodingをFunction外にも適用できないことにはchcp相当の機能は実現できない
Powershellからchcpを呼ぶとcmdシェルを介してコマンドプロンプトの初期値が表示されるだけであり、グローバル設定とは無関係

([console])::OutputEncodingが効いたかどうかは、cmd /? で戻されるヘルプ文字列が日本語かどうかで判断できる
2021/12/29(水) 20:57:34.10ID:7YDJokPl
UNIXシェルは糞of糞
やっぱりPowerShellだよな

シェルスクリプトは文字通りの逐次実行
sleepy-yoshi.hatenablog.com/entry/20090917/p1
2021/12/29(水) 23:03:59.28ID:wj529v9h
>>903-904
ドットソースで実行してもだめなの?
function f1 {〜}
. f1
907デフォルトの名無しさん
垢版 |
2021/12/29(水) 23:16:02.98ID:/Pws6ORw
>>906
説明不足だった
やりたいことはコマンド入力じゃなくてSet-PSReadLineKeyHandler -Keyを使ったキーバインドなんだけど
ドット. で反映してくてもScriptBlockやFunctionのスコープに閉じ込められてしまうから解決にならない
908デフォルトの名無しさん
垢版 |
2021/12/29(水) 23:39:26.16ID:/Pws6ORw
ま、そういうエンコーディング切り替え機能をどれだけ充実させても既存のbashやCMDのようなプロセス間通信はできないのでやるだけ無駄ってのはわかってる
2021/12/30(木) 08:42:29.02ID:InFuAQoQ
PowerShellでバイナリ(もしくはエンコーディングが不明なデータ)を扱う
https://qiita.com/boukichi_numloc/items/0f4bb4e73f71c2f0a519
2021/12/30(木) 21:35:12.30ID:FEP7eJXA
powershell内部でcmd呼んだらいいのでは
何がしたいのかわからんけど
2021/12/30(木) 23:22:49.02ID:pA3aK4qE
PowerShellからcmd を呼んだら負け、みたいな抵抗感が少しある
2021/12/31(金) 19:53:42.99ID:YcD3GAD3
残念な仕様はあれども、ちゃんと書けば、ちゃんと動く
クソとは思わんな。便利は便利よ
2022/01/11(火) 22:54:51.08ID:rTZaFBoT
CSVを項目で検索し、ヒットした列を編集したいんだけど、パイプが理解しきれてないせいで上手いこといかない
$ArrCsvData | Where-Object{$_.CodeNo -match $Code} |
このあとにカンマ区切りのテキストファイルを該当列に上書きしたいんだけど、どうすればいいのでしょうか?
2022/01/11(火) 23:45:14.22ID:1S8cvNBi
>>913
まず、ArrCsvDataはCSVからオブジェクトに変換(ConverFrom-CSVやImport-CSV)した物なのかな
じゃないとプロパティで値を呼び出せないよ

「カンマ区切りのテキストファイルを該当列に上書きしたい」の意味が測り兼ねるけど、
条件に合致する行を編集したいなら

$ArrCsvData | ForEach-Object{ if($_.CodeNo -match $Code){$_.編集したい列名 = "編集後の文字列";$_ }

とやる。コツは編集後に「;$_ 」とやって出力する所。じゃないと編集だけして破棄する事になる。

さらにCSVで保存したいなら

〜 | Export-Csv -PSPath "保存先パス"
2022/01/11(火) 23:46:35.07ID:1S8cvNBi
ミス
if文の閉じカッコ忘れてた

$ArrCsvData | ForEach-Object{ if($_.CodeNo -match $Code){$_.編集したい列名 = "編集後の文字列";$_ }



$ArrCsvData | ForEach-Object{ if($_.CodeNo -match $Code){$_.編集したい列名 = "編集後の文字列"} ; $_ }
2022/01/12(水) 00:21:17.01ID:B+xDwNUa
いちいち空行挿むなスカスカ脳
2022/01/12(水) 01:11:14.14ID:0oGT7bUk
>>915
教えていただきありがとうございます

CSVは
「A001,,」
「B001,かきくけこ,12345」
のようなフィールドで
$Code = "A001"を検索し
「A001,あいうえお,12345」
のような内部のテキストファイルがあり、編集したい列名を指定せずにまとめて編集したいと思っています。
実際には編集する項目が多くループさせながら格納だと長くなってしまうため、省略できないかと思い相談させていただきました。
2022/01/12(水) 21:13:44.63ID:vTY0CDWm
gc $csv_in -Encoding Default | %{ $fields = $_ -split ","; if ($fields[0] -match $Code) { $fieldsを加工; $fields -join "," } else { $_ } } | Out-File $csv_out -Encoding Default
2022/01/13(木) 01:49:18.52ID:sU2jW0+6
>>918
ありがとうございます
まだ理解できていないところもありますので勉強しながら試させていただきます
2022/01/18(火) 20:28:41.01ID:4KOVvciD
get-aliasをalias、またはget-serviceをservice、
自作の関数でもget-testとしたらtest、のように
エイリアス定義無しでも
get-を省略して実行出来てしまう(または、省略したらget-*扱いになる)のですが
これについて記載されたドキュメントが何処にあるか
教えて頂けないでしょうか
921デフォルトの名無しさん
垢版 |
2022/01/19(水) 20:37:21.76ID:QgcNfSy6
>>920
https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_parsing?view=powershell-7.2

PowerShell がコマンド入力を解析すると、コマンドレットまたはネイティブ実行可能ファイルへのコマンド名の解決が試みされます。 コマンド名が完全に一致しない場合、PowerShell は既定の動詞としてコマンドの前 Get- に付加されます。
2022/01/20(木) 15:57:54.33ID:PUohEL+U
PowerShellバカにしてたけど、安定性半端ないわ
適当にササッと書いたやつがなんのエラーもなくずっと正確に動いとる
2022/01/20(木) 16:02:20.23ID:Aa91Vk9H
>>921
ありがとうございます!
このドキュメントが見つからず困っていました
助かりました
2022/01/20(木) 17:34:26.20ID:I7UNJZAr
正直、PowerShellって名前がダサいと思う
925デフォルトの名無しさん
垢版 |
2022/01/20(木) 19:23:46.46ID:qK2oGbTr
チカラこそパワー!
2022/01/20(木) 19:45:12.86ID:N7Uy6cYb
ぱわわしぇる!
927デフォルトの名無しさん
垢版 |
2022/01/20(木) 19:54:27.39ID:INnqrIt/
名前負けしてるなあ、とは思うけど
2022/01/20(木) 20:28:47.30ID:Ibae9TV2
富士通が昔PowerCobolとか出してたからPowerなんちゃらは不安になる
929デフォルトの名無しさん
垢版 |
2022/01/20(木) 20:31:33.85ID:6YV8Mf/D
うちはウルトラCとかいうインタープリターだったなー
2022/01/20(木) 22:25:31.06ID:yvXRNpR1
力貝

宝貝みたいなもんだなきっと
2022/01/20(木) 22:31:19.45ID:ogjAY3PM
>>927
そう?
方向性はともかくshよりだいぶ高機能になってると思う
2022/01/21(金) 14:41:49.71ID:Q8HlpjEI
質問です。

get-childitemのデフォルトのソート順は何でしょうか?(sort-objectを明示しない場合の並び順)

ソート順について記載されているドキュメントの所在でも良いです。
2022/01/21(金) 20:37:48.38ID:QAFbTLmU
>>932
NTFSなら何もしなくてもUNICODEのコード順だかでソートされて出てくる
要するにファイルシステム次第
934デフォルトの名無しさん
垢版 |
2022/01/21(金) 20:45:32.61ID:D6eDuhqM
>>933
さて、どうかな
MicrosoftはSJIS時代のソート順をひきずってると思うぞ
935デフォルトの名無しさん
垢版 |
2022/01/21(金) 22:44:52.31ID:Q8HlpjEI
932です。先ほどの質問についてご回答頂きありがとうございます。予めソートされていることがわかり、安心しました。

追加ですみませんが、もう1点質問をさせてください。(先ほどの質問は、当疑問からの派生でした。)

■前提事項
比較元と比較先でソート順を変えてdiffを取った場合、バイナリによる比較とハッシュ値による比較では結果が異なります。
具体的に申し上げますと、下記ディレクトリ構成の「file1.txt」を異なる内容にした場合、
バイナリ比較では、比較元の「修正前.xlsx」と比較先の「file1.txt」で差分を出力します。(ディレクトリの違いによるアンマッチを出力する。)
ハッシュ値の比較では、比較元の「file1.txt」と比較先の「file1.txt」で差分を出力します。(同ディレクトリ配下のアンマッチを出力する。)

■質問
なぜハッシュ値による比較では、比較元と比較先でソート順が違うのに同ディレクトリの差分のみを出力できるのか。(データ型の違いにヒントがあるのかなと思っていますが、解明まで至っておりません。)

■コード
$master = Get-ChildItem -LiteralPath [比較元ディレクトリ] -Recurse -File | Sort-Object{$_.LastWriteTime}
$work = Get-ChildItem -LiteralPath [比較先ディレクトリ] -Recurse -File | Sort-Object{$_.FullName}

@(Compare-Object (Get-Content -Encoding Byte $master.FullName) (Get-Content -Encoding Byte $work.FullName) -PassThru)

@(Compare-Object -Property Hash (Get-FileHash $master.FullName) (Get-FileHash $work.FullName) -PassThru)

■ディレクトリ構成(比較元と比較先で同一)
dir1
└─dir2
└─dir3
├─PG1
│ file1.txt
│ file2.txt
│ file3.txt

└─PG2
修正前.xlsx
936デフォルトの名無しさん
垢版 |
2022/01/21(金) 22:50:11.95ID:Q8HlpjEI
長文になりすみませんでした。
ディレクトリ構成が崩れてしまいましたが、以下の通りです。
 dir1\dir2\dir3\PG1\file*.txt
 dir1\dir2\dir3\PG2\修正前.xlsx

別の場所で質問すべきということでしたら、その旨をお伝えください。
当スレに相応しくないようでしたら無視頂いて構いません。申し訳ございませんでした。
2022/01/21(金) 22:51:59.59ID:2Ya+eSMz
例えば、ソード結果が異なる、1,2,3 と、3,2,1 を比べれば、2しか一致しない
2022/01/22(土) 18:26:51.31ID:wDrU8P/z
>>917
Ruby で作ってみた

require 'csv'
# ruby ./script.rb ./input.csv (デフォルトは、$stdout)
# ruby ./script.rb ./input.csv > 出力ファイル

# 2列目に、カンマ・改行・シングル/ダブルクォーテーションを入れてみた
csv_text = %(A001,"あ,い\nう'え""お",123) #=> "A001,\"あ,い\nう'え\"\"お\",123"
csv_ary = CSV.parse_line( csv_text ) #=> ["A001", "あ,い\nう'え\"お", "123"]

# 引数は入力ファイル名・input.csv
CSV.filter( File.open( ARGV[ 0 ] ) ) do |row| # 1行ずつ処理する
if row[ 0 ] == csv_ary[ 0 ]
( 0...csv_ary.length ).each do |idx|
row[ idx ] = csv_ary[ idx ] # すべての列を差し替える
end
end
end

入力ファイル・input.csv
A001,,
B,1,2
A001,1,2

出力。A001で始まる、2行が置換された
A001,"あ,い
う'え""お",123
B,1,2
A001,"あ,い
う'え""お",123
2022/01/22(土) 18:35:03.63ID:95Wn62Jb
キチガイが来た
2022/01/22(土) 18:54:41.80ID:MgA+2TRu
キチガイは見えない
2022/01/22(土) 19:21:27.37ID:kAQ/cYNL
目的とやってることがとっちらかってるな
なんで比較するのにLastWriteTimeでソートしてんの
2022/01/26(水) 20:55:59.87ID:wcWyeiko
https://i.imgur.com/uWA4d1c.png
タスクマネージャーから手動で子プロセスだけ終了させることはできるけど
PowerShellでやるには Get-Process -Name explorer のあと
どうやって子プロセスのPIDを取得すればいいでしょうか?教えてください
2022/01/26(水) 22:28:49.77ID:KYTViaCV
>>942
Get-WmiObjectかGet-CimInstance使ったら?
(Get-Process -Name explorer).Id | %{Get-CimInstance Win32_Process -Filter "ParentProcessId=$_"}
>>22 でも出てるよ
2022/01/26(水) 23:22:40.50ID:z4xHZvF2
最近PowerShell使い始めたんだけど
大きなシステムを作るとき、メインと複数のサブルーチンとかも基本1つのファイルで完結させるのか?それともファイルを何個も分けるのか?
どっちだとしても可読性下がる気がする
2022/01/26(水) 23:29:53.21ID:z4xHZvF2
PowerShell ISEでスクリプトウィンドウは何で左側に表示できないんだろ
左側のほうが俺はやりやすいわ
2022/01/26(水) 23:54:26.65ID:BYfIsc0u
>>945
Microsoftはpowershell開発にはvscodeの方がおすすめだと言ってるよ
https://docs.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/vscode/using-vscode?view=powershell-7.2
2022/01/27(木) 02:33:22.29ID:sf3Kg0Os
>>943
ありがとうございます。これで試してみます
2022/01/27(木) 08:04:44.84ID:EosWc+ux
>>944
そもそも大きなシステムをPowerShellでは作らない
2022/01/27(木) 09:23:06.79ID:p8Bx/YYe
>>944
>>948の通りPowerShellで大きなシステムを作る事自体がアンチパターンの極み
どうやっても可読性最悪だし破綻は避けられない
2022/01/27(木) 10:21:25.25ID:tOnT0cfV
powershellで大きめのものを組むならC#で組むときみたいな箱庭を作る発想は完全に捨てて、UNIX的な思考に切り替えるべき
完成度の高い単独で機能するコマンドを作って組み合わせていくようにすることで、ドメインを拡大させない
コマンド同士の細かい相互作用を作り込んではいけない
2022/01/29(土) 09:01:01.42ID:oEiS6XOx
Unix コンポーネント: 小さいことは美徳である
https://web.archive.org/web/20080709051701/http://www.os-omicron.org/~takano/private/trans/bongo-bong_j.html#:~:text=%E3%82%92%E6%8E%A2%E3%81%9B)-,Unix%20%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88,-%3A%20%E5%B0%8F%E3%81%95%E3%81%84%E3%81%93%E3%81%A8%E3%81%AF
2022/01/30(日) 01:37:19.06ID:ZZo5v4fB
>>951
ちょっと読んでみたらIEのCOMベースってすばらしいよね真似しよが結論になってて時代を感じた
さてBonoboはUnix界でうまくいったのでしょうか
https://en.wikipedia.org/wiki/Bonobo_(GNOME)
2022/02/02(水) 01:43:07.06ID:eLtuTeT2
Get-Contentで取得したテキストファイルが
処理終わっても自分自身で開いていることが多い
別の処理で終わったこのテキストファイルを削除しようとすると
自分で開いているので削除出来ないでエラーが出る

処理が終わっても閉じない原因か対処法はないでしょうか
954デフォルトの名無しさん
垢版 |
2022/02/02(水) 02:18:48.08ID:DC2596zT
>>953
明示的にオブジェクトを破棄する。
2022/02/02(水) 07:51:22.34ID:eLtuTeT2
>>954
なるほど破棄すると繋がりが消えるのか
ありがとうございます
2022/02/02(水) 23:39:08.14ID:eLtuTeT2
すみません、オブジェクト破棄を以下のように解釈していたのですが
そうなるとRemobe-Itemでファイルを削除するとき、変数に入れずにフルパスで指定するのか?と思ったけどやっぱり違うと思うし
改めて変数に入れるのも多分違うと思い、すっきりしない状態です。
多分破棄するの意味を間違って、こちらが解釈してると思うのですが、この場合どう書いてますでしょうか?

$lines = (Get-content $FilePath-as [string[]]

Remove-Variable FilePath

Remobe-Item $FilePath
2022/02/03(木) 07:21:37.66ID:OMU2Br15
remove variableであってるとおもう。
GCに回収させるとより安全。
$nullを代入でもいけるかな
2022/02/03(木) 07:41:16.46ID:OMU2Br15
ん?ファイル開いているのはlinesじゃないか?
linesを破棄しよう
2022/02/03(木) 16:23:23.37ID:VbK4RRek
gcでファイル開きっぱなしなんてないと思うけど
削除できないってパターンはありそうだな
削除できるまで無限ループでいいんじゃね
2022/02/03(木) 20:01:53.14ID:gI5tR0VQ
Get-content終わってもファイル開きっぱなしなんてあるの?
物凄いデカいファイルだったらあり得るのか?
961デフォルトの名無しさん
垢版 |
2022/02/03(木) 23:08:22.41ID:mIHwLL5k
Get-content(cat)はcat.exeと違うバッファリング方法だからユーザーから見れば開きっぱなしに感じる場合もあるかも
962デフォルトの名無しさん
垢版 |
2022/02/06(日) 00:04:34.70ID:D4g/hsrG
同じ変数を使い回すのにこだわっている阿呆だな
2022/02/06(日) 01:29:48.39ID:2aKrrA/x
      ___   ━┓  ___    ━┓
     / ―  \  ┏┛/ ―\   ┏┛
    /  (●)  \ヽ ・. /ノ  (●)\  ・
  /   (⌒  (●) /. | (●)   ⌒)\
  /      ̄ヽ__) /   |   (__ノ ̄  |
/´     ___/     \        /
|        \          \     _ノ
|        |          /´     `\
--------------------------------------
 このスレはあなたにとって役にたちましたか?

  ○ とても役にたった
  ○ 役にたった
  ○ どちらともいえない
  ○ 役にたたなかった
  ● 全く役にたたなかった
2022/02/06(日) 14:34:16.42ID:m5li3VVD
そもそもファイルを削除できなかったことが無い
2022/02/07(月) 07:35:36.67ID:83JX6KKe
削除できないのは他の要因で起こり得るから何とも
2022/02/09(水) 12:21:56.14ID:3KsDo8lO
gcに-waitとか-tailとか付けると開きっぱなしになるけど、明示的に離せってスイッチは無かったっけ?
付けなけりゃ閉じてるものかと思ってた
2022/02/09(水) 23:40:08.91ID:WBXgVt22
WindowsFormを使いGUIを作ろうと思っていますがtextboxのイベントハンドラが理解できていません
VBAでいうAfterUpdateをやろうと思っているのですが、
textbox1のフォーカスが別に移ったらlabel1にテストと表記したいのですが
そういった処理は可能でしたら下のどこを直せばいいのでしょうか?

Add-Type -AssemblyName system.windows.forms
Add-Type -AssemblyName system.drawing

$form = New-Object System.Windows.Forms.Form

$textbox1 = [System.Windows.Forms.textbox]@{
location = New-Object System.Drawing.point(10,10)
size = New-Object system.drawing.size(100,100)
}

$label1 = [System.Windows.Forms.Label]@{
location = New-Object System.Drawing.point(10,30)
size = New-Object system.drawing.size(250,20)
}

$form.Controls.Add($label1)
$form.Controls.Add($textbox1)

$textbox1.leave
({
$label1.text = "テスト"
})

$result = $form.ShowDialog()
2022/02/10(木) 19:36:03.95ID:/6XFwXXi
>>967
>$textbox1.leave
ここで行を分けてしまうとpowershellのパーサは一旦解釈を終えてしまうからイベントハンドラとして登録できてない。
それとイベンントハンドラの名前は頭にadd_〜を付ける決まりになってる(なぜかは知らない)
従って下のように記述する。
$textbox1.add_leave({
$label1.text = "テスト"
})

それとテキストボックスだけではフォーカスの移動が確認できないから
ボタンとか適当なフォーカスを持つコントロールを配置しておく
$button1 = [System.Windows.Forms.Button]@{ Location="10,50"; Size="80,20"; Text="ボタン"; FlatStyle="popup"}
$form.Controls.Add($button1)
$textbox1.add_leave({ $label1.text = "leave" })
$textbox1.add_enter({ $label1.text = "enter" })
$label1.text = "テスト"
$result = $form.ShowDialog()
2022/02/11(金) 00:44:40.14ID:xWKZ1gm4
>>968
教えていただきありがとうございます。
テキストボックスだけだと移動が確認できないなど知らなかったのでとても助かりました。
970デフォルトの名無しさん
垢版 |
2022/02/12(土) 03:20:20.24ID:NDMck+ft
ネタだろ
2022/02/12(土) 16:09:12.24ID:8ted8XK+
入力コントロールがフォーカスを失ったという、イベントは無いの?
2022/02/12(土) 21:15:19.39ID:JXSQUy8V
Control.Leave イベント
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.control.leave
973デフォルトの名無しさん
垢版 |
2022/02/13(日) 17:33:00.74ID:zeKJdxT+
よろしくお願いします。
現在開いているexcelのアクティブブックを捕まる方法ないでしょうか??
例えば、アクティブブックのアクティブシートにのってるグラフの軸を全て変更したい時に、
excelからpowershell ISEに画面を変えて操作したいのです。
2022/02/13(日) 17:40:39.22ID:0qwas07F
>>973
Pythonおすすめ
975デフォルトの名無しさん
垢版 |
2022/02/13(日) 17:44:20.75ID:zeKJdxT+
>974
ありがとうございます。
xlwingsだとアクティブブックつかめるけど、グラフの細かな設定がない
openpyxlだとアクティブブックをつかめなさそう、
でpowershellでできないかな、と。
2022/02/13(日) 17:47:29.32ID:0qwas07F
>>975
グラフもPythonで描けばいい
2022/02/13(日) 17:55:51.10ID:lPImUKwL
pandasに無いような高等な統計関数が必要でないかぎりpythonで完結したほうが楽なんじゃね
978デフォルトの名無しさん
垢版 |
2022/02/13(日) 18:02:06.97ID:zeKJdxT+
ありがとうございます。
まぁ、会社でみながexcel使ってるので、、こんな質問をしている次第です、、
2022/02/13(日) 18:06:52.02ID:PEAS4D91
シートの名前やらインデックスがpwshでわかれば、その情報をpythonに渡してmatplotlibでtemp.jpgとかで吐き出したグラフをまたpwshで貼れば行ける気がする
2022/02/13(日) 18:34:35.90ID:Z5jSGqeY
ActiveWorkBookプロパティで捕まえられるでしょ
VBAから呼んでもPowershellから呼んでもPythonから呼んでもいい
2022/02/13(日) 18:37:17.22ID:LaQ04ZoE
次スレほい
PowerShell -Part 6
https://mevius.5ch.net/test/read.cgi/tech/1644744972/
2022/02/13(日) 18:41:38.57ID:LaQ04ZoE
余計なお世話ついでに
ISEはもう終わったプロジェクトなので
後継のVSCode+Powershellプラグインに乗り換えるのがオススメ
983デフォルトの名無しさん
垢版 |
2022/02/13(日) 20:32:19.65ID:zeKJdxT+
色々アドバイスありがとうございました。

それもそだな、と下記でいけました。お騒がせいたしました

$Excel = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")

$Excel.ActiveWorkbook.ActiveSheet.name
2022/02/21(月) 13:09:23.89ID:jIppNsU3
教えて下さい
powershellで再帰処理をしたいんですが、

"The script failed due to call depth overflow"

と言うエラーで最後まで処理してくれません。
再帰回数のスタックオーバーフローで
トランポリン処理が有効とまでは調べたのですが
上手く理解出来ず

↓↓
https://qiita.com/yumura_s/items/8a44a70e3e11c4eb1464

詳しい方、よろしくお願いします
2022/02/21(月) 13:24:10.95ID:Vv5lB4cH
そのメッセージの言わんとするところは、すげー効率悪いので再帰で書くな
というアドバイスです
2022/02/21(月) 13:39:08.84ID:jIppNsU3
対象データが階層構造になっていて、
網羅的に処理したいんですが、うーん
2022/02/21(月) 14:08:41.32ID:Vv5lB4cH
500階層あるデータ構造はさすがに扱ったことがない…
そもそも特定の枝が底なし沼なのだとしたら、それでも延々と潜り続ける、というのは本当に意図した挙動なのか?

底なし沼が時々存在して、それに興味が無いのならば素直な余再帰で書ける幅優先探索を勧める

深さ優先で頑張りたいなら、スタックとしてコールスタックを流用するのでなくて、明示的にスタックにpush/popすると少しは経済的
特定の深さに達したら諦める決め打ちもあり

トランポリンで遅延評価を積む利点は、入力データ構造を処理するというより、需要に応じて任意の深さのデータを出力できるという点にあるので、悪手かと
2022/02/21(月) 14:17:30.40ID:+uSXi1Gh
トランポリン?のやってることはSchemeで言うCPS相当だね。まずCPSを理解しないと何が起きてるのか判らないと思う。
であるならば理屈ではトランポリンなんて変な事しなくてもスクリプトブロックをクロージャにするやつだけで再帰をクロージャの連鎖呼び出しに置き換えることはできると思う。
2022/02/21(月) 14:38:31.70ID:Vv5lB4cH
(実装は暗黙のCPSかもしれないけど) schemeだとdelay/forceそのまんまじゃね

イテレータとかストリームとか色んな言い方があるけど、何にせよ処理すべきデータがまだ存在していないような時にのみ有効
もし処理対象のデータが既に存在しているのなら、単に無駄な計算を増やすだけだよ
2022/02/21(月) 14:43:51.48ID:+uSXi1Gh
再帰処理したいつってる本人が理解できないと意味ないからな
再帰が軽い言語で処理すりゃいいんじゃねーの
2022/02/21(月) 15:22:36.66ID:002PyiUh
コールスタック制限してない言語の方が珍しいと思うがね、スクリプト言語なら500-1000くらいが標準的か

とりあえず言語によって課される安全装置としてのコールスタック制限を回避したいのなら、>>984が求めている資料はこれだと思うhttps://www.python.org/doc/essays/graphs/(pwshじゃなくてすまん)
生リスト(配列)を使ってもいいけど、現実的な時間で可能なのか怪しい程の難問なので、これの出番かも

https://docs.microsoft.com/en-us/dotnet/api/system.collections.stack?view=net-6.0
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.stack-1?view=net-6.0
2022/02/21(月) 15:34:29.48ID:002PyiUh
ごめんdfsだわこれ
全要素網羅したい、という要求だからどっちでもいいと思うけど
queueはこれ使うと配列よりかなり速いはず
https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.queue-1?view=net-6.0
2022/02/21(月) 16:03:11.06ID:jIppNsU3
すみません、めちゃくちゃ難しいっす

なんとなくリンク先のスクリプトが
動かせればと思ったのですが…

やはり悪手なんですかね
2022/02/21(月) 16:22:43.74ID:Vv5lB4cH
データのサンプル、期待する出力を書いてくれれば具体的なコード提案できるかも(たぶん)
2022/02/21(月) 18:40:11.40ID:jIppNsU3
色々回答してありがとうございました

結局再帰を使わずループで代用する
こととしました

トランポリンはもう少し
勉強してみたいと思います
2022/02/21(月) 20:07:10.97ID:+uSXi1Gh
powershell内でC#埋め込めばいいんじゃないの
あいにくpowershellのクロージャはダイナミックスコープで使えたもんじゃないのでC#のサンプルだけ

Add-Type -TypeDefinition @"
using System;
public static class test {
 static int fib(int n) { //普通の再帰
  if (n < 2) {
   return n;
  } else {
   return fib(n - 1) + fib(n - 2);
  }
 }
 static void fibcps(int n, Action<int> cont) { // CPS(継続渡しスタイル)
  if (n < 2) {
   cont(n);
  } else {
   fibcps(n - 1, n1 =>
    fibcps(n - 2, n2 =>
     cont(n1 + n2)));
  }
 }
 public static void recurse() {
  for (var n = 0; n <= 20; ++n) {
   Console.WriteLine("fib {0}: {1}",n,fib(n)); //普通の再帰
   fibcps(n, r => Console.WriteLine("fibcps {0}: {1}",n,r)); // CPS(継続渡しスタイル)
  }
 }
}
"@
[test]::recurse()
2022/02/21(月) 21:16:04.35ID:+uSXi1Gh
一応powershell版。ただしpowershell関数は末尾再帰の最適化をしてくれないためCPSで書いてもただの効率悪い再帰にしかならない。
上のC#も32bit環境だと末尾再帰の最適化が働かないため64bit環境でのみ有効なコード。
function fib($n) {
 if ($n -lt 2) {
  $n
 } else {
  (fib ($n - 1)) + (fib ($n - 2))
 }
}
function fibcps($n, $cont) {
 if ($n -lt 2) {
  & $cont $n
 } else {
  fibcps ($n - 1) {param($fib1); $cont = $cont
   fibcps ($n - 2) {param($fib2);
    & $cont ($fib1 + $fib2) }.GetNewClosure()}.GetNewClosure()
 }
}
1..10 | %{ $r=fib $_; "fib($_):$r" }
1..10 | %{ fibcps $_ {param([int]$r) "fibcps($_):$r"}.GetNewClosure() }
998デフォルトの名無しさん
垢版 |
2022/02/21(月) 21:38:24.93ID:MnJW8OUO
変なやり方を広めようとするやつの典型例
2022/02/22(火) 00:12:46.08ID:wYlI3N7E
あえて混乱させようとしてるようにしか思えない

仮に末尾最適化でシリアルなコードを得たとして、まさかそれが木の探索に有利だとでも?

呼び出しをstart-(thread)jobで行ってスレッド/プロセスをばら撒けば済む話じゃないの
コールスタック溢れるような計算であればあるほど、スケーラブルで高速
2022/02/22(火) 02:35:33.30ID:LHZaRsEg
スタックを使わない再帰呼び出しならスタックは溢れないなw
個々の再帰呼び出しをStart-ThreadJob/Wait/Receiveで機械的に置き換えればとりあえず動く雛形にはなる
代わりにプロセス/スレッドが溢れるけど、スレッドなら単に順番待ちに入るだけで悪さはしない

個々のワーカーが自身の子をwaitしている限りはオーバーヘッドでしかないので、メインプロセスを設けStart時に-StreamingHostで直接報告を挙げさせるべき
長く走ってる枝を殺す等、最適化の可能性は大

メモ化や大域脱出程度で済むような問題には薦めない
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 341日 2時間 5分 41秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

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

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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