[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 12/12 00:59 / Filesize : 319 KB / Number-of Response : 1011
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

PowerShell -Part 4



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 &&copy 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 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<319KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef