1 名前:デフォルトの名無しさん mailto:sage [2020/01/01(水) 16:08:31.66 ID:4oQ1Kxot.net] 前スレ PowerShell -Part 3 https://mevius.5ch.net/test/read.cgi/tech/1539074808/ 次スレは>>980 が立ててね!!
596 名前:デフォルトの名無しさん mailto:sage [2020/09/25(金) 23:45:08.08 ID:BU0fUt+3.net] 処理をスクリプトブロックや関数の中に入れてもいいなら $f = { echo $heredoc } $heredoc = @` abc `@ . $f
597 名前:デフォルトの名無しさん mailto:sage [2020/09/26(土) 22:07:47.79 ID:BjfAYIo4.net] わけがわからん現象にでくわした シンボリックリンク作成権限を付けたユーザーなんだけど New-Item -Type Directory -Name dir New-Item -Type SymbolicLink -Name sym -Target dir これを管理者で実行すると SYMLINKD になるんだけど 管理者にならずに実行すると SYMLINK になるのはどういうこと?
598 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 09:30:31.69 ID:HvAokpg1.net] chcp 65001 をやっても画面のユニコード文字列が文字化けするのはなんで?
599 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 11:16:54.85 ID:4AaMSaam.net] >>596 [Console]::OutputEncoding = [Text.Encoding]::UTF8 これだとどう?
600 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 11:18:33.39 ID:4AaMSaam.net] >>596 あと、いちどここ見てみたら https://www.vwnet.jp/Windows/PowerShell/CharCode.htm
601 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 12:01:00.23 ID:45wzgCn0.net] Windows Terminalは絵文字とかもちゃんと表示できるらしい、使ってないけど
602 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 16:37:33.79 ID:zpUujZFe.net] 管理者にならずに New-Item でフォルダーへのシンボリックリンクを張ると SYMLINKD でなく SYMLINK ができるという >>595 なんだが PowerShell を C:\Users\ユーザー で起動した場合だけ起こるっぽい Windows PowerShell では起きないし、起動フォルダーを変えても起きない なんだこれ?
603 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 18:25:49.52 ID:4AaMSaam.net] >>600 うちの環境 (Win10 2004) だと以下の通り。いずれもシンボリックリンク作成権限を与えた一般ユーザ。 PowerShell 5.0 開始ディレクトリに関わらず、再現せず PowerShell 7.0.3 開始ディレクトリに関わらず、再現する よく分からんね。
604 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 21:02:03.10 ID:qVXRXcgH.net] 昔からpsのアクセス権周辺の実装は怪しいと思ってる 専用コマンド呼ぶなり.NET呼ぶなりした方がいいよ
605 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 22:00:17.33 ID:zpUujZFe.net] なぜうち(Win10 1909 18363.1082)では起動フォルダーで挙動が変わるんだろう C:\Users\ユーザー で起動した PowerShell 7.0.3 だと、どこで New-Item しても発生する その PowerShell で、さらに PowerShell を起動すると C:\Users\ユーザー で起動した場合は、どこで New-Item しても発生する 別のフォルダーで起動した場合は、どこで New-Item しても問題ない こうなる理由が予想もできない
606 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 23:03:00.71 ID:zpUujZFe.net] あーごめん 管理者でも C:\Users\ユーザー で起動したら発生した 管理者になるかどうかは関係なかった 理由はさっぱりだが……
607 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 10:27:40.26 ID:6RK1A/yN.net] >>601 >>604 もしかすると、 1. ターゲットをフルパスで指定する 2. ターゲットの相対パスを「.\\」か「./」で始まる形式で指定する 3. New-Item の直前に [Environment]::CurrentDirectory = Get-Location を実行する のどれかを試すと、PowerShell 7 でも問題は起こらなかったり?
608 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 20:33:13.25 ID:1OU6a08X.net] 試した 1 〇 (でも張りたいのは相対パスのリンク) 2 × 3 〇 [Environment]::CurrentDirectory を基準
609 名前:ノターゲットのフルパスを求めて フォルダーだったら SYMLINKD 、それ以外は SYMLINK を作ってるっぽい # >>603 を書く時 C:\Users\ユーザー では試してなかった……。 カレントディレクトリを移動しても [Environment]::CurrentDirectory は変わらない となると悪いのは カレントディレクトリを返さない [Environment]::CurrentDirectory ? それとも [Environment]::CurrentDirectory を参照する New-Item ? [] [ここ壊れてます]
610 名前:デフォルトの名無しさん mailto:sage [2020/09/29(火) 11:44:19.44 ID:xkYzZNyK.net] >>606 ごめん。ソースの履歴を見たら、v7.0.3 のときは、2. の方法は無意味だったみたい。 v7.0.3 の実装は、>>606 さんの想像のとおり。 そもそも、ターゲットの相対パスを解決するときの基準は、カレントのパスではなくて、 シンボリックリンクそのもののパスだよね。 なので、プロセスのカレントディレクトリ([Environment]::CurrentDirectory)の代わりに、 PowerShell のカレントロケーション($PWD)を基準にしたとしても、やっぱりバグる。 New-Item -Type Symbolic -Name Foo\Bar -Target .\Zot みたいなケースとか。 でね。最新のソースには、相対パスのターゲットのための修正が施されているのだけれど、 これが、「.\」か「./」で始まるパスのときは、基準にカレントロケーションを使う、 という中途半端かつ誤ったもので...。
611 名前:デフォルトの名無しさん mailto:sage [2020/09/29(火) 20:49:56.27 ID:J7wCjMtV.net] 常に リンクのフルパス → ターゲットのフルパス とたどるだけなのに……w 早く修正されますように
612 名前:デフォルトの名無しさん mailto:sage [2020/09/30(水) 08:50:32.18 ID:6kAerFE6.net] [Environment]::CurrentDirectoryや[IO.Directory]::GetCurrentDirectory()の罠 他のモジュールも同じ問題を抱えてないか心配になる
613 名前:デフォルトの名無しさん mailto:sage [2020/10/01(木) 10:19:36.95 ID:tnCBqate.net] New-Itemはハードリンクもバグってる こっちはWindows以外のOSでも問題になるはず New-Item -Type Directory -Name linktest New-Item -Name linktest\target New-Item -type HardLink -Name linktest\hardlink -Target linktest\target に対して、こんなメッセージでエラーになってしまう New-Item: Could not find item linktest\target. 興味深いのは New-Item -Type HardLink -Name linktest\hardlink -Target target と間違えてみると New-Item: Cannot find path 'カレントディレクトリ\target' because it does not exist. ちゃんと正しいエラーメッセージが返る 不思議だ
614 名前:デフォルトの名無しさん mailto:sage [2020/10/01(木) 21:05:38.94 ID:NSqrZd61.net] >>610 >New-Item -type HardLink -Name linktest\hardlink -Target linktest\target 5.1と7.0.3で試したけどエラーにならなかったぞ
615 名前:デフォルトの名無しさん mailto:sage [2020/10/01(木) 21:26:37.01 ID:tnCBqate.net] これでどう? (長すぎて切れるかも) $origCurDir = [System.Environment]::CurrentDirectory New-Item -ItemType Directory -Path linktest Push-Location linktest New-Item -ItemType Directory -Path dir Push-Location dir # linktest/dir New-Item -ItemType Directory -Path subdir Set-Content -Path file -Value "hello" New-Item -ItemType HardLink -Path hardlink_1 -Value file New-Item -ItemType SymbolicLink -Path symlink_1 -Value subdir Pop-Location # linktest New-Item -ItemType HardLink -Path dir/hardlink_2 -Value dir/file New-Item -ItemType SymbolicLink -Path dir/symlink_2 -Value subdir Push-Location dir # linktest/dir [System.Environment]::CurrentDirectory = $PWD New-Item -ItemType HardLink -Path hardlink_3 -Value file New-Item -ItemType SymbolicLink -Path symlink_3 -Value subdir Pop-Location # linktest [System.Environment]::CurrentDirectory = $PWD New-Item -ItemType HardLink -Path dir/hardlink_4 -Value dir/file New-Item -ItemType SymbolicLink -Path dir/symlink_4 -Value subdir Pop-Location [System.Environment]::CurrentDirectory = $origCurDir Get-ChildItem -Path linktest/dir | Sort-Object -Property CreationTime | Format-Table Attributes,LinkType,Target,Length,Name
616 名前:デフォルトの名無しさん mailto:sage [2020/10/02(金) 13:25:40.85 ID:1QpEVKY8.net] mklink一行でええじゃん
617 名前:デフォルトの名無しさん mailto:sage [2020/10/02(金) 13:57:48.64 ID:w3BWfVBY.net] >>613 これを思い出した ******** アメリカのNASAは、宇宙飛行士を最初に宇宙に送り込んだとき、 無重力状態ではボールペンで文字を書くことができないのを発見した。 これではボールペンを持って行っても役に立たない! NASAの科学者たちはこの問題に立ち向かうべく、10年の歳月と120億ドルの開発費をかけて研究を重ねた。 その結果ついに、無重力でも上下逆にしても
618 名前:水の中でも氷点下でも摂氏300度でも、 どんな状況下でもどんな表面にでも書けるボールペンを開発した!! 一方、ソ連は鉛筆を使った。 [] [ここ壊れてます]
619 名前:デフォルトの名無しさん mailto:sage [2020/10/02(金) 14:35:00.30 ID:Ck+HovvX.net] リンクを張ることが目的なのではない PowerShellの不具合を見つけることが目的なのだ
620 名前:デフォルトの名無しさん mailto:sage [2020/10/02(金) 21:34:24.75 ID:ljpWPhwK.net] 誰か英語ができる人 >>612 のテストを添えて「New-Itemでのhardlink/symlink作成に [Environment]::CurrentDirectoryが影響する」ってタイトルでイシューを立てて欲しい
621 名前:デフォルトの名無しさん mailto:sage [2020/10/03(土) 01:55:55.82 ID:0vVVHGK+.net] 昔はよくConnectに投稿したりしたんだけどねぇ
622 名前:デフォルトの名無しさん mailto:sage [2020/10/03(土) 10:45:42.05 ID:68v91MPk.net] よろしくお願いします
623 名前:デフォルトの名無しさん mailto:sage [2020/10/03(土) 22:48:38.93 ID:7NrhvCrT.net] バージョン上がって使いやすくなってきたねpowershell Shellより扱いやすいからmacにもインスコしたわ コンソールに貼り付けて実行した時に右クリックの貼り付けとctlvの貼り付けで動きが違うのは何で?
624 名前:デフォルトの名無しさん mailto:sage [2020/10/04(日) 17:12:39.48 ID:Pj4o9N0c.net] 遅レスすまんね >>597 だめだった >>598 見てみる
625 名前:デフォルトの名無しさん mailto:sage [2020/10/07(水) 01:28:53.25 ID:OLUeUK9d.net] あるファイルを消そうとしたら「このファイルは開かれているため〜」と表示されて消せなかった。 こういう場合、自分はリソースモニターでファイルを開いているアプリを探すんだけど 最近入った現場では管理者以外はリソースモニターを使えないように設定されていて困った。 それで質問なのですが、powershellのコマンドでファイルを開いているアプリを探す方法はあるのでしょうか?
626 名前:デフォルトの名無しさん mailto:sage [2020/10/07(水) 02:03:23.70 ID:HMBCuleJ.net] https://stackoverflow.com/questions/39148304/fuser-equivalent-in-powershell こんなん出てきたがどう?
627 名前:621 mailto:sage [2020/10/08(木) 03:04:42.09 ID:daaVvwfY.net] >>622 めっちゃ参考になります。っていうかこれでやります。 サンクス!
628 名前:デフォルトの名無しさん mailto:sage [2020/10/08(木) 19:15:35.07 ID:zkqa7tbj.net] 試せば判るけど >>622 はプロセスがロードしてるDLLとかのモジュールしか得られないよ 開いてるファイルはプロセスに紐付いてるハンドル取得して一個一個チェックするしかないよ 実装はpowershellじゃかなり大変だからhandle.exeっていうMSが公開してるツール使ったらいいよ
629 名前:デフォルトの名無しさん mailto:sage [2020/10/14(水) 06:30:09.66 ID:JjVHZHwh.net] セキュリティガチガチでネットにも繋がらないうちの現場じゃ無理だな
630 名前:デフォルトの名無しさん mailto:sage [2020/10/14(水) 11:09:36.08 ID:s64A8YK8.net] うちの会社は「キッコーマン」のHPが見れません、”コーマン”がフィルターに引っかかるのですw
631 名前:デフォルトの名無しさん mailto:sage [2020/10/15(木) 21:32:35.73 ID:vPm9QJ4K.net] openfiles コマンドでファイルを開いているプロセスを調べる 【 Windows】 tooljp.com/windows/doc/Server2008/openfiles/openfiles.html Openfiles https://web.archive.org/web/20120424081342/technet.microsoft.com/ja-jp/library/cc772842 (v=ws.10).aspx
632 名前:デフォルトの名無しさん mailto:sage [2020/10/17(土) 17:51:59.12 ID:2b9DYeQb.net] 職場で「さすがパワーシェラー!」って言われたんだけど パワーシェルを使う人のことをそう呼ぶものなの?
633 名前:デフォルトの名無しさん mailto:sage [2020/10/17(土) 17:57:10.05 ID:Ske6VIT2.net] 聞いたことないな むしろ馬鹿にされてる気分
634 名前:デフォルトの名無しさん mailto:sage [2020/10/17(土) 23:05:50.24 ID:DNKik4OU.net] 洋書で良い本ないですか? 和書だと数冊しか出てないので…
635 名前:デフォルトの名無しさん mailto:sage [2020/10/18(日) 21:28:34.46 ID:6x+7Jy+N.net] in actionは読んだのかね あとはCoreのソース読んでくのが手っ取り早い
636 名前:デフォルトの名無しさん mailto:sage [2020/10/19(月) 22:58:13.20 ID:TaaQ8sH/.net] >>631 原書は第3版まで出てるんですね ありがとうございます
637 名前:デフォルトの名無しさん [2020/10/24(土) 21:41:19.65 ID:1s91cR1z.net] 多次元配列(ジャグ配列ではなく)を1次元配列に平坦化する高速な方法ありませんか? データ数は100万個くらいです。 @($a | % {$_}) 検索したら↑のカッコいい方法が出てきましたが、 私の環境で6秒ほどかかり速度に不満があります。
638 名前:デフォルトの名無しさん mailto:sage [2020/10/24(土) 23:22:07.28 ID:ZaC2aARH.net] パイプとForeach-Object自体が遅いからね データがオンメモリにあるならforeach文のが速い
639 名前:デフォルトの名無しさん mailto:sage [2020/10/24(土) 23:28:40.40 ID:ZaC2aARH.net] あとは万個の繰り返し処理になるわけだからpowershellで書いたら全体的には当然遅い 対策としては繰り返し部分だけC#に渡すとかだね
640 名前:デフォルトの名無しさん mailto:sage [2020/10/24(土) 23:45:12.07 ID:V4Y88WB8.net] 万個とかエッチ!
641 名前:633 [2020/10/25(日) 00:13:47.38 ID:orpbcY2p.net] foreach文にすると0.8秒まで速くなりました! とりあえずこの方法でやってみます $b = foreach($x in $a){$x}
642 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 02:13:33.54 ID:8PerFZ8f.net] >>636 美人穴が「この商品は累計○万個も売り上げたということです!」とかいうとおっきする
643 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 20:51:17.25 ID:Bltg1B/v.net] >>633 >多次元配列(ジャグ配列ではなく)を1次元配列に平坦化する高速な方法ありませんか? なんでジャグ配列ではなく多次元配列なんだろう
644 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 23:05:57.46 ID:Ny8q0G3C.net] ジャグラーは定番だ
645 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 23:57:20.55 ID:sGr6+tXm.net] 多次元配列のほうがメモリ上で綺麗に配置されている分、高速化の選択肢が多いかもしれないって発想じゃね
646 名前:633 [2020/10/26(月) 00:00:33.37 ID:R7zaLxag.net] >>639 ExcelファイルからCOM経由で範囲データを取ってくるとobject[,]になるためです
647 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 08:09:54.14 ID:mujdTIU3.net] なんでそれを1次元にするんだろう
648 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 12:01:58.05 ID:bVz9LMJg.net] >>641 実際には多次元配列の方が遅い
649 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 13:22:10.82 ID:l+r11Fp5.net] >>644 理由は?
650 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 14:41:24.14 ID:RInXL5ja.net] PowerShellというか.NETの仕様 .NETには1次元配列の要素にアクセスするための専用命令があるので速い 多次元配列の要素にアクセスするにはプロパティみたいなアクセサメソッドを使わなきゃいけないので遅い
651 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 16:19:55.73 ID:l+r11Fp5.net] >>646 多次元だと倍以上遅いと言う根拠あるの?
652 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 16:27:11.02 ID:RDi5ol2j.net] めんどくせー奴だな
653 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 17:00:59.84 ID:XYschmPc.net] 体感速度は変わらん
654 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 17:43:17.64 ID:jItJ//Mq.net] >>647 自分で試せば良いんじゃね
655 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 17:46:52.74 ID:l+r11Fp5.net] 要は根拠もなしに > 実際には多次元配列の方が遅い と妄想をほざいてただけって話かよw
656 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 17:56:32.09 ID:jItJ//Mq.net] >>651 うん、良いんじゃね、そういう結論で。 以上でよろしいか?
657 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 17:58:32.50 ID:j+tAxxjP.net] >>651 質問に答えず茶化すだけかよw
658 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 19:30:32.27 ID:l+r11Fp5.net] >>653 >>652 に言ってくれよw
659 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 19:43:09.27 ID:/01g7c5c.net] >>ID:l+r11Fp5 たくさん構ってもらえて良かったね
660 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:06:18.23 ID:l+r11Fp5.net] >>655 恥の上塗りかなw
661 名前:633 mailto:sage [2020/10/26(月) 20:09:14.97 ID:5qWbLIDu.net] >>643 Excelファイルから取得したデータを更に別の処理に使うのですが、その際に1次元で渡す必要があるためです
662 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:09:30.70 ID:/TCFG/M1.net] 実装としては添え字でメモリの位置を計算して参照するだけだから 一次元でも多次元でも原理的には速さは変わらないぞ
663 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:13:28.15 ID:jItJ//Mq.net] >>656 きみが絶対的に正しいことはスレ住人の総意で共通認識なのだから、もう十分だろう? そのへんで勘弁してもらないかな。なんなら土下座して謝るよ。
664 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:17:45.03 ID:mujdTIU3.net] ちゃんとアンカー追えよ ジャグ配列vs多次元配列が1次元vs多次元配列に化けてるぞ >>647 >多次元だと倍以上遅いと言う根拠あるの? 「倍以上遅い」なんてどこから来たんだろう
665 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:28:30.59 ID:l+r11Fp5.net] >>658 >>646 によると専用命令があるらしいけど、嘘なのかね? >>660 ああすまん、脳内で二次元配列 ⇔ ジャグ配列 って思ってたわ まあ3次元以上なら専用命令とやらがもっと速くないとダメだけど
666 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:36:57.75 ID:mujdTIU3.net] あんたはまず「倍以上」の出所を説明しないと
667 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 21:11:41.27 ID:EAm4Av0T.net] www5b.biglobe.ne.jp/~yone-ken/VBNET/IL/il15_UseArray.html > ILにも1次元配列については専用の命令が用意されています。
668 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 21:49:29.23 ID:AmD6br2D.net] #2次元配列初期化 Measure-Command { $i = 0; $array = New-Object "object[,]" 1000,1000 for ($x = 0; $x -lt $array.GetLength(0); $x++) { for ($y = 0; $y -lt $array.GetLength(1); $y++) { $array[$x,$y] = $i++ } } } #ジャグ配列初期化 Measure-Command { $i = 0; $array = New-Object "object[]" 1000 for ($x = 0; $x -lt $array.length; $x++) { $array[$x] = New-Object "object[]" 1000 for ($y = 0; $y -lt $array[$x].length; $y++) { $array[$x][$y] = $i++ } } } たしかに初期化の段階でジャグ配列のが速いね
669 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:09:49.38 ID:l+r11Fp5.net] >>662 ジャグ配列知らんの? 二次元相当のジャグ配列だと2回辿らないとダメだから倍は速くないとトータルで遅くなるでしょ
670 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:22:45.88 ID:5/h2v6nN.net] >>665 PSで例見せてよ
671 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:37:25.27 ID:l+r11Fp5.net] ILの話にPSとか言われてもw
672 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:48:42.22 ID:l+r11Fp5.net] 軽くググったら最近の.Net Coreとかだと状況次第って感じやね https://takap-tech.com/entry/2020/02/24/213932 原理考えたらまあ妥当な結果だと思う
673 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 01:23:06.66 ID:IPa2oLl3.net] なるほど勉強になります
674 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 13:37:08.15 ID:bD3kPd/D.net] なるほど理解できません
675 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 15:37:54.18 ID:az6RTKF7.net] 処理系の実装に寄るけど、うまくインデックスを張れば 速度的には同等になるはずだけどな
676 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 19:29:05.55 ID:k9DNZwa6.net] >>671 どういう理論なんだ? ランダムアクセスだとジャグ配列は次元毎にメモリーアクセスして辿らないとダメだけど多次元配列ならインデックスの計算してその場所にアクセスするだけだから多次元配列の方が速い シーケンシャルアクセスだとアクセスの多くは最後の次元のアクセスだから毎回インデックスを計算する多次元配列よりジャグ配列の方が速いと思う まあめっちゃ最適化して多次元配列を1次元配列に展開するようなコードにまで落とせたら多次元配列の方が微妙に速くなるかも
677 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 19:52:31.91 ID:Sd8akiyh.net] なんにせよ多次元配列を1次元配列に高速に平坦化する方法分からないんだろ グダグダスレ引き延ばしておきながらなw
678 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 21:46:07.02 ID:UFBDJ7q0.net] @($a) Foreach-Objectもforeach分も要らない
679 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 21:47:10.61 ID:UFBDJ7q0.net] foreach分 → foreach文
680 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 22:27:25.79 ID:6aj92Tm3.net] >>673 そんな低レベルなことでドヤれるとか羨ましいわw
681 名前:デフォルトの名無しさん mailto:sage [2020/10/28(水) 19:54:09.10 ID:RpzUgl/d.net] >>674 >@($a) PSってこんなオチが多いね $aって打てば全部列挙されて出てくるんだからあれれとは思うんだけどさ
682 名前:633 mailto:sage [2020/10/29(木) 21:32:08.09 ID:/oXwNFXj.net] >>674 返信遅れてすみません。 0.2秒まで速くなりました。 シンプルかつナンバーワンですね 目からウロコでした。
683 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 23:08:28.85 ID:u3CTd5OP.net] >>677 こういうトリッキー系?は趣味PGならいいんだけど 業務PGに実装するには躊躇するんだよなあw
684 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 23:35:09.18 ID:ebCj94Ij.net] え? これは常識では・・・
685 名前:デフォルトの名無しさん mailto:sage [2020/10/30(金) 08:08:54.65 ID:xvehW8+X.net] PowerShell使うならほぼ常識、てか知らないと辛いレベル そもそもPowerShell自体が色々トリッキーな動作するし、特に配列周り
686 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 13:12:42.29 ID:cgiVh2xg.net] $a = [Object[,]]::new(3,3); $a.Rank は 2 $b = $a; $b.Rank は 2 $b = & { $a }; $b.Rank だと 1 $b = $a + @(); $b.Rank でも 1 もちろん $b.Length はどれも 9 $b = $a が特例のように思えてきた どうしてこうなるのかきちんと理屈が知りたい
687 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 14:39:03.01 ID:Q6ZeZ8N8.net] 配列での foreach の使用 (C# プログラミング ガイド) https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/arrays/using-foreach-with-arrays 多次元配列の場合、右端の次元のインデックスが最初に加算されていき、次にその左の次元、またその左、というような方法で各要素がトラバースされます。 int[,] numbers2D = new int[3, 2] { { 9, 99 }, { 3, 33 }, { 5, 55 } }; // Or use the short form: // int[,] numbers2D = { { 9, 99 }, { 3, 33 }, { 5, 55 } }; foreach (int i in numbers2D) { System.Console.Write("{0} ", i); } // Output: 9 99 3 33 5 55
688 名前:682 mailto:sage [2020/11/02(月) 17:29:09.65 ID:cgiVh2xg.net] 明示的な foreach の使用は興味がないなあ $b = $a も $b = & { $a } も $a を $b に代入するのに なんで結果が違うのかが知りたい
689 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 17:46:27.91 ID:O692h/lZ.net] 最初のやつ以外はシンプルな代入じゃなくて演算してるから、演算の結果が一次元配列になっただけじゃないの
690 名前:682 mailto:sage [2020/11/02(月) 17:50:23.99 ID:cgiVh2xg.net] $b = & { $a } も演算? 具体的にどういう演算になるのかわからない
691 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 17:54:46.38 ID:Razdsa9H.net] >>682 >$b = & { $a }; $b.Rank だと 1 >$b = $a + @(); $b.Rank でも 1 この2つは$aがそれぞれ評価されて1次元になって$bに代入されてる $b = & { $a } の場合$aの前にカンマを入れれば型は保たれる $b = & { ,$a } PowerShellの謎仕様
692 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 18:05:40.51 ID:Razdsa9H.net] おそらくスクリプトブロックを通過するときと 右辺や左辺に置いて演算するとき それぞれ1次元に変換されてしまう仕様みたい
693 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 18:07:36.92 ID:O692h/lZ.net] >>686 起動演算子にスクリプトブロックを渡してるんだから演算でしょ スクリプトで $a とだけ書くと$aが評価されて左上から順に9行分の出力が得られる $b=&{$a}はその出力の代入になってる
694 名前:682 mailto:sage [2020/11/02(月) 18:14:48.39 ID:cgiVh2xg.net] じゃあやっぱり単純な代入 $b = $a だけが特別で それ以外は配列が展開されるってことか 理解した >>687 & { $a } だと配列 $a が展開される & { ,$a } にすれば配列の配列 ,$a が展開されて配列 $a がそのまま渡される
695 名前:682 mailto:sage [2020/11/02(月) 18:50:05.02 ID:cgiVh2xg.net] あれ違うな 単純な代入だけでなく Comma operator も特例になるのか
696 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 18:58:29.51 ID:WQUINiFK.net] >>691 特例だとか自分勝手な解釈をする癖を直さないと、他人とのコミュニケーションで苦労するぞ(主に周囲の人間の方が...)。 自分が既に頭の中に描いているイメージに合わせて無理に解釈方法を寄せていくのではなくて、本来理解すべき仕様の方に自分の中の理解を修正して近づけていく方がいいぞ。
697 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 19:13:13.99 ID:eTL99CIn.net] ウザっ
698 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 19:59:31.61 ID:D4NZ1UY1.net] >>692 TPO をわきまえられずトンチンカンな御高説垂れる人も、他人とのコミュニケーションで苦労するぞ(主に周囲の人間の方が...)。
699 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 20:30:51.76 ID:Razdsa9H.net] >>690 原理的にはジャグ配列にして空評価させて返すで合ってると思う 恐らく処理系のソース読み込まないと判らないよ 配列返す関数作る時も同じ方法
700 名前:682 mailto:sage [2020/11/02(月) 20:44:58.19 ID:cgiVh2xg.net] ,$a は Comma operator で1要素の配列を返すけれど その時に $a は展開されずに2次元配列のまま これは単純な代入と同じ扱いだよね
701 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 21:48:13.16 ID:Qlwbnxz+.net] { $a } は { Write-Output $a } の事 Write-Output に配列を渡した時の挙動を考えればいい https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-output By default, Write-Output enumerates through collections provided to the cmdlet. However, Write-Output can also be used to pass collections down the pipeline as a single object with the NoEnumerate parameter.
702 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 22:48:01.97 ID:O692h/lZ.net] ウザかろうと思って特例云々につっこむのやめたけどやっぱり書くわ 代入は代入でしかなく特例も何もない いつだって右辺の値をありのままの型と値で代入するだけ $b=&{$a} というのを代入として認識するからおかしくなる $b=$a.Rank と書いたら$bは数値になるわけだけど、代入したから数値になった!とは思わないでしょ あくまで.Rankを評価した結果が数値になって、その数値を$bに代入したに過ぎない $b=&{$a} も &{$a} の評価結果が一次元配列になる仕様なだけで、代入が何かの法則性に寄与している訳ではないし、一次元配列になるという一貫したルールや思想があるわけでもない
703 名前:682 mailto:sage [2020/11/03(火) 00:15:03.20 ID:Da50zhuo.net] operand を展開してから operator にわたすんじゃなくて operand をそのままわたして operator が展開したりしなかったりする たぶん理解した
704 名前:デフォルトの名無しさん mailto:sage [2020/11/03(火) 08:59:33.05 ID:HUEo3Cdu.net] >>682 の$b = $a は$aの参照を$bに代入している $a = [Object[,]]::new(3,3) $b = $a $b[0,0] = 1 echo $a[0,0] #=> 1 $b = & { $a } は { $a }というスクリプトブロックを実行して戻り値を代入する { $a } の意味は >>697 を見ろ
705 名前:デフォルトの名無しさん mailto:sage [2020/11/04(水) 10:50:57.08 ID:ZJcGuVz6.net] >>694 初学者が変な誤解すると二度と修正する機会ないからな みんな巡り巡って自分が被る迷惑を未然に防ごうと必死なわけよ
706 名前:デフォルトの名無しさん mailto:sage [2020/11/04(水) 20:48:58.85 ID:0afqdDmu.net] いつの間にかヘルプの翻訳作業が始まってた https://github.com/MicrosoftDocs/PowerShell-Docs.ja-jp/tree/live/reference/7.1
707 名前:デフォルトの名無しさん mailto:sage [2020/11/07(土) 21:29:59.64 ID:AAgSLehy.net] こんなシェルを書きました。 function get_stop_code { $hoge=(Get-Content stop_code.txt) } while ($true) { get_stop_code Write-Output $hoge } シェル実行中に、stop_code.txtの中身を書き換えても get_stop_codeがファイルの中身を拾ってくれません いろいろ試したら、こうしたらうまくいきました。がすっきりしません。 function get_stop_code { $hoge=(Get-Content stop_code.txt) Write-Output $hoge } while ($true) { $stop_code=(get_stop_code) write-output $stop_code } get_stop_codeがファイルの中身を、while ($true)の中でうまく拾ってくれる 書き方を教えてください。
708 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 00:25:05.60 ID:gCrk6dnE.net] これって遅延展開系の話なのかな?
709 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 02:53:16.74 ID:mlfH60EQ.net] スコープの話だと思うよ 関数の内側で変数を書き換えてもローカルスコープ内の変数の更新にしかならないので、関数から戻ったら値は書き換わってない 関数を次のように書き換えて明示的にスクリプトスコープの変数を更新してやればいい function get_stop_code { $script:hoge=(Get-Content stop_code.txt) } PSのスコープって特殊で悩ましい 特にループの初回、ほかの言語みたいに未宣言の変数だぞとエラーになってくれればまだいいんだけど、変数が作られて親からも見えちゃうから混乱する
710 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 08:09:56.71 ID:0BM2Z5Uf.net] おれも一瞬ではなく数分、>>703 の問題がわからなかった とりあえず頭にSet-StrictMode -Version Latestを付けとけばエラーにはなる
711 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 10:11:33.41 ID:vf10kFcr.net] >>705 ありがとうございます。 >関数の内側で変数を書き換えてもローカルスコープ内の変数の更新にしかならないので、関数から戻ったら値は書き換わってない というのは、 >>703 だと、 同じシェル内にある$hogeであっても、 @get_stop_code関数内の$hoge Awhile ($true)内にある$hoge の2種類があり、 while ($true)内で、get_stop_code関数を実行しても、 @の$hogeしか書き換わらないから、求める結果が得られない。 って事でしょうか。
712 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 12:20:50.04 ID:mlfH60EQ.net] そんな感じ 関数はローカルスコープを作る whileの方はその外側にあたるから親スコープになる ちなみにPSではwhileブロックはローカルスコープを作らないのでスクリプト全体のスコープと同じ
713 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 14:40:55.27 ID:vf10kFcr.net] >>708 ありがとうございます。 スコープですね、勉強になりました。 きっと、しっかり理解すれば便利な仕様なんでしょうが、 初学者にとっては罠でしかありませんね・・・こういうの・・・。
714 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 21:23:36.42 ID:TgcNdU0w.net] about_Scopes https://docs.microsoft.com/ja-jp/previous-versions/windows/powershell-scripting/hh847849(v=wps.640)
715 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 11:42:35.91 ID:tOFQB4no.net] ダイナミックスコーン
716 名前:デフォルトの名無しさん [2020/11/09(月) 13:18:24.63 ID:hpK1fX+1.net] >>707 その前にシェルという単語の使い方がおかしい ファミリーベーシックで「ファミコン書きました」と言ってる感じで 恥ずかしいのでやめたほうがいい
717 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 13:43:05.15 ID:6e3D9VGJ.net] シェルスクリプトはシェルスクリプトであってシェルではない
718 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 18:13:48.88 ID:XoDGsHQu.net] 今どきファミリーベーシックに例えても人に通じないぜーっ!!
719 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 18:47:25.54 ID:8i+JRxOJ.net] べーしっ君はもっと通じないだろw
720 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 21:56:26.60 ID:zTstc6LM.net] ショットシェルだったら散弾のことでちょっとかっこいいぐらいなのに… hb-plaza.com/wp/wp-content/uploads/2013/12/00buck001.jpg
721 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 22:20:12.83 ID:7qqOuQ5J.net] ちょっと知れるね
722 名前:デフォルトの名無しさん [2020/11/09(月) 22:31:51.42 ID:NYGqo7nG.net] ポンタポイントが付くか楽天ポイントが付くかの違いで基本的には一緒だよ
723 名前:デフォルトの名無しさん mailto:sage [2020/11/10(火) 02:41:01.00 ID:TotITmpP.net] スクリプトスコープ以外にも、関数スコープがあるのは便利。 C, Ruby と同じ 関数スコープが無い言語は、プログラミングが異常に難しい
724 名前:デフォルトの名無しさん mailto:sage [2020/11/10(火) 04:19:48.53 ID:UHXHz0W1.net] その程度の事で「異常に」難しいんじゃ向いてないんじゃない? 多少面倒臭いなと思う事はあっても
725 名前:デフォルトの名無しさん mailto:sage [2020/11/10(火) 04:24:34.34 ID:/n5BB76T.net] 再帰呼び出しで・・・
726 名前:デフォルトの名無しさん mailto:sage [2020/11/10(火) 09:42:32.98 ID:v1zmG+Gm.net] むしろローカル変数の恩恵に理解を示し、グローバル変数を強制されたら不安だと思う感性の方が普段たくさんプログラミングしてるんだろうなと感じる 変数iを使ったループの中でさらに別の変数iを使った関数を呼ぶと無限ループのバグになる 代わりにjにしようとか考えてると早晩行き詰まるので「i_関数名」みたいな変数名を常に使うことを思い付く 関数名は短くしたいと考えるようになって可読性がまずいことに 短いスクリプトしか書かない用途の言語ならいいけど、そうでないなら品質の低いコードを招く言語になるだろうな
727 名前:デフォルトの名無しさん mailto:sage [2020/11/10(火) 13:37:25.83 ID:xsn7mmhw.net] ローカルとグローバルの話はまあややこしいな
728 名前:デフォルトの名無しさん mailto:sage [2020/11/10(火) 13:43:57.86 ID:xsn7mmhw.net] 自分のいる世界の常識が他の場所で通用するかどうか それを生きていて初めて見せられた例がプログラミングのローカルとグローバルだった なんていうPCヲタも少なくないだろうなあw ブロック過ぎたらまっさらに戻る言語なら 関数が動かないと思ったらちゃんと戻り値にして出さないとなあ 報告連絡相談 と同じ
729 名前:デフォルトの名無しさん mailto:sage [2020/11/12(木) 08:30:03.86 ID:HWijez2q.net] Announcing PowerShell 7.1 https://devblogs.microsoft.com/powershell/announcing-powershell-7-1/
730 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 01:15:46.84 ID:TgKG6lgf.net] プログラム経験ほぼゼロの初心者です。 プログラムのコマンドラインの引数に変数を使うと上手く動作しません。 ttps://aji0.web.fc2.com/ ←ここのAviUtlControlというソフトを使ってコマンドラインでAviUtlに動画ファイルを送りたいんですが、 「& auc_open.exe(AviUltでコマンドラインからファイルを開くプログラム) "$args"」とすると 「ファイルの読み込みに失敗しました。このファイル形式には対応していないか対応するコーデックやプラグインが登録されていない可能性があります」 とエラーが出て読み込めません。 同じファイルを「& auc_open.exe "(読み込ませたいファイルのフルパス)"」とすると開けます。 「Start-Process -FilePath auc_open.exe "(読み込ませたいファイルのフルパス)"」とした場合auc_open.exe自体が動作しません。 書き方を間違えているでしょうか? 普通に開ける動画ファイルもあるので相性の問題かもしれないのですが…。
731 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 02:31:24.83 ID:8Ha10j62.net] >>726 Paramで宣言してないなら、$argsじゃなくて$args[0]じゃない? https://microsoftou.com/ps-arguments/ 文字列じゃなくて「配列」のまま渡しちゃってるんじゃないかな? Start-Process -FilePath auc_open.exeでauc_open.exeが開かないなら、auc_open.exeのあるディレクトリとは違うディレクトリで実行してるとか? auc_open.exeのあるディレクトリに移動するか、auc_open.exeをフルパスで指定してみたら?
732 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 03:29:17.05 ID:TgKG6lgf.net] ありがとうございます。$args[0]に書き換えてみましたが、結果は同じでした。 リンク先に従ってParam($Arg1)と一行目に書いてみると「空の文字列が渡されている」とエラーになりました。 もちろん$args1に書き換えています。 GetType().FullNameで$args[0]を調べてみましたが、System.Stringになっていました。 上記では省略しましたが、auc_open.exeはフルパスで書いています。 変数を使っていますが、write-hostで調べたところパスに間違いは無かったです。 windowsやpowershellのバージョンのせいな気もしてきた。windows10は1906でpowershellはバージョン5.1です。
733 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 03:41:57.52 ID:TgKG6lgf.net] あ、そうそう、このAviUtlControlというソフトは、もともとコマンドラインの無いAviUtlに 強引にコマンドラインを外付けにするため、実際の動作はAviUtlの「ファイルを開く」を遠隔操作しているだけみたいですね。 windowsのファイルを開くダイアログボックスが表示されるので。 そういう動作をしているのに、ps1ファイルにフルパスで直接ファイルを指定した場合は正常に開けて $argsを使ってps1ファイルにD&Dした場合は「ファイルが対応していない」というエラーが出るよく分からない挙動になります。 $argsもwrite-hostしてみましたが、ちゃんと目的のファイルがフルパスで格納されています。
734 名前:726 mailto:sage [2020/11/13(金) 03:56:04.19 ID:TgKG6lgf.net] $args[0]ではなく$argsをGetType().FullNameしてみるとsystem.object[]になっていました。 $args = [string]$argsとして文字列に変換してみましたが結果は同じ。 あと、$args[0]をwrite-hostしてみると拡張子の末尾に[0]がついていましたがこれは正常ですか?
735 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 05:04:21.79 ID:HX9sr4kC.net] >>726 & auc_open.exe(AviUltでコマンドラインからファイルを開くプログラム) "$args" ↓ & auc_open.exe(AviUltでコマンドラインからファイルを開くプログラム) $args それでだめなら & auc_open.exe(AviUltでコマンドラインからファイルを開くプログラム) $args[0] こんな簡単な話じゃ無いよなあ?
736 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 10:40:00.19 ID:3YZH6rMm.net] どうせパス名に()や[]が付いているというオチなんでしょ
737 名前:726 mailto:sage [2020/11/13(金) 12:38:30.15 ID:TgKG6lgf.net] >>731 >>728 で試しました。 バッチファイルで (フルパス)auc_open.exe %1 とし、動画ファイルをD&Dしたら正常に開けました。 powershellと動画の相性か、書き間違えているかです。 pastebinに貼っておきます。 ttps://pastebin.com/Dupj68Z4 このスクリプトで何がやりたいのかというと、録画したテレビ番組のCMカットするのに 動画ファイルを開く→音声ファイルを追加読み込みという手順を踏まなきゃいけないのをボタン一発で済ませたいんです。
738 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 13:31:59.37 ID:907SkV9V.net] "$args" は$argsって文字列と解釈されるから、 $argsは参照されない & $open "$args"は$argsという引数として解釈されてる "$m2v" + "*.wav"も$m2v*.wavと解釈される 変数を参照したいなら変数はダブルクォートで囲ってはダメ & $open $args $m2v + "*.wav" のようにする
739 名前:726 mailto:sage [2020/11/13(金) 13:57:21.84 ID:TgKG6lgf.net] >>734 ありがとうございます。結果は変わりませんでした。 最初に書いたように正常に開ける動画ファイルもあるので本当に相性問題かもしれません…
740 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 16:35:19.24 ID:907SkV9V.net] すぐ相性問題で解決したことに使用とする奴嫌い 変数内にダブルクォート付きの文字列を格納してないのは分かってる?
741 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 19:25:55.17 ID:pkjRHYH3.net] "$args"と書いたらinterpolationされるので$argsの内容は参照されるよ PSもモダンなので "my name is $name" みたいな書き方ができる リテラルになるのは'$args'と書いた場合 でも"$args[0]"と書いたらダメ どこまで変数でどこから文字列なのかが想定と合わない "$($args[0])"と書く必要がある [0]を付けないと配列への参照になるから"$args"だと引数間に改行コードが入る 読み込めない動画はパスに空白に含まれているのかもしれないな
742 名前:デフォルトの名無しさん [2020/11/13(金) 19:30:14.24 ID:34jLv13e.net] >>726 cmd[.]exe(コマンドラインと呼んでいるものの実体)に引数が渡るときの パースの問題の可能性がある フルパスに空白が入っているかどうかで成否が変わったりしない? "$args" を ""$args"" or `"$args`" にしてみたら
743 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 19:33:35.59 ID:pkjRHYH3.net] あと "$($args -join ' ')" も試すといいかもな
744 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 19:37:05.80 ID:pkjRHYH3.net] これスペースが連続するファイル名があると失敗するな… 切り分けにはなるからいいか
745 名前:デフォルトの名無しさん [2020/11/13(金) 19:40:36.71 ID:lrdHTx5A.net] psって難しいんだな
746 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 19:55:31.96 ID:8Ha10j62.net] >>728 $argsは配列なので、その中身の一番目を取り出すために$args[0]って書くってことだよ 自分でGetTypeして$argsはobject[]、$args[0]はStringだって確認出来てるじゃん それに加えて、$argsを書き換えて使うのは混乱するから、$args = [string]$args じゃなくて、$m2v = $args[0] みたいにして、$m2vの方を使ったら? その上で、>>734 のアドバイスに従って修正したものをpastebinに貼ってみて 相性が気になるなら、「正常に開けない動画ファイル」を「正常に開ける動画ファイル」と同じ場所に同じ名前で置いてみて開けるなら相性じゃないって確認できるよ c:\abc.m2v ←開ける d:\[movie]\zz xyz.m2v ←開けない みたいな状況だとして、(abc.m2vを退避してから)zz xyz.m2vをabc.m2vにリネームしてc:\に置いてみたら開けるんじゃないかな?
747 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 20:45:29.62 ID:HX9sr4kC.net] >>738 >フルパスに空白が入っているかどうかで成否が変わったりしない? 空白とかマルチバイトとかあっちの問題か!
748 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 21:24:00.55 ID:34jLv13e.net] >>738 \"$args\" かも 昔自分で書いたもののひとつはそうなってた 理由の説明はできん
749 名前:デフォルトの名無しさん [2020/11/13(金) 21:28:03.15 ID:n6TD+JMZ.net] ぱわーしぇるがシェルではない事が証明されたな
750 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 23:47:58.29 ID:LLS1FCOb.net] ファイルパス・ユーザー名に、空白・日本語を使うと、バグる。 半角英数字・ハイフン・アンダーバーだけにする Windows のパスには、空白が入っているものがあるので、ヤバイ
751 名前:726 mailto:sage [2020/11/14(土) 00:23:47.78 ID:8FDial4y.net] あああああ原因分かったあああ! 全角スペースだああ! 駄目なファイルの全角スペースを削除したら読み込めました! しかし修正方法が分からない…。とりあえず>>742 さんの言う通り$m2v = $argsとして、以下ここで貼られていた改善案の結果 "$args"の場合:$m2vの中身→フルパス $args[0]の場合:$m2vの中身→最初の半角スペースまで ""$args"" →スクリプト自体がすぐに終了 `"$args`" →コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されていません。 "$($args -join ' ')" →ファイル読み込みに失敗 $m2vの中身→フルパス \"$args\" →コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されていません。 "$($args[0])"→ファイル読み込みに失敗、$m2vの中身は最初の半角スペースまで 正直$args[0]を理解できてない気がします。殆ど変わってませんが、とりあえずpastebinに貼っておきます。ttps://pastebin.com/AQZqQ6aX
752 名前:726 mailto:sage [2020/11/14(土) 01:10:54.25 ID:8FDial4y.net] あ、下記忘れましたが"$args"と$args[0]も最初と変わらずファイル読み込みに失敗します。
753 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 01:52:08.34 ID:OfQ57GBv.net] -joinじゃ空白の連続があるとバグることには気付いてたけど、PSが全角空白をホワイトスペースとして扱うのは盲点だったわ こういうところPSは厄介だな…… そのスクリプトは呼び出された時点で既に引数が復元不能になってるので、スクリプトの呼び出し元を変える必要がある powershell C:¥your-script.ps1 "a b c.avi" のように呼び出しているのだとしたら powershell -file C:¥your-script.ps1 "a b c.avi" と書き換えると動く ちなみにスクリプト内でParamを明示的に定義して powershell C:¥your-script.ps1 -oreore_arg0 "a b c.avi" のように呼んでもいいらしい
754 名前:726 mailto:sage [2020/11/14(土) 03:06:15.72 ID:8FDial4y.net] >>749 行けました! ありがとうございます! 後半の意味がちょっと分からないんですが、動画ファイル名を明確にしろということでしょうか?
755 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 04:21:18.02 ID:C2BVBS/P.net] 引数をシングル・ダブルクォーテーションで囲む事で、 1つの引数として解釈される 囲っていないと、複数の引数として解釈されてしまうから こういうのは、Linux では、うるさいぐらいに注意する
756 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 05:26:16.13 ID:/XxpwyFY.net] 最初にPCに自分の名前を流用した名前を付ける時点で 半角英数にする、空白入れないというのを徹底しないと自動化には程遠い
757 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 05:35:00.14 ID:YIajn/qh.net] おめやで(*´▽`*)
758 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 07:04:37.55 ID:4EKVBZXC.net] おめやで?
759 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 10:49:04.93 ID:OfQ57GBv.net] >>750 自分で引数名を定義して渡すやり方 引数ひとつひとつの範囲を明確にできるのでPSにおかしな解釈をされようがなくなる どちらかというと経験者向けの参考として書いたから動いたなら気にしなくていいと思う Powershell Paramで検索したら詳しく出てくる
760 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 11:12:05.60 ID:OfQ57GBv.net] >>751 今回はその常識に反するPS固有の問題だよ powershell C:¥foo.ps1 "a b c" d e f # 全角半角空白混在 のように書くと、経験的な常識では $args[0] = "a b c" $args[1] = "d" $args[2] = "e f" の3つに分解されることを期待するけど、今回は a 〜 f が全部バラされて$argsは6個の配列になるという事象 経験から問題を矮小化しがちになるのは老化による成長鈍化だと思う 自戒を込めて
761 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 11:18:40.57 ID:xztQReuw.net] 省略しないで実際に流したコマンドをそのまま晒したほうがいいような気はする せいぜい数行だろうし
762 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 13:03:46.86 ID:eAmLQM6Q.net] WindowsのD&Dによるバグ仕様を回避するためにはpathに半角spを含めておいた方が良い
763 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 14:43:52.28 ID:vnxWLQnj.net] >>756 > a 〜 f が全部バラされて$argsは6個の配列になる どのバージョンだよ 5.1、7.0、7.1で試したけど $args[0] は "a b c"、$args.Length は 4 になるぞ
764 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 15:37:31.99 ID:OfQ57GBv.net] >>759 バージョン5.1をcmdから呼び出して確認した 再現しなかったのは-fileを指定したからじゃない?
765 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 15:44:28.74 ID:cwgCwaC3.net] >>759 Windowsのパラメーターの分解は呼ばれ側プロセスで処理すんだけど powershellは起動時のバージョンと実行時のバージョンが違うことがある powershellのバージョン違いを複数入れてる場合が恐らく該当する 引数4になるパターンはpowershellバージョン2で実行されてる powershell -v 2 で起動した場合は引数4 powershell -v 5 は全部バラけて引数6 俺はこういうバグだか仕様だかに付き合うの嫌だから一時ファイルや環境変数とかでやりとりする
766 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 16:04:59.98 ID:cwgCwaC3.net] [Environment]::CommandLine や [Environment]::GetCommandLineArgs() を使うとpowershellに因らない.NETで処理したパラメーターが得られるからこれが安全かもね
767 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 16:05:13.61 ID:OfQ57GBv.net] -v 2 で起動したらたしかに引数4になったけど $args[0] は a になったわw -v 2 だと全角スペースが区切りとして解釈されない
768 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 16:21:10.31 ID:OfQ57GBv.net] 原理はこんな感じかな? まずPS外から呼び出したときは引数はいわゆる普通にparseされる powershell C:¥foo.ps1 "a b c" d e f → C:¥foo.ps1、"a b c"、d、e f の4引数 powershell.exeに-fileも-commandも指定されなかったとき、powershellはすべての引数を-commandの対象として扱う powershell.exeは引数をワンライナーのスクリプトとして処理しようとする 複数に分割されて受けたパラメーターをコードで例えると $args -join ' ' のような残念な方法で結合する & "C:¥foo.ps1 a b c d e f" 相当のスクリプトが実行される 全角スペースを区切りと見なすかどうかはPSのバージョン次第
769 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 20:24:33.59 ID:6rE1W4Lt.net] シングルクォーテーションならいけるんじゃなかったっけ
770 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 20:25:14.57 ID:ojc3zNUJ.net] これはひどい PS由来の機能は信用しない方がいいな
771 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 21:14:45.67 ID:BVcYkKlk.net] 全角スペースを許すプログラミング言語まとめ https://pronama.jp/2015/09/06/allows-ideographic-space-programming-languages/
772 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 21:25:00.22 ID:OfQ57GBv.net] >>765 シングルで試したらいけたわw シングルならPS外では単なる文字として扱われるからcmdから呼び出したとき C:¥foo.ps1 'a b c' d e f の5引数になって、連結結果は & "C:¥foo.ps1 'a b c' d e f" 相当になるからうまくいく模様
773 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 22:11:59.00 ID:ssVCI5qt.net] Excelのセル内の文字列全部ではなく、セル内の一部の文字列だけ文字色を変更する事は出きますか?
774 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 22:33:49.14 ID:lpvH3HhJ.net] 自決しました。かおもじ
775 名前:デフォルトの名無しさん mailto:sage [2020/11/27(金) 20:48:34.28 ID:0Gsdb/Fk.net] >>756 powershell C:\foo.ps1 "a` b` c" d e` f
776 名前:デフォルトの名無しさん mailto:sage [2020/11/28(土) 20:01:43.24 ID:ako3hAti.net] .Net Frameworkの質問になるかもしれんが、Powershellから使うのでこちらに 対話型のスクリプト作っててユーザーからファイルやフォルダのパスの入力を求めるのにGUIにしようと思って System.Windows.Forms.FolderBrowserDialogとか FileBrowserDialogとかを使ってやろうとしてますが、 ダイアログ画面が他のウインドウに隠れてユーザーが気づきません。 最前面表示させるにはどうすればよいでしょうか?
777 名前:デフォルトの名無しさん mailto:sage [2020/11/28(土) 21:23:54.75 ID:ako3hAti.net] 自決しました。 topmostプロパティをtrueに設定したFormオブジェクトを FolderBrowserDialogオブジェクトのShowDialogメソッドの引数に渡すんですね。 こういう方法はマニュアル読んでもまったくわからない。苦手。
778 名前:デフォルトの名無しさん mailto:sage [2020/11/28(土) 22:56:50.75 ID:goyIH8CW.net] >>773 待て早まるな
779 名前:726 mailto:sage [2020/12/03(木) 20:12:26.39 ID:AP2X4U04.net] >>726 です。先日は貴重なアドバイスをどうもありがとうございました。 申し訳無いんですがまた詰まってしまったので助けて下さい。 Trim(2505,6665) ++ Trim(9815,34297)〜 という内容のテキストファイルを整形して 2505 6665 9815 34297 という形にしたいんですが、改行が出来ません。 ttps://orahoview.com/replacetextinfilebypowershell/ ここを参考に $utltrimfile = $(Get-Content (テキストファイルのパス)) -replace ") ++ Trim(" "`n" $utltrimfile = $trimfile -replace "," "`n" $utltrimfile > (テキストファイルのパス) と書いてみたんですが「`nを使用できません」とエラーが出ます。\nでも同様の結果でした。 改行をする方法はありますか?
780 名前:デフォルトの名無しさん mailto:sage [2020/12/03(木) 20:44:02.20 ID:gj1mOZdT.net] >>775 数字以外が出てきたらそこで区切ることで配列にする 配列要素のうち空文字列であるものを除外 配列をまるごとファイルにリダイレクトして改行された出力結果を得る $utltrimfile = $(Get-Content (テキストファイルのパス)) -split '\D' | ?{$_ -ne '' } $utltrimfile > (テキストファイルのパス)
781 名前:726 mailto:sage [2020/12/03(木) 21:29:21.46 ID:AP2X4U04.net] 出来ました! ありがとうございました!
782 名前:デフォルトの名無しさん [2020/12/07(月) 00:00:56.83 ID:8Ddysj0U.net] PowerShellにinterfaceありますか? 空のクラス定義するしかないですか?
783 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 00:09:24.05 ID:rAKRPC/o.net] ■Powershellコマンドを実行する PS C:\Users\hoge> Get-NetIPConfiguration InterfaceAlias : Wi-Fi InterfaceIndex : 10 InterfaceDescription : TP-Link Wireless USB Adapter NetProfile.Name : Buffalo-A-428D (以下略) なんかたくさん出る ■(Powershellコマンド).列の名前 を実行する PS C:\Users\hoge> > (Get-NetIPConfiguration).NetProfile.Name Buffalo-A-428D .列の名前で指定したものしか出ない。 こういう(コマンド).列名っていうので、出力を絞る方法に名前ってありませんか?
784 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 00:52:35.54 ID:fL+10lW/.net] grep
785 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 00:55:50.26 ID://YuCj5S.net] interfaceってたぶんJava的な意味でのやつか
786 名前:デフォルトの名無しさん [2020/12/07(月) 00:57:24.19 ID:8Ddysj0U.net] >>781 そうなのよ
787 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 01:07:36.68 ID:nVLltyNc.net] : だね
788 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 07:14:39.74 ID:Zb+BuNXc.net] >>779 . はプロパティ逆参照演算子だよ Property dereference operator
789 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 07:24:15.67 ID:Zb+BuNXc.net] . で出力を絞る方法、正確には対象を選ぶ方法は、一般的にはプロパティアクセスが該当するかな
790 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 08:49:51.37 ID:Qq2AGx/W.net] メンバーアクセス演算子 . https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_operators#member-access-operator- オブジェクトのプロパティおよびメソッドにアクセスします。 メンバー名は式にすることができます。 $myProcess.peakWorkingSet (Get-Process PowerShell).kill() 'OS', 'Platform' | Foreach-Object { $PSVersionTable. $_ }
791 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 15:48:31.93 ID:5uzreY+I.net] copy-itemでディレクトリを指定して、内部のファイルがパス260文字以上でエラーを出すとき、そのパスを取得する方法はあります?
792 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 16:04:01.41 ID:8iO4bdx+.net] >>787 Set-ItemProperty "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" -Name LongPathEnabled -Value 1
793 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 18:20:51.52 ID:5uzreY+I.net] >>788 ありがとう ただそのやり方はwin10にしか出来ないようで、win8.1ではLongPathEnabledは存在しないようです ググってもLongPathEnabledのwin8.1版は見つからないもので……
794 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 22:33:03.33 ID:wvARFKZP.net] >>789 単に制限回避したいなら \\?\ 使えば良いんじゃないかな https://stackoverflow.com/a/53099257 https://superuser.com/a/760601 そうじゃなくて、260文字以上のパスを探したいなら、そういうツールがいくつかあるよ https://sourceforge.net/projects/tlpd/
795 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 23:37:26.80 ID:5uzreY+I.net] >>790 試してみます ありがとなす
796 名前:デフォルトの名無しさん mailto:sage [2020/12/08(火) 15:51:45.96 ID:CDSpQQd3.net] 外部コマンド | PowerShellの関数って風にパイプでつないで処理するとき 出力側が終わるまで一旦全部バッファリングしてから、ようやくPowerShellに処理が移る感じになるんですが 並列で処理するようにするにはどうすればいいでしょうか?
797 名前:デフォルトの名無しさん mailto:sage [2020/12/10(木) 21:12:35.73 ID:6BQNLUy5.net] #1個めループ for($i=0; $i -le 10; $i++) { $hoge="ikkaime_" Write-Output $hoge$i } #2個めループ for($i=0; $i -le 10; $i++) { $hoge="nikaime_" Write-Output $hoge$i } これを1個のforにまとめる素敵なアイデアございませんでしょうか。 何がしたいかというと、1個めのループ(10回)が終わったら、$hogeをniakieme_にして、 もう10回ループさせて終わるようにしたいです。
798 名前:デフォルトの名無しさん mailto:sage [2020/12/10(木) 21:25:03.78 ID:3lwwmG32.net] $hoge="ikkaime_" for($i=0; $i -le 20; $i++) { if ($i -eq 10) { $hoge="nikaime_" } Write-Output $hoge$i }
799 名前:デフォルトの名無しさん [2020/12/10(木) 21:59:45.86 ID:/iej8cKu.net] foreach ($hoge in 'ikkaime_', 'nikaime_') { for ($i = 0; $i -lt 10; $i++) { Write-Output $hoge$i } }
800 名前:デフォルトの名無しさん mailto:sage [2020/12/10(木) 23:27:25.70 ID:uqnVDABe.net] $ikkaime = @() $nikaime = @() for($i = 0; $i -le 10; $i++) { $ikkaime += "ikkaime_$i" $nikaime += "nikaime_$i" } Write-Output $ikkaime Write-Output $nikaime
801 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 03:49:50.69 ID:bpjP0VBu.net] "ikkaime_","nikaime_"|%{$hoge=$_;0..9|%{$hoge+$_}}
802 名前:793 mailto:sage [2020/12/11(金) 23:44:28.19 ID:YtFbF7ro.net] ありがとうございました。 書き方がいくつもあるんですね。 非常に脅されたました。 ありがとうございます。 ちなみに、>>795 で処理しました。
803 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 23:55:43.98 ID:BGcESmPN.net] インクリメントのループはこう書いたほうがスッキリする foreach ($i in 0..9) {
804 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 00:05:08.43 ID:w0iK+TRN.net] >>797 こういうパイプがネストしてるのに違和感あるんだけど 多少効率悪くてもパイプ1本にできないかな
805 名前:デフォルトの名無しさん [2020/12/13(日) 01:22:24.35 ID:cCJaeZ7C.net] for ($i=1; $i -le 2; $i++){ Switch($i) { 1 {(1..10) | %{"ikkaime_"+$_}} 2 {(1..10) | %{"nikkaime_"+$_}} } }
806 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 07:32:06.23 ID:5EW0FlRD.net] パイプは繋げてナンボ UNIX文化からの流れで、シンプルなコマンド群からの組み合わせの可能性は無限大 長いパイプラインが違和感? いやロシアからウクライナを経由してドイツまで延びてもいい…!ゴルビーもそう言ってるよ
807 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 08:18:38.20 ID:6TpS+NE1.net] 0..9 | % { "ikkaime_$_"; "nikaime_$_" } | sort
808 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 08:21:28.01 ID:7zDtZqQK.net] function hoge($fuga) { 0..9 | ForEach-Object {Write-Output "$fuga$_"} } hoge 'ikkaime' hoge 'nikaime'
809 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 08:23:17.62 ID:7zDtZqQK.net] >>800 "ikkaime_","nikaime_" | %{$hoge=$_;0..9} | %{$hoge+$_}
810 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 10:24:56.32 ID:aJyBOeQT.net] >>802 長いパイプじゃなく、パイプライン処理の名にそぐわない、 行って帰ってくるようなネストされてるのが気持ち悪い
811 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 20:15:51.92 ID:w0iK+TRN.net] >>803 >>805 そうそうこういうのがいいね
812 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 22:17:37.96 ID:aJyBOeQT.net] ゴルビーのパイプライン大作戦にだって行って帰ってくるようなパイプは無いだろ
813 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 13:38:52.97 ID:MCQs+fzK.net] 変数を事前に全部固めた書いたほうがわかりやすいと思うのですが、 ループ前に定義した変数の値に、ループ時の変数を入れ込む方法がわかりません $mynameis変数をループ中(コメントの位置)に持ってくると、問題ないんですが、 なんとか#変数ってしてあるところにもってきたいんです 定義したときには空で、あとから追加で変数に値をいれることってできないんでしょうか? ソース #変数 $watashi = "私は" $fname = "佐藤" $mynameis = "$watashi$fname$lname" foreach ($lname in "一郎","二郎","三郎"){ #$mynameis = "$watashi$fname$lname" #名を名乗る Write-Output $mynameis }
814 名前:デフォルトの名無しさん [2020/12/14(月) 14:58:28.73 ID:0uVb17k3.net] $mynameis = { "$watashi$fname$lname" } $watashi = "私は" $fname = "佐藤" foreach ($lname in "一郎","二郎","三郎"){ #名を名乗る Write-Output (mynameis) }
815 名前:デフォルトの名無しさん [2020/12/14(月) 15:01:37.07 ID:0uVb17k3.net] >Write-Output (mynameis) Write-Output (&$mynameis) こうかも、PowerShell難しすぎ
816 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 21:21:03.56 ID:vj7TAroN.net] foreachはスコープ作らなかったと思うけど 何が問題なの?
817 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 21:31:50.90 ID:vj7TAroN.net] ごめんようやく理解した 最初にNew-Variableなり空文字で宣言するだけじゃ納得いかんのかな 変数が自動で書き変わるのは正直気持ち悪い
818 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 21:43:34.54 ID:MBsazS7x.net] $watashi = "私は" $fname = "佐藤" $mynameis = "$watashi$fname{0}" foreach ($lname in "一郎","二郎","三郎"){ Write-Output ($mynameis -f $lname) }
819 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 22:30:25.12 ID:LFps+YXF.net] モダンな言語を使って書くレガシープログラミングだね 先頭宣言教から改宗してもらうのが一番丸く収まるとか言ったらダメなんだろうな
820 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 22:33:35.98 ID:/tZ0PSGV.net] そこは鈴木にしようぜ
821 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 23:10:29.87 ID:EXeKWskh.net] できないことはないってだけで、やめたほうがいい 他の人がコードを読む時にとても困惑させるし 半年後に自分が読んでも理解に苦しむかもしれない
822 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 23:57:40.98 ID:CBAGo1je.net] 意外とPerl的なスパゲッティの罠がある言語なのね
823 名前:デフォルトの名無しさん mailto:sage [2020/12/15(火) 03:55:48.18 ID:eKJAj5sp.net] >>810 みたいにスクリプトブロックで評価順序制御するのは別におかしくないと思うけど
824 名前:デフォルトの名無しさん mailto:sage [2020/12/15(火) 07:38:16.79 ID:T2M/UCWI.net] 変数宣言を冒頭に集めるという、昔の言語ではルールだったけどデメリットの方が多いとして廃れた風習 その実現にスクリプトブロックを多用するのは可読性を落とすからやめとけという話じゃないかな 古典言語には存在しなかった文字列補間は、宣言したスコープで即時解決されるものだから冒頭部でリテラルを宣言する風習と相性が悪い 記法が似ていて混同したのだろうけど、質問者が暗に期待していたであろうフォーマットパターン文字列としてはPowershellでは -f 演算子が用意されているのでそれを使えばいい
825 名前:デフォルトの名無しさん mailto:sage [2020/12/15(火) 07:38:27.49 ID:T2M/UCWI.net] この話をPowershellの罠とされてしまうのはさすがにかわいそう
826 名前:デフォルトの名無しさん mailto:sage [2020/12/15(火) 13:15:17.29 ID:HMGpB1Xp.net] $watashi = "私は" $fname = "佐藤" $lname = "一郎","二郎","三郎" $lname.ForEach{Write-Output "$watashi$fname$_"}
827 名前:デフォルトの名無しさん mailto:sage [2020/12/15(火) 13:34:51.98 ID:/uFuBiiy.net] "私は"と"佐藤"を分ける意味がない 気持ちは分からなくもないけど
828 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 09:44:04.15 ID:VCJoAcsJ.net] 1. webからテキストをDLしてカレントディレクトリに Shift-JIS で保存したい。どう書けばいいですか? https://example.com/test.txt 文字コード:UTF-8 コマンドプロンプトから以下でDL出来るのまでは調べて分かったんだけど文字コードを変えて保存するのが分かりません powershell -Command "Invoke-WebRequest https://example.com/test.txt -OutFile test.txt" コマンドプロンプトにコピペかバッチから使いたいのでワンライナーで出来ると嬉しいです 2. 1に似た処理でweb上のUTF-8のtest.txtをカレントディレクトリのShift-JISのabc.txtに追記したい こちらもコマンドプロンプトから powershell -Command "〜 みたいに出来ればワンライナーで
829 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 13:22:09.75 ID:JHzHImy2.net] >>824 Invoke-WebRequestのOutFileオプションじゃなくて、EncodingオプションのあるOut-Fileコマンドレットの方を使ったら? (cmdじゃなくてpowershellから実行すれば、powershell -Command ""の部分はいらないよ) Invoke-WebRequest https://example.com/test.txt | Out-File -Encoding default test.txt 追記するなら、Appendオプション Invoke-WebRequest https://example.com/test.txt | Out-File -Encoding default abc.txt -Append
830 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 19:10:36.45 ID:VCJoAcsJ.net] >>825 レスありがとうございます。ですが出来ませんでした Fileは作られるのですが内容が以下のようになります StatusCode : 200 StatusDescription : OK Content : ここに中身が複数行 尻切れ RawContent : HTTP/1.1 200 OK Connection: keep-alive x-robots-tag: noarchive, nofollow, noindex なんか色々 Forms : {} Headers : 諸々 Images : {} InputFields : {} Links : {} ParsedHtml : mshtml.HTMLDocumentClass RawContentLength : 中身、Content +尻切れ部分 で保存するにはどう書けばいいですか? Win10.0.18363.1256 PSVersion 5.1.18362.1171
831 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 20:03:25.26 ID:kYgyiRJ/.net] (Invoke-WebRequest https://example.com/test.txt).Content | Out-File -Encoding default test.txt
832 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 20:37:34.73 ID:VCJoAcsJ.net] >>827 出来ました!ありがとうございます! なんかオリジナル(UTF-8 LF)に比べ変換した(Shift-JIS CRLF)では末尾に改行コード1つ余分に追加されてしまいますが。。 バッチで読み直して再保存すれば行けそうです やりたいことが可能になりました。感謝!
833 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 21:11:10.07 ID:CXRufgbD.net] >末尾に改行コード1つ余分に追加されてしまいます こういうの気持ち悪い! 誰か助けてあげて!
834 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 23:24:39.55 ID:kYgyiRJ/.net] ググって出てくるやつだとPowershellのVer5以上なら (Invoke-WebRequest https://example.com/test.txt).Content | Out-File -Encoding default test.txt -NoNewline
835 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 23:38:36.87 ID:VCJoAcsJ.net] >>829 ありがとうございます。私もモヤモヤしてたので調べて報告するつもりでした >>830 ありがとうございます -NoNewline で末尾改行追加されませんがLFのままになってしまうようです たぶんLFをCRLFにreplaceしてからOut-File -NoNewline で行けそうかも、というところまで来ていたのですが、、 置換のコマンドレットが分からず苦戦しています
836 名前:デフォルトの名無しさん mailto:sage [2020/12/17(木) 04:50:30.78 ID:aeRfyZfG.net] >>831 .NETのString.Replace()
837 名前:デフォルトの名無しさん mailto:sage [2020/12/17(木) 05:23:59.73 ID:P27ySftq.net] powershell -Command "%{((Invoke-WebRequest https://example.com/test.txt).Content) -join '`r`n'}|Out-File abc.txt -Encoding default -Append -NoNewline" powershell -Command "%{((Invoke-WebRequest https://example.com/test.txt).Content) -replace '`n,`r`n'}|Out-File abc.txt -Encoding default -Append -NoNewline" リファレンスとにらめっこし何百回と色々試してこれに行き着いてこれなら行けそうと思ったのですがLFのまま。。 Get-ContentとかSet-Contentとかも試してみたのですが基礎的な書き方も知らず当てずっぽうではダメなようです 基礎的な事から覚えないとちょっと自分には無理かもです^^;
838 名前:デフォルトの名無しさん mailto:sage [2020/12/17(木) 11:05:46.69 ID:IMvwa6Jv.net] >>833 -replace '`n,`r`n' のところは -replace '`n','`r`n' じゃない? https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-5.1#replacement-operator
839 名前:デフォルトの名無しさん mailto:sage [2020/12/17(木) 11:14:10.52 ID:aoellUFv.net] SurfacePro8の、一応待たれてはいるがあまり期待されてない感は異常
840 名前:デフォルトの名無しさん mailto:sage [2020/12/17(木) 14:29:13.42 ID:hxo0ZZXM.net] >>833-834 "`n", "`r`n" じゃねーの?
841 名前:デフォルトの名無しさん mailto:sage [2020/12/17(木) 17:50:06.55 ID:P27ySftq.net] >>836 ヒントありがとうございます 最終的に以下で出来ました ren jane2ch.brd jane2ch.brd.bak &© jane2ch.brd.bak jane2ch.brd &&powershell -Command "(Invoke-WebRequest https://example.com/bbsmenu.brd).Content -replace \"`n\",\"`r`n\"|Out-File jane2ch.brd -Encoding default -Append -NoNewline" アドバイス下さった方皆ありがとう
842 名前:デフォルトの名無しさん mailto:sage [2020/12/18(金) 21:36:03.86 ID:NKeMhQjy.net] Invoke-WebRequestはaliasで短くできるよ (Get-Alias -Definition Invoke-WebRequest).Name curl iwr wget Out-Fileはaliasが無い
843 名前:デフォルトの名無しさん mailto:sage [2021/01/01(金) 16:52:16.58 ID:jgut+Hkv.net] 関数とクラスメソッドでreturnまわりの振舞い全然違うのかよ ほんまクソやな
844 名前:デフォルトの名無しさん mailto:sage [2021/01/01(金) 17:32:29.13 ID:iwrlPpxO.net] 自分が言語を知らないだけなのに言語を叩くやつは技術力があれだって書込みをLinuxスレで見た 謙虚になって勉強もせずに自分の知ってる言語に固執するらしい
845 名前:デフォルトの名無しさん mailto:sage [2021/01/01(金) 18:39:57.15 ID:K4bi2CUk.net] 詭弁だね
846 名前:デフォルトの名無しさん mailto:sage [2021/01/02(土) 12:59:00.83 ID:6NGWiCza.net] そんなウンコになるほど振る舞い違ったっけ
847 名前:デフォルトの名無しさん mailto:sage [2021/01/02(土) 14:38:10.21 ID:SsQKjWAu.net] 関数のreturnは単に関数を抜けるだけ 出力はストリームを使う クラスのメソッドはreturn文でのみ値を返す 多くの言語でよくみられるやつ Write-Outputしても無視される
848 名前:デフォルトの名無しさん [2021/01/02(土) 14:45:10.44 ID:o3T1iAcx.net] 変数のスコープも違うよねー function f() { echo $a } $a = "test" f 関数はこれが気持ち悪すぎてメソッドしか使わなくなった
849 名前:デフォルトの名無しさん mailto:sage [2021/01/03(日) 01:23:46.88 ID:RCSnKIYE.net] >>843 ,844 なるほどありがd
850 名前:デフォルトの名無しさん [2021/01/03(日) 01:30:49.55 ID:BT1KEPia.net] 質問です。 .NETのKeyedCollectionクラスを使用したいのですが、 パイプラインに関するエラーメッセージが出てうまくいきません。 解決方法を教えていただけませんか。 環境はWindowsPowerShell 5.1をVSCode上で実行しています。 ソースコードとエラーメッセージは下記のとおりです。 ◆ソースコード class Record { [string] $Key [double] $Data } class MyCollection : System.Collections.ObjectModel.KeyedCollection[string, Record] { [string] GetKeyForItem([Record] $item) { return $item.Key } } $r = [Record]@{ Key = "pi"; Data = 3.14 } $c = [MyCollection]::new() $c.Add($r) $c["pi"].Data # 3.14と表示されてほしい ◆エラーメッセージ: パイプラインの作成中にエラーが発生しました。 + CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : RuntimeException 以上、よろしくおねがいします。
851 名前:デフォルトの名無しさん mailto:sage [2021/01/03(日) 04:03:05.06 ID:leX2V3Ud.net] クラスごとにファイル分けてドットソースで読み込んで
852 名前:デフォルトの名無しさん mailto:sage [2021/01/03(日) 04:09:59.45 ID:ORVbOLX2.net] >>847 うちでも再現したわ Win10 1909 一応定義をC#で書いたら動いたから載せておく Add-Type @" public class Record { public string Key; public double Data; } public class MyCollection : System.Collections.ObjectModel.KeyedCollection<string, Record> { protected override string GetKeyForItem(Record item) { return item.Key; } } "@ $r = [Record]@{ Key = "pi"; Data = 3.14 } $c = [MyCollection]::new() $c.Add($r) $c["pi"].Data # 3.14と表示されてほしい
853 名前:デフォルトの名無しさん mailto:sage [2021/01/03(日) 04:29:20.63 ID:ORVbOLX2.net] ごめん >>846 宛ね >>847 まじですか でもPSの運用的にクラス定義で複数ファイルに分けるとかありえないわ コンソールからだと丸ごとコピペじゃなくて定義を1個ずつコピペするとエラーにならないし なんなのかね
854 名前:デフォルトの名無しさん mailto:sage [2021/01/03(日) 08:40:29.46 ID:MW0NgZmT.net] PowerShellのclassってどの段階で解釈されるんだろう
855 名前:デフォルトの名無しさん mailto:sage [2021/01/03(日) 12:17:05.18 ID:n1qZMfJK.net] 実行文が入っていない 単にコンパイルされる文、型の宣言・定義しか入っていない。 インスタンスを作ったりする、実メモリの割り付けをされる文がない
856 名前:846 [2021/01/03(日) 17:02:17.09 ID:BT1KEPia.net] >>851 クラス定義のps1ファイルの中身はそうすべき、ということでしょうか? >>849 確かにコンソールで全て定義すると動きますね。 クラス周りの動きが難しいです。。。 >>847 ありがとうございます。 下記のように書き直したところうまく動きました。 ◆Record.ps1 class Record { [string] $Key [double] $Data } ◆MyCollection.ps1 . .\Record.ps1 # ←これは無くても動く…?? class MyCollection : System.Collections.ObjectModel.KeyedCollection[string, Record] { [string] GetKeyForItem([Record] $item) { return $item.Key } } ◆Test.ps1 . .\Record.ps1 . .\MyCollection.ps1 $r = [Record]@{ Key = "pi"; Data = 3.14 } $c = [MyCollection]::new() $c.Add($r) $c["pi"].Data # 3.14と表示されてほしい
857 名前:851 mailto:sage [2021/01/03(日) 18:34:59.83 ID:n1qZMfJK.net] ファイルA の中で、ファイルB を読み込むと、 依存ファイルであるファイルBが、先に実行される事が確定するのだろう 一方、同じファイルに、複数のクラスを書くと、依存関係が分からないのだろう
858 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 01:13:26.70 ID:MvQgNxU+.net] すいません、Powershellって、変数が空だった場合の デフォルト値を設定する方法ってありますか? bashでいうところの、 ${hoge:-fuga} って方法です。
859 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 02:45:37.83 ID:CsAW39lY.net] ねーよ VBSで言うIsEmpty相当すらない せいぜい$nullかどうか調べてちっ仕方ねーなってやるしかない
860 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 08:03:25.19 ID:1A0NtNS9.net] ($nullでなく)空って状態はないと思うから、しいてやるならGet-Variableで変数が存在するか調べるくらいかね
861 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 08:17:46.65 ID:7KuEq4Kq.net] >>854 PowerShell 7の??演算子はいかがでしょうか
862 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 08:28:41.55 ID:6ewH2FY0.net] >>854 変数が空の定義次第だけど$nullでよくてPowerShell 7以降なら$hoge ?? 'fuga' でいける 空の定義に空文字を含むとかPowerShell 6以下とかなら素直に if([string]::IsNullOrEmpty($hoge)){ 'fuga' } else { $hoge } とやればいい
863 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 08:34:36.49 ID:6ewH2FY0.net] >>856 変数の存在確認ならTest-Path Variable:hogeの方が楽だと思う
864 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 13:21:05.91 ID:ht1NLYQc.net] 7って便利なんだな
865 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 21:21:38.47 ID:R2rezzh3.net] >>854 >${hoge:-fuga サザエさんかよw
866 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 21:59:07.15 ID:o0FdcV6b.net] えっ?
867 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 22:43:44.97 ID:IvTx7xdj.net] foo,barも知らない人でしょ
868 名前:デフォルトの名無しさん [2021/01/07(木) 22:50:20.03 ID:iqGL0Mlk.net] ほげふがの語源ってサザエさんだったの!? マジで!
869 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 00:22:33.24 ID:s1r0Khta.net] 来週もまた観てくださいね $hong -or $fouf
870 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 10:41:54.36 ID:zUQduDYO.net] 逆にメタ変数でhoge、fugaってそこまでマイナーか?
871 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 11:27:10.91 ID:3ONG9Jp/.net] >>866 誰もマイナーとか言ってない
872 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 11:53:36.70 ID:zUQduDYO.net] >>867 そうか、それはすまなかった。 早とちりでございました。 お詫び申し上げます。
873 名前:デフォルトの名無しさん [2021/01/08(金) 12:25:26.48 ID:eXVg8SYp.net] >>868 詫びろとは言ってない >>867 誰かがマイナーと言ったとは言ってない >>865 今週観たとは言ってない >>861 ご指摘にはあたらない
874 名前:デフォルトの名無しさん [2021/01/08(金) 12:25:53.52 ID:eXVg8SYp.net] これ万能論法ですな
875 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 12:36:55.29 ID:2lGGPyYq.net] そう思ってるのは言ってる本人だけだろう
876 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 01:01:42.83 ID:KQEfE/JM.net] ※すべてのネットワークアダプタを無効にして、 Get-NetConnectionProfileは必ずエラーになる状態で実行しています。 $result=Get-NetConnectionProfile -InterfaceAlias Wi-Fi 2>$null $? False $result=(Get-NetConnectionProfile -InterfaceAlias Wi-Fi 2>$null) $? True この場合、マル括弧がどんな働きをして 結果が変わってしまうのか教えてください。
877 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 01:03:45.10 ID:KQEfE/JM.net] ちなみにこうしても $result=Get-NetConnectionProfile -InterfaceAlias Wi-Fi エラーメッセージ $? False $result=(Get-NetConnectionProfile -InterfaceAlias Wi-Fi) エラーメッセージ $? True という状態でした。
878 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 08:27:17.19 ID:kPw1IBO3.net] >>872-873 まあバグ(MS的には仕様とも言う)みたいなもんやね Until PowerShell 7, containing a statement within parentheses (...), subexpression syntax $(...) or array expression @(...) always reset $? to True , so that (Write-Error) shows $? as True. This has been changed in PowerShell 7, so that $? will always reflect the actual success of the last command run in these expressions. https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_automatic_variables?view=powershell-7.1#short-description なのでPowerShellを7にすれば解決するかと
879 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 09:13:27.43 ID:iGxXP/Ic.net] 5.1はメンテしないってことか? OSにデフォで入ってるバージョンなんだから直せよ
880 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 09:49:28.96 ID:kPw1IBO3.net] いきなり直したらユーザースクリプトのバグが顕在化したりするだろ どうでもいいようなスクリプトなら7に上げろよ
881 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 10:38:48.10 ID:amtktMoR.net] どうでもいいスクリプトで問題回避できるなら7に上げなくてもいいんじゃね。
882 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 11:36:00.49 ID:KQEfE/JM.net] >>874 ありがとうございます。 あげるのも怖いので別の方法にします。
883 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 11:45:27.45 ID:vKxQ0OMt.net] >>877 そう言うのは>>875 に言ってやれよ
884 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 16:15:40.54 ID:WaDdsN2m.net] >>878 あげる?のではなくて別物なので併用できるけど。 5.1 → powershell.exe 7.x → pwsh.exe
885 名前:デフォルトの名無しさん mailto:sage [2021/01/10(日) 04:54:33.84 ID:3v4yt86U.net] 以下の表記の意味を教えてください。 void Queue[TResponse](Google.Apis.Requests.IClientServiceRequest request, Google.Apis.Requests.BatchRequest+OnResponse`1[TResponse] callback) メソッドに角カッコ?や、型指定に+や`1[TResponse]の意味がわかりませんでした。 $batch = New-Object Google.Apis.Requests.BatchRequst($service) $batch.Queue で表示される内容です。
886 名前:デフォルトの名無しさん mailto:sage [2021/01/10(日) 08:11:25.80 ID:a907yL+h.net] クラスのメンバーにクラスがある時は+になるんじゃなかったか System.Environment+SpecialFolder みたいな [TResponse]はジェネリックの型引数 `1は型引数を1つ取るって意味
887 名前:881 mailto:sage [2021/01/10(日) 21:15:33.29 ID:3v4yt86U.net] >>882 ありがとうございます。ジェネリックというのは知らなかったので調べてみます。 あと、その、Queue[TResponse]、というメソッドに型が付いている?のもジェネリック関連でしょうか。
888 名前:デフォルトの名無しさん [2021/01/12(火) 16:53:39.85 ID:0UGYDHaB.net] pythonに飲み込まれるってマジ?
889 名前:デフォルトの名無しさん mailto:sage [2021/01/12(火) 18:35:28.45 ID:U7HouJQi.net] pythonが吐血しちゃいますよ
890 名前:デフォルトの名無しさん mailto:sage [2021/01/13(水) 11:04:50.14 ID:u12/DUzm.net] >>884 え?Pythonから.NET Framework扱えるようになるの?
891 名前:デフォルトの名無しさん mailto:sage [2021/01/13(水) 12:04:34.41 ID:JJnXAm01.net] 知らんけど今はまだ使えないの?
892 名前:デフォルトの名無しさん mailto:sage [2021/01/13(水) 12:35:42.75 ID:u12/DUzm.net] ironpythonなら
893 名前:デフォルトの名無しさん mailto:sage [2021/01/16(土) 08:03:53.11 ID:4aouipyb.net] v7.1.1 https://github.com/PowerShell/PowerShell/releases/tag/v7.1.1
894 名前:デフォルトの名無しさん [2021/01/18(月) 22:22:09.29 ID:6Ncg8pZo.net] 【D:\】の全てのフォルダやファイルに対して、作成日時や最終アクセス日時などを設定したいのですが、 PS D:\> Get-ChildItem -Path "D:\" | Where-Object { $_ -is [System.IO.FileInfo] } | ForEach-Object { Set-ItemProperty $_.FullName -Name CreationTime -Value "2021/01/01 00:00:00" } ではエラーが出ます。 何がいけないのでしょうか?
895 名前:デフォルトの名無しさん mailto:sage [2021/01/18(月) 22:59:36.90 ID:Pb59NPOt.net] 例えば特定の一つのファイルやフォルダなら上手く行くとか パイプを分解してどこでエラーになってるのかを突き止めるとか 丸投げするにしてもエラーメッセージ位は出してあげると答える人も喜ぶと思いますよ
896 名前:デフォルトの名無しさん mailto:sage [2021/01/19(火) 02:44:39.14 ID:m3MeBQ6p.net] 1.D:\が存在していない 2.D:\へのアクセス権がない 3.D:\にあるファイルに読み取り専用属性が設定されてるものが混ざってる どれかな? Where-Object { $_ -is [System.IO.FileInfo] }抜き、ファイルに限定しないで実行したときは フォルダへのアクセス時にエクスプローラー開いてると ”別のプロセスで使用されているためアクセスできません”となった(たとえ操作対象のフォルダを開いていなくても) 変更された日時を確認するためにエクスプローラー開いたまま実行してたりする?
897 名前:デフォルトの名無しさん [2021/01/19(火) 21:02:07.64 ID:qrtgnbPs.net] # set the target folder path $targetFolder = 'I:\'; # get all files including files in sub folders $itemList = Get-ChildItem $targetFolder -Recurse; foreach($item in $itemList){ $item.CreationTime = '2020/12/21 00:00:00' } なスクリプトで実行したらエラーなく出来ました。 お騒がせしてすみませんでした。
898 名前:デフォルトの名無しさん mailto:sage [2021/01/19(火) 23:49:36.84 ID:XQEllFmW.net] >>893 >>890 私の環境で実行したら何のエラーもなく、CreationTimeが2021/01/01 00:00:00 になったの。 逆質問だけど、どんなエラーだったのか教えてください。
899 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 10:29:40.54 ID:sOzWFlEJ.net] エクスプローラーとか、バックグラウンドで動いているシステムなどが、 フォルダをロックしていたら、失敗する だから、タイミングによって、成功したり失敗したりする 読み取りロックは、読み取り同士では共有できるけど、 書き込みロックは、その他すべてと共有できないから、失敗する確率が高い
900 名前:デフォルトの名無しさん mailto:sage [2021/01/25(月) 21:14:40.94 ID:PMAucoEc.net] v7.0.4 https://github.com/PowerShell/PowerShell/releases/tag/v7.0.4
901 名前:デフォルトの名無しさん mailto:sage [2021/01/27(水) 19:49:56.64 ID:BJM8Dy5y.net] テキストファイルに設定できるストリームって何に使うんすか?
902 名前:デフォルトの名無しさん mailto:sage [2021/01/27(水) 21:16:07.96 ID:lPCF/h8Q.net] テキストストリームの事なのかNTFSの代替データストリームの事なのか どちらなんだ
903 名前:デフォルトの名無しさん mailto:sage [2021/01/27(水) 22:11:57.22 ID:qq3K45Kg.net] 代替データストリームはテキストに限った話じゃないのでは
904 名前:デフォルトの名無しさん mailto:sage [2021/01/27(水) 22:45:50.85 ID:9akTDBYB.net] テキストに限った話ではないけど、質問者が正確に把握してるともまた限らない
905 名前:デフォルトの名無しさん [2021/01/29(金) 23:59:43.31 ID:t1LR5As2.net] PoweShellのクラスで、C#と同様にインデクサーを定義することはできますか? 例えば、あるクラスのインスタンス$hogeに対して $hoge[$i] という感じで添字でアクセスしたいです。
906 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 14:37:31.38 ID:jsWOzGKR.net] C#の演算子オーバーロードがPSで使えるかと同じ無意味な質問
907 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 16:01:58.79 ID:sgLd3qg+.net] >>902 使えるの?
908 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 17:07:09.19 ID:Ti7TRi+9.net] >>898 たぶんテキストストリームのことです file:stream1 ↑これ
909 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 17:24:57.96 ID:x4IKZ5QX.net] そのファイルに付属させたい情報を一緒にいれておくということだろう ソースだったら、開発秘話とか入れとけば?
910 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 17:26:58.51 ID:x4IKZ5QX.net] あと自分の写真とか連絡先とかプロフィールを入れとけばいいかもW
911 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 19:01:56.87 ID:Ti7TRi+9.net] >>905 >>906 ああREADME.md的なものをですか? なるほどそれは便利そう
912 名前:901 [2021/01/31(日) 19:31:38.13 ID:yFPHlREj.net] >>902 PowerShellでも.Netの コレクションクラスを使えますので、 インデクサーを使うこと自体はできますよね? 同様のことをユーザー定義クラスで実現できないかと思ったのですが、 無意味でしょうか…
913 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 20:11:33.10 ID:IDCaHEld.net] >>904 それ代替データストリームに見えるけどどの辺がテキストストリームなんだろ しかも、NTFSに依存する機能で.mdの代替とか悪手でしかない
914 名前:デフォルトの名無しさん mailto:sage [2021/02/01(月) 11:36:09.24 ID:XDbQ82ak.net] >>909 結局何に使うのか言ってないじゃん
915 名前:デフォルトの名無しさん [2021/02/04(木) 23:44:34.92 ID:OAJDFKMl5] バカ不平多し★へつらい生きてるからリストラ対象 https://www.youtube.com/watch?v=carOYI-xNoI 勝ちは偶然、負けは必然★負けて消えた人に足りなかったものは? https://www.youtube.com/watch?v=agAQTF1OaBU&t=38s リーダー達の給料が高いのは単純労働者じゃないから https://www.youtube.com/watch?v=8o9il6dVXGk できません、自信がありません、無理です★ボンクラにしたのは誰? https://www.youtube.com/watch?v=54YNXSQsxuM 9割の人は、ただの作業員★自学自習こそ仕事の基本 https://www.youtube.com/watch?v=vIGKDmmBJcs サラリーマン、10年経てばボンクラ説 https://www.youtube.com/watch?v=QdfVJnVuLlY
916 名前:デフォルトの名無しさん [2021/02/05(金) 00:48:27.75 ID:a81hUa+F.net] PowerShellのパイプやリダイレクトは仕様が良くないね。 エンコードせずにバイナリデータのままパイプする従来の方法も選べたほうが良かったね。
917 名前:デフォルトの名無しさん mailto:sage [2021/02/05(金) 14:45:47.08 ID:PbAzOwWf.net] cmd /c foo `| bar `> baz とでもしておけ
918 名前:デフォルトの名無しさん mailto:sage [2021/02/05(金) 21:20:19.10 ID:FdcfXC45.net] >>912 これじゃあかんの [byte[]]$bin = cat -encoding byte
919 名前:デフォルトの名無しさん mailto:sage [2021/02/06(土) 08:02:58.77 ID:xZe5l+zL.net] パイプを使いたいんだよ
920 名前:デフォルトの名無しさん mailto:sage [2021/02/06(土) 09:37:27.62 ID:ya6+Y4aC.net] パイプカットするの?
921 名前:デフォルトの名無しさん mailto:sage [2021/02/06(土) 14:28:17.57 ID:0arkAH5a.net] >>915 encoding byteがどういう型が返るか示しただけでもちろんパイプにも使えるけど
922 名前:デフォルトの名無しさん [2021/02/06(土) 23:58:30.54 ID:5Ze23T9D.net] >>913 `| や`>が解説されているマイクロソフト公式ページはどこになりますか? 検索キーワードが記号ばかりなので探し方が分からず困っております。 >>914 私の環境では、以下のエラーが出て動きませんでした。 Get-Content: Cannot process argument transformation on parameter 'Encoding'. 'byte' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. (Parameter 'name')
923 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 01:02:44.55 ID:hwDwbBnD.net] >>918 '|'はパイプ'>'はリダイレクトで調べれば出てくるよ bashの知識が必要になるな
924 名前:デフォルトの名無しさん [2021/02/07(日) 01:34:59.08 ID:IiZq+u+t.net] >>919 具体的なURLはどこになりますか?
925 名前:デフォルトの名無しさん [2021/02/07(日) 01:38:10.26 ID:IiZq+u+t.net] >>919 検索にbashの知識が必要というのは具体的にどういう意味ですか?
926 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 01:46:34.08 ID:IiZq+u+t.net] ひょっとして>>913 と>>919 は別人なのかな。 もし別人なら>>919 への質問はなかったことにしてください。論点がずれてるようだから。
927 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 07:11:26.49 ID:jVPjdJHk.net] @パターン1 $data = @('red','green','blue') if ( $data -ne 'green' ) { 'greenはありません' } greenはありません Aパターン2 $data = @('red','green','blue') if ( $data -ne 'pueple' ) { 'greenはありません' } greenはありません 両方とも同じ結果を返してしまいます。 配列と比較して、無かったらtrue、あったらfalseみたいな書き方ってありませんか? イメージとしては if ( $data.notContains('green')) みたいな書き方です。 用としては、if ( $data.Contains('green'))で足りるのですが、 気持ちの問題として、無かったらtrue、あったらfalseという書き方をしたいです。 よろしくお願いいたします。
928 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 09:44:27.16 ID:jX/y7Db/.net] >>923 > 両方とも同じ結果を返してしまいます。 まず $data = @('red','green','blue') $data -ne 'green' で何が戻ってくるか確認すればなぜそう言うふうに動くかわかると思う > 気持ちの問題として、無かったらtrue、あったらfalseという書き方をしたいです。 どうしても-eqとか使いたい場合、俺なら($data -eq 'green').Count == 0って書くかな どう見ても$data.Contains('green')の方がわかりやすいと思うけど
929 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 09:58:10.78 ID:fgGFki9a.net] $data = @('red','green','blue') if (not ($data -eq 'green')) {} if (not ($data.Contains('green'))) {} if (not ($data -contains 'green')) {} if ($data -notcontains 'green') {} if ('green' -notin $data) {} -eq演算子はフィルタとして働くのでここでの用法は微妙 -in系の演算子は配列が大きいとオーバーヘッドが大きいらしい
930 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 09:59:45.82 ID:fgGFki9a.net] 否定をtrueにするってどういうことだろ $colors = @('red','green','blue') $found = $data -contains 'green' if ($found) { } else { } なら自然に読み下せる ここで$notFoundという変数を使われると気になる if (not $found) { # 先に書いておきたい処理 } else { # 長々とした本処理 } としたいという趣旨ならわかる
931 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 10:03:05.78 ID:fgGFki9a.net] 変数名を変え忘れたので訂正 $found = $colors -contains 'green'
932 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 10:18:17.21 ID:jVPjdJHk.net] >>924-926 レスありがとうございます。 > 否定をtrueにするってどういうことだろ > どう見ても$data.Contains('green')の方がわかりやすいと思うけど $exec_shinai_jikan=@('01','02','03') $imananji=Get-Date -Format HH if ($exec_shinai_jikan -notcontains $imananji){ "実行するよ" } else { "実行しないよ" } 実際のコード(一部)はこれです。変数名のセンスが独特ですよね・・(By 開発の人、私は開発じゃないです)といわれているので 出すのが恥ずかしかったんです。混乱を生んだようでして申し訳ない。 >で何が戻ってくるか確認すればなぜそう言うふうに動くかわかると思う ・0か0を超える値か ・nullかnullを除く何らかの値か でtrue or falseが決まる感じでしょうか? -notって、-notだけじゃ赤傍線引かれるけどなにがだめなんだと思ったら、-not〜って表現があったんですね。 ありがとうございます。
933 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 10:22:55.16 ID:5sEA4G4p.net] >>919 bashの知識は不要でしょ DOSですらパイプやリダイレクト存在するんだし
934 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 10:24:14.00 ID:fgGFki9a.net] なるほどそういう感じか -not演算子のハイフン書き忘れてた ごめんね
935 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 10:26:29.15 ID:fgGFki9a.net] >>924 ($data -eq 'green').Count -eq 0 これってgreenが含まれない場合は最初の-eq演算による絞り込み結果が$nullになって ぬるぽになるかと思いきや$null.Countの呼び出しは特例的に0を返すんやね またPowershellの妙な癖を覚えてしまった
936 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 11:48:29.36 ID:jX/y7Db/.net] >>931 > これってgreenが含まれない場合は最初の-eq演算による絞り込み結果が$nullになって ならないよ、単に空の配列になるだけ gm -inputobject ($data -eq 'yellow') とかやればわかる
937 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 12:10:49.69 ID:fgGFki9a.net] >>932 ありがとう、勘違いしてた そこは自然な動きなんやね
938 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 13:45:02.08 ID:hwDwbBnD.net] >>920 https://docs.microsoft.com/ja-jp/powershell/ ここでリダイレクトとかパイプとか検索ワードを入れれば解説が出てくるよ
939 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 20:57:33.01 ID:rt2m338a.net] >>914 ,918 6.0で仕様変更された https://docs.microsoft.com/ja-jp/powershell/scripting/whats-new/breaking-changes-ps6?view=powershell-7.1#unify-cmdlets-with-parameter--encoding-to-be-of-type-systemtextencoding-5080 -Encoding の値 Byteはファイルシステム プロバイダーのコマンドレットから削除されました。 新しいパラメーター -AsByteStream を使用して、入力としてバイト ストリームが必要なこと、あるいは出力がバイト ストリームであることを指定してください。
940 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 10:00:24.88 ID:hefdb5Yb.net] 可変長配列数?的なものの実現方法を教えてください。 CSVを以下の通り加工したいのですが、 1554412,A,B,C,D 2176944,D,C,E,F,G,H,I,J 4887447,F,H,J,A,K こんな感じのカンマ区切りcsvを 1554412,A 1554412,B 1554412,C 1554412,D 以下同じパターン で成形したいのです。 csv区切り文字は必ずカンマで、 フィールド数は行により異なります。 行を読み込んで、配列に入れて〜、配列の最初のフィールドを入れて〜 とぼんやり想像しているのですが、「個数が定まっていない行を、配列に入れる方法」が想像つきません。 可変長配列数?的なものの実現方法を教えてください。
941 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 18:12:00.38 ID:hRqw8VTE.net] 2つ目のカンマ or 改行まで読んでから要素数2の固定長配列に入れるのはどうですか。 エレガントな方法ではないと思うので、他の方の意見も参考にしてください
942 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 18:19:41.40 ID:hRqw8VTE.net] あ、A, D, FじゃなくてA, B, Cでしたか。 マルチバリューカラムになっているのを正規化したいんですね。 最初の一つ目だけ取るのと勘違いしてました。 1. 一行読んでstring 2. カンマでstring.splitしてstring[] 3. [1]からstring.lengthまでを、[0]とstring.joinして、string[] 4. 全行ループ これでどうですか
943 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 19:17:13.97 ID:JrOSOdLx.net] PowerShell っぽくならこんな感じかな '1554412,A,B,C,D', '2176944,D,C,E,F,G,H,I,J', '4887447,F,H,J,A,K' | %{ $a, $b = $_ -split ',', 2 $b -split ',' | %{ "$a,$_" } }
944 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 19:51:01.55 ID:hRqw8VTE.net] どうしてこれ動かないの? $fが更新されない スマホでコード書くの疲れたんで、誰か教えて下さい。 https://tio.run/##TY3LCsIwEEX38xVDyEJxLEaiVUHw/cYfkC5EUluoqTRFreK316kguBm4hzn3XtO7yVxkkqQs5cPhEEcCVKejtWrTmCY0pRm0ld/ta00zTnNa0JJWtKYN6F7P19pnsqINf29BjLDprkmcozjM7S3OUnsxNg8Gg72572JrBECYZuZ4irAmHxhb5NU6vkAW1Tijn08CZFihwh1awZ9VfC2myvM4OW9n7DmPmqoefIuelRRio6rgKwtG8IZ3WX4A
945 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 21:07:38.33 ID:bnTPmcqs.net] >>940 $xs[0]としてごらん 5行目"@ -split "`n"で意図通りになると思う
946 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 21:45:54.25 ID:JrOSOdLx.net] >>940 "[Environment]::NewLine" ↓ "$([Environment]::NewLine)"
947 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 21:58:58.82 ID:hefdb5Yb.net] >>938 とりあえず用は足せました。が、多分ご紹介の内容と全然違うことをやってると思います。 レスの内容が半分分かりませんでした。 >3. [1]からstring.lengthまでを ここが猛烈にヒントになってこんな感じにしました。 foreach ($l in Get-Content C:\temp\test.txt) { $l=$l.Split(",") 1..(($l.Length) - 1) | % {write-host ($l[0],$l[$_]) } } サンプルのコードをいただけると幸いです。 >>939 これも無事動きました。ありがとうございます。 %ってのを知りませんでした。 Powershell難しすぎです。 勉強してるんですが、正直心折れそうです。 bashはそこそこ使えるので行けるだろと思ってたんですが、ナメてました。 死にそうです。
948 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 22:00:44.14 ID:hefdb5Yb.net] >>943 自己レスすいません。 これも結局、 write-host ($l[0],$l[$_]) } で間をカンマ区切りにしたかったんですけど、 1時間手を変え品を変えで結局ダメでした。 何が悪いんでしょうか。
949 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 22:12:55.91 ID:hefdb5Yb.net] 何度もすいません。 write-hostで標準で区切り文字が半角スペースになってるという事実がやっとわかりました。 {write-host -Separator "," $l[0]$l[$_]} で無事に希望の出力を得ることができました。 ありがとうございました。
950 名前:デフォルトの名無しさん mailto:sage [2021/02/11(木) 00:08:14.80 ID:lj0aoxL+.net] すっきり書けなくてもどかしい $csv -split "\r\n" | % { $a = $_ -split ','; $a[1..($a.Count - 1)] } | % { $a[0], $_ -join ',' }
951 名前:デフォルトの名無しさん [2021/02/11(木) 02:23:21.20 ID:VegncXCD+] SIer業界がブラックな理由を解説する。エンジニアは自社開発をしているWeb業界がオススメ! https://www.youtube.com/watch?v=iy4nnAI9og4 【業界研究】IT業界でひと括りにするのは危険。SIer、Web制作、 アプリ開発で仕事内容が全く違います。【就活・転職】 https://www.youtube.com/watch?v=_IJQ2iBkf4w エンジニアの仕事が稼げる理由とは?プログラミングスキルと 仕事の需要は比例しないので、実は技術力が低くても稼ぐことができる! https://www.youtube.com/watch?v=82Bs-NH8jAM 通勤時間が長い人ほど無能説。家賃節約とか言っている暇があったら、 会社の近くに引っ越して浮いた時間に副業したほうがお金も貯まるし強くなれる。 https://www.youtube.com/watch?v=mt6K1RJnk6I プログラミングに英語は必要か?に対する明確な答え https://www.youtube.com/watch?v=WWULJbVECKU 私がヤフーを辞めた理由 https://www.youtube.com/watch?v=-G-7Hc3rJw8 ITエンジニアの種類と必要なスキル ?アプリケーションエンジニア編? https://www.youtube.com/watch?v=K9BaS2eBGmw 日本と海外のプログラマーの違いを比較してみた https://www.youtube.com/watch?v=u1OyelvNqM0
952 名前:デフォルトの名無しさん mailto:sage [2021/02/11(木) 19:38:29.26 ID:rrBqcjKj.net] >>940 newlineにクォートつけてたわw >> 940, 941 さんthx 一応quote外した結果。 https://tio.run/##TY3dCoJAEIXv5ykG2YuiUdrY0oKg/396gfAiYk3B1nClsujZbYwuuhk4H/Odc83uOrexTtOqEg@LQxw5ILtdpWSHxjShKc2gI/1eXymacZrTgpa0ojVtQAWBr5TPZEUb/t6CM0LXXtOkwMPc3JI8MxdtinAw2Ov7LjEaIMpyfTzF2BAPTAzyZhNfIMp6mtHPdsgBEdWotId2@GeVX4up9DxO1ttpcy5iVzbDb9GzliJs1RV8RckI3vCuqg8
953 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 09:16:23.07 ID:q/2+I+Zd.net] $?で直前のコマンドの実行結果を知ることができますが、 直前に実行したコマンドのPIDを知る方法ってありませんか? Start-Process -FilePath c:\bin\command.exe -ArgumentList 1 $cmd1pid=get-chokuzenn-pid $cmd1pid 78968 Start-Process -FilePath c:\bin\command.exe -ArgumentList 2 $cmd1pid=get-chokuzenn-pid $cmd1pid 4292 実際に動かしたいのは、ttpmacro.exe(Teratermのマクロ)です。 Teratemマクロで外部の機器にsshで接続して、ssh接続のログの内容を見て そのプロセスを終了させるか判断したいと思っております 書こうとしているスクリプトを動かす時点で、1個もTeratermが動いていないなら、 Get-Processでなんとかなると思うのですが、上記スクリプトを実行する時点で ほかのTeratermが動いている可能性があり、それを間違って死なすわけにはいかず、 Powershellスクリプト内で、Start-Processなりで動かした、直前のプロセスのIDを知る方法があればと思い相談させていただきます すいません、よろしくお願いいたします。
954 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 09:17:40.74 ID:q/2+I+Zd.net] test.ps1 Start-Process -FilePath c:\bin\command.exe -ArgumentList 1 $cmd1pid=get-chokuzenn-pid $cmd1pid 78968 Start-Process -FilePath c:\bin\command.exe -ArgumentList 2 $cmd2pid=get-chokuzenn-pid $cmd2pid 4292 すいません、スクリプトの例に誤りがありました 訂正します
955 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 09:57:59.46 ID:JWXF4JEZ.net] v7.0.5 https://github.com/PowerShell/PowerShell/releases/tag/v7.0.5 v7.1.2 https://github.com/PowerShell/PowerShell/releases/tag/v7.1.2
956 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 10:15:49.19 ID:JXvYdGCL.net] 引数に -PassThru を付けて戻り値からidで取れないかな?
957 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 11:17:25.75 ID:jxDcSv/l.net] >>949 プロセスIdなんて取る必要ない(むしろ危険) >>952 が言うように-PassThruオプションつけるとSystem.Diagnostics.Processオブジェクトが返ってくるからKill()メソッド呼ぶだけでいい
958 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 13:51:19.53 ID:q/2+I+Zd.net] >>952 >>953 $process = Start-Process -PassThru notepad $process.Kill() できました ありがとうございました
959 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 13:58:44.73 ID:aXMNNeBu.net] すばらしい
960 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 18:04:24.59 ID:elIMNXvv.net] 音楽プレーヤーで MP3 ファイルをシャッフル再生させたいので、 dir /n /-b /s *.mp3 > playlist.txt の結果をランダムに入れ替えるにはどうすればいいでしょうか? (乱数で再生する行を求めると同じ曲がつづくかもしれないのでシャッフルにしたい。)
961 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 19:45:47.08 ID:PYtZn7CJ.net] >>956 テキトーでいいなら dir /n /-b /s *.mp3 | sort -prop @{Exp={[Guid]::NewGuid()}} > playlist.txt
962 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 20:59:17.73 ID:9JYy97c0.net] Sort-Object {Get-Random}じゃあかんの?
963 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 21:06:22.08 ID:PYtZn7CJ.net] >>958 それでもいいけど、遅いらしい https://aquasoftware.net/blog/?p=612
964 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 21:14:23.98 ID:D/l9Txdy.net] 自分の音楽コレクションのプレイリスト作る要件なら速度は別にと思わなくもない 5分とか掛かるならちょとやだけど
965 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 21:58:32.75 ID:WEbw7iAW.net] プレイリストのランダム再生機能ぐらい大抵のプレイヤーに付いてるだろうに
966 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 22:34:07.74 ID:XvWS5Qrl.net] >>959 のリンク先のコードで質問です 勉強のためちょこちょこ編集してみたところ、 「なんでこれで変数の中がランダムにおきかわるの?」と疑問がわきました $r = @(1,2,3,4,5,6,7,8,9,10) $r=($r | sort -Property @{Exp={[Guid]::NewGuid()}}) $r $foo = @(1,2,3,4,5,6,7,8,9,10) $foo[0] = $foo | sort -prop @{Exp={[Guid]::NewGuid()}} $foo[0] 前者のように、$rの中身を $r | sort -Prop〜で置き換えるというのなら納得がいくんですが、 なぜ、後者のように、書いてもランダムになるのかが納得いきません 変数定義はパイプの前の話で、どうしてそれがパイプ先の、ランダムにする操作で置き換わるのでしょうか。
967 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 22:48:16.31 ID:PYtZn7CJ.net] >>962 やってることは同じで結果が単に$foo[0]に入ってるだけ $foo[1]~$foo[9] の内容は変わってないはず ちなみに置き換えてるわけじゃなくて新しい配列を作ってそれを$rとか$foo[0]に入れてる
968 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 22:59:06.67 ID:XvWS5Qrl.net] >>963 ありがとうございます 書き方が違うけど処理が同じというとらえ方でいいですか? "パターン1" $foo = @(1,2,3,4,5,6,7,8,9,10) $foo=($foo | sort -prop @{Exp={[Guid]::NewGuid()}}) $foo "パターン2" $foo = @(1,2,3,4,5,6,7,8,9,10) $foo = $foo | sort -prop @{Exp={[Guid]::NewGuid()}} $foo パターン1の書き方違いが、パターン2のようなとらえ方でいいでしょうか?
969 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 23:33:24.56 ID:PYtZn7CJ.net] >>964 ああ、すまん ( ) は見落としてた パターン1は単に式を ( ) で包んでるだけだからパターン2と同じと思っていい
970 名前:954 mailto:sage [2021/02/13(土) 23:36:43.19 ID:elIMNXvv.net] Get-ChildItem -path d:\ -filter *.mp3 -recurse | foreach {$_.FullName} | sort {Get-Random} や、 Get-ChildItem -path d:\ -filter *.mp3 -recurse | foreach {$_.FullName} | sort -prop @{Exp={[Guid]::NewGuid()}} でうまくいきそうです。 ありがとうございました。
971 名前:デフォルトの名無しさん mailto:sage [2021/02/14(日) 00:07:20.96 ID:rA0IJrKX.net] >>965 ありがとうございますよくわかりました パイプで処理がわかれると思っておりましたが、 =で右辺と左辺に分ててる感じなんですね
972 名前:デフォルトの名無しさん mailto:sage [2021/02/14(日) 00:22:33.69 ID:D24G58JB.net] >>966 上手く行って何より 蛇足だけど > foreach {$_.FullName} の所は PowerShell 的には > Select-Object FullName でもいいかな
973 名前:デフォルトの名無しさん mailto:sage [2021/02/14(日) 00:28:18.02 ID:D24G58JB.net] >>967 他の言語に似せるためか代入文は最優先で解釈されるようになってるみたい まあよくわからなかったら多少余分でも ( ) を付けといた方があとから見ても誤解されにくいと思う
974 名前:デフォルトの名無しさん mailto:sage [2021/02/19(金) 08:22:42.85 ID:islL1Ifn.net] Announcing the PowerShell Community Blog https://devblogs.microsoft.com/powershell-community/announcing-the-powershell-community-blog/
975 名前:デフォルトの名無しさん mailto:sage [2021/02/22(月) 04:45:12.99 ID:xcCpjLov9] 高度IT人材、富士通は最大年収3500万円へ https://www.nikkei.com/article/DGXMZO58248520Q0A420C2000000/ 「富士通年収3500万!」日本のIT企業の年収も、高額化してきました https://needs-explorer.co.jp/5801/ AI人材の獲得に超本気 NECが新人事制度を9人に適用、富士通は最大年収3500万円へsierblog.com/archives/1994846.html 【年収3500万円も】富士通、「ジョブ型」人事制度を導入 幹部社員から 高度IT人材 https://coinmap.jp/archives/56639 東芝、幹部候補をスタートアップに出向 21年度から https://www.nikkei.com/article/DGXZQODZ284AV028122020000000 スタートアップで「武者修行」、村田製作所など導入 https://www.nikkei.com/article/DGXMZO6588293005112020LKA000 「スタートアップ点火」中部から世界 名古屋支社シンポ https://www.nikkei.com/article/DGXZQOFD087YN008122020000000 インフルエンサーによる独自製品開発やブランド構築を支援するGenflowは英BGFから11.4億円調達 https://jp.techcrunch.com/2021/01/21/2021-01-20-genflow/ 本業より副業で稼ぐ「パワフル副業者」急増で企業に求められる新しい組織づくり https://dime.jp/genre/1076364/
976 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 08:20:29.72 ID:XBzTqCMZ.net] posh-git と GetChildItemColor でダイブましになった 他にもおすすめあったらおせーて!
977 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 20:50:03.67 ID:8GGn/OTs.net] GetChildItemColorを入れるとシンボリックリンクのリンク先のパスが表示されなくなるのがクソ
978 名前:デフォルトの名無しさん mailto:sage [2021/03/02(火) 00:20:13.77 ID:NQgDi+il.net] #test.ps1 param([array]$foo) echo ('$ARGS[0]' +':'+ $ARGS[0]) echo ('$foo[0]' +':'+ $foo[0]) echo ('$foo[1]' +':'+ $foo[1]) echo ('$foo[2]' +':'+ $foo[2]) PS> .\test.ps1 aaa -foo bbb,ccc,ddd $ARGS[0]:aaa $foo[0]:bbb $foo[1]:ccc $foo[2]:ddd PS> .\test.ps1 aaa -bar bbb,ccc,ddd $ARGS[0]:-bar $foo[0]:aaa $foo[1]: $foo[2]: PS C:\script> PS> \test.ps1 aaa $ARGS[0]: $foo[0]:aaa $foo[1]: $foo[2]: @引数やパラメータの数、パラメーター名などのエラーをチェックする方法を教えてください。 Aパラメータの区切りをカンマで無くスペースにする方法があれば教えてください。 ググってみたのですが、ググり方が悪いのか、見つからず苦しんでおります
979 名前:デフォルトの名無しさん mailto:sage [2021/03/02(火) 00:22:05.89 ID:NQgDi+il.net] >>974 行数制限に引っかかったので分割します。 @は引数〇個、パラメーター名foo、パラメーターfooの数、fooが1個以上(0はだめ)というのをチェックしたいです。 なにとぞよろしくお願いいたします。
980 名前:デフォルトの名無しさん mailto:sage [2021/03/02(火) 10:00:39.98 ID:TaWWQOJL.net] >>975 about_Functions_Advanced_Parameters https://docs.microsoft.com/ja-jp/previous-versions/windows/powershell-scripting/hh847743(v=wps.640)
981 名前:デフォルトの名無しさん mailto:sage [2021/03/02(火) 23:49:57.97 ID:NQgDi+il.net] >>976 ありがとうございます。 読み解くのに時間がかかりそうですが、 希望のものが書いてありそうです。
982 名前:デフォルトの名無しさん mailto:sage [2021/03/03(水) 03:07:24.22 ID:hWQCqBl5.net] そもそもPowerShellの関数(コマンドレット)は空白区切りで引数渡すんだけどね >>974 はカンマ区切りで引数を渡してるんじゃなくて、カンマで作った配列を渡してるだけ 自動変数の$args(配列)はjavascriptでいう残余引数みたいな物 PS> .\test.ps1 aaa -foo bbb,ccc,ddd 名前付き引数 $foo に配列 bbb,ccc,ddd が渡され、未定義の aaa が $args に渡されてる PS> .\test.ps1 aaa -bar bbb,ccc,ddd $foo に先頭の引数 aaa が渡され、未定義の -bar と配列 bbb,ccc,ddd が $args に渡される 特にオプションを指定しなければ、複数の引数を設定すれば空白区切りで渡せる
983 名前:デフォルトの名無しさん mailto:sage [2021/03/12(金) 15:14:39.63 ID:VgGpSMHu.net] PowerShell起動すると毎回更新しろって出るのがウザくて7入れてみたけど起動時の立ち上がりが遅くなって切れそう しかも結局help云々が毎回出るし MS頭おかしいんでねーの
984 名前:デフォルトの名無しさん mailto:sage [2021/03/12(金) 19:40:18.23 ID:gsxqF2ed.net] おバカ自慢要らね
985 名前:デフォルトの名無しさん mailto:sage [2021/03/13(土) 10:00:11.18 ID:fu8qQk1O.net] v7.0.6 https://github.com/PowerShell/PowerShell/releases/tag/v7.0.6 v7.1.3 https://github.com/PowerShell/PowerShell/releases/tag/v7.1.3
986 名前:デフォルトの名無しさん mailto:sage [2021/03/13(土) 14:33:26.87 ID:LuYPD+lh.net] | where-objectで、条件に引っかかったら0(True)、引っかからなかったら1(False)を返す方法ってありませんでしょうか。 あるサービスの実行状態を知るために、こういうことをしてるんですが、 (Get-Service | Where-Object -Property Name -Match Adobe | Where-Object -Property Status -Match Running).length 1 ←AdobeがRunnningだった 0 ←AdobeがRunnin
987 名前:gじゃなかった 他に、もっとPowershellっぽい書き方があったら教えてください [] [ここ壊れてます]
988 名前:デフォルトの名無しさん [2021/03/13(土) 14:59:52.96 ID:4/YYKqK7.net] >>982 ワンライナーにこだわっているのか?
989 名前:デフォルトの名無しさん mailto:sage [2021/03/13(土) 15:31:11.30 ID:33EHGK5P.net] Ruby の3項演算子みたいなものは無いの? 真偽値となる条件式 ? 真の時の値 : 偽の時の値
990 名前:デフォルトの名無しさん mailto:sage [2021/03/13(土) 15:36:01.07 ID:ErfpRTBJ.net] (gsv adobe*).status -contains 'running'
991 名前:デフォルトの名無しさん mailto:sage [2021/03/13(土) 15:48:12.79 ID:Qa5+c/Kf.net] >>982 [int][bool](Get-Service | Where-Object {($_.Name -Match 'Adobe') -and ($_.Status -Match 'Running')})
992 名前:デフォルトの名無しさん mailto:sage [2021/03/13(土) 20:59:36.95 ID:3roljCwu.net] >>984 三項演算子 https://docs.microsoft.com/ja-jp/powershell/scripting/whats-new/what-s-new-in-powershell-70#ternary-operator
993 名前:デフォルトの名無しさん mailto:sage [2021/03/14(日) 15:40:02.21 ID:am3+IzSP.net] PowerShellは処理の方法が多くていいな
994 名前:デフォルトの名無しさん mailto:sage [2021/03/14(日) 21:46:47.24 ID:8YYOAayf.net] 連想配列の参照渡しで function f([ref]$h) { $h.value } $h = @{ a = 0; b = 1} f([ref]$h) はうまくいくんだけど、引数もう一個増やして function f([ref]$h, $s) { $h.value; $s } $h = @{ a = 0; b = 1} $s = 2 f([ref]$h, $s) にすると、 f : パラメーター 'h' の引数変換を処理できません。引数には参照型を指定する必要があります。 何が悪いん?ググっても見つけられなくてさっきから悩んでる(汗
995 名前:デフォルトの名無しさん mailto:sage [2021/03/14(日) 21:55:49.94 ID:8nGQn8Lf.net] 括弧とカンマいらないのでは
996 名前:デフォルトの名無しさん mailto:sage [2021/03/14(日) 22:41:43.33 ID:T+RcbFBu.net] f ([ref]$h) $s
997 名前:デフォルトの名無しさん mailto:sage [2021/03/14(日) 23:07:21.02 ID:8YYOAayf.net] >>991 出来た!ありがとう でもなぜその書き方になるのかわからない(汗
998 名前:デフォルトの名無しさん mailto:sage [2021/03/15(月) 15:30:15.42 ID:2OtrSpOH.net] カッコとカンマで引数渡すのはオブジェクトのメソッドの時だけだね 関数はスペース区切りで渡す これは文法だから理由はない
999 名前:デフォルトの名無しさん mailto:sage [2021/03/15(月) 16:45:16.26 ID:bRJV5TtK.net] 1, 2 で配列作っちゃうようにしちゃったからねぇ 記法がシェルスクリプトとプログラム言語のあいの子みたいになってるからちょっと直感に反する所がちらほら見え隠れするのはしょうがない
1000 名前:デフォルトの名無しさん [2021/03/16(火) 23:02:58.87 ID:Bd62bkLQ.net] >>988 処理の方法が多いことは、可読性が落ちる原因にもなる。 PythonをもちあげてPerlをくさす時に使われたのと同じ論法だよ。
1001 名前:デフォルトの名無しさん mailto:sage [2021/03/17(水) 08:00:24.75 ID:EzeD0xtp.net] 俺がPowerShellを気に入ったのはPerlと同じ匂いを感じたからだ
1002 名前:デフォルトの名無しさん mailto:sage [2021/03/17(水) 08:19:50.03 ID:vnLGIRIV.net] しかしPerlではないのがいいところ
1003 名前:デフォルトの名無しさん mailto:sage [2021/03/17(水) 08:38:00.89 ID:sqd1XF3h.net] Why did you do that? $VAR/ {} / Weak Intellisense https://docs.microsoft.com/en-us/archive/blogs/monad/why-did-you-do-that-var-weak-intellisense The $ in front of variables comes from our design center of being an interactive command oriented shell. Interactive shells are NOT the same thing as Scripting languages with command interpretors. Interactive shells are case studies in engineering tradeoffs (another way of saying that is that they tend to be a little quirky). There is a tension between the needs of a great interactive experience and a great scripting/programming experience. Time and time again during the course of the project, people would try to make us "choose" between one or the other. We refused. We believe that if you work hard enough at it, you can solve the puzzle and provide a great solution for both. We were absolutely subborn on this point. Time and time again, we were able to succeed with this approach if we travailed long enough.
1004 名前:デフォルトの名無しさん mailto:sage [2021/03/17(水) 11:52:58.50 ID:eAjGywmP.net] interactive性は'標準で'エイリアスが定義されてることで十分満足してる
1005 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 00:08:54.40 ID:t06qOp3P.net] PerlとPythonは文字に対するencode, decodeの意味が逆。まめな
1006 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 00:30:47.74 ID:/MpReTiX.net] PowerShell -Part 5 https://mevius.5ch.net/test/read.cgi/tech/1615994992/ 次スレ。
1007 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 00:39:40.12 ID:3weRgygV.net] >>1001 ナイス滑り込み
1008 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 01:34:48.09 ID:dIgskCmL.net] 質問良いですか
1009 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 441日 9時間 26分 17秒
1010 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています