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


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

PowerShell -Part 6



1 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 18:36:12.07 ID:LaQ04ZoE.net]
前スレ
PowerShell -Part 5
https://mevius.5ch.net/test/read.cgi/tech/1615994992/

次スレは>>980が立ててね!!

2 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 19:10:00.19 ID:DaRcZGJS.net]
>>1

3 名前:デフォルトの名無しさん mailto:sage [2022/02/15(火) 11:59:52.53 ID:5Cl7umfN.net]
>>1posh

4 名前:デフォルトの名無しさん mailto:sage [2022/02/15(火) 16:10:21.28 ID:8dPt5mlU.net]
>>1
BathyScaphe利用開始記念書き込み


5 名前:デフォルトの名無しさん mailto:sage [2022/02/17(木) 00:21:49.24 ID:CBYlGRMr.net]
今までコマンドプロンプトを使っていましたが、windows power shellに乗り換えました。

コマンドプロンプトでは、エクスプローラーからドラッグ&ドロップでファイルパスが入力できましたが、
windows power shellではできませんでした。
ファイルパスを楽に入力する方法はないんでしょうか

6 名前:デフォルトの名無しさん mailto:sage [2022/02/17(木) 09:30:47.39 ID:zynXt0BH.net]
普通にできるけど

7 名前:デフォルトの名無しさん mailto:sage [2022/02/17(木) 15:17:37.72 ID:1Rki5Xrp.net]
ドラッグ&ドロップを扱うのはコンソールの仕事なんじゃ?

conhostで試してみたけどcmd/pwsh/windows powershellどれでもいけた
あんまり設定弄ってないはずだけど、左上クリックして出てくるメニューのプロパティからコピペ関連の項目があるので触ってみては

wtで試すと何れのシェルでもファイルのD&Dは受け付けなかった、異常に高機能なのに意外
wtのことならwtスレで聞くといいかと

8 名前:デフォルトの名無しさん mailto:sage [2022/02/17(木) 15:25:50.87 ID:1Rki5Xrp.net]
追伸
wtはexplorer上でファイルをコピーしてctrl+[shift+]vでペーストするとファイル名が入力される

D&Dにこだわる理由がないなら慣れた方が早そう、労力は大して変わらないだろう

9 名前:5 mailto:sage [2022/02/17(木) 19:52:12.95 ID:CBYlGRMr.net]
>>6-8
power shellはwindowsボタンを右クリックして起動するやつを使いました。
今試したら、D&Dできないのは「管理者として実行」する方で、通常モードならD&Dできました。
管理者モードかどうかで挙動が変わるんですね・・・。

10 名前:デフォルトの名無しさん mailto:sage [2022/02/17(木) 22:56:43.04 ID:urCZGbW+.net]
UIPIって仕組みで権限またぎのドラッグアンドドロップは禁止されてるみたいね



11 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 09:43:41.33 ID:Z9XVFihU.net]
wtスレってどこだよ
勝手が違うから戻してほしいしこんなの作る前に非コンソールのpowershell出せよ

12 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 10:18:51.14 ID:Klz8S7Ad.net]
まるでスマホの使い方がわからず店頭でキレて周りに介助してもらおうとするおじいちゃんと同じ言動で草
wtにファイル名をドロップできないのは誤解で、cmdと同じ管理者モード間のOSによるセキュリティ機構のUIPIが原因だった
wtはcmdよりよっぽど癖がない良アプリ
Powershellのほうがよほど癖強い
あとwtは普通に元に戻せる

13 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 14:02:07.12 ID:x/upE6G9.net]
>>10
あれなんでだろうね
打ち直せば入力できちゃうんだしよくわからん

14 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 15:57:35.72 ID:22rkCkNI.net]
>>13
ドラッグアンドドロップという操作が危険だから狙い撃ちで制限されているというわけではなくて、プロセス間のメッセージ通信に対して制約が掛けられた結果ドラッグアンドドロップも使えなくなった

15 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 16:04:56.07 ID:x/upE6G9.net]
>>14
ああなるほど、それなら納得

16 名前:8 mailto:sage [2022/02/22(火) 02:53:21.18 ID:LHZaRsEg.net]
>>14
ああ、conhostをadmin専用にしてて、そこから各シェル立ち上げたと思うわ
俺環でテキトーな検証してごめん

17 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 08:44:56.08 ID:mFRfNBZm.net]
Allow dragging files or folders into Terminal's Command Prompt window to display their path #12377
https://github.com/microsoft/terminal/issues/12377

18 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 20:22:44.35 ID:wkvlg9SU.net]
前スレの質問者に本当に必要だったものは、たぶんこういうのだと思うんだ…
class node {
[node]$val;
[node[]]$children;
}

19 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 20:24:23.06 ID:wkvlg9SU.net]
まちがえた→[object]$val

教えたがりおじさん見苦しい

20 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 21:34:19.39 ID:5aCEOBVD.net]
昔csvdeのエクスポートデータをVBSで木構造に変換したりしたけどその時はジャグ配列でなんとかなった
powershellだと配列に色々罠があるから大変そう
コマンドレット化されてるデータ構造を扱う事は得意でもテキストを1から解析して階層データとして扱うのには向かない気がする



21 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 22:00:01.99 ID:LHZaRsEg.net]
木のテキスト表現がカッコや""等ならbalancing groupでパースするのが便利だよ

perl/Pythonよりdotnetのパターン言語の方が強い(丸パクリだから当然だけど)

22 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 22:10:34.21 ID:LHZaRsEg.net]
組み込み型はスプラッターしちゃうとか罠多いから、内部でキッチリ階層持ちたいなら>>18みたいなロートルな手段が堅牢だったり

仕様覚えるという道もあるけど俺は諦めた

23 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 22:27:40.62 ID:U3xoo538.net]
逆説的だけど、.NETに詳しくない俺みたいな人ほどテキスト処理は抑えておくべき

なんか良く分からん物が返ってきても、オブジェクトの印字表現をOut-Fileで捕まえてテキスト処理にフォールバックできる()

24 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 22:59:38.55 ID:LHZaRsEg.net]
-match一発でパースが済まない木の表現は、段落を使って木を表現するyamlみたいなやつ
balancing group+複数行マッチで頑張れるかもしれないけど、地道にインデント数えてるわ

25 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 23:31:15.02 ID:+zCOrMmD.net]
一見不器用でもインデントレベルは素直に数えるのが正解
例えばpythonインタプリタもカウンタを使って構文をパースしてる

yaml系のシリアル化フォーマットは、インデントを数えるだけでパーサが書ける移植性が売り

26 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 20:35:53.13 ID:KVH3xsak.net]
Chromeでもパスワードにメモを付けて保存できるようになるみたいね

27 名前:915 mailto:sage [2022/02/25(金) 01:33:26.38 ID:wLKzA9jy.net]
変数を文字列の中に入れ込んでしまって、消せないフォルダが出来てしまいました

C:\works\+ $a

削除もリネームもフォルダ移動すら出来ません
どうすれば削除出来ますでしょうか?
お知恵を貸してください

28 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 02:07:17.42 ID:3hSRN4MI.net]
ファイル名に$が入って、$aが展開されちゃう的な?ならエスケープすればいいだけでは
`$a
意図を汲めてるかちょっと自信ないけど

29 名前:915 mailto:sage [2022/02/25(金) 07:49:52.49 ID:wLKzA9jy.net]
>>28

1. 変数を使ってフォルダを作ろうとした

2. 変数に値を代入した $a = 0225

3. C:\works\0225 を作りたかったので
“C:\works\ + $a” としたかったが
’C:\works\ + $a‘ としてしまった

4. + $a という名前のフォルダが
C:\works\ 直下に作られた

5. エクスプローラからもPowershellからも
+ $a と名前のついたフォルダは削除、リネーム、
移動が出来ない
C:\works\ + $a\test.txt のように+ $a フォルダ内に
ファイルを作る事は可能

Win10 Windows powershell 5.1 VSCODEで作成
細かい所はあまり覚えてませんがこんな感じです

30 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 08:55:58.66 ID:Ex9z+jLY.net]
うちの環境では削除できた
なんかのプロセスにロックされてるんじゃないの?



31 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 09:22:05.48 ID:Ttq2k6xT.net]
エラーメッセージを貼らない奴の相手してもしょうがない

32 名前:915 mailto:sage [2022/02/25(金) 11:29:32.26 ID:omaqMYjV.net]
>>31
これは失礼しました
エラーは下記です。普通の名前のフォルダは削除出来ます

Remove-Item : 引数 '$null' を受け入れる位置指定パラメーターが見つかりません。
発生場所 行:1 文字:1
+ Remove-Item + $a
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Remove-Item]、ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

33 名前:915 mailto:sage [2022/02/25(金) 11:32:06.01 ID:omaqMYjV.net]
ちなみにフォルダを右クリックして出てくるプロパティ→セキュリティのタブには
「要求されたセキュリティ権限は利用できないか、または表示されません。」
とのエラーも出てます

34 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 11:40:38.52 ID:Ttq2k6xT.net]
>>32
> ’C:\works\ + $a‘ としてしまった
んなら

Remove-Item ’C:\works\ + $a‘
ってやれよ…

35 名前:915 mailto:sage [2022/02/25(金) 12:06:55.57 ID:omaqMYjV.net]
>>34
すみません。。
やってみました

Remove-Item : パス 'C:\works\ + $a ' が存在しないため検出できません。
発生場所 行:1 文字:1
+ Remove-Item 'C:\works\ + $a '
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\works\ + $a :String) [Remove-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

36 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 12:16:43.02 ID:SH4WT7RG.net]
コマンドプロンプトを管理者権限で起動
rd /s /q エクスプローラーから対象フォルダをD&D

これで無理なら排他制御キャンセルするソフト使うかPCを一旦再起動

37 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 12:24:59.94 ID:Ttq2k6xT.net]
>>35
> Remove-Item : パス 'C:\works\ + $a '
$a の後ろの空白

38 名前:915 mailto:sage [2022/02/25(金) 12:30:35.39 ID:omaqMYjV.net]
>>36
ありがとう御座います

「指定されたファイルが見つかりません」
と返されました。再起動も状況変わらず

Dirコマンドでは+ $a は表示されておりエクスプローラでも見えてるのですが何故か認識されないです

39 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 12:36:38.88 ID:yKl3/QUV.net]
コマンドで消したいだけならワイルドカードやタブ補完で選択すればいいじゃない

再起動後エクスプローラーから消せないか試したの?

何がしたいのか分からん

40 名前:915 mailto:sage [2022/02/25(金) 12:42:21.42 ID:omaqMYjV.net]
>>37
空白で思い出しました
試行錯誤してて
'"C:\works\' + $a + '\"'
のような事もやってました

なので(なのかどうかも分かりませんが)フォルダの名前には + $a と後ろにも空白が入っています



41 名前:915 mailto:sage [2022/02/25(金) 12:44:41.55 ID:omaqMYjV.net]
>>39
エクスプローラからの削除だと削除後も+ $a フォルダが残り続けます

やりたい事: + $a フォルダを削除したい

42 名前:915 mailto:sage [2022/02/25(金) 12:48:15.22 ID:omaqMYjV.net]
追記正確なフルパス名
[]は半角スペースです

C:\works\[]+[]$a[]

43 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 12:55:42.52 ID:SH4WT7RG.net]
その親フォルダにカレントディレクトリを移動して他に$付くフォルダが無い、或いは削除してしまって良いなら
for /d %a in (*$*) do rd /s /q "%~a"

44 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 13:03:31.62 ID:SH4WT7RG.net]
もし>>43で駄目だったら最後のとこ
"%~sa"
を試してみて

45 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 13:04:14.85 ID:AEqwOQnl.net]
C:\worksごと消せばいい

46 名前:915 mailto:sage [2022/02/25(金) 13:06:19.04 ID:omaqMYjV.net]
>>43
やはり指定されたファイルが見つかりませんと返されました

一旦整理します

目的︰ + $a フォルダを削除したい
環境:Win10, Win PS ver 5.1, Vscode 1.64.2

記述:'"C:\works\"[]+[]$y[]+[]"\"' (かなり記憶が曖昧)
フルパス C:\works\[]+[]$y[]
※[]は半角スペース

1. エクスプローラ
1.1 右クリック削除→削除後もフォルダが残り続ける
1.2 リネーム→「この項目は見つかりません。次の場所にはありません。」
1.3 移動→同上

2. PS
2.1 Remove-Item(\works直下)→「引数 '$null' を受け入れる位置指定パラメーターが見つかりません。」
2.2 Remove-Item(フルパス)→「 パス 'C:\works\ + $a ' が存在しないため検出できません。」

3. CMD
3.1 rd /s /q→「指定されたファイルが見つかりません」

47 名前:915 mailto:sage [2022/02/25(金) 13:07:15.53 ID:omaqMYjV.net]
上記 $y → $a です
すみません

48 名前:915 mailto:sage [2022/02/25(金) 13:10:23.66 ID:omaqMYjV.net]
>>44
saでも変わらずでした

>>45
>>46の1.1と同じでした

49 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 13:11:33.74 ID:AEqwOQnl.net]
フォルダが消したいだけならPowershell関係ないからこちらでどうぞ

Windows 10 質問スレッド Part82
https://mevius.5ch.net/test/read.cgi/win/1644831539/

50 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 13:17:48.06 ID:MEIpOner.net]
\\?\C:\fogo



51 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 15:04:10.02 ID:gazry23L.net]
>>47
> 上記 $y → $a です
> すみません
だからさあ、入力した内容とエラーメッセージをそのまま貼ってくれよ…

52 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:57:30.79 ID:FVUZxr5Y.net]
dir "*a*" などとして対象のフォルダだけ表示されることを確認して
dir "*a*" |

53 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:58:43.73 ID:FVUZxr5Y.net]
dir "*a*" | % {remove-item -LiteralPath $_.Name}
でどうだろうか

54 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 21:06:53.72 ID:zbdaU1gm.net]
dir /x
で8.3形式のファイル名があるなら、それで消してみる
だめなら、>>50の形式でフルパスを指定する

55 名前:915 mailto:sage [2022/02/26(土) 12:47:40.66 ID: ]
[ここ壊れてます]

56 名前:AL/cEm3C.net mailto: ありがとうございます。
レス遅くなりました。以下のように返ってきました。
>>53で出てきたフォルダ名+[]$aと末尾に半角スペースが見えません。
見えない文字が埋め込まれている可能性はありますでしょうか?

>>52
dir : 項目 C:\works\ + $a が見つかりませんでした。
発生場所 行:1 文字:1
+ dir "*a*"
+ ~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\works\ + $a :String) [Get-ChildItem], IOException
+ FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

>>53
dir : 項目 C:\works\ + $a が見つかりませんでした。
発生場所 行:1 文字:1
+ dir "*a*" | %{remove-item -LiteralPath $_.name}
+ ~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\works\ + $a :String) [Get-ChildItem], IOException
+ FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
[]
[ここ壊れてます]

57 名前:915 mailto:sage [2022/02/26(土) 12:47:51.62 ID:AL/cEm3C.net]
>>54
ドライブ C のボリューム ラベルは Windows です
ボリューム シリアル番号は AE2C-1EB8 です

C:\works\ のディレクトリ

2022/02/23 16:50 <DIR> + $a
2022/02/25 10:55 <DIR> .
2022/02/25 10:55 <DIR> ..
0 個のファイル 0 バイト
3 個のディレクトリ 1,144,323,043,328 バイトの空き領域

>>50
使い方が分からず試せてません

58 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 13:19:35.91 ID:zbGeAZZp.net]
Win10の質問スレ行けって言ったのに何故行かないのかな?
powershellに拘る理由がわからないよ

仕方ないのでこっちで回答するわ
Poweshell関係ないけど

https://itojisan.xyz/パソコンのトラブル/windows10でフォルダ・ファイルを削除できない/

これ全部試せ

59 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 13:34:00.21 ID:DA2+bsLA.net]
これ本来含まれないはずの+が含まれてるから消さないんでしょ

ディスクエディタかなんかで強制的に消せる名前にリネームするしかないのでは?
(FAT時代にしかやったことないからNTFSでできるかは知らん)

曖昧な記憶のスクリプトを正確に思い出せればなんとかなるやもしれんが
普通の方法では+がファイル名かフォルダ名の一部と解釈されないから消すのは無理だと思う
なかなかコーナーケースのバグ見つけたなw

多分PSでどうこうできる領域じゃない
再インストールが一番早いかもw

60 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 13:36:55.01 ID:+OtunY2h.net]
当てずっぽうで試す前に、まずabout_Quoting_Rulesを読んでくれ
何かおかしい文字が入ってるのかは、[byte[]]にキャストすれば分かるから
それ見て正しくクオートして入力してくれ



61 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 14:08:05.70 ID:+OtunY2h.net]
>>58
+を特別扱いするのはNTFSじゃなくて、特定のコマンドの仕様では?(copy fi+le等)
色んなコマンドが内部で引いてる可能性があるから避けたほうが無難な文字とは思うけど
$もNTFS的には合法だけど、予約名のプレフィックスにする慣習なので、なので避けたほうがいいのは確か
undocumentedなのもいっぱいある

62 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 14:54:37.65 ID:+OtunY2h.net]
win10/pwsh7.2.0/NTFSで試してみた

> ni -d sandbox |sl
> echo valid? >'+ $a'
> gci |select name
Name
----
+ $a
> ri '+ $a' &&echo $?
True
> gci |select name
# no output

うーん?

63 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 15:18:46.03 ID:1IWc50so.net]
cmdを起動して
rd "\\.\C:\works\ + $a "

64 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 15:22:25.68 ID:1IWc50so.net]
ダメなら引用符ありなしと、//./ と //?/ を変化させて試してみて

65 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 15:46:10.03 ID:EUVpr27z.net]
検証した
cmdを起動して rd "\\?\C:\works\ + $a " が正解だった
このやり方はPowershell経由では消えない
末尾スペースが再現できなかったから md "\\?\C:\works\ + $a " で作った

66 名前:915 mailto:sage [2022/02/26(土) 16:01:12.94 ID:AL/cEm3C.net]
>>62
>>64
消えました!!凄い!!!
ご教示頂きました皆さん本当にありがとうございます!

67 名前:915 mailto:sage [2022/02/26(土) 16:04:31.69 ID:AL/cEm3C.net]
因みに rd “\\?\〜“ってどんな意味でしょうか?

68 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 16:07:54.37 ID:EUVpr27z.net]
文字列解析を無効化する名前空間
https://docs.microsoft.com/ja-jp/windows/win32/fileio/naming-a-file#maximum-path-length-limitation

69 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 16:49:18.98 ID:+OtunY2h.net]
ずこー
ファイル名に末尾スペースはNTFS的に非合法のはずなのに、なんで作れちゃうかな
闇が深い

70 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 16:54:25.81 ID:+OtunY2h.net]
一応補足しとくとシェルは関係ない、pwshから非合法パス名へアクセスするのにも(ri)Remove-Item "\\?\~"は使える(使えてしまう)



71 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 19:13:10.48 ID:kQiC9zng.net]
-LiteralPathが多分必要

72 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 20:14:14.01 ID:+OtunY2h.net]
ri -lp '\\?\C:\Users\ore\sandbox\trailing 'で消せた
そもそも-literalpath指定無しには正しくない名前のファイルは作れないようになってる

標準のFileSystemプロバイダは静かに切り詰めるようだけど、できればエラーにしてほしいところ

73 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 20:16:53.67 ID:+OtunY2h.net]
当たり前だがext4上では合法だから普通に作れるな
プロバイダ依存きをつける

74 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 20:28:51.97 ID:HRmzshO4.net]
各々のプログラムのモラルに任せられてるのが残念なところ
pwshからコマンドレットを使う限りはうっかり変なもの作るの阻止してくれるのが救いか

linux/mac上ならそもそもOSがハネてくれるのでpwshで余計なチェック挟む必要もないのだけど

75 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 20:33:36.43 ID:7VK+waus.net]
Mac特有の濁点ユニコードもそのまま入るし互換性のためだろう

76 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 20:34:30.39 ID:HRmzshO4.net]
いや
>>29によるとコマンドレットで作れてしまったのか
それはちょっとまずい気がする

77 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:23:38.20 ID:U2u/902M.net]
いや真似しても普通には再現できなかったよ
\\?\ でなんとか作った
条件もわからんしいたずらに憂いてもしょうがない

78 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 02:46:56.51 ID:RHAmUG8r.net]
APIで普通に作れるから対策したつもりてもコマンドを適当に組み合わせたら偶然できるようなレベル
web上に消し方の情報が沢山あるのはそういう理由

79 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 10:01:03.24 ID:1ziskyp5.net]
>>77
76は>>75への返信

80 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 13:10:38.48 ID:5+6VAuli.net]
試す気はないけど
>>64で再現できるんでね?



81 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 14:17:24.11 ID:9W2zYqHy.net]
そりゃあえて迂回したらな

Test-Path -IsValidは信頼できるのだろうか?
中身分からものに頼るよりendswith(". ")とかで自分でバリデーションするべきか

82 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 14:24:32.38 ID:9W2zYqHy.net]
任意文字列渡されてもそのまま作らせない、あるいは勝手に置換+ユニークIDにリネームが現実的な防御策か
ファイルシステム移行で問題起こす事もあるし、どこでも合法なファイル名に正規化しておいた方が後のため

83 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 15:01:04.99 ID:Xoh24ILj.net]
>>79
ID変わってるけど64と78は同一人物です
psを普通に使う範囲までこのOSの瑕疵を気のするのは過剰品質だと感じるし、日本の安心安全神話で生産性クソ低い件を連想してしまう

84 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 15:11:14.28 ID:NrGkgOto.net]
bashとか平気で不正ファイルポンポン作るからヤバい
OSが拒否するのを期待してるからそれ自体が悪い訳ではないのだが、安易にwindowsで使うのは本当にヤバい

85 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 15:27:14.93 ID:9W2zYqHy.net]
win版のgitに付いてくるの使ってるけど、unix系ツールはファイルシステムに気を使う移植は見たことがない
仮想ドライブに隔離してしまうのが手っ取り早くて安全そう

86 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 15:40:26.92 ID:9W2zYqHy.net]
>>82
これな
考えれば考えるだけボロが出てくるし思考放棄することにした

行儀悪いプログラムの後始末のやり方だけ知っときゃいいのよ
(真剣な仕事でなければ)

87 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 15:51:52.53 ID:9W2zYqHy.net]
win11ではこっそり治ってたりしねーかなこれ、なければwin12に乞うご期待…

88 名前:デフォルトの名無しさん mailto:sage [2022/03/01(火) 03:09:34.84 ID:L/ghTddK.net]
>>82
これは瑕疵ではない、仕様とMSは一応言ってるんじゃね?

>>67によると ↓ だそうだから、自分でちゃんとチェックしろ、対処しろということだろうし

ファイル i/o の場合、 \ \ パス文字列の "? \ " プレフィックスは、すべての文字列解析を無効にし、その後に続く文字列をファイルシステムに送信するために、Windows api に指示します。

↑こう書くのはおそらく他OSのコードをそのまま移植しやすくするため、なんでね?

つまり何もチェック(今回の例なら末端にスペース入ってないか)せずにAPIに渡すと
結果として>>29のようなことが起き得ると

89 名前:デフォルトの名無しさん mailto:sage [2022/03/01(火) 03:14:07.19 ID:L/ghTddK.net]
あ、>>29では>>64の書式では書いてないのか
>>64の動作は仕様だと思うけど>>29でなったのならバグだな(試す気はない)

90 名前:デフォルトの名無しさん mailto:sage [2022/03/01(火) 13:31:53.46 ID:fDW5QBJr.net]
powershellで文字コード?順でソートしたい時どうしたらいいんでしょう
3---t.txt
3-1-t.txt
4---t.txt
4-1-t.txt
ってファイルがある時、'-'が0x2dで'1'が0x31だから、
3---t.txt
3-1-t.txt
4---t.txt
4-1-t.txt
と並ぶのを期待したのに昇順でソートしたら
gci | sort
3-1-t.txt
3---t.txt
4-1-t.txt
4---t.txt
になってしまう
今確認したらcmdのdir /ONオプションでも同じだった



91 名前:デフォルトの名無しさん mailto:sage [2022/03/01(火) 13:42:53.50 ID:fDW5QBJr.net]
ファイル名の末尾の英字取って
3---.txt
3-1-.txt
4---.txt
4-1-.txt
としたら
3---.txt
3-1-.txt
4---.txt
4-1-.txt
になったけど意味が判らない
変なバグに遭遇した気分

92 名前:デフォルトの名無しさん mailto:sage [2022/03/01(火) 16:20:44.39 ID:XlErARwx.net]
最近のWindowsは9.txtの後ろに10.txtが並ぶように数の大小を考慮したソートを標準で行うからそのアルゴリズムが生む微妙な綾じゃね
レジストリによって挙動が変わるはず
文字コード順を順守させたいならファイル名標準のソートにならないように、ハッシュテーブルの引数なんかを使って単なる文字列としてソートしてあげればいいんじゃないかな

93 名前:デフォルトの名無しさん mailto:sage [2022/03/01(火) 22:49:13.37 ID:qg4SVCg0.net]
テストしてないし遅い気がするけど
下準備なしがよければ
gci | sort {[Text.Encoding]::Unicode.GetBytes($_.Name) | %{'{0,3}' -f $_}}

※Shift_JIS基準がよければ
gci | sort {[Text.Encoding]::GetEncoding('shift_jis').GetBytes($_.Name) | %{'{0,3}' -f $_}}

重複ないなら
$list = [Collections.Generic.SortedList[string,IO.FileSystemInfo]]::new([StrintygComparer]::Ordinal)
gci | %{$list.Add($_.Name, $_)}

重複あるなら
$list = [Collections.Generic.List[IO.FileSystemInfo]]::new()
$list.AddRange([IO.FileSystemInfo[]]@(gci))
$list.Sort({Param($a, $b) [StringComparer]::Ordinal.Compare($a.Name, $b.Name)})

94 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 17:07:09.87 ID:HFEr6ITo.net]
>>92
めっちゃ参考になった
ありがとう

95 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 17:54:20.18 ID:qWIZmWPY.net]
>>89
PowerShell 5.1だと確かにそうなるけど
PowerShell 7.2.1だとgci | sort で期待通りの結果になったよ
最新バージョン使った方が良いんでない?

96 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 21:57:02.42 ID:Gj5Erajd.net]
PowerShellでSQliteのデータベースに追記操作しようと思っていますが
テーブル名を変数にし、カラムと追記したい内容を配列で操作しようとすると上手くいきません。
一括で出来ないなら配列内ループでと思いやってみましたが、そちらもうまくいきませんでした。
配列でINSERTするには、以下のサンプルだとどういった記述をすればよいのでしょうか?

97 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 21:57:57.51 ID:Gj5Erajd.net]
using namespace System.Data.SQLite

Set-StrictMode -Version Latest
$ErrorActionPreference = "STOP"

# モジュールのインポート
Import-Module SQLite

# データベースファイル
$db_path = "E:\ps1\sqlite\sample.db"

# コネクションオブジェクトの生成
$con = [SQLiteConnection]::new() | % {
$_.ConnectionString = ("Data Source = {0}"-f $db_path)
$_.Open()
$_
}

$cmd = [SQLiteCommand]::new()
$cmd.Connection = $con

98 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 21:59:03.05 ID:Gj5Erajd.net]
$Table = "List"
$ArrCol = @("No","Name","Gender")
$ArrRecord = @("1","山田","男")

99 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 21:59:46.03 ID:Gj5Erajd.net]
# レコードの追加
$cmd.CommandText = @"
INSERT INTO $Table ($ArrCol) values ($ArrRecord)
"@

100 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 00:11:25.85 ID:Ai6V8ofW.net]
どこでどんなエラーが出てるのか分からないし試してないけど
文字列の中で配列変数をそのまま展開してるのが原因なんじゃないかな。

$cmd.CommandText = @"
INSERT INTO $Table ($($ArrCol -join ', ')) values ($($ArrRecord -replace '^|$', "'" -join ', '))
"@

※余計なお世話だろうけどインジェクション対策がないので必要なら入れてね。
 (SQLiteがサポートしてるか知らないけど通常はSQLパラメータを使用。)



101 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 07:55:37.70 ID:vKIVQ1+Z.net]
>>99
ありがとうございます。
一回やってみます

102 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 22:26:57.79 ID:vKIVQ1+Z.net]
すみません、色々試したのですがわからずまた質問させてください

$Table = "2022"
$ArrCol = @("No","Day","Name")
$ArrRecord = @("1","2022/03/03","山田")

だとして

103 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 22:35:42.15 ID:vKIVQ1+Z.net]
cmd.CommandText = @"
INSERT INTO "2020" ("No","Day","Name") values ("1","2022/03/03","山田")
"@
だとエラーなくデータベースに追記出来るのですが

104 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 22:37:17.23 ID:vKIVQ1+Z.net]
$cmd.CommandText = @"
INSERT INTO [string]$Table ("No","Day","Name") values ("1","2022/03/03","山田")
"@

だと"0"個の引数を指定して"ExecuteNonQuery"を呼び出し中に例外が発生しました"SQLite error near "2022":syntax error"

105 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 22:37:58.49 ID:vKIVQ1+Z.net]
あと
$cmd.CommandText = @"
INSERT INTO "2022" ($($ArrCol -join ', ')) values ("1","2022/03/03","山田")
"@


$cmd.CommandText = @"
INSERT INTO "2022" ("No","Day","Name") values ($($ArrRecord -replace '^|$', "'" -join ', '))
"@

だと
"0"個の引数を指定して"ExecuteNonQuery"を呼び出し中に例外が発生しました"SQLite error near "/":syntax error"

とエラーが出てデータベースを変更できませんでした
色々試したのですが理由がわからず申し訳ございませんが教えたもらいたく

106 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 22:42:34.74 ID:vKIVQ1+Z.net]
すみません
5chだとSQL関係で書き込めなかったのですが

$cmd.え(E)xecuteNonQuery() | Out-Null
も各場所で記入しています

107 名前:デフォルトの名無しさん mailto:sage [2022/03/04(金) 01:01:51.54 ID:rY0dcLRW.net]
SQLをデータベースに渡す前に、ヒアドキュメントがどう変数展開されているのかデバッグしたりコンソール出力してみるといいよ
いろいろミスに気づくはず
軽く見た感じ次のように展開されてる気がする
INSERT INTO [string]2022 ("No","Day","Name") values ("1","2022/03/03","山田")
INSERT INTO "2022" (No, Day, Name) values ("1","2022/03/03","山田")
INSERT INTO "2022" ("No","Day","Name") values (1, 2022/03/03, 山田)

108 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 08:12:15.74 ID:UxduI4YM.net]
PowerShell and OpenSSH team investments for 2022
https://devblogs.microsoft.com/powershell/powershell-and-openssh-team-investments-for-2022/

We continue to explore and discuss with the Windows team how to make it easier to deploy PowerShell 7 on Windows.
As noted previously, support lifecycle differences between Windows and .NET along with size constraints we don’t have the ability currently to ship PowerShell 7 in Windows.
Previously we considered a bootstrapper to be a viable solution giving the experience of being inbox in Windows, however, it would have been a significant effort to implement.
Instead, we are exploring shipping a cmdlet in Windows PowerShell to make it easy to install PowerShell 7.
A new RFC will be published to discuss this.

109 名前:92 mailto:sage [2022/03/05(土) 11:18:59.79 ID:2eHlJFPP.net]
>>92
1つ目の例のUnicodeはUTF-16LEの事だからだめだったね。
BigEndianUnicode(UTF-16BE)にする必要があったし、
そもそもbyte型にしてエンディアン気にする必要もないから、
gci | sort {[int[]][char[]]$_.Name | %{'{0,5}' -f $_}}
でよいはず。
※全く関係ない別の作業中になんか急に気づいた。

110 名前:99 mailto:sage [2022/03/05(土) 11:34:56.78 ID:2eHlJFPP.net]
SQLiteがカラム名等を「"」で括る事を要求しているなら
$cmd.CommandText = @"
INSERT INTO "$Table" ($($ArrCol -replace '^|$', '"' -join ', ')) values ($($ArrRecord -replace '^|$', '"' -join ', '))
"@
かな。>>106さんの言う通りなので確認してみて。

これもだめなら、成功例と、失敗例や変数値のテーブル名が違うからそこかも。



111 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 17:03:38.16 ID:aFkos6IC.net]
>>107
もう開発やめりゃいいのにな
これまでWindowsに入ってるから採用されてきただけで、わざわざ入れて使うならPowerShellなんか選ばれるわけがない
コマンドレットで簡単に導入できるようにするならPowerShellじゃなくてPythonにでもしたほうがいいんじゃないか

112 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 22:04:13.92 ID:BfpuuE1g.net]
インストールしてなくてもpythonコマンドでMSストア版pythonのダウンロードページに飛ばされるから、既にpwsh7よりも導入が楽という悲しみ

113 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 22:12:35.50 ID:vfk/Azs+.net]
PowerShellってそんな残念なプログラム言語なんですか?
がんばって勉強したのに納得できません

114 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 22:41:29.84 ID:ws14fGQi.net]
PowerShell5系は向こう10年は大丈夫
6以降はAzure以外では全く使われておらず、Azureに生涯を捧げるのでない限りは完全無視でOK

115 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 11:25:06.52 ID:2dMAfvhM.net]
メインは蛇使いだけど
色々インポートしなくてもそこそこ戦えるのでregex、小規模データ処理、重くない数値計算がシェルから直接引けるpwshは有り難い

ネイティブライブラリ揃ってないからパワーが居るのはPython、まあPython自体はpwshとドングリ背比べ(処理速度、標準ライブラリもほぼ等価)だけど、やはりライブラリが強い

116 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 11:37:06.16 ID:Ou5vEvLf.net]
蛇使いwww
蠍と射手の間かよwww

117 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 14:35:41.73 ID:2wKnUbYj.net]
Pythonは.NETを使えないから糞

118 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 15:35:16.76 ID:+PaQnGDE.net]
PowershellとPythonだと得意分野が違うよね

119 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 16:40:58.28 ID:N33QeZ0g.net]
ちょっと詳しい人に聞きたいんだけど開発環境で使用しているSDKのコマンドがcmdだと実行可能だけどPowershellだと一切認識されませんてエラーがでるんだけどこの理由はなぜ?
WIndows 11だとターミナルのデフォがPowershellなのにもやもやする、この解決方法はある?
もう一つ、ファイル名を指定して実行で起動したcmdからはSDKのコマンドが実行できるのに、Terminal(wt.exe)の既定のcmdからコマンドを実行すると認識されていませんエラーが出るんだけどこの原因もなぜ?解決方法はある?
cmdとpowershellとterminalと複数のshellを用意してMSは何がしたいのかマジで意味がわからない
WSLとか作っててOSSに寛容になったんだからさっさとデフォのShellをbashかzshにしてくれれば開発環境としてより便利なのに・・・

120 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 16:49:05.43 ID:4qF5AnI1.net]
しかもそのデフォルトで開くPowerShell、既に非推奨のバージョンなんだぜ
もう完全に破綻してるからWSLだけ使えばいいのよ



121 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 17:14:53.35 ID:Y34SWeR7.net]
>>118
情報少なくてわかんないけど、カレントフォルダに対して「.\ファイル名」の記法で書いてないとかはない?
ファイル名に特殊記号を含むとか

122 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 19:53:05.95 ID:+PaQnGDE.net]
bashとかは言語的にはPowershellに比べて時代遅れ過ぎるわ

さっさとPowershell7に統

123 名前:一したほうが遥かにマシ []
[ここ壊れてます]

124 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 20:11:36.59 ID:GpPJTCKS.net]
10や11に標準で入ってる5.1で動くようにしてる人が大半じゃないの
機能的にも特にこれ以上期待するものはないんだけど

125 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 20:14:22.19 ID:N33QeZ0g.net]
>>119
いやマジでそれでしたwww
PS7をインストールしてPS7で実行したらCLI認識しましたイミフwww
そしてPS7をインストールしてもアップデートされずWin11デフォのPS5がそのままアンインストールもできず鎮座してるくそすぎて草

126 名前:デフォルトの名無しさん mailto:sage [2022/03/07(月) 00:21:21.62 ID:M26ldpDZ.net]
>>106
デバックで出力したとき文字列だから勝手に"が消されているものかと先入観を持ってしまっており疑問にすら思いませんでした
丁寧に説明していただきありがとうございます。

>>109
ありがとうございます。明日確認してみます。

127 名前:デフォルトの名無しさん mailto:sage [2022/03/07(月) 17:43:24.45 ID:GqmKE44y.net]
powershell.exeに-Fileで.ps1スクリプトを指定する場合に、
引数で文字列配列を指定する簡単な方法はありますか?

.ps1側に変更を加えるのは無しで、Param()は以下の指定だとします。
Param( [string[]] $p1, [string[]] $p2 )

普段はPowerShellコンソールや他のスクリプトからこの.ps1を使っています。
これを.batに組み込みたい事があったものの配列の指定方法が分からず、
以下のように-Commandにして回避しました。
-Fileの場合でも指定方法があったのかな、と気になっています。

powershell.exe -c "〜.ps1 -p1 @('aaa', 'bbb') -p2 @('ccc', 'ddd')"

128 名前:96 mailto:sage [2022/03/08(火) 02:39:16.58 ID:BWZbDM8v.net]
$Table = "2022"
$ArrCol = @("No","Day","Name")
$ArrRecord = @("1","","")

このようにブランクの配列があると
'1', ', ','
上のように途中の「""」が「'」シングルクォーテーション1つになりエラーが起こっているということがわかりました。
ですので
$ArrRecord | foreach-object -Process {$_ -replace '"',"'"}
として配列内で変換しようと思ったのですが、$_の時点でダブルクォーテーションが取れており上手く変換できない状態です

($($ArrRecord -replace '^|$', '"' -join ', '))の「'^|$'」は正規表現で前と後ろを「"」で変換するということですよね
途中のパイプの意味がわかっていないです

129 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 10:15:51.20 ID:HM66xeZm.net]
>>126
苦戦してるね
まずプログラミング一般の基礎として、ソースコード上に文字列型の変数値を直接書きたいということを伝えるための(文字列リテラルの)引用符と、文字列の中に引用符という文字データを含めたいと伝えるための引用符は別なので理解・区別しておかないとずっと混乱する
$_の時点で引用符が取れたという感覚は間違いで、今回文字列の中身には引用符文字は含まれていなくて、文字列リテラルですと伝える引用符になってる
次に、^|$ で置換する発想は、文字列の特定の位置が先頭または末尾なら置換というところまでは狙いどおり
でも空の文字列だった場合、正規表現処理が文字列を左から走査したとき「先頭かつ末尾」という単一の位置しかないので、置換も一回しか行われず引用符一つだけになるというバグになってる
例えばこうすれば文字列リテラルのなかに引用符文字を入れられる
($("""$ArrRecord""" -join ', '))
($("`"$ArrRecord`"" -join ', '))
($("'$ArrRecord'" -join ', '))
いずれも外側の二重引用符がリテラルの引用符で、内側の引用符が文字データの引用符

130 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 10:21:04.34 ID:HM66xeZm.net]
>>127
配列じゃなくて各要素の文字列を囲まないとダメたった
($("""$_""" -join ', '))
($("`"$_`"" -join ', '))
($("'$_'" -join ', '))
あと正規表現のパイプは「または」という意味



131 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 16:05:01.58 ID:zfJt6x7/.net]
PowerShellのバージョン問題はwslに最新のpowershellを入れるでok?

132 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 00:49:55.24 ID:oTLaCJPf.net]
>>129
Linux版Powershell7はWindows版Powershell7と比べて機能制限も多い
よって全く解決しない

133 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 07:01:31.59 ID:RwKAl9+/.net]
LinuxでPowershell使う理由なんてあるか?
bashの方が明らかに上だろ

134 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 09:36:42.19 ID:taLplzJg.net]
> bashの方が明らかに上だろ
確かにバカをあぶり出す能力は高いなw

135 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 10:12:30.93 ID:EcV8v1IL.net]
>>131
Linux版使った事ないから
bashとどう比較してるか興味あるよ
優劣を列挙しもらえると助かる

136 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 15:06:09.10 ID:Cj1SKgXQ.net]
powershellはC#埋め込んでそこで定義したクラスとかがpowershellで使えるとこがいいところだから
bashもそうしたらいいとおもう

137 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 17:46:07.31 ID:KONqX93R.net]
それはPSってよりCOMじゃね

138 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 19:10:34.11 ID:g4d6cmq/.net]
めっちゃ前からある機能だしCOMなんて1mmも関係ないぞ
https://codezine.jp/article/detail/5007

139 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 21:24:55.35 ID:oTLaCJPf.net]
コマンドレットの出力がオブジェクトで目的のプロパティから値が取り出しやすい
Where-object一つ覚えればフィルター出来るからコマンド毎にフィルタの仕様で悩む必要が無い
正規表現がperl拡張表現で標準搭載、コマンドやら環境によって規格が違うとか悩む必要がない

シェルスクリプトとしてそれだけでも全然いいわ

140 名前:デフォルトの名無しさん mailto:sage [2022/03/12(土) 11:12:49.22 ID:2x7XRkpq.net]
regex沼に入る気はないけど$matches.namedで参照できるだけでもかなり有り難い

pwsh固有の事情としては(?-i)を繁用するな
sls等コマンドレットに-CaseSensitive渡したり-[ci]matchが入り乱れてたのがスッキリした



141 名前:デフォルトの名無しさん mailto:sage [2022/03/12(土) 11:27:19.44 ID:2x7XRkpq.net]
あとStringとString[]どっちも渡ってくるから(?m)/(?-m)もpwsh的には重要か

142 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 01:12:21.45 ID:z4wleAC0.net]
>>128
レスの内容を色々と検索しながら勉強させていただきました
まだエラーが出て止まっていますが、こちらで少し対応を考えてみたいと思います
本当に丁寧に教えていただきありがとうございます

143 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 22:20:26.82 ID:Rh84s05v.net]
二つの引数をとる関数に引数を二つ渡したら、一個目引数が全部持っていくのはなんで?
コード
function war {
param($putin, $zelenskyy)
Write-Host 'putin has ' $putin
Write-Host 'zelenskyy has ' $zelenskyy
}

war('Russian','Ukraine')

結果
putin has Russian Ukraine
zelenskyy has

144 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 22:33:14.06 ID:ET0x7ZFa.net]
>>141
配列
@(
"aaa"
"bbb"
)
の別表記がカンマ区切りリスト
"aaa","bbb"

145 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 22:41:56.39 ID:Rh84s05v.net]
呼び出すときに恰好つけるとダメなのか

146 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 00:07:43.00 ID:0/d09PRO.net]
格好も括弧も関係ない
シェルなんだから引数の区切りは空白と言うだけの話

147 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 00:50:39.64 ID:DCNM1l/p.net]
war Russian Ukraine

にしろっつーことでしょ?

148 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 00:52:00.94 ID:DCNM1l/p.net]
失礼、こうだね

war ‘Russian’ ‘Ukraine’

149 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 08:43:01.98 ID:vPjPamJP.net]
Set-StrictMode -Version 2.0 おすすめ

https://docs.microsoft.com/ja-jp/previous-versions/dd347

150 名前:614(v=technet.10)#%E4%BE%8B-2 []
[ここ壊れてます]



151 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 12:57:17.38 ID:ENyjKfBg.net]
赤文字で出るエラーメッセージをログに出力して、
エラーログが出てるか適当な箇所で判定して、ログをnotepadで開くってことをやりたいです。
標準エラー出力みたいなのの取得方法を教えて下さい

152 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 15:06:14.72 ID:9VjLQzax.net]
いくら補完あると言ってもコマンドレットの名前冗長すぎんだよ

153 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 15:18:43.63 ID:zTqRydhk.net]
>>149
良く使うやつはaliasあるやん

154 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 21:22:30.00 ID:KFCC0Q8d.net]
長いから分かりやすくていいんだろ
wとか言われてもユーザーを笑いものにするコマンドか?としか思えんし

155 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 11:18:52.00 ID:7PrXFgOi.net]
構文はtclっぽいねえ

156 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 12:37:58.38 ID:vJYdrJTe.net]
配列の配列について

$array_of_array = @(
@(
'1-1'
'1-2'
'1-3'
),
@(
'2-1'
'2-2'
)
)
$array_of_array | foreach {
Write-Host 'L1' $_
$_ | foreach {
Write-Host ' L2' $_
}
}
結果は期待通り
L1 1-1 1-2 1-3
L2 1-1
L2 1-2
L2 1-3
L1 2-1 2-2
L2 2-1
L2 2-2

157 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 12:39:12.90 ID:vJYdrJTe.net]
だが、カンマを省略すると
$array_of_array = @(
@(
'1-1'
'1-2'
'1-3'
)
@(
'2-1'
'2-2'
)
)
結果は期待と違う。配列の配列じゃなくて、ただの配列になっている?
L1 1-1
L2 1-1
L1 1-2
L2 1-2
L1 1-3
L2 1-3
L1 2-1
L2 2-1
L1 2-2
L2 2-2

158 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 12:40:41.61 ID:vJYdrJTe.net]
改行してカンマをいれると
$array_of_array = @(
@(
'1-1'
'1-2'
'1-3'
)
,
@(
'2-1'
'2-2'
)
)
後半だけ、配列が要素になっている?
L1 1-1
L2 1-1
L1 1-2
L2 1-2
L1 1-3
L2 1-3
L1 2-1 2-2
L2 2-1
L2 2-2
どういうことなのか教えてよ。

159 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 14:10:16.88 ID:advrh/I1.net]
powershellで配列データ構造を扱ってはいけない

160 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 16:28:22.32 ID:vJYdrJTe.net]
https://docs.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/everything-about-arrays?view=powershell-7.2#nested-arrays
「これらの例では、コンマは非常に重要です。 以前に示した通常の複数行での配列の例では、コンマは省略可能でした。 多次元配列の場合はそうではありません。」
そうではありませんと言われても、エラーになるわけでもなく、どうなるのか誰か教えて



161 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 23:33:26.82 ID:GptrjqcJ.net]
>>153-155
あまり自信はないのですが、
・「単項の ,」と「配列要素区切りの ,」は別物です。
 (「-1」と「1 - 1」の「-」が別物、みたいな違い。)
・式の終端と見なせる箇所にある改行は「;」と概ね等価です。

>>153の「,」は「配列要素区切りの ,」です。
>>155の「,」は「単項の ,」です。

162 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 23:33:48.95 ID:GptrjqcJ.net]
ワンライナーにするとこんな違いがあります。
>>153
@( @('1-1'; '1-2'; '1-3';) ,@('2-1'; '2-2';); )
>>154
@( @('1-1'; '1-2'; '1-3';); @('2-1'; '2-2'); )
>>155
@( @('1-1'; '1-2'; '1-3';); ,@('2-1'; '2-2';); )

163 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 00:30:34.10 ID:V8R16naX.net]
追加。
Out-*やWrite-*で出力先が示されていない改行や「;」などは、
暗黙のWrite-Outputが動くと考えるとよいです。

つまり「@(〜);」は「Write-Output @(〜);」となり、この時、配列が1段階分解(要素取出)されます。
ただし「単項 ,」の「,@(〜)」は「Write-Output -NoEnumerate (,@(〜))」となり、分解されません。

イメージ的にはこんな違い。(本当は他にもWrite-Outputが入ります)
>>153
@( (Write-Output @('1-1'; '1-2'; '1-3';), @('2-1'; '2-2';)); )
>>154
@( (Write-Output @('1-1'; '1-2'; '1-3';)); (Write-Output @('2-1'; '2-2';)); )
>>155
@( (Write-Output @('1-1'; '1-2'; '1-3';)); (Write-Output -NoEnumerate (,@('2-1'; '2-2';))); )

164 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 01:20:05.34 ID:EnzWedk+.net]
暗黙のWrite-Output
コマンドレットのような何某かの出力を持つものと、Powershellのスクリプト内で定義された関数や式の評価結果を
うまいこと混ぜることが出来るようにする仕掛けなのでしょうか
完全に理解しては居ませんがが、理解に努めます
文法知識は「Windows PowerShell実践システム管理ガイド 第3版(日経BP)」の第2章を読んだだけなのですが
これだけは全然足りないtのを痛感しました
何かお勧めはありませんか

165 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 01:39:27.35 ID:KeTIMbSf.net]
powershellは行志向寄りの言語だから改行はC/C++でいう暗黙の副作用完了点みたいな意味を持っている
何も考えず複数行にまたがる式を書くと思わぬ事故に繋がるから、C/C++の\やVBの_みたいに行継続を示す`を行末に付けるといいよ

$array_of_array = @( @('1-1', '1-2', '1-3') `
, @('2-1', '2-2'))

166 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 14:33:02.79 ID:V8R16naX.net]
>>161
今回の挙動の予想や理解は、構文のパース(式・文の区切り)、
独特なパイプラインの挙動、分かりづらい「単項 ,」の存在などがあり
わりと難易度の高いものです。

>>156>>162さんに同意で、配列の配列(ジャグ配列)を避け
行の継続を「`」で明示する事をお勧めします。

書籍では『Windows PowerShell イン アクション』がお勧めです。
ただv1の本なので今となっては内容が古く、紙だと新品の入手が難しいです。
※これのv5以上版が日本語で出て欲しい…。
https://www.sbcr.jp/product/4797337362/

あとは>>157のMSのサイト等。
about_*も有用な事が書かれてますが、日本語訳やサンプルコードの質が酷く、
多くの人がよく使う機能と一部の人が稀に使う機能が同じ扱いの記述なのが難点。

167 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 22:00:12.10 ID:L+yKE55O.net]
Powershellの洋書翻訳はもっと盛んになってほしい
オライリーのクックブックも原著は改定4版まで出てるのに日本語は初版のままだし

168 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 00:56:42.09 ID:OI2SuuED.net]
今時英語できないの日本人だけだからな
土人とか馬鹿にしてる韓国、中国、インド、ベトナム、フィリピンなんてネイティブレベルで英語できるからな
これで日本のレベルは低くないとかそれ以前の問題だよ

169 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 08:39:53.52 ID:2Zu3Swq+.net]
エリート層は英語できるだろうよ
馬鹿は海外だと底辺でも英語ペラペラだと思ってやがるが

170 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 09:24:20.27 ID:JwhA0ika.net]
日本ですら母国語での情報の鮮度が落ちるんだから
それらの国のプログラミング学習希望者は
必然的に英語の勉強からしないといけないだけの話じゃないかな?

日本のレベルが低いとか
英語できるのはエリート層だけとか
そういう問題じゃないと思いますよ

アニメ理解したいから日本語勉強しましたと
同じレベルの話な気がする



171 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 09:42:44.22 ID:3OVxtXqz.net]
まとめて挙がってるけど国によって差は大きい
インドとフィリピンは英語が公用語で世界でも有数の英語話者が多い国

日本の英語力が低すぎて世界に遅れを取っているというのは同意
学校教育も都度見直されてるしそのうち改善されるんじゃねーの、知らんけど
プログラマーなら英語を読むだけでもできるように少しずつ学ぶ気概は欲しい
ボク英語わからないんですと幼稚な変数名を付け続けるのはよくない

172 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 14:48:55.98 ID:fHQFhWIP.net]
日本は国内に金と仕事があるせいで海外でなくても稼げるからなあ
英語理解できなくても儲かる職業の筆頭が
マスコミと教育と役人政治家の時点で英語教育が変わるわけ無いじゃん

173 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 16:01:23.66 ID:l99FVYBX.net]
ITに限定すると英語は必要なんだけど英語に限らず日本のITエンジニアの多くは勉強しない
能力を伸ばしても給料が上がらず残業が増やされるだけと諦めるのが常態化している

174 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 16:10:09.00 ID:l99FVYBX.net]
国内に金があるというのは微妙な話になってきている
世界ワースト級の低成長による沈下を続けていて、本当に有能なエンジニアは海外に流出して残るのはIT土方ばかり
ノーベル賞受賞者が元日本人ばかりというのと同じような話が起こってる
GAFAのようなIT企業が伸びないから低成長から抜け出さない負のスパイラル

175 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 21:14:58.00 ID:dTmdB0AV.net]
海外ならGAFAみたいな企業がたくさんあるとでも思ってるのかこのゴミは
GAFAは世界中でも1つしか無いんだよ

176 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 21:25:38.84 ID:vIzK+CHc.net]
GAFAはひとつとな?
MARCHはひとつみたいな哲学かな?
のようなという日本語の意味はわかるのかな?

177 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 22:11:34.27 ID:y82izW1t.net]
脱線しとるな

178 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 00:10:37.43 ID:KVIRUNm3.net]
これ使って出来ることってフォルダ弄りファイル弄り設定弄りだけ?
他に出来ることないの?

179 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 00:21:42.31 ID:kikOm2qa.net]
あとは何かプログラムを走らせたり、せいぜいOSの機能を実行するくらいかな
リモートで出来たりするけど、しょせんはローカルに出来ることがリモートでも出来るってだけだな
まだ勉強をはじめたばっかりだけど、そのマシンで出来ないことは出来ないんだなって分かった

180 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 00:25:39.51 ID:gjcW4Tfu.net]
>>175
bashなんかのシェルとは違って.NETベースだからC#やVB.NETでできることは一通りできるよbashなんかと違ってね
メンテが楽だからあえてpowershellでGUIを作ったりする場合もある



181 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 00:37:38.83 ID:aUdC0GfB.net]
正規表現使えるしWindowsだとわざわざPythonセットアップして使うより楽だし利便性高い気がする

182 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 00:40:52.77 ID:G2Twh9Sv.net]
>>175
PowerShellは基本的にはWindowsサーバーの管理に使うもの
管理系のコマンドレットが非常に充実している

183 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 04:18:15.48 ID:IVt1k3VA.net]
>>177
出来るからって普通はやらんよまともな脳みそしてるならVSCode使う
お前みたいなのが秀丸やEMでコーディングしてるでぇー(ドヤッっイキリ散らかして周りが迷惑する馬鹿そのものだな

184 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 08:31:22.61 ID:eqSZnoCQ.net]
>>180
VSCodeを使うの意味が分からん
VSCodeでPSスクリプト組むならいいの?
なんで処理系の話でエディタの話になるの?

185 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 09:01:03.65 ID:TpwnHNL9.net]
分かってるくせに…
対面だと「何いってんだコイツ…」とか思いながらも愛想笑いしてそうだな

186 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 10:01:20.99 ID:Jvnypl+E.net]
釣りでしょ
面倒見いい人なら、オマエそれブーメランやんけーて言ってあげたら喜ぶよ

187 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 10:04:37.18 ID:11NHOGIK.net]
この煽り合いもPowershellスキルの一部なんですか?

188 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 03:56:01.53 ID:cKyI7Sj4.net]
write-sqltabledateで列名は指定できますか?
計算列のあるテーブルでその列を飛ばしたいのですがPsCustumObjectのプロパティ名が無視されて並び順で投入されてしまいます。

189 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 21:13:21.68 ID:vudxrsxx.net]
https://i.imgur.com/O3zZKes.jpeg

190 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 04:05:40.26 ID:qE/8IX5m.net]
>>186
すいません
Write-SqlTableData
でした…
よろしくお願いします



191 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 14:42:03.29 ID:u+BPDoH4.net]
そういう挙動ということはWrite-SqlTableDataはメタデータを考慮してなさそうだし
Invoke-Sqlcmdでやれば?

192 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 14:50:17.14 ID:pYdvgAQA.net]
コマンドレットの命名規則をケバブケースにしたMSの馬鹿を殺してやりたい
補完でタブ押して確定してまたタブ押して確定してってのがめちゃくちゃイライラする

193 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 14:56:08.98 ID:VSlpRLnL.net]
自分の思い通りじゃないとすぐにイライラしたり殺したくなったりする

194 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 18:44:07.02 ID:MJID/KD0.net]
ちんちんシュッ!シュッ!シュッ!

195 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 21:08:39.76 ID:MzILs1Nj.net]
>補完でタブ押して確定してまたタブ押して確定して

状況が分からん

196 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 21:42:22.31 ID:M1Ul1dov.net]
文字列をPowerShellの文字列リテラルとして出力したいのですが、どうやったら楽ちんに出来ますか?

例えば下記を実行すると
$s = "``i`'`""
function literally {
param ($t)
return $t
}
Write-Output (literally $s)
実行結果は
`i'"
こうなりますが、
"``i`'`""
こうなってくれる function literally は既存の関数にありますか?

197 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 06:15:33.62 ID:LvwD4OI0.net]
>>188
ありがとうございます
やっぱそれが無難ですかね
IDENTITYにしたオートインクリメントな列は空文字列の代入で飛ばせたので計算列も何か方法が無いかと思ったのですが…

198 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 13:30:01.63 ID:mnGGi+fZ.net]
>>193
literally が何を意図してるのかわからんが
単一引用符のヒアドキュメントで囲むとか
$s = @'
"``i`'`""
'@
必要なリテラル部分だけ抜き出したファイルを作成してgcで読むとかすりゃいいんじゃね
あとは必要ならInvoke-Expressionなりして使う
まじめにコード内でエスケープ処理とかやろうとしたら一晩掛かるよ

199 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 00:44:41.31 ID:8p5xi9DH.net]
まじめなエスケープ処理を10分くらいでできる関数とかないですか

200 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 00:54:22.58 ID:8p5xi9DH.net]
--- ここから x.ps1 ---
function x {
$s = (Get-Content -Path 'a.txt')
Write-Output ('$a = ' + "'" + $s + "'")
}
x | Out-File 'a.ps1'
--- ここまで ---

--- a.txt の中身が ---
im.dat
--- ここまで ---

の場合



201 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 00:57:03.84 ID:8p5xi9DH.net]
a.ps1 は
$a = 'im.dat'
となって PowerShellで読み込める

--- a.txt の中身が ---
i'm.dat
--- ここまで ---
の場合
a.ps1 は
$a = 'i'm.dat'
となってシンタックスエラーになる。こういう場合のためにエスケープ処理をしたいのです。

202 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 02:14:50.68 ID:vgVAp+/s.net]
>>198
であるならば>>195で示したヒアドキュメントを使えばそんな処理は不要になる
function x {
$s = (Get-Content -Path 'a.txt')
'$a = ' + "@'"
$s
"'@"
}
x | Out-File 'a.ps1'

203 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 02:28:26.94 ID:8p5xi9DH.net]
a.txt の内容が下記の場合はエラーになります。
'@.dat

----
いまさら気が付きましたが、やりたいことは、
PowerShellスクリプトをPowerShellで出力したいので、文字列をエスケープしたい。
最初から、こう言えればよかった。

204 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 07:29:09.01 ID:vgVAp+/s.net]
>>200
そういうのも想定するなら'@で分割して結合するだけ
これで穴の無さそうなエスケープ処理相当にはなったかな
function x {
$s = Get-Content -Path 'a.txt'
[string[]]$t=$s -split "'@"
for ($i = 0; $i -lt $t.length; $i++) {
if ($i -eq 0) {
'$a = ' + "@'"
} else {
'$a += ' + "`"'@`""
'$a += ' + "@'"
}
$t[$i]
"'@"
}
}
x | Out-File 'a.ps1'

205 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 08:39:09.99 ID:5tj62u6D.net]
文字列リテラルの構文仕様を見るかぎり、

function ConvertTo-StringLiteral ([string] $s) {
 '"{0}"' -f ($s -replace '[$"\u201C-\u201E`]', '`$&')
}

でいいのでは。

function x {
 $s = Get-Content a.txt
 '$a = ' + (ConvertTo-StringLiteral $s)
}

みたいに使う。

206 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 09:30:54.03 ID:5tj62u6D.net]
>>201
普通の「'」以外のシングルクォート類(*)も、正当なシングルクォート文字なので、
a.txt に「‘@.dat」とか入力されるとエラーになる穴が...。

(*) U+2018、U+2019、U+201A、U+201B

207 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 20:36:51.74 ID:vgVAp+/s.net]
>>202-203
非常に勉強になったよ
ありがとう

208 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 02:15:34.71 ID:ieHzhZh4.net]
>>202
https://www.microsoft.com/en-us/download/details.aspx?id=36389
これを見つけたので 22ページあたりを読むと、シングルクォートで囲む verbatim-string-literal は、割とシンプルで
single-quote-character(普通のシングルクォート+4個) を含む場合に single-quote-character single-quote-character とするので

function ConvertTo-SingleQuotedStringLiteral ([string] $s) {
 "'{0}'" -f ($s -replace "['\u2018\u2019\u201A\u201B]", "'$&")
}
こうすればいいのだろうか?

209 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 02:33:47.96 ID:ieHzhZh4.net]
何でインデントついてるんだろと思ったら\u3000でしたか

210 名前:202 mailto:sage [2022/03/29(火) 09:28:46.66 ID:H9URZ70O.net]
>>205
うん。範囲指定できるので、"['\u2018-\u201B]" とか書くと、もっとシンプルかも。

>>206
U+3000 の Unicode クラスは Zs で、正当な空白文字なので、コピペで動いてくれる。



211 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 21:51:03.77 ID:SKE99kDT.net]
B.1.9.3 文字列リテラル
https://docs.microsoft.com/ja-jp/powershell/scripting/lang-spec/chapter-15#b193-string-literals

212 名前:デフォルトの名無しさん [2022/04/04(月) 21:22:25.32 ID:ECqCrQfL.net]
>>1
$url=$($site="+pj.og.ldn.iakkokA3%etis=q?hcraes/moc.elgoog.www//:sptth".ToCharArray();[Array]::Reverse($site);-join $site)
"ソビエト人","支那人","朝鮮人" | % {start "$url$_";sleep 21}

213 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 22:32:51.33 ID:49oapsGv.net]
(Get-Date).ToString("M/d") # 4/7
(Get-Date).ToString("M") # 4月7日
(Get-Date).ToString("d") # 2022/04/07

"M"と"d"単体で取れないのは仕様なの?

214 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 22:51:48.46 ID:UZkBrI19.net]
>>210
書式指定を単体で使う場合は%を前置する

https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings#UsingSingleSpecifiers

215 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 23:27:13.95 ID:49oapsGv.net]
>>211
なるほど。ありがとう

216 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 14:32:54.13 ID:Wntan1Ql.net]
いえいえ

217 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 21:32:59.17 ID:wBIIYhTi.net]
事務員がこれ使って自動化して評価されるかね?
Excel VBAとかだと認知されてるし動きも分かるからアピールになりそうだけど、これはps1をダブルクリックしたら既に結果が出てるキンクリ状態になるんで何か地味なんだよね
出来ることは多彩なのにさ

218 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 08:19:21.43 ID:Qn5tHQbB.net]
結果を開いて見せつけてやればよろしいかと

219 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 16:18:50.55 ID:NCtDoq3M.net]
キンクリ状態てどういう意味なん
例えばExcel操作の自動化なら最初に$excel.Visible = $true
とでもしとけば同じようにリアルタイムで処理中の動きが出てくるけど
事務員ならいらん仕事押し付けられるのがオチだから隠しとけ
この程度でドヤりたいならIT土方にでも転職しなよ

220 名前:デフォルトの名無しさん [2022/04/14(木) 20:27:06.96 ID:PvzsrQHs.net]
事務員がマクロやスクリプトで評価されても給料や時給が上がったりはしないだろ
都合よく使われるだけだよ
退屈な定常業務から抜け出したい動機なら良いのかも



221 名前:デフォルトの名無しさん [2022/04/14(木) 20:32:25.20 ID:PvzsrQHs.net]
×定常業務
○定型業務

222 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 20:56:37.25 ID:gLpPhM76.net]
>>214
レスから知性を感じない

223 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 21:57:43.29 ID:ICzBofFJ.net]
それがパワー・シェルの能力……
ボクがこのps1をダブルクリックした時点で"結果"はもう確定しているッ!!
マクロみたいなトロいもんじゃあないんです

224 名前:214 mailto:sage [2022/04/14(木) 22:27:15.00 ID:7HZEzgeQ.net]
やっぱり評判あんま芳しく無いからやめとくわ
回答してくれた皆さんありがとう

225 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 01:21:33.96 ID:BWy9qJpj.net]
>>220
ダブルクリックしたらISEが開いたんだが

226 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:51:23.89 ID:UtgXyNoL.net]
パワーシェル
破壊力 A
スピード B
射程距離 A
持続力 B
精密動作性 E
成長性 E

タイプ 自動操縦型
能力 人が嫌がる仕事をする

To Be Continued…

227 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 11:34:08.46 ID:0ObfuMR0.net]
パワーシェルのスピードは最下位ランクだろ
C#埋め込むなら別だが

228 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 11:53:27.02 ID:UtgXyNoL.net]
Cランクが人並みだからそれよりちょっと速いBランクが妥当

229 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 12:21:45 ID:wKBILFEa.net]
ウマナミナノネー

230 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 20:16:25.51 ID:k1oDZsjR.net]
windowsに標準に入っているってことだけはかなり優遇されてる



231 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 20:50:36 ID:6g+y36jy.net]
JScript.NETも入っているぞー

232 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 21:04:54.33 ID:k1oDZsjR.net]
プログラミングにおける認知度の低さは調べにくいし致命的

233 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 23:12:56 ID:41Kz9otF.net]
プログラミング言語の人気ランキング、順位変動は縮小傾向にある――RedMonkが調査
https://atmarkit.itmedia.co.jp/ait/articles/2204/13/news040.html

このランキングだとPowerShellは17位だぞ
Rustに勝ってる!

234 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 23:31:17.12 ID:3ZMsARLO.net]
PowerShellはランキングとか関係ないでしょ
PS5止まりで.NET4.8と心中する運命しかない、完全に袋小路の言語だよ

235 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 00:54:32.11 ID:Zcudz7ky.net]
Windowsと共に来たりWindowsと共に滅ぶ

236 名前:べし []
[ここ壊れてます]

237 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 12:02:03 ID:nVJ4wCm0.net]
>>232
おれがこれまで作ったソフトのほとんどが共に滅ぶな
かなりの割合の開発者が一緒に滅ぶんじゃないだろうか

238 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 12:30:34.16 ID:4vTOoh05.net]
>>231
それってよく聞くけどなんの問題があるの?
Powershellなんてそもそもbetter MS-DOSであり
better WSHでしかないんだからなんの問題もないでしょ
なんか過剰な期待をしてた人がいるの?

239 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 12:58:53.88 ID:NFUA2B25.net]
そもそもすでにオープンソースなんだし衰退することはあるだろうけど袋小路とか意味わからん

240 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 15:51:46.54 ID:9cJTCJfn.net]
Powershellはオープンソースとして元気にやってるよ
7.3でコミュニティ主体の機能改善になりそうなのはこの辺とか?
scriptblockの引数の数でオーバーロード解決できるようにしたいというもの
https://github.com/PowerShell/PowerShell/issues/16940



241 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 15:57:59.43 ID:9cJTCJfn.net]
あとはc言語とかrustのようなネイティブアプリからPowershellをホスト出来るようになっていたりする
https://github.com/awakecoding/pwsh-native-host

242 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 16:17:49.58 ID:GtnKHoFP.net]
元気もなにも開発してるのMSの社員だし、6以降は事実上Azure専用だよ

243 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 16:24:09 ID:nVJ4wCm0.net]
>>237
コードちら見したけど普通にPSプロセス呼んでプロセス間通信した方がよくないってなった

244 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 18:36:59.47 ID:9cJTCJfn.net]
>>239
新たにプロセスを立ち上げることでコマンドライン等が生成されるのを回避したいらしい

245 名前:デフォルトの名無しさん mailto:sage [2022/04/21(木) 00:00:35.45 ID:9X1k5UGW.net]
Powershell使えたら小5と付き合えますか?

246 名前:デフォルトの名無しさん mailto:sage [2022/04/21(木) 00:43:18.15 ID:KtzHzoax.net]
きみが小5か小6なら付き合えるかもしれないね!

247 名前:デフォルトの名無しさん mailto:sage [2022/04/21(木) 02:16:18 ID:/A3pqg11.net]
20年位前の30代前半の頃、小6と付き合ってた
powershellのお陰だと思うよたぶん

248 名前:デフォルトの名無しさん mailto:sage [2022/04/21(木) 03:15:46 ID:+OyHOy+D.net]
>>243
そのころpowershellは未だ無いだろ

おれの場合は30年位前に小6と付き合っていると噂されたが事実はそのようなことはなく
当時powershellがあれば付き合えたのは確実だったと思う

249 名前:デフォルトの名無しさん mailto:sage [2022/04/21(木) 15:56:01.36 ID:6s2N7jdI.net]
ワイも小学生低学年のころ、かけっこで1位だった
PowerShellのおかげだろうなあ

250 名前:デフォルトの名無しさん [2022/04/29(金) 11:16:42.60 ID:8kZAWy9o.net]
htmlの特定のID(例:<div id="XXX">)の中身を取得するにはどうすればいいでしょうか?
htmlのソース自体は$sourceに格納しています。



251 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 11:18:43.54 ID:RNDpr+pH.net]
文字コードを文字に変換するコマンドはありますでしょうか。

PS > change-moji -code SJIS 0x41
A
PS >

こういうコマンドです。

252 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 11:25:23.63 ID:X7f5QGPR.net]
[char]0x41

253 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 18:39:45.29 ID:RNDpr+pH.net]
>>248
ありがとうございます。

254 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 23:23:53.91 ID:X7f5QGPR.net]
>>246
$html = New-Object -ComObject "HTMLFile"
$html.IHTMLDocument2_write($source)
$html.getElementsByTagName("div") | ?{ $_.ID -like "特定のID" }
みたいにCOM使ってDOMで操作するか、正規表現で自力で解析するかしか思いつかない
powershellの定番の処理方法があるなら俺が聞きたい

255 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 02:08:01.29 ID:TTQ8Rhtz.net]
Ruby なら、Nokogiri, CSS Selector で、

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<div>あ</div>
<div id="xyz">い</div>
EOT

element = doc.at_css( '#xyz' )
puts element.content #=> い

256 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 02:45:41 ID:PTNoCeDZ.net]
getElementsByTagName 使うなら getElementById でいいんじゃない

257 名前:デフォルトの名無しさん [2022/04/30(土) 13:04:46.37 ID:9f5J4pIa.net]
Windows11は、結構Powershellが主役の位置に躍り出てきて、コマンドプロンプトの影が薄くなってる。

258 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 15:40:15.85 ID:6Xk9b1VA.net]
>>252
DOM操作にお詳しいなら補足してやって
俺は普段webページ解析なんてしないから適当に書いただけなので

259 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 23:17:02.29 ID:/67qPyiA.net]
xml形式ならselect-xmlというコマンドレットがあるんだけどね

260 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 07:07:03 ID:Rd1MW222.net]
Invoke-WebRequest でパースできるんだから Web からだけじゃなく html を格納した変数とかもソースにできればいいのにね



261 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 22:31:03.32 ID:bsI6eYYg.net]
COMのやつってIEのパーサなんだよね
くやしいけどこの辺を高度にやりたいならスクレイピングに定評のあるスクリプトでやった方がいいと思う

262 名前:デフォルトの名無しさん [2022/05/02(月) 03:17:08 ID:GCJ++Ydj.net]
>>250
ありがとうございます!
できました。

263 名前:デフォルトの名無しさん [2022/05/07(土) 22:39:06.01 ID:A4G1I3Hd.net]
$idContents = $html.getElementById($idName).innerHTML
でinnerHTMLを取得して、$idContentsに格納してある「src」の値(src="https://〜〜.jpg)はどうやって取得するのでしょうか?

264 名前:デフォルトの名無しさん mailto:sage [2022/05/07(土) 23:18:18.03 ID:aihC1Ap7.net]
innerHTMLは使わない
getAttribute("src")を使う

265 名前:デフォルトの名無しさん [2022/05/08(日) 11:03:41.82 ID:KUDJnBX7.net]
$idContents = $html.getElementById($idName).getAttribute("src")
で試したのですが、$idContentsの中身は何もない状態です。
試しに、$idContents = $html.getElementById($idName)だけで実行すると、
$idContentsの中身に
innerHTML : <IMG id=img src="https://〜〜jpg/keystamp=〜〜;></A>
はあります。

266 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 12:11:23.98 ID:q3KU1av3.net]
$idNameは'img'なのか?

267 名前:デフォルトの名無しさん [2022/05/08(日) 12:17:10.62 ID:KUDJnBX7.net]
$idNameは'img'ではなく、'kr3'になります。

268 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 12:25:56.66 ID:q3KU1av3.net]
だから取得したいのは、id=imgのIMGタグにあるsrc属性値じゃないのか?
$idNameを'img'にしろよ

269 名前:デフォルトの名無しさん [2022/05/08(日) 12:30:38.21 ID:vSiZdN2k.net]
ID:KUDJnBX7はバカなんだろうね

270 名前:デフォルトの名無しさん [2022/05/08(日) 12:47:35.64 ID:KUDJnBX7.net]
>>264
なるほどです。ありがとうございました。



271 名前:デフォルトの名無しさん [2022/05/09(月) 13:37:41.35 ID:Plp0Diry.net]
特定のフォルダの中にファイルが10個以上あったらタイムスタンプが一番古いファイルを削除する処理をPowerShellでどう書くかどなたか教えろください。。
スクリプトはタスクスケジューラで日次で走らせるイメージです。

272 名前:デフォルトの名無しさん mailto:sage [2022/05/09(月) 13:54:29.50 ID:7AqNU3U0.net]
一番古い一個だけを削除?それとも9個残して削除?

273 名前:デフォルトの名無しさん [2022/05/09(月) 14:11:58 ID:I+mG682T.net]
https://teratail.com/questions/23031

274 名前:デフォルトの名無しさん [2022/05/09(月) 16:57:08.12 ID:Plp0Diry.net]
>>268
一番古い一個だけを削除か、最新の9個を残してそれ以外を削除、の簡単な方でお願いしたいです。

275 名前:デフォルトの名無しさん mailto:sage [2022/05/09(月) 17:37:09.13 ID:7AqNU3U0.net]
>>270
269の30を9に変更するのが簡単だと思います
一番古い一個だけを消すのは Select-Object -Skip 9 | Select-Object -Last と二回もSelect-Object するのでとても難易度が高いです

276 名前:デフォルトの名無しさん mailto:sage [2022/05/09(月) 22:37:25.90 ID:lywqA2G/.net]
その質問バッチファイルスレで見たぞ
powershellの回答も貼ってある

277 名前:デフォルトの名無しさん mailto:sage [2022/05/10(火) 00:05:58.23 ID:aI8FHZ+3.net]
【.cmd】 バッチファイルスクリプト %14 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1597442426/757-764

漏れが763 に、Ruby で書いた。
これをPower Shell(PS)用に書き直せばよい

764には誰かが、PSで書いている

278 名前:デフォルトの名無しさん mailto:sage [2022/05/10(火) 01:07:57.29 ID:0qiVBd6f.net]
Multicsだったのか

279 名前:デフォルトの名無しさん mailto:sage [2022/05/10(火) 23:04:11 ID:gcxSlYEt.net]
フリーランスエンジニアになってからの年収推移を公開【現在年収1000万】

【実体験】仕事ができない新卒エンジニアでも月収70万フリーランスになれる理由

フリーランスエンジニアは年収900万円までは余裕!現役フリーランスエンジニアが徹底解説

フリーエンジニアの平均年収!未経験が年収1000万円を超える方法とは?

月額150万円以上も可能?ITフリーランスで高単価を獲得できる理由

在宅で年収1000万稼ぐフリーランスエンジニアの稼ぎ方【再現できる】

フリーランスのエンジニアやるなら45歳までに貯金5000万円作れないと死ぬ説

280 名前:デフォルトの名無しさん [2022/05/12(木) 17:12:26 ID:QXSbgRzq.net]
フォルダA内にファイルを1つずつ個別に圧縮した上でフォルダBにそれぞれ出力するPowerShellってどう書けば良きでしょうか。
以下スクリプトを書いてみましたが、これだと1つずつの圧縮はできないようで。。。

//フォルダA内のファイル名(拡張子なし)を取得
$src = Get-ChildItem -Name C:\folderA
$file = [System.IO.Path]::GetFileNameWithoutExtension("$src")
//ファイル圧縮とフォルダ移動
Compress-Archive -Path C:\folderA\*.* -DestinationPath C:\folderB\$file



281 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 18:00:29.84 ID:J4rOXsT5.net]
if やらforやらはBASICからやり直せ

282 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 18:08:53.97 ID:3e5cbbRq.net]
>>276
以下のサンプルみたいにForeach-objectとか使ってCompress-Archiveをファイル毎に実行すればいい

$SrcPath = "C:\folderA\*.*"
$DstPath = "C:\folderB\"

Get-ChildItem $SrcPath|
ForEach-Object {$DstFile = Join-Path $DstPath ($_.Name -replace '^(.+)\..+$','$1');$_}|
ForEach-Object {Compress-Archive -LiteralPath $_.FullName -DestinationPath $DstFile}

283 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 18:27:26.96 ID:ZUpAZ75N.net]
PowerShellで複数アイテムに同じ処理をする場合は、アイテムをリストアップした出力をパイプでForEach-Objectに渡して
ForEach-Object の中で、一個ずつ($_ という変数で参照できる)処理するのが定番と思うの。

get-childitem | foreach-object { write-output $_.fullname $_.name }

とりあえず、これをやってみると感じが分かると思うの。

284 名前:デフォルトの名無しさん [2022/05/12(木) 20:27:03 ID:QXSbgRzq.net]
>>278
ありがとうございます。
ただ、フォルダAにファイル2つ置いて試してみたのですが、いずれも圧縮・移動されませんでした。。。
再度ご確認いただけますでしょか??

285 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 22:15:13.98 ID:3P57KS6y.net]
何だその言い方
お前周りから嫌われてると思うぞ

286 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 23:17:43.20 ID:TAn4nFm7.net]
ここは労働の場じゃないからな
金のやり取りを伴ってる仕事とは違うのになんでお客様気分丸出しでいられるんだよ

287 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 23:26:53.76 ID:C4APGYH2.net]
誰かが持ち上げてくれるからじゃないの

288 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 23:56:30.38 ID:z9H8Cfuc.net]
>>280
Compress-Archive の使い方(パラメーターの指定方法)は分かってますか?
ファイル一個だけで試してみましたか?
それを調べてから
Get-ChildItem -path "C:\folderA" -File | ForEach-Object {
Compress-Archive -LiteralPath $_.FullName -DestinationPath ("C:\folderB\" + $_.Name + ".zip")
}
これの意味を考えてみてください。

289 名前:276 [2022/05/13(金) 00:26:01.86 ID:/s7ZcOSV.net]
解決しました!ありがとうございます!

290 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 03:41:22.40 ID:tKRLPzFb.net]
Ruby で、7-zip なら、
a フォルダ以下を再帰的に圧縮して、a.zip アーカイブにする

圧縮
7z a (アーカイブ名) (圧縮したいフォルダ)
7z a sample.zip aaa_folder

archive = "C:/Users/Owner/Documents/test/a.zip"
src_dir = "C:/Users/Owner/Documents/test/a"

# Program Files には半角空白があるので、"〜" で囲む
puts %x("C:/Program Files/7-Zip/7z.exe" a #{ archive } #{ src_dir }) # 圧縮



291 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 15:56:54.19 ID:LpRC3aDE.net]
gciとかの-forceパラメータって必須だろうに
デフォでオフなのがなんだかな

292 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 19:23:39.98 ID:Sc/EfT9l.net]
わざわざ隠し属性で隠してるのにディフォで表示しろとか頭おかしい

293 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 22:56:09.66 ID:uctr9r2r.net]
foreach中に最後の要素でないって判定どこかでできないですか
これができなくてforに書き直すはめになること何回もあるんですけど…
Foreach-Objectの場合もあったらお願いします

294 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 23:28:29.60 ID:dqCr6D+p.net]
原理的に無理だろ...

295 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 00:16:48.73 ID:5a0Y4MKv.net]
最後の要素でないってどういう目的で知りたいの?
本当に知りたいときもあるけど慣れてない人が書きがちなコードでもあるので気になった
カンマ区切りにするために最後ならカンマを付けない分岐を書くとかそういうの

296 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 00:17:48.74 ID:hb3+ANgg.net]
カウンタを用意してforeach対象のコンテナのlengthと都度比較する
これがモダンプログラミング()

297 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 00:27:25.14 ID:hb3+ANgg.net]
>>291
次の処理の前準備を現在の要素も使ってやってて最後だけ不要なとき
$i = 0
foreach ($item in $list) {
 # $itemの処理
 #
 if (++$i -lt $list.length) {
  # 前準備
 }
}
これなら普通にforのが見やすい

298 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 05:45:14.69 ID:NJOQ17Ts.net]
そういう最後だけ処理が違うってのは同じように処理しといて後から取り除く方が良くね?
二度手間で美しく無いように思えるけれどそれよりも
一々「最後かどうか」の判別に毎回if挿む方がバカらしく感じる

299 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 05:57:00.05 ID:0bRjAEIy.net]
前準備ってなにさ

300 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 06:07:55.24 ID:Wt4JCGPH.net]
>>291
> カンマ区切りにするために最後ならカンマを付けない分岐を書くとかそういうの
そう言うのは最初以外はカンマを頭に付けるようにしたほうがいいかと



301 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 08:23:02.72 ID:m7B1u9M5.net]
カンマ区切りしたいだけなら $list -join ',' で十分だな

302 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 09:47:46.73 ID:R8RMhLQi.net]
そう、joinで済むんだよね
慣れてない人はフラグや分岐で処理しがち
だからまずは具体的にどんな処理をしようとしてるのか聞きたかったんだ

303 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 10:32:45.51 ID:kcOGS6gO.net]
カンマの話は>>291が勝手に言ってるだけなのにjoinですむとかあたおかかよw

304 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 11:19:53.60 ID:0bRjAEIy.net]
いや分からないから聞いてるのよ

305 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 11:23:04.66 ID:etUAy71A.net]
ID変わってるけど291=298な
判定する必要のない例としてカンマ区切りを挙げて、だから具体的な例を教えてくれと書いたのに、カンマ区切りのうまいやり方をレクチャーしてくれる人が出てきたから説明しただけよ

306 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 12:41:49.36 ID:HwJxcgzF.net]
>>294
後から取り消せないこともあるだろう
例えばライトワンスメディアに書くとか

307 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 13:05:47 ID:Ws3jUYfQ.net]
具体的な処理が分からんとどうしようもないだろ
準備じゃなくて、準備のための情報の保存にすることならできるんじゃないか
#itemの準備
#itemの処理
#次のitemの準備のための設定
として実際の準備は次のループの先頭で行うようにする

308 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 13:37:46 ID:hb3+ANgg.net]
はあ…やっぱり論点ズラしで無いことを正当化する流れになったかw
無いなら無いでいいよ

309 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 13:39:58 ID:HwJxcgzF.net]
>>289
最初、最後、何番目などには別処理をする場合は、foreachは向いてないというか
もともと for があって、何番目かを気にせず全部の要素に同じ処理をすることが多いので、そういう場合用に foreach があると思ってます

310 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 14:20:17 ID:lDPvxjtF.net]
>>304
無いことを正当化してる書き込みは見当たらないけどどのレスのこと?



311 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 15:09:44.46 ID:Y4vxLItZ.net]
だからforeachでは原理的に無理
foreach($item in $items){ ... }
はざっくり
$e = $items.GetEnumerator();
while ($e.MoveNext()) {
$item = $e.Current;
...
}
みたいなコードになるから$e.MoveNext()を呼ぶまで最後かどうかはわからない
極端な話、乱数で最後にするかを決めるような実装されたらどうしようもない

312 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 16:18:41 ID:YaxyXfsS.net]
最後の要素って$list[-1]でいいんじゃないの?
if($item -ne $list[-1]){前処理}でいけると思うけど

313 名前:デフォルトの名無しさん [2022/05/14(土) 18:19:29.97 ID:POYL5zWo.net]
<section id="image-test">
<a href="https://www~BBB.jpg">
<img src = "https://www~AAA.jpg">
</a>
</section>
があって、AAAとBBBのURLをそれぞれ変数にかくのうしたいのですが、これであってます?
$AAA = $web_source_code.getElementById("image-test").getAttribute("src")
$BBB = $web_source_code.getElementById("image-test").getAttribute("href")

314 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 18:55:56.30 ID:QtW6yb+i.net]
合ってないよ
section要素にはsrcもhrefもないんだから取れない
子や孫の要素からイイ感じで取ってきてくれるような期待をしてるんだろうけど、内側がどんな構造でいくつのimg要素とかがあるのかわかんないんだから、そんなのでイイ感じに取られる曖昧な挙動は逆に困る
要素をid指定で取ったあと.ChildNodesで自分で辿ったりする必要がある
querySelectorが使えれば楽なんだけどね
何度も似たような質問を繰り返すよりもまずHTML DOMの基礎を多少でも勉強しないとずっとハマるだけだし応用もできないよ

315 名前:デフォルトの名無しさん [2022/05/14(土) 19:43:46.46 ID:POYL5zWo.net]
ありがとうございます。HTML DOMを勉強してみます。

316 名前:デフォルトの名無しさん [2022/05/17(火) 11:55:50.17 ID:w1KKtOUX.net]
PowerShellである処理について、変数の値だけ変えてそれぞれに同じ処理を実行したい場合、以下のように変数の値の数だけ実処理を複数段書けば実行できました。
ただ、これだとスマートではないと思いますので、ループ処理?のような形で最初に全変数を定義する等して、実際の処理自体は1か所だけにしたいのですが、どなたか書き方教えろください。。
------------
$変数a1 = 1-a
$変数b1 = 1-

317 名前:b

~~処理~~
------------
$変数a2 = 2-a
$変数b2 = 2-b

~~処理~~
------------
$変数a3 = 3-a
$変数b3 = 3-b

~~処理~~
------------
[]
[ここ壊れてます]

318 名前:デフォルトの名無しさん mailto:sage [2022/05/17(火) 15:36:54.01 ID:VMMgADOG.net]
コンテナでググれ

319 名前:デフォルトの名無しさん [2022/05/17(火) 19:17:50 ID:ZA1GChKV.net]
ググれとか言う奴はスレから出ていけ

320 名前:デフォルトの名無しさん mailto:sage [2022/05/17(火) 20:03:10 ID:xbjGOtM1.net]
配列でループ処理するといいぞなもし
https://docs.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/everything-about-arrays?view=powershell-7.2



321 名前:デフォルトの名無しさん mailto:sage [2022/05/18(水) 03:24:17.13 ID:CLYU5EG2.net]
こんな初歩の初心者にpowershellの配列は難しい気がする
別の規格がちゃんとしてる言語を1つでも履修して出直してもらいたいな
プロの俺でもフィルタ関連とか関数から返した場合とかでしょっちゅう間違えるんで…

322 名前:デフォルトの名無しさん mailto:sage [2022/05/18(水) 09:11:28.21 ID:b9KxG2vQ.net]
ベテランでも諳んじて一発正解するのは難しいかったりするけど、シェルなんだから試行錯誤で構造化プログラミングの感覚を摑めばいいと思うよ
固定長配列でハコとして使う分には落とし穴もそうないのでは
パイプは使うかもしれないし使わないかもしれない
せっかくの気付きなんだから試してみるチャンス

323 名前:デフォルトの名無しさん mailto:sage [2022/05/18(水) 10:26:21.69 ID:Q05gEBgM.net]
まずforeach文で作ってみればいい、そんな難しくはない

foreach-objectとかのコマンドレットにしたい、てのは次の段階にしてみよう

324 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 01:52:14.72 ID:r92G1leA.net]
.NETのジェネリックなコレクションを使う癖を付ければpsの変な仕様に振り回されないで済むかも

325 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 10:22:09.77 ID:hhrIPFsF.net]
そもそも配列やコレクションをループで回したりするのはPowerShell的な発想ではない
積極的にパイプを使うんだよ
それに馴染めないならもうインラインでC#書いたほうがいい

326 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 11:54:46.82 ID:AWcD8iuw.net]
初学者がパイプの意味を理解するのはハードル高いと思う
コードが長くてもいいから自分のやりたいことをロジックにして組み立てる
それも出来ないうちからパイプでかくなんてさらに混乱するだけ

コマンドレットを見てすぐ処理を想像できるような慣れてる人ならいいと思うけどね

327 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 12:11:52.45 ID:vDWzHeJO.net]
>>320
ドトネトのコレクションはそのままパイプに突っ込めるでしょ
powershellのビルトイン配列(System.Array)をMS公開文書通りに使ってるとハマりやすいという話

328 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 12:19:41.05 ID:HGJ493WX.net]
初心者ですでにスクリプトも書いていてリファクタの相談なのに、パイプ使わないならC#でって…
原理主義なのか話を聞かない人なのか柔軟性が動脈硬化起こしてる人なのか

329 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 14:36:52.46 ID:mIjloFOo.net]
パイプに拒絶反応してる奴らがわらわらとw

330 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 15:37:07.78 ID:i7u7qPJB.net]
PowerShellのパイプはクセあるからなあ



331 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 15:57:51.90 ID:K1O9Nfx2.net]
だが、そこが良い

332 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 16:21:27.92 ID:vDWzHeJO.net]
ドトネトのコレクションはPS的には未知の参照型オブジェクトだから
PSのスコープの影響も受けないし、
配列みたいに勝手に構造を壊されたりもしないから積極的に使う事をお勧めしたい

333 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 17:15:25.08 ID:z1zzxM54.net]
>>324
いや俺はpowershellのパイプは好きだぞ
反応頭悪すぎない?

334 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 17:16:58.08 ID:z1zzxM54.net]
ID変わったけど323=328な
好きなものを無条件に全肯定しないと則敵認定ってまさに信者やん

335 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 15:12:12.74 ID:rcI504Fo.net]
-pv/-ovで黒魔術できるのがpwshパイプの真骨頂、汚いけど…
パイプは一般にバッファ単位の目詰まりが難だけど、これは-obで自由に調節できる
-pv/-ov/-ovは共通パラメータだからいつでも使えるしpitfallsは大体これで解決できるからパイプ活用したいなら、最重要で覚えるべし

336 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 20:50:08.65 ID:8qofalUL.net]
>>330
パイプで最重要で覚える事はさあ、パイプはめっちゃコストコが掛かる書き方だな!って理解することじゃないかなあ
1行ずつ読んでパイプに渡してたら日が暮れるし…ずっとパイプの中で暮らさないといけない程変な言語でもない…
あっこの処理、パイプで連携したら効率いいかも…なんてあんまないのでな
これがパイプの真骨頂!って例を見せてくれたら、まあ考えを改めてもいいが…君の発言は新しいもの好きの勇み足発言にしか見えなくて痛々しい…

337 名前:デフォルトの名無しさん [2022/05/20(金) 20:56:56.50 ID:zxJBX/+G.net]
PowetShell大好きパイプ大好き
可能な限りパイプを使うように努めてるよ

338 名前:デフォルトの名無しさん [2022/05/20(金) 20:58:03.25 ID:zxJBX/+G.net]
ちょっと間違えちゃった

339 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 21:00:45.78 ID:slL0jKxc.net]
アホらし
C#と同じように書きたいならAdd-TypeでC#書けばいいでしょ

340 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 21:52:53.66 ID:XK9Y5vcV.net]
俺はバイブの方が好き♡



341 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 04:11:37 ID:xI11xSxR.net]
結局どんな言語や書き方であろうと慣れでしか無い
読み辛いとか言う奴の大半が適応力やワーキングメモリの低い低能

342 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 14:10:16.59 ID:KYl341LT.net]
2つ以上のcsvをできる限り簡単に結合する方法ありますでしょうか。

a.csv
id,name,gender
以下データ

b.csv
address,phone
以下データ

$firstcsv = a.csv
$secondcsv. = b.csv
$ketugou = connect-csv -delimiter ',' firstcsv[0] + firstcsv[1] + $secondcsv[0] + $secondcsv[1] + firstcsv[2]

$ketugou
id,name,address,phone,gender
以下データ

という感じであれば最高です。

343 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 15:56:20.58 ID:2VGP7oaH.net]
bash -c "paste -d , a.csv b.csv"

344 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 18:24:56.01 ID:maoDzYC5.net]
カラムの順序指定もしたいみたいだから、cutとかでもう1処理いるね。

PowerShellだと
(>>338) | ConvertFrom-Csv | select id,name,address,phone,gender | ConvertTo-Csv
ただしConvertFrom-Csv・ConvertTo-Csvは
元データを正確に再現する必要がある場合には難あり。
(Trim()が掛かるとかダブルクォーテーションで括られるとか。)

345 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 18:27:45.99 ID:maoDzYC5.net]
paste使えない環境とか、Trim()掛かると困るとか、PowerShellだけで実装したい場合
function Merge-Csv {
  Param (
    [Object[]] $InputObject,
    [string[]] $Header,
    [char] $Delimiter = ','
  )
  $tbl = [Data.DataTable]::new()
  # 1行目をカラム名として使用
  foreach ($csv in $InputObject) {
    $tbl.Columns.AddRange(($csv[0].Split($Delimiter)))
  }
  # 各CSVの同じ行同士をDataRowにする。
  for ($lineIdx = 0; $lineIdx -lt $InputObject[0].Length; $lineIdx++) {
    $rowData = @(
      foreach ($csv in $InputObject) {
        $csv[$lineIdx].Split($Delimiter)
      }
    )
    $null= $tbl.

346 名前:Rows.Add($rowData)
  }
  # カラム順序を指定順序に変更する。
  for ($order = 0; $order -lt $Header.Length; $order++) {
    $tbl.Columns[$Header[$order]].SetOrdinal($order)
  }
  # CSV形式で出力
  foreach ($row in $tbl.Rows) {
    $row.ItemArray -join $Delimiter
  }
}
[]
[ここ壊れてます]

347 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 18:28:27.86 ID:maoDzYC5.net]
注意:
・CSVは1行1要素の配列で、1行目にヘッダがあり、データに区切り文字を含んでいない想定。
・各CSVのヘッダに重複はない想定。
・1つ目のCSVの行数を基準にしている。
・エラーチェックしてないので適宜追加すること。

例:
$csv1 = @(
@"
id,name,gender
csv1.r1.id,csv1.r1.name,csv1.r1.genger
csv1.r2.id,csv1.r2.name,csv1.r2.genger
csv1.r3.id,csv1.r3.name,csv1.r3.genger
"@ -split '\r?\n'
)
$csv2 = @(
@"
address,phone
csv2.r1.address,csv2.r1.phone
csv2.r2.address,csv2.r2.phone
csv2.r3.address,csv2.r3.phone
"@ -split '\r?\n'
)

Merge-Csv $csv1, $csv2 -Header id, name, address, phone, gender | ConvertFrom-Csv | ft -a

id     name     address     phone     gender
--     ----     -------     -----     ------
csv1.r1.id csv1.r1.name csv2.r1.address csv2.r1.phone csv1.r1.genger
csv1.r2.id csv1.r2.name csv2.r2.address csv2.r2.phone csv1.r2.genger
csv1.r3.id csv1.r3.name csv2.r3.address csv2.r3.phone csv1.r3.genger

348 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 19:20:10.32 ID:KYl341LT.net]
>>338-340
ありがとうございます!
書き起こしてくれるなんて、感謝のしようがありません・・。
少し読み解くのに時間がかかりそうですが、半日考えても良い手が思いつかなかったので
しっかり読んで身に着けたいと思います。

ありがとうございました。

349 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 23:48:36.53 ID:MBI5r2Hn.net]
割とちゃんとした風なのが出てきてよかったな
>>337の結合は別にCSVとして処理する必要ねーじゃんと思ってたわ

350 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 22:45:36.14 ID:5eMIb3Vr.net]
どこでみんな基礎を習得してるか気になる
都度ネット検索して見よう見まねでやってるけどちゃんと体型立てて学んだ方が良い気が最近してる

上のcsv解決の発想だって全然出てこないもの



351 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:00:34.01 ID:1p0oXEXT.net]
PowerShellから入る人なんていないでしょ
初学者がPowerShellでまともなプログラミングを学ぶのは難しいからC#でもやった方がいいよ

352 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:03:23.68 ID:6thXMpkz.net]
薄々そうじゃないかと思ってた
やっぱC#行くべきなのね

353 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:08:03.98 ID:fHLpS2ag.net]
>>345
C#もJavaも含めてほぼプログラム言語扱えない非プログラマーだけどPowershellは普通に学習出来たよ

354 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:14:06.95 ID:5eMIb3Vr.net]
会社では追加基本インストール禁止だから使える自動化ツールがVBA、WSH、CMD、Powershell くらいしか無いのです
VBA VBSは一通り使えるけどやっぱモダンなの使いたいって事でpowershellを使いこなしたいんですよ

っていうパターンは自分以外にもきっといるんだろうなって思って

355 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:14:46.76 ID:0w3w2Q9u.net]
>>347
どうやって学習した?

356 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:16:19.58 ID:bPn6KqG1.net]
どの言語を学んでも解決ロジックなんかは数をこなして他人のソースサンプルを見るとかしていかないと見につかない
C#とか言語仕様は入門書が充実してるところが違うだけで読んだからといって
問題解決力が身につくわけではないことは心得ておかないとね
教科書を全部読んだからといって入試問題が解けるか?ってこと

357 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:16:45.35 ID:0w3w2Q9u.net]
>>348
>会社では追加基本インストール禁止
そうさせましょう、そのために弊社の何とかを使いましょう、と営業してくるウザい連中がいるからね

358 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:29:45.91 ID:ArE2 ]
[ここ壊れてます]

359 名前:ZMbw.net mailto: >>348
プライベートのPCでやればいい
プロでプログラミングやってる人間は学生時代やプライベートの時間など多かれ少なかれ仕事以外の時間を捧げてるんだよ
基礎から学ぶというのはそういう連中と同じ土俵に立つってことだ
[]
[ここ壊れてます]

360 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:38:38.76 ID:fHLpS2ag.net]
>>349
MS365関連の処理やらcmdスクリプトの代替やらログ処理やらを目的に応じてパイプ処理やら勉強してたらどうにかなった
元々プログラム言語としての習得したんじゃないから特殊かも



361 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:38:47.91 ID:5eMIb3Vr.net]
方法論を聞いてるのに精神論を語る奴っているよね

362 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:49:53.74 ID:+PNdSWJO.net]
普通にpwsh使ってコマンドライン作業してれば覚える
スクリプトもその延長線上

363 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:54:36.28 ID:9dnvWkql.net]
いうほど精神論説いてるやついる?
〇〇論を聞いてるのに〇〇論を、そういう気の利いたフレーズを言ってみたい気持ちが先行してるように見える

364 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:57:11.82 ID:NR5IHQxQ.net]
本腰入れて文法とかほじくりたいならまずはpowershellexplainedってブログオススメ

365 名前:デフォルトの名無しさん mailto:sage [2022/05/31(火) 00:32:11.60 ID:eW10AB/z.net]
やりたいことが先にあって、それを如何に良く実現するかをあれやこれや試行錯誤していくのがいいよ
漠然と習得したいとか体系的にとかやってると漠然としか身につかない
あと人のものをよく見ること
こういうやり方があったのか、ってのを一つでも多く体験するのがいい

366 名前:デフォルトの名無しさん mailto:sage [2022/05/31(火) 00:43:09.74 ID:z7NqqS3T.net]
コマンドラインで補完叩きながら必要そうなパラメータやメンバ探してれば大体望みのものが見つかるはず
フラッシュ暗記的にどこに使えそうなものがあったか思い出せればヘルプも引ける

俺がワンライナー以上の事をするときの具体的な手順
必要そうな関数を一つ定義してはパラメータ与えて何回かチェック、動けばfunction:から追記リダイレクトして最後にvimで手直ししてmainを添えて取り敢えず動くものを完成
暇なときに気が向いたら体裁整えたり関数まとめたり構造化

副産物として汎用性高そうなの出来たら$profileにも追記

こういうlisp的なサイクル回して使っていくのがいいと思う

367 名前:デフォルトの名無しさん mailto:sage [2022/05/31(火) 00:43:37.67 ID:BZqNx7Tc.net]
>>357
ありがとうございます
髭のオッサンは気になりますがチラ見した程度だと復習がてら良さそうです

368 名前:デフォルトの名無しさん mailto:sage [2022/05/31(火) 23:10:25.48 ID:OuANH9gG.net]
このコマンドがうまく動きません。
1行で書いて、うまく動かす方法を教えてください
powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process remove-item -ArgumentList C:\Users\Public\Desktop\test -Verb runas"
Start-Process : このコマンドは、次のエラーのため実行できません: 指定されたファイルが見つかりません。
とエラーが出て正常に実行できません。

powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process cmd -Verb runas"
powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process notepad -ArgumentList C:\Windows\System32\drivers\etc\hosts -Verb runas"
このコマンドはうまく動くので、同じ感じで行けるのかと思ったのですが、上のremove-itemコマンドの場合がうまくいきません。

369 名前:デフォルトの名無しさん mailto:sage [2022/06/01(水) 04:00:12.01 ID:U+A7iBPz.net]
remove-item.***なんて言う実行ファイルは存在しないから無理なのは当たり前
どうしてもstart-processに繋げないといけないの?

370 名前:361 mailto:sage [2022/06/01(水) 05:21:30.48 ID:lJWk1HAY.net]
>>362
レスありがとうございます。

> どうしてもstart-processに繋げないといけないの?
というわけではありません。

1行で管理者権限でRemove-Item C:\Users\Public\Desktop\testを実行する
ということが出来れば、どんな方法であっても構いません。

①powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process powershell -Verb runas"
②Powershellが管理者:Windows Powershellとして起動する。
③remove-item C:\Users\Public\Desktop\test を実行する

という①と③を1行でまとめる方法です。



371 名前:デフォルトの名無しさん mailto:sage [2022/06/01(水) 11:08:03.91 ID:yxFCK4Jy.net]
>>363
自分もこの問題は解決出来なかった
UAC有効な環境で管理者権限使うならStart-processか管理者権限実行なのも一緒
しかしStart-processはコマンドレット実行出来ない模様

ワークアラウンドで別のcmdスクリプト作ってそいつをStart-processで実行させるという非スマートな力業でどうにかするしかなかった

372 名前:デフォルトの名無しさん mailto:sage [2022/06/01(水) 11:27:22.75 ID:HV/k13ls.net]
powershell -NoProfile -ExecutionPolicy unrestricted -command "Start-Process -Verb runas -FilePath powershell.exe -ArgumentList ‘-command remove-item C:\Users\Public\Desktop\test'"
試してないけどこんな感じで出来ん?
不備とかエスケープ処理が必要だったりとかあるかも
powershellから昇格させたpowershell呼んでそこでdel

373 名前:デフォルトの名無しさん mailto:sage [2022/06/02(木) 00:03:43.97 ID:B9Goniqn.net]
>>365
出来ました

374 名前:361 mailto:sage [2022/06/02(木) 00:05:13.65 ID:B9Goniqn.net]
>>365
出来ました!ありがとうございます!

375 名前:デフォルトの名無しさん [2022/06/04(土) 17:47:37 ID:TSmSPUgr.net]
定義した変数のメモリ開放は$nullの代入でいいのでしょうか?
メモリリソースが足りませんとエラーがでるので。

376 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 18:56:11.76 ID:IRaDT1CY.net]
Remove-Variable
まあ設計を見直した方がいいと思うけど

377 名前:デフォルトの名無しさん [2022/06/04(土) 20:19:25 ID:TSmSPUgr.net]
ありがとうございます!

378 名前:デフォルトの名無しさん [2022/06/18(土) 20:04:49.41 ID:2rZBula1.net]
フォルダ内にあるすべての画像ファイルにおいて、その画像のWidthが1280のものだけを削除するスクリプトを作成中ですが、ファイルはどうやって削除するのでしょうか?

Get-ChildItem "D:\Download\test" | Sort Name | % {
$img = [System.Drawing.Image]::FromFile($_.fullname)
if ($img.Width -eq 1280) {
Remove-Item $_
}
}
だと
Remove-Item : Cannot find path 'D:\Download\test_01.jpg' because it does not exist.
とエラーがでるのですが、パスの設定方法がいまいちわかりません。

379 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 20:44:46.51 ID:opzT6/bZ.net]
Remove-Item $_.FullName

$_ | Remove-Item
かな

380 名前:デフォルトの名無しさん [2022/06/18(土) 20:51:53.83 ID:2rZBula1.net]
ありがとうございます。やってみます!



381 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 00:03:25.24 ID:d/5y1flf.net]
VSCode でも、コマンドプロンプト・PowerShell を使うと、
ファイル・フォルダ操作のアクセス権限が無いから、
右下のトーストに、そういうエラー通知が来る

そこで、アプリに対して、操作を許可する

それと、Windows でもファイルパス区切りに、/ を使える。
C:/Users/Owner/Documents/a.txt

382 名前:デフォルトの名無しさん [2022/06/19(日) 18:24:35.04 ID:xfiYTNc0.net]
今までこれをbatで起動させていました!
-------
sc stop DoSvc

@echo off

echo.
echo ====================
echo Enable_TaskScheduler
echo ====================
echo.

rem ----- win10_ServicePreparation_DoSvc -----
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DoSvc" /v "Start" /t REG_DWORD /d "4" /f

exit
-------
特定サービスの作動強制停止およびスタートアップ強制置換です
しかしこれでは管理者権限を付与する場合、人間がコンテキストで管理者実行をその都度選んでやらねばならず、
反映の有無も再起動が必要だったり再起動なしで切り替わったり不安定です

PowerShellのps1はそれら管理者権限付与の自動化や再起動不要が可能と聞きました
ネットにはバッチのような記述解説サイトが乏しいので、コードの代替案、またはおすすめの参考書等があれば教えてください〜

383 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 19:51:13.64 ID:k543CSlC.net]
mevius.5ch.net/test/read.cgi/tech/1597442426/857

384 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 22:46:16.09 ID:WW6NzJIS.net]
サービスを削除でぐぐれ

385 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 08:42:33.76 ID:sIvuqcVm.net]
レジストリを直接編集するな

Windows 秘話: なぞのキー
https://docs.microsoft.com/ja-jp/previous-versions/technet-magazine/dn456530(v=msdn.10)
> 変更または操作されることがまったく意図されていない設定が存在します。そのような設定を見つけたときには、とにかくそっとしておいてください。

386 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 08:48:02.21 ID:3bt1t/j5.net]
それはメーカーが分解すんなって言うのと同等の話

387 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 10:58:01.21 ID:4+IWkf9p.net]
目的がテレメトリ関連の通信の遮断だしサービス削除しかないと思うけどな

388 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 12:48:20.89 ID:LhK9JJfo.net]
Stop-ServiceやSet-Serviceあたり使えばいいんじゃね

389 名前:デフォルトの名無しさん [2022/06/20(月) 12:50:56.18 ID:E6UoKUAB.net]
ハード的家電において、メーカーの分解拒否声明は「簡単に直せる部分を民間でやられたら業績下がるやんけ」理論が殆どと、感電・火災防止が少しって感じ
同じくソフトにおいても、メーカーの調整拒否声明は「テレメトリを拒否されると情報転売が減って業績下がるやんけ」理論がほぼ全てで、僅かに不測の事態とその対応への危惧(面倒≒ユーザー側の心配はしていない)が含まれる感じ

大体、テレメトリの最終的な購入先は巡り巡ってそれらを利用したがっているガチ支那チョン露などの反社集団でしょうに
だから米国大手の支那癒着や制裁緩和の声が消えないわけで
例え吸われても、利用先が日本国内または米国のみであればそんなに問題視しませんわ

逆にDoSvcなんかは設定での表面上なOFFやグルポをしようと内部でMB単位のダウンロードをしっかりしていますし、
DoSvc動作用の基礎データか何かと期待したいものの時間経過で増大します→つまり120%ガチテレメトリなんですよ
そしてスタートアップを無効にしなければOS設定にかかわらず強制実行+勝手に通信+削除しようと復活増量し続ける
無効にしたスタートアップさえ手動(トリガー)へ勝手に戻される→高頻度自主改変がなければOSから「DoSvcの無い空間」を作り出せない

こんなソフトの癌とも言えるものを放置出来る方々の無神経さは平和の極みですな
安いからっつって支那産PCを大量購入し自衛隊へ配布した馬鹿で愚かな国賊官僚と同レベルに思う

390 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 14:23:54.66 ID:XSN9SiQv.net]
>>375>>382 でいいのかな
テレメトリを目の敵にするのは勝手だけど
だからってレジストリを直接編集していい事にはならないからね



391 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 14:47:00.73 ID:YswTafv8.net]
会社の物とかでなければレジストリくらい好きに弄ったらいいだろ
それで何かあっても自己責任ってだけで

392 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 14:58:58.89 ID:h1SesB6c.net]
レジストリ編集では期待通りにいかないことを体験的に踏まえた上で上手くいく手順としてPSでやりたいって流れの質問なのにレジストリ編集するな!ってクソバイスやん
自己責任を理解せずに杓子定規で正しさを主張し続ける人にはアレな傾向を感じざるを得ない

393 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 15:20:32.49 ID:4G+nodK/.net]
batはレジストリの値を弄ってるのみにしか見えん
この後にPCを再起動でもさせるのか?

394 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 15:32:06.62 ID:JJsUxIz5.net]
だいぶ前から色んなところで聞いているけど
タスクマネージャーで権限がないから書き込めないとか
黒窓が出るのが嫌だとか
原因を追求する気もないのに聞いて回るクソヤロウだよ

395 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 15:46:09.48 ID:3ZXlTK7A.net]
>>378
レジストリの変更はともかく
この記事の「おしゃれなレストランにいると考えてみてください」
という謎の例えはどうかと思うw

396 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 17:32:51.93 ID:6RdOG7wm.net]
>>386
弄ってるよ
その続き読んだ?
引き続きレジストリ弄りたがってるとしか読めないならアスペかもな

397 名前:デフォルトの名無しさん [2022/06/20(月) 18:28:34.00 ID:E6UoKUAB.net]
バッチスレは論外ですな
batやスケジューラの挙動に関して最初から細かく説明していたのですが、どう考えてもガチ支那の五毛っぽいDQNが私の最後のレスを部分的にチラ見しただけで、答えている感じでしたね^^;
冷やかしがオナニーしている状態で、バッチスレの名が泣いていました

原因も提示し、それら打開策などの例や実施結果を挙げつつも、堂々巡りの、それもむっちゃ浅い既出内容をドヤ顔で書き込まれる感じ
バッチスレで唯一のプログラミングスレらしい収穫は「俺だったら.ps1で作る」という言葉、ただひとつのみでしたわorz

あとはなかなかまとまった時間が作れず、もう少ししたらps1版のサービス削除などもネット検索・吟味できそうです

最も盛んでしたwinXP時代にソフトを制作していた年代は今50前後?で開発・更新停止などが相次いでいますよね
そんで2022年現在、高校辺りでプログラミングを必修とする云々が出ている
間が20年くらいスッカラカンなのは日本の経済力低迷を表しているようで大変残念です
そりゃ今の官僚層が自衛隊へ支那産PC送ったりするはずですわ、そんなのが国を回しているんだから^^;

398 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 20:16:43.25 ID:+SBlN13D.net]
直接編集しちゃいけないなんてルールはないから好きにしな
無知が無学のまま弄った責任を負わされることを防ぐためのおまじないでしかないよ

399 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 20:23:12.95 ID:ItZjQb2L.net]
行き着いた答えがレジストリ書き換えの定期実行だから頭悪いにも程がある

400 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 21:31:17.15 ID:yjTGWQu/.net]
俺はちゃんとバッチスレにサービスの設定を変えるコマンドの事書いたぞ
コマンドのドキュメントのリンク付きで

このスレでも他の人が設定変更用のコマンドレットのこと書いてるし
何をどう見てるのやら



401 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 22:24:09.27 ID:4G+nodK/.net]
レジストリなんて不整合があれば書き戻されることもあるのでレジストリ弄るだけで解決しない

402 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 00:22:01.55 ID:KK61fTqr.net]
てかバッチスレが余りにも低水準かつ五毛全開だったからこそ呆れ、唯一のまともなアドバイスに従ってパワシェへ切り替えようとしているのにさ

わざわざ別スレのリンク貼ったりパワシェスレへ出張(笑)してきたり、ほんま意味不明ですわw

ま、ストーカー云々の類いはリアルもネットも気色悪いですしバッチスレ関係者から得られるものが無いのも経験済み
似た主題なので両方のスレを高頻度で訪問しているのかな、そう思うことにして特定のレスは流し聞きしときますよwww

403 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 00:36:09.32 ID:xELEw2uC.net]
Linux なら、systemd とか

Windows の仕組みは知らないけど、
レジストリはその結果を収めたデータベースだから、
結果をいじっても問題解決にはならない

設定は各アプリ製作者が作っているものだから、
製作者以外の人間にできる事は、アプリをアンインストールする事だけ

設定にも様々な依存関係があるから、
アプリの内容も分からない人が、ある設定を変えても、どう作用するか分からない

例えば、アプリのメモリが解放されなくなって、
他のアプリも動かなくなるかも

それに設定を変えても、再起動しないと有効にならないかも知れないし、
再起動すると、設定が元に戻るかも知れない

OS 起動時の処理に、設定読み込みを登録しているかも知れない

404 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 09:15:38.14 ID:lQ/zAxwG.net]
ウダウダと一体何の話をしてるんだ
いいからStop-ServiceとSet-Service使えよ
ただ老人がじゃれ合いたいだけなのか?

405 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 11:49:55.72 ID:+f2eC/vV.net]
こんな辺境にまでやべーやつ | Out-Null

406 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 20:51:18.50 ID:At4JlVSH.net]
>>375
管理者やSYSTEMじゃなくてTrustedInstallerとして実行しても駄目か?
もちろんレジストリをいじるんじゃんなくてSet-Serviceを使うんだぞ
もう見てないかもしれんが

407 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 22:28:41.71 ID:OsaOMnRZ.net]
わざわざ召喚しようとする馬鹿発見伝

408 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 13:29:04.40 ID:VuoDyj+3.net]
最近foreach文のコレクションの要素を受け取る変数の名前をつけるのが
めんどくさくって
for文のカウンター変数の名前に i を使うのはよくありますが
foreachにも同じような定石ってありますか?

409 名前:デフォルトの名無しさん [2022/06/24(金) 13:47:20.90 ID:4Qrsm7mD.net]
aオブジェクト名

410 名前:デフォルトの名無しさん [2022/06/24(金) 14:25:06.98 ID:K2we1Lar.net]
e



411 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 20:56:03.77 ID:EMaN3eAt.net]
Item

412 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 23:55:58.07 ID:/S8ogjuv.net]
item, element

413 名前:デフォルトの名無しさん [2022/06/26(日) 07:43:19.31 ID:G39l7ngg.net]
例えば$url = "https://yyyy.xxx/aaa/bbbb/2/"があり、最後の[2/]をカウンタを使ってアクセスしたいとおもいます。
その際、$nextUrl = ($url -replace ".{2}$") + $cnt + "`\"
で行けると思ったのですが、何か間違えていますでしょうか?

414 名前:デフォルトの名無しさん [2022/06/26(日) 08:16:14.03 ID:JGEtGMnz.net]
-replaceの使い方を間違えてる

415 名前:デフォルトの名無しさん [2022/06/26(日) 11:32:39.54 ID:G39l7ngg.net]
replaceですか。ありがとうございます

416 名前:デフォルトの名無しさん [2022/06/29(水) 00:00:51.24 ID:x2p/lm6W.net]
arrayListの使い方がわからない。

----------------------------
$arrayReturn = new-object system.collections.arrayList
$col = new-object PSObject | select "A", "B", "C"

foreach ($i in 1..3) {
$col."A" = $i
$col."B" = $i + 1
$col."C" = $i + 2
$nul = $arrayReturn.add($col)
}

$arrayReturn
----------------------------

上記のコードを実行すると以下のようになってしまう。
A B C
- - -
3 4 5
3 4 5
3 4 5

本当は以下のようにしたい
A B C
- - -
1 2 3
2 3 4
3 4 5

なぜうまくいかないのか謎。

417 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 00:51:19.50 ID:cjQj ]
[ここ壊れてます]

418 名前:2yfD.net mailto: $col のnew-object生成をforeach{}内に移動してみては []
[ここ壊れてます]

419 名前:デフォルトの名無しさん [2022/06/29(水) 07:19:16.62 ID:x2p/lm6W.net]
>>410
うまくいった
はあああああああああああああ!?
なんで!? なんでこれでうまくいくんだ!?

ループの中に入れたら毎回$colの中身が破壊されると思うんですけど????

420 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 08:20:00 ID:8GN1KOCk.net]
PSObjectは参照型
ArrayListに追加されるのはオブジェクトそのものじゃなくてオブジェクトの参照だけ



421 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 09:10:01.99 ID:ofsaM31D.net]
>>412
完全に理解しました。thx

422 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 14:16:08.11 ID:SZ5j8L6g.net]
PSReadLine 2.2.6 enables Predictive Intellisense by default
https://devblogs.microsoft.com/powershell/psreadline-2-2-6-enables-predictive-intellisense-by-default/
入力しようとしているコマンドを予測 〜PowerShellで「Predictive IntelliSense」が既定有効に
履歴やプラグインなどを参考に推測できるIntelliSense機能
https://forest.watch.impress.co.jp/docs/news/1420812.html

423 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 21:06:08.62 ID:h+5hcb7e.net]
PSCustomObjectは積極的に使っていいものかどうか判断できない
結局C#でクラスや構造体宣言して使った方がいい気がするし
Powershellで作成したPSCustomObjectを、同ソースに埋め込んだC#コード側から参照する方法ってある?

424 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 21:46:04.47 ID:4kwBO65f.net]
>>415
dynamic

425 名前:デフォルトの名無しさん mailto:sage [2022/06/30(木) 01:46:52.84 ID:LVSNczoT.net]
>>415
New-Object PSCustomObject や [PSCustomObject]@{} は
Win10 の v5.1 なら Add-Type の C# でなくとも class があるからスクリプトでの使用頻度は下がった。
Win7 の v2 では function NewABC {} みたいなコンストラクタ的な関数用意して積極的に使ってた。

Win10 の今でも ConvertTo-Csv へ渡す前に日時や数値を書式指定して文字列化するために使ってる。
CSV に日本語カラム名が欲しい時に日本語プロパティ名の class 用意するのはなんか気が引けるけど
[PSCustomObject]@{} や Select-Object での誰が見ても短命なオブジェクトなら気にならない。

データだけでメソッドがなく複数作るなら System.Data.DataTable も有り。
.Columns.AddRange([string[]]) でプロパティ(DataColumn)定義して
.Rows.Add([Object[]]) でデータ(DataRow)追加する使い方なら意外と手軽に使える。
日本語カラム名の使用も問題ないし。

426 名前:デフォルトの名無しさん [2022/07/06(水) 09:44:42.33 ID:L+R7c7Gd.net]
-replaceと-ireplaceの違いって分かりますか?
まだ勉強中ですが、当然のように出てきて両方同じ説明しかされてないので気になって調べてみてもどこにも解説がなくて…
扱える値の範囲が違ったりとかするんでしょうか?
普通はどっちを使うものなんですか?

427 名前:デフォルトの名無しさん [2022/07/06(水) 11:05:49.65 ID:MXaUuSJv.net]
1.完全に理解した←初心者
2.チョットワカル←中級者
3.全然判らん←上級者

428 名前:デフォルトの名無しさん mailto:sage [2022/07/06(水) 11:41:17 ID:HSp/EaB5.net]
>>418
https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-7.2
既定では、 -replace 演算子では大文字と小文字が区別されません。
大文字と小文字を区別するには、次を使用します -creplace。
明示的に大文字と小文字を区別しないようにするには、次を使用します -ireplace。

replaceの既定動作を変更する方法は知りません。
大文字小文字を区別しようがしまいがどっちでもいいときは replace
そこんとこ間違ってもらっち

429 名前:瘢「るときは ireplace か creplace

普通がどっちかは分かりません。
[]
[ここ壊れてます]

430 名前:デフォルトの名無しさん mailto:sage [2022/07/06(水) 13:11:25.93 ID:c6fRPAAn.net]
例えば、Ruby のCSV 処理なら、

require 'csv'

input_csv = <<"CSV_TEXT"
id,果物
1,りんご
21,スイカ
33,みかん
CSV_TEXT

# 2次元配列
ary = CSV.parse( input_csv, headers: true ).each do |row|
row[ '果物' ] = "レモン" if row[ 'id' ].to_i == 21
end

p ary.to_a
#=> [ ["id", "果物"], ["1", "りんご"], ["21", "レモン"], ["33", "みかん"] ]



431 名前:デフォルトの名無しさん [2022/07/06(水) 13:16:19.97 ID:iisDFTgh.net]
>>420
ありがとうございます!
理解できました!
明示的に大文字の区別をつけるかつけないか指定する際に利用するものなんですね!
たしかにそれだと【普通】は場合によるとしか言えないですよね

432 名前:デフォルトの名無しさん mailto:sage [2022/07/06(水) 20:34:21.87 ID:428zggiP.net]
迷ったら明示でいいと思う

433 名前:デフォルトの名無しさん mailto:sage [2022/07/06(水) 22:49:51.62 ID:pVM7wVd2.net]
パワシェルの-replaceは勝手に右辺を正規表現と解釈するから
それが必要ない場合は文字列.Replace()のがいいよ

434 名前:デフォルトの名無しさん mailto:sage [2022/07/07(木) 08:47:36 ID:fDYvmpy4.net]
>>423
そうですね!

>>424
おお、知りませんでした。
ありがとうございます!

435 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 13:33:50.89 ID:EP1tRVB4.net]
Windowsでコマンドラインシェルとして使う場合に
外部コマンド引数のクオーテーションの振る舞いをなんとかして欲しい

例えばpwshを外部コマンドとして使うとして

pwsh -nop -c "`$a = 'abc'; `$a | out-host"

は期待通り abc が出力されるのに

pwsh -nop -c '$a = "abc"; $a | out-host'

はエラーになるの不便過ぎる

436 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 20:51:35.26 ID:Bjqd/A21.net]
補完が有効になってやっとまともに使えるようになったなよくこんなクソ長くて覚え辛くて入力し辛いコマンドレットなんて使ってるよなお前ら
しかしMSって言語やフレームワークでもそうだが命名規則にセンスねーゎ
なんでnpmやgitみたいに使いやすく作れないのか壊滅的にセンスねーゎ

437 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 21:48:06.89 ID:SkLqj5eb.net]
互換性のあるエイリアス
https://docs.microsoft.com/ja-jp/powershell/scripting/learn/compatibility-aliases

438 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 22:10:30.33 ID:EP1tRVB4.net]
PS> pwsh -nop -c "`$a = 'abc'; `$a | out-host"
abc
PS> pwsh -nop -c '$a = "abc"; $a | out-host'
abc: The term 'abc' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

これほんと何がどうしてこうなるの?

439 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 23:27:21.05 ID:UIv0TQaX.net]
pwsh.exeへのコマンドラインとして解釈されるから、まずOSのルールに従って引数リストが次のように分解される
-nop
-c
'$a
=
abc
;
$a
|
out-host'
pwsh.exeの内側でコマンド文字列を再結合した時点では既にダブルクォートが失われているという寸法

440 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 23:35:00 ID:v6YmQ/+d.net]
PS内で呼び出すならスクリプトブロックでよくね?



441 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 23:40:56 ID:UIv0TQaX.net]
無茶言うなよ…
pwshの-cより右ならスクリプト扱いで、cmdやその他大勢の右ならOS解釈? pwshという同名のオレオレアプリの類だったときもスクリプト扱い?
言語仕様の一貫性的にあかんことになるだろ常考

442 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 23:49:47 ID:cCHwpa3p.net]
もしかして
リモートコマンド

443 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 23:52:42 ID:PFPNTTsE.net]
>>429
「'$a = "abc"; $a | out-host'」の「'〜'」は
そのコマンドライン上の文字列リテラルである事をPowerShellに指示してる事になって
PowerShellは1つの文字列「$a = "abc"; $a | out-host」の事だと受け取る。

コマンドが実行ファイルの実行で、その引数の文字列にスペースがあると
その文字列全体が「"〜"」で括られて文字列「"$a = "abc"; $a | out-host"」になる。
↑Windows PowerShell v5.1のTrace-Commandで確認
↓自信なし
powershell実行時の引数パース時に「\"」とか「"""」とかではない
単独「"」は不正な(余分な)メタキャラとして取り除かれるもよう。
で-cには「$a = abc; $a | out-host」が渡る。

>>430
確か「OSのルール」だと、実行ファイルに渡される引数は単一の文字列で、
スペースで区切ったり「"」を特別扱いするのはpowershell(pwsh).exeの独自のただし非常に一般的な仕様。
(大抵は、exeにコンパイルした際のコンパイラの仕様。)

444 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 00:09:26.45 ID:qWQ5DRIr.net]
Linuxのpowershellなら
PS> pwsh -nop -c '$a = "abc"; $a | out-host'
abc
になるんだろうな

445 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 08:04:26 ID:qWQ5DRIr.net]
コマンドプロンプトで
pwsh -nop -c "$a=\"abc\"; $a | out-host"
とするのは " 内部の " をエスケープするように見えて自然に納得できる
Windows版のPowerShellだけ
pwsh -nop -c '$a=\"abc\"; $a | out-host'
とするのは ' 内部の " をエスケープさせられて気持ち悪すぎる
おまけにLinux版でこう書くと動かないんでしょ

446 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 10:32:21.09 ID:d4+i07Ea.net]
>>436
コマンドプロンプト(cmd)だともっと高難易度の問題がある。
cmdのメタキャラ(&, |, <, >など)が偶数番目の「"」の後にあるとだめとか、
powershellコンソール以上に問題有り。
pwsh -nop -c "$a=\"&abc\"; $a | out-host"

同一のシェル名(pwsh)であっても、OSによって他プロセス起動の作法が違うのは仕方ないと思う。
国や地域で言葉や文化が違っても仕方ない感じ。
(POSIXとかに規定あればば別だが。)

例えば「ping」を動かすだけにしても結局オプションも挙動も違う訳だし、
現時点では他プロセス使う時点で、移植性考慮はプログラマの領分かな〜と思ってる。

447 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 10:48:49.98 ID:d4+i07Ea.net]
PowerShellのコンソールやスクリプト上で他プロセスを起動したい場合、
自分だとほぼ下記2通り。

(A) System.Diagnostics.ProcessStartInfoを使う。
(ちゃんと制御したい場合。スクリプトだと基本これ。)
$si = [Diagnostics.ProcessStartInfo]::new()
$si.FileName = 'powershell.exe'
$si.Arguments = '-nop -c "$a = \"abc\"; $a | out-host"'
$si.UseShellExecute = $false
$proc = [Diagnostics.Process]::Start($si)
$proc.WaitForExit()

(B) 引数を1つずつ@()に入れ、「"〜"」としたい場合は最初から値に含める。
(コマンドラインとかで手軽に。…手軽?)
& 'powershell' @('-nop', '-c', '"$a = \"abc\"; $a | out-host"')

448 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 10:59:09.60 ID:qWQ5DRIr.net]
MSYS2のbashもWindows上のコマンドラインシェルだけど
pwsh -nop -c "\$a = 'abc'; \$a | out-host"
pwsh -nop -c '$a = "abc"; $a | out-host'
のどちらでも動くんだよね
PowerShellには頑張って欲しい

449 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 14:41:14.65 ID:OGG0CV73.net]
わざわざProcessStartInfo使うとかめんどくさいわ
Start-Processでいい

Start-Process -FilePath 'powershell.exe' -ArgumentList '-nop -c "$a = \"abc\"; $a | out-host"' -NoNewWindow -Wait

450 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 21:16:37.86 ID:d4+i07Ea.net]
ProcessStartInfoが面倒なのは同意。
Start-Processで済む時は使う事もあって
大体はUseShellExecute = $trueの時かな。

Start-Processを使わない一番の理由は-Redirect*がファイルパス指定な事。
出力を無加工でファイル出力したい事がまずないので使いづらい。
なんで-PassThruのProcessオブジェクトの出力制御変更のスイッチじゃないのか。
標準出力・エラーを同時に制御するとデッドロックしやすいからかな。
Start-Processがその辺うまい事制御してくれたらスクリプトでも使うんだけど。



451 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 21:55:59.58 ID:0vXUA52p.net]
コマンドラインパラメーターの処理はexeをビルドした処理系のスタートアップコードに依存するのだ
MSのC/C++やMingwとかで微妙に変わってくるのだガハハ
WindowsでC/C++/C#の場合argvとかではなくWin32APIのGetCommandLineで取得するのが一番正解に近い

452 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 22:06:03.52 ID:qWQ5DRIr.net]
"" や \" が必要な仕様は気持ち悪いって話をしてたつもりが…
ネイティブコマンドを呼ぶのはコマンドと引数を並べて書くだけが普通でしょ
about_Parsing の icacls を呼ぶ例もそのまま並べてる
そのままと異なる動きをさせたい時以外は、>>438>>440 も面倒すぎる

453 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 22:40:11.92 ID:GKrnmeJx.net]
引数のワイルドカードを展開するかしないかみたいなやつね

454 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 23:17:22.46 ID:d4+i07Ea.net]
MSもこの辺の気持ち悪さ・分かりづらさは分かってるみたいで
core v7とかだと環境変数かなんかで、パースルール変更できるんじゃなかったっけ。
Win10のv5.1しか使わないから知らんけど。

455 名前:デフォルトの名無しさん [2022/07/10(日) 00:25:59.02 ID:qiFT6lHF.net]
実行順がわかりにくい

456 名前:デフォルトの名無しさん mailto:sage [2022/07/10(日) 00:55:31.74 ID:KsOikrPY.net]
何言いたいかがわかりにくい

457 名前:デフォルトの名無しさん mailto:sage [2022/07/10(日) 01:17:57 ID:KsOikrPY.net]
>>443
> ネイティブコマンドを呼ぶのはコマンドと引数を並べて書くだけが普通でしょ
例えば
$a = "abc"; cmd /c "echo $a"
を実行したら「$a」と出力されて欲しくて
「abc」と出力されて欲しければ>>438,440ってこと?
好みが分かれるところかなー

458 名前:デフォルトの名無しさん [2022/07/10(日) 04:27:28.58 ID:qiFT6lHF.net]
UNIXのシェルスクリプトのマネにならないようにした結果がこれ

459 名前:デフォルトの名無しさん [2022/07/10(日) 04:30:45.24 ID:qiFT6lHF.net]
PowerShellは、記号に独自の意味を持たせているから、PowerShell職人を養成しないと使いこなせない。

460 名前:デフォルトの名無しさん mailto:sag [2022/07/10(日) 09:49:01.94 ID:os7PFybL.net]
PowerShell in ActionにはUNIXシェルを参考にしたっていろんな所に書いてあるけど
たとえば比較演算子とか



461 名前:デフォルトの名無しさん [2022/07/10(日) 10:20:51 ID:j6DdFbos.net]
powershellはPerlの匂いがする
俺が好きになった理由はここ

462 名前:デフォルトの名無しさん mailto:sage [2022/07/10(日) 20:59:21.65 ID:KsOikrPY.net]
>>450
記号に独自の意味を持たせてる言語は多数あるのでは。
というか程度の差こそあれ殆どでは。
学習せず「使いこなせる」言語はないでしょ。

463 名前:デフォルトの名無しさん mailto:sage [2022/07/10(日) 21:53:38.94 ID:bG/pnkmn.net]
powershellの記号が特殊とかはあまり思わないな
それより配列の扱いがトリッキーとかの方が職人の養成が必要と思う

464 名前:デフォルトの名無しさん mailto:sage [2022/07/10(日) 22:11:42.01 ID:PiYySnCe.net]
ファイル名に[]が含まれてて苦労した人なのかなと思った

465 名前:デフォルトの名無しさん [2022/07/10(日) 22:53:56.17 ID:qiFT6lHF.net]
>>453
バッチファイルとの相性が最悪なのに気づかないとは情けないよ、あんた。

466 名前:デフォルトの名無しさん [2022/07/10(日) 22:55:51.37 ID:qiFT6lHF.net]
>>451
あらゆる言語を参考にして、いろいろ混ぜ込んで、奇妙奇天烈なものになってしまった。

467 名前:デフォルトの名無しさん mailto:sage [2022/07/10(日) 23:58:19.25 ID:RTsqHO1/.net]
まあ最大の問題は、空白をトークンの区切り、改行を入力に終わりとしたことだな

468 名前:デフォルトの名無しさん mailto:sage [2022/07/11(月) 00:03:16.90 ID:bX2QAhdS.net]
変数のスコープが他と違うPowershellには何も期待してない
グローバル変数を更新したつもりがローカル変数と見なされたりして使い難すぎる
グローバルデータを全部.NETのコンテナに逃がしてようやく使えるようになった

469 名前:デフォルトの名無しさん [2022/07/11(月) 00:04:59.61 ID:vt1vW9IA.net]
ファイルや文字列の操作の構文がヘンテコすぎる

470 名前:デフォルトの名無しさん mailto:sage [2022/07/11(月) 01:41:49.71 ID:4UtqkfgJ.net]
超ヘンテコなJavaScriptだって一世を風靡したんだからPowershellだっていけるし(震え声



471 名前:デフォルトの名無しさん [2022/07/11(月) 03:32:17.37 ID:vt1vW9IA.net]
>>461
あんたPowerShellをほどんど知らないでしょ?

472 名前:デフォルトの名無しさん mailto:sage [2022/07/11(月) 07:53:28.56 ID:3aArSxtS.net]
>>456
そんな話してなかったでしょ。会話になってないよ。

バッチ(コマンドプロンプト)上でワンライナー書くときに
記号の取り扱いに注意しなくていいメジャー言語は一つも知らない。

473 名前:デフォルトの名無しさん mailto:sage [2022/07/11(月) 09:42:24.64 ID:zwDcIdQY.net]
>>463
個人的にはバッチは制限多過ぎだよね
今回の問題もPowershellというより旧cmm互換性のせいだし

474 名前:デフォルトの名無しさん mailto:sage [2022/07/11(月) 10:44:52.35 ID:KonxbxUI.net]
あんた
あのこの
なんなのさ

475 名前:デフォルトの名無しさん mailto:sage [2022/07/11(月) 11:27:13.34 ID:4o6o7MFx.net]
おらシェル子のこどほどんどしらねっちゃ

476 名前:デフォルトの名無しさん mailto:sage [2022/07/11(月) 13:10:07.01 ID:ekYGS06D.net]
そもそもpsでスクリプト使うならバッチじゃなくてps1だろ

477 名前:デフォルトの名無しさん mailto:sage [2022/07/11(月) 20:50:06.93 ID:M3Mn448S.net]
>>460
どこがどうヘンテコって思い込んでるんだ?

478 名前:デフォルトの名無しさん mailto:sage [2022/07/12(火) 00:36:46.01 ID:XdROtN2x.net]
Perlなんかもヘンテコって思ってれば筋は通る

479 名前:デフォルトの名無しさん mailto:sage [2022/07/14(木) 22:41:31.83 ID:ztzbKaJ8.net]
久々にvbsで書いたらめっちゃ素直でスラスラ書けるわ
Powershellはせめてレキシカルスコープで作り直してくれ
クラス使えって?

480 名前:デフォルトの名無しさん mailto:sage [2022/07/15(金) 10:39:19.02 ID:y/m5s/RL.net]
VBSはクソだろ
https://twitter.com/Benshi_Orator/status/1546400388680945665
(deleted an unsolicited ad)



481 名前:デフォルトの名無しさん mailto:sage [2022/07/15(金) 12:26:17.41 ID:nJv/8gNm.net]
>>470
psだってレキシカルスコープだよ
どういう動作を求めてるのかはしらんけど

482 名前:デフォルトの名無しさん mailto:sage [2022/07/15(金) 13:13:05.28 ID:Wgy0KDme.net]
ダイナミックスコープだったような

483 名前:デフォルトの名無しさん mailto:sage [2022/07/15(金) 13:20:06.85 ID:Wgy0KDme.net]
PowerShellの悲しい点は、関数とスクリプトブロックが動的にスコープされることです。
しかし、私が驚いたもう1つの点は、変数が内部スコープ内でコピーオンライトとして動作することです。
$array=@("g")

function foo() {
$array += "h" Write-Host $array
}

& { $array +="s" Write-Host $array }

foo Write-Host $array

出力は次のとおりです。
g s
g h
g
これにより、動的スコープの苦痛が少し軽減されます。
しかし、どうすればコピーオンライトを回避できますか?

484 名前:デフォルトの名無しさん mailto:sage [2022/07/15(金) 13:22:56.94 ID:Wgy0KDme.net]
これの解決策
([ref]$array).Value += "h"

ちとうんこすぎるね

485 名前:デフォルトの名無しさん mailto:sage [2022/07/15(金) 14:34:08.02 ID:ROJrTMPq.net]
コピーオンライトじゃなくてローカル変数が新しく定義されてるだけでは
動的スコープが嫌ならGetNewClosure()を呼べ

[PSv2]PowerShellでクロージャ&カリー化
https://winscript.jp/powershell/204
ScriptBlock.GetNewClosure Method
https://docs.microsoft.com/en-us/dotnet/api/system.management.automation.scriptblock.getnewclosure

486 名前:デフォルトの名無しさん mailto:sage [2022/07/15(金) 16:26:41.50 ID:mFZqR7Di.net]
せめて問題を理解してからレスしろよ

この動的スコープとは何ですか?
ほとんどのプログラムは、理解しやすいため、レキシカルとも呼ばれる静的スコープを使用します。ソースコードを見ると、範囲内にあるものがわかります。Pythonの例では、スコープ内のxの唯一の値はxのグローバル値です。

対照的に、PowerShellは動的スコープを使用します。このモデルでは、スコープスタックに基づいて実行時に変数を検索します。関数を呼び出すたびに、新しいスコープを作成し、すべての値を親スコープからそのスコープにコピーします。PowerShellの例では、printXがsetAndprintXから呼び出されると、setAndprintXスコープで設定された$xの値を取得します。

なぜ動的スコープが必要なのですか?

字句スコープよりも動的スコープを選択する理由について、適切な説明を思い付くことができません。

「健康は病人だけが見ることができる王冠です」

487 名前:デフォルトの名無しさん mailto:sage [2022/07/15(金) 17:59:02.69 ID:jPbc5odD.net]
function foo() {
$global:array += "h" Write-Host $array
}
& { $global:array +="s" Write-Host $array }
ってやるだけじゃねーの?
そもそもグローバル変数自体はそれ程使わん、ましてや関数やスクリプトブロックで更新なんてほぼやらん

488 名前:デフォルトの名無しさん mailto:sage [2022/07/15(金) 21:33:28.03 ID:Keau4pUF.net]
>>477
PowerShell in ActionによるとダイナミックスコープはUNIXシェルを参考にしたらしい

489 名前:デフォルトの名無しさん mailto:sage [2022/07/15(金) 23:56:32 ID:avBUMPl6.net]
using namespace System.Collections.Generic
$list = [List[string]] @('ggg');
'$list={0}' -f ($list -join ', ') | oh
function f {$list.Add('fff'); 'f={0}' -f ($list -join ', ') | oh;}
&{$list.Add('sb'); 'sb={0}' -f ($list -join ', ')|oh;}
f
'$list={0}' -f ($list -join ', ') | oh

$list=ggg
sb=ggg, sb
f=ggg, sb, fff
$list=ggg, sb, fff

490 名前:デフォルトの名無しさん mailto:sage [2022/07/16(土) 13:19:21.19 ID:3YCfDQK3.net]
>>480
.NEtのListコンテナ使うと意図通り動くのはなんでなん
Powershellの配列の変数は値型とか?
この辺をちゃんと理解ておきたい



491 名前:デフォルトの名無しさん mailto:sage [2022/07/16(土) 14:25:05.61 ID:QBrOblFw.net]
Listかどうかは関係ない 変数に新しい値を代入してるかどうか
>>474の $array += "h"は 新しく作った配列を $array に代入してるけど
>>480の $list はそんな事してないでしょ

492 名前:デフォルトの名無しさん mailto:sage [2022/07/16(土) 14:36:33.24 ID:3YCfDQK3.net]
>>482
えーつまり$array += "h"は文字列への追加じゃなくて
やってることは$array = $array + "h"相当で新規に文字列のインスタンスとローカル変数が作成されるってことなの?
$arrayに対してのAdd相当は$global:的な装飾子以外にないの?

493 名前:デフォルトの名無しさん mailto:sage [2022/07/16(土) 15:02:15.96 ID:m/XBj/Ao.net]
メインclerだけど、動的静的スコープの使い分けがclの武器と刷り込まれてた
評判悪いのか…
呼び出し側から振り分けられるのは便利では?出力先とか

494 名前:デフォルトの名無しさん mailto:sage [2022/07/16(土) 15:49:49.15 ID:OVIs5jsH.net]
lispのようにメモリ上フラットにオブジェクトが住む思想(~pwshのfunction:プロバイダ)だと、動的スコープになるのが自然では
レキシカルな文脈が無いのだから

495 名前:デフォルトの名無しさん mailto:sage [2022/07/16(土) 15:54:08.82 ID:yus9SEVI.net]
Powershellの配列は固定長だよ
追加はできない
+=演算子はその見た目のイメージ通り、新しい配列による再代入を伴う
これはスコープとは関係ない問題

496 名前:デフォルトの名無しさん mailto:sage [2022/07/16(土) 15:57:07.03 ID:m/XBj/Ao.net]
ミュータブルかイミュータブルか、あと参照の話がごっちゃになってるよね

GetNewClosureはclのfunctionフォームと等価だね

497 名前:デフォルトの名無しさん mailto:sage [2022/07/16(土) 16:10:18.66 ID:XIhDxiQx.net]
>>479
unixシェルもpwshもclもそうだけど、関数定義をズラズラっとダンプできて、それをちゃんと読み戻せる言語は原理的にレキシカルスコープでは有り得ない
(暗黙のうちにletやクロージャ生成を行う)ブロックぽい構文でレキシカルスコープを模倣することは可能だけど

498 名前:デフォルトの名無しさん mailto:sage [2022/07/16(土) 17:23:13 ID:3YCfDQK3.net]
LISP族はletか何かで変数に対しての宣言を必ずするからダイナミックでも違和感ないでしょ
Powershellの違和感は暗黙的に変数の意味が代わるところじゃないかな

499 名前:デフォルトの名無しさん mailto:sage [2022/07/17(日) 18:41:53.37 ID:zSvUsLU3.net]
コード適当に書いていってある程度の規模になった頃にそろそそ関数化でもすっか!
ってなった時に下手にグローバル変数更新してたりすると即はまるなコレ
しかも一見何が悪いのかさっぱり判らないという
Powershellコーティング十か条でも壁に貼っとかないとな

500 名前:デフォルトの名無しさん mailto:sage [2022/07/17(日) 21:43:25.29 ID:dCc2dzlx.net]
about_Scopes
https://docs.microsoft.com/ja-jp/previous-versions/dd315289(v=technet.10)
PowerShell のスコープ完全に理解した
https://tech.blog.aerie.jp/entry/powershell-advent-calendar-2018-18



501 名前:デフォルトの名無しさん mailto:sage [2022/07/17(日) 22:10:40.71 ID:CGK3IbQv.net]
いや下手にグローバル変数更新はできんだろ、参照だけ

502 名前:デフォルトの名無しさん mailto:sage [2022/07/17(日) 22:11:26.62 ID:LMlAcWpL.net]
>>490
10ヶ条の最初に
・グローバル変数は使うな、ましてや更新する奴は死刑
って書いとけ

503 名前:デフォルトの名無しさん mailto:sage [2022/07/17(日) 23:45:40.91 ID:zSvUsLU3.net]
>>491
MSの自動翻訳は的が外れてて知りたいことは何も書かれてない…
個人のurlの人は説明が無茶苦茶で到底理解できてると思えない中身。スコープでググってこれが引っかかるなら悪質
結局のところ、参照渡しや参照書き換えの仕方を知ってればスコープはほぼ気にしなくていいという結論に至った
値渡しだけで済む書き方ができればなお良い

504 名前:デフォルトの名無しさん mailto:sage [2022/07/18(月) 00:19:34.95 ID:+HoBYfWN.net]
結論出てよかったね

505 名前:デフォルトの名無しさん mailto:sage [2022/07/18(月) 21:25:16.34 ID:0lMMqLG2.net]
スコープの話をしたいわけじゃなかったのなら最初からそう言ってほしかった

506 名前:デフォルトの名無しさん mailto:sage [2022/07/18(月) 21:46:18.36 ID:RQQtBm3R.net]
文句付けたいけど根拠

507 名前:となる知識は無いから []
[ここ壊れてます]

508 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 22:59:35.63 ID:DVSzMIGJ.net]
Pesterって使ってる?
使ってないとしたらUTどうしてる?

証跡としてコードカバレッジ出す目的に今も使ってるけどPowerShellの言語としてとか実行ホスト(exe)の機能ではなく
式単位にブレークポイント仕掛けて実現してるんだかで処理速度も普段よりかなり遅いし、あんまり便利って気がしない。
(うろ覚え)記述によってはうまくコードカバレッジに反映されない事もあった気がする。
そんとき忙しくて詳しく調査してらんなくてコードの方変えた気がする。
確かif文の条件内で変数に代入したりしてる場合だったかな。
while($null -ne ($line = $stream.ReadLine())){}みたいなのだったかな。

509 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 23:06:57.28 ID:ZWOh364P.net]
PowerShellなんか想定した運用で動きゃいいでしょ
真面目にテスト書くようなものはC#で書きなさい

510 名前:デフォルトの名無しさん mailto:sage [2022/07/21(木) 22:42:00.80 ID:o92gVnUV.net]
以下のごく普通?のjsonがConvertFrom-Jsonだと意味不明なエラーで通らなかった
'{"":"あーあ" }' | ConvertFrom-Json
エラー出力
ConvertFrom-Json : Cannot process argument because the value of argument "name" is not valid. Change the value of the "name" argument and run the operation again.
At line:1 char:17
+ '{"":"あーあ" }' | ConvertFrom-Json
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [ConvertFrom-Json], PSArgumentException
+ FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.ConvertFromJsonCommand



511 名前:デフォルトの名無しさん mailto:sage [2022/07/21(木) 23:21:49.49 ID:hK8T/Nr3.net]
>>500
PowerShell Core ではバグとして修正されてるらしい
https://github.com/PowerShell/PowerShell/issues/1755

PowerShell Core は使ったことないが、Windows PowerShellが認めるJSONは独特なので外部とのデータ連携に使うには向いてない印象。
PowerShellからPowerShellへの受け渡しなら苦労は少ないけど、それならJSONで入出力する必要がないことが多い。

512 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 00:05:10.76 ID:DccLQn0d.net]
名前なしの値ってjson採用してるアプリで普通に使われるんだよね
困ったわい

513 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 01:13:11.32 ID:bxySyujx.net]
JavaScriptってプロパティ名で空文字列が使えるもんなあ
JavaScriptの仕様がファンキーすぎる気がしないでもない

514 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 19:10:35.01 ID:LaxYcXsV.net]
ハッシュテーブルの実装的には問題ないんだろうか?
どれとは言わんがある言語のハッシュテーブル実装用のハッシュ関数(種はランダム)に空文字列""通したら恒等的に0なんだが

515 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 19:11:49.39 ID:C81kwZF2.net]
バッチスレでPowerShell使いなよってアドバイスもらって
GetでJSON取得⇒JSON要素出力がこんなに簡単に出来るなんて感動した
curlコマンドとjqコマンド駆使してやってたのがアホみたいだった
でも構文とコマンドレット覚えるのは面倒

516 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 19:50:05.55 ID:ATmfTI/o.net]
種を要求するハッシュ関数ってよくあるんか?セキュリティ対策?
ずっと同じ値が帰ってくるならハッシュテーブル的には問題ないかと

517 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 20:16:25.64 ID:xJ8anoa4.net]
>>504 がなんか勘違いしてるんだろうと思う
種なんて聞いたことないし空文字列で 0 を返すのはよくある実装だと思う

518 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 20:35:46.87 ID:8xZeKJIl.net]
>>506
起動時環境ノイズから勝手に取ってくるのが普通かと

同じハッシュ値持つキーがあると、まあ実装によるがDoS攻撃のいい的
追加情報で判別にフォールバックしたり、テーブル作り直したり、非常に負荷がかかる
perl, python, pwshは少なくともそう

python -c print(hash(""))→0
python -c print(hash(" "))→ランダムなint64
pwsh -nop -c '"".GetHashCode()'→ランダムなint32
perlはスマホに入ってないのでまた

どちらも勝手に種植えてるね、Pythonは64bitにハッシュしてるから単純に強度が強いが、pwshが0でもランダムに見えるのに対し、常にf("")=0のpythonの実装はちょっと謎
fによって""と同じ値に写る文字列も毎回変わるので探すのも容易じゃないだろうけど、実際に規則性を見てしまうと他にも弱点ありそうな気がしてくる
事実としてpwshよりはwebで扱かれてるわけで、まあ大丈夫なんでしょう

519 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 20:38:19.25 ID:8xZeKJIl.net]
>>507
デバッグ用に手動で植える機能はあるはずだよ、マニュアルのどっか見たら書いてるはず、もちろん非推奨だけど

520 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 20:49:17.30 ID:8xZeKJIl.net]
今perl環境無いので記述だけ、v5.8以来ハッシュ関数の種は秘密に植えてるようで、あと人力で植えたい人への植え方
誰か検証たのむ
https://perldoc.jp/docs/perl/5.36.0/perlsec.pod#Algorithmic32Complexity32Attacks

既にwebで流行ってた頃だと思うんだけど大丈夫だったのか



521 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 20:49:36.14 ID:8xZeKJIl.net]
今perl環境無いので記述だけ、v5.8以来ハッシュ関数の種は秘密に植えてるようで、あと人力で植えたい人への植え方
誰か検証たのむ
https://perldoc.jp/docs/perl/5.36.0/perlsec.pod#Algorithmic32Complexity32Attacks

既にwebで流行ってた頃だと思うんだけど大丈夫だったのか

522 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 20:50:04.66 ID:8xZeKJIl.net]
今perl環境無いので記述だけ、v5.8以来ハッシュ関数の種は秘密に植えてるようで、あと人力で植えたい人への植え方
誰か検証たのむ
tps://perldoc.jp/docs/perl/5.36.0/perlsec.pod#Algorithmic32Complexity32Attacks

既にwebで流行ってた頃だと思うんだけど大丈夫だったのか

523 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 20:50:41.34 ID:8xZeKJIl.net]
今perl環境無いので記述だけ、v5.8以来ハッシュ関数の種は秘密に植えてるようで、あと人力で植えたい人への植え方
誰か検証たのむ
perldoc.jp/docs/perl/5.36.0/perlsec.pod#Algorithmic32Complexity32Attacks
(そのまま貼れない)

既にwebで流行ってた頃だと思うんだけど大丈夫だったのか

524 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 20:51:20.66 ID:8xZeKJIl.net]
連投ごめん

525 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 21:27:35.49 ID:xJ8anoa4.net]
とりあえずマニュアルをちゃんと読むことをお勧めしておく
https://docs.python.org/ja/3/library/functions.html?highlight=hash#hash

526 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 21:29:23.20 ID:rYm6iVSU.net]
で、件のjsの仕様だが、空文字でもよしなにハッシュしてくれるってことかいな?多分
空文字をキーとして使う事に関しては、言語固有のデータ型の概念も絡む
パスカル文字列でもc文字列でも、空文字列自体はいかなるバイト表現も持ち得ない
値がなけりゃ関数にも渡せない
文字数や終端の0埋めバイトごと渡せば値になるが、そこは思想の問題だろうね

527 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 21:36:12.72 ID:8xZeKJIl.net]
>>515
そこは言語リファレンスであって、リファレンス実装の(c)pythonとは(建前上)関係がない

インタプリタについてはこっち、hash関数のランダム化とどうしても植えたい人用
https://docs.python.org/3/using/cmdline.html#envvar-PYTHONHASHSEED

528 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 22:08:43.58 ID:xJ8anoa4.net]
ああすまん、最近の実装まで追いかけきれてなかったな
なるほど一つ賢くなったわ、ありがとう

529 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 22:10:01.71 ID:ZpfKnwiP.net]
実装のドキュメントもランダム化の有無に関わらず空文字列に0を返す事については触れてないな
まあ実装の詳細も詳細だし、保証する意味も無いから、気になるならソース読むしかない
気になるなら、この実装に問題無いんですか、と元気があるなら問い合わせる案件

530 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 22:30:36.76 ID:Sct47BON.net]
とりあえずPythonでhash("")==0なことはundocumentedなので依存するコードは書いちゃダメってことかな
偶々タイプが面倒だったのか、それでもよく見つけたな

一点だけ分かって現実に問題になるかはともかく、理想的なハッシュ関数の振る舞い(=完全にランダムに見える)として好ましくないのは確か

pwshのこういう面白ネタないかな、まあまだまだ開発中なので山ほどありそうなのがアレだけど



531 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 22:32:46.88 ID:8xZeKJIl.net]
undocumentedはMSのお家芸です

532 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 22:49:04.75 ID:FyEJHrzo.net]
面白そうなのでハッシュ衝突させてみた
d=dict()
d[0]="int 0"
d[""]="nullstr"
print(hash(0), hash(""), d)
0 0 {0: 'int 0', '': 'nullstr'}
たった2個ぶつけて死ぬ事はまあ無いが、いくらか試して中身は予想付いてきた
スレチごめん

533 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 23:59:51.61 ID:su1evgJ+.net]
面白そうなのでpwshでも
$h=@{0='int0'; ''='strnull'}
write (0).GetHashCode(), ''.GetHashCode(). $h[0, '']
→0 498565465 int0 strnull
cpythonと違い空文字列は0とは別物のようです
なおpython/pwshともに値の等しいintとfloat型をキーにしようとしたらエラー

([double][int]::MaxValue -eq [int]::MaxValue)
→True
キーにfloatを使うアホが居るかは不明だけど、[double]の範囲では全ての[int32]が表せるので今の実装の整合性に問題はない
さらに型を大きくするとfloatで表せる整数は歯抜けになってくるけどまあ

-0.0→-0.0
(-0.0).GetHashCode()→0
整数としての値ですね

$nan=[double]::NaN
$nancode=$nan.GetHashCode()
-214643572
$maxcode=[double]::MaxValue.GetHashCode()
214635072
$nancode + $maxcode→0ですね
ところでナンだか見慣れた数字が…
2gb, 4gb→2147483648 42949672

$nan -eq $nan→False
そう決めたからまあ、そうなんだけど
$nancode -eq $nancode→True
なんだかなー

534 名前:デフォルトの名無しさん mailto:sage [2022/07/28(木) 00:20:32 ID:y/Pgitn8.net]
複数のNaNをキーにしたハッシュリテラル書くとInvalidOperation例外投げるな、Duplicate Keys 'NaN' are not allowed...らしい
アサインすると値が上書き

見方によってはハッシュテーブルというアルゴリズムの敗北と言えるかもしれん
困る機会も思いつかないのが幸い

535 名前:デフォルトの名無しさん mailto:sage [2022/07/28(木) 00:31:26 ID:8WeqhqUG.net]
どのNaNとNaNも互いに値が等しくないからといって、キーがNaNまみれのハッシュ$nansが作れたとして
じゃあ$nans[NaN]はどの値を返せば正解なんだよ

536 名前:デフォルトの名無しさん mailto:sage [2022/07/28(木) 00:51:33 ID:y/Pgitn8.net]
抽象データ構造としての連想配列なら、NaNがインデックスとして渡されたら探索すらせずに常に$nullを返せばいい
NaNと-eqなキーは$nansがNaNまみれであるかに関わらず存在し得ないんだから

ハッシュテーブルはあくまで"ほぼ-eq"を使った連想配列の実装
$nan=[double]::NaN;
$ht=@{$nan="abc"}; $h[$nan]
は"abc" を返すはず

537 名前:デフォルトの名無しさん mailto:sage [2022/07/28(木) 01:22:01 ID:AWyQ+yiB.net]
そもそもnanは論理学と数学基礎論の公理、同一律を否定しているので、論理的思考を行っている限り無矛盾に理解することは原理的に不可能だぞ
考えるな、感じろ

538 名前:デフォルトの名無しさん mailto:sage [2022/07/28(木) 13:14:46.86 ID:y/Pgitn8.net]
>>505
jqはフィルターとして便利なだけじゃなく、プログラミング言語として非常に面白いと思ってるので、学ぶ価値ありだと思うよ

移行前はcmd+vimで何でもやってたな
vimは安定してwinサポートしてたし、ユニコ以前から常に日本語パッチ供給されてて、強力なテキスト処理とある程度の構造化データ処理もできる入手性よいツールとして稀有だったはず
引数に直接スクリプト渡して非インタラクティブにバッチ処理できるからbatの中身はほぼvim/exスクリプトだった
多分2000年あたりでvim並みの機能かつ日本語サポートもしっかりしてるのはperlくらい

539 名前:デフォルトの名無しさん mailto:sage [2022/07/28(木) 14:57:01.82 ID:HSo5zcUE.net]
コードエディタとしては愛用してるけど、vimをコマンドとして使う発想に時代を感じる

540 名前:デフォルトの名無しさん mailto:sage [2022/07/28(木) 15:19:13.17 ID:HSo5zcUE.net]
こんな感じかね
vim -es "g/\W?\|\Wwhere/ s//Where-Object/p" -c wq $profile
こわいから-c wqはしないけど

findstrでパターンマッチ、for /f ... in (file.txt)で行毎にスキャンして置換したのをechoとかやってたな



541 名前:デフォルトの名無しさん mailto:sage [2022/07/28(木) 15:43:37.36 ID:y/Pgitn8.net]
for /f "tokens=...delims=...skip=...eol=..."はプレーンな行毎のテーブルの処理には悪くない、明示的にフォーマットを指定してパースするので、むしろ分かりやすいまである

クオートやエスケープの解釈、ダメ文字などイレギュラーに全く対応出来なかったり、/フラグ毎にforの挙動が別コマンドと言えるほど違ったりで、融通が全く効かないのがアレというだけ
for /fで扱いやすいフォーマットで書いて読む閉じた世界に住んでるなら幸せ

542 名前:デフォルトの名無しさん mailto:sage [2022/07/28(木) 16:33:20.60 ID:y/Pgitn8.net]
>>530
あーよく見たら$proflleか
フリーフォーマットをfor /fで走査は黒魔術になるな、行をどう分割するにしろ、変数展開時の文字列置換は分割単位毎だし、行内複数マッチの場合どうするのか考えるだけでぞっとする

vimに引数でコマンド渡すにはたとえ単一引数でも-cが必要、兄弟のsedやvi(m)のエイリアスexは専ら引数にコマンドを期待するので-e落として紛れはないけど、vi(m)はその名の通りvisualエディタだからはじめの引数にファイルを期待する

543 名前:デフォルトの名無しさん [2022/07/29(金) 21:36:58.16 ID:HWojhWX3.net]
最近仕事で触ることになって使い方習ったけど全然わからん

544 名前:デフォルトの名無しさん mailto:sage [2022/07/29(金) 21:41:36.22 ID:wZddRh7F.net]
右も左も分からないなら、とりあえず良く使いそうなコマンドレットはエイリアスが事前に定義されてるので、galで出てくるのを順番に弄り回したりghするといいかも

545 名前:デフォルトの名無しさん mailto:sage [2022/07/29(金) 23:32:09.97 ID:HWojhWX3.net]
基本文法を覚える前にVB.NETでモジュールメソッド作成して呼び出すやり方覚えたら動けばいいやでそっちばかり使ってしまってなかなか覚えられない

546 名前:デフォルトの名無しさん mailto:sage [2022/09/13(火) 01:54:14.48 ID:G28B9gdh.net]
$OutputEncoding の初期値をUS-ASCIIからShift-JIS 932に変更したいのですが方法が分かりません
変更は
$OutputEncoding = [Console]::OutputEncoding
$OutputEncoding = [System.Text.Encoding]::GetEncoding(‘Shift_JIS’)
などで出来るようなのですが既定値を変えたいです

やりたい事はcmd上でripgrepをパイプで繋いだ際に文字化けしないようにしたいのですが
https://github.com/BurntSushi/ripgrep/blob/master/FAQ.md#pipe-non-ascii-windows
$OutputEncoding の既定値を変えられたとしてもcmd上でも効果があるのかは試してみないと分かりません
こちらの解決法が分かる方が居ましたら是非教えて欲しいです

547 名前:デフォルトの名無しさん mailto:sage [2022/09/13(火) 10:05:14.78 ID:3Aj3EGjO.net]
プロファイルに記述、じゃだめ?
PS> notepad $PROFILE.CurrentUserAllHosts

548 名前:デフォルトの名無しさん mailto:sage [2022/09/13(火) 17:28:13.33 ID:BFM47HY2.net]
>>537
ありがとうございます
$profileでやってみました。UTF-8でなら使えそうなのですが
$OutputEncoding をsjisにしたps上でもrgがUTF-8で吐いてるので無理みたいです
【.cmd】 バッチファイルスクリプト %13 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1542779527/496
参照先のようにUTF-8にすれば一応化けずに使えるのですがUTF-8だとコマンド類がascii以外機能しないものが多いのでバッチなどでは使いづらい
sjisで使えたら貧弱なfindstrに置き換えられ便利になると思ったのですが残念です

549 名前:デフォルトの名無しさん mailto:sage [2022/09/13(火) 18:34:17.55 ID:3Aj3EGjO.net]
findstr置き換え目的でPowerShell持ち出すなら、Select-Stringとかの手もある。

rgの高速検索のメリットがPowerShellのオーバーヘッドを上回るなら、
例えば以下のような処理を関数なりスクリプトなりにしておくといいと思う。
スクリプト化しておけばcmdからもpowershell経由で使える。
#…けど、他のgrepコマンド導入した方が良さそうな気がする。

$path = "検索対象ファイルパス"
$pattern = "検索パターン"
$si = [Diagnostics.ProcessStartInfo]::new("rg.exe")
$si.Arguments = '"{0}" "{1}"' -f $pattern, $path
$si.UseShellExecute = $false
$si.RedirectStandardOutput = $true
$si.StandardOutputEncoding = [Text.Encoding]::UTF8
$proc = [Process]::Start($si)
$stdout = $proc.StandardOutput
while (! $stdout.EndOfStream) {
$stdout.ReadLine()
}

550 名前:デフォルトの名無しさん mailto:sage [2022/09/13(火) 18:36:39.73 ID:3Aj3EGjO.net]
誤:$proc = [Process]::Start($si)
正:$proc = [Diagnostics.Process]::Start($si)

動作確認してないので他にもあるかも。



551 名前:デフォルトの名無しさん mailto:sage [2022/09/21(水) 00:41:00.54 ID:MPN5wMTP.net]
同階層にフォルダツリーA~Zまであり、それぞれのツリーの中身はバラバラです。
それぞれのツリーのCSVを出力したいのですが、やり方がイマイチ分かりません。
CSVにはツリー名、ツリー毎の合計サイズと、ツリー毎に最新更新ファイル(ファイル1つだけ)の日時を抜き出したいです。
PSFolderSizeをインストールして色んなサイトから拝借してコピペの集合体でやってみたのですが、各ツリー内の更新日を取得する部分とフォルダサイズを取得する部分を同時に行う事が私の頭では無理でした。何方かお助け頂けないでしょうか

552 名前:デフォルトの名無しさん mailto:sage [2022/09/21(水) 17:45:18.14 ID:xipfHTvE.net]
ツリーて何だ?
フォルダに階層があってその中全部見たいということならGet-ChildItem -Recurseだぞ

553 名前:デフォルトの名無しさん mailto:sage [2022/09/21(水) 17:57:09.50 ID:Wu29T3MH.net]
・コード貼ってバカにされるの嫌
・具体例挙げるなど仕様詳細説明面倒臭いから文章から汲み取れ
・全部やれ

こういうことだろう
舐め腐ってるヤツはスルーしときなよ

554 名前:デフォルトの名無しさん mailto:sage [2022/09/21(水) 18:12:43.86 ID:6s8rSvAF.net]
本人はいたって真面目なパターンだろ
ググった情報を組み合わせるスキルがないということは、悲しいかな往々にして他人に要件を一発で伝えるスキルも不足しがち

同時にやるのが無理めに感じるのはパイプを使おうとしてるからだろう
for文とローカル変数で書き変えれば簡単

555 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net]
伝えるスキルうんぬんの前に
> PSFolderSizeをインストールして色んなサイトから拝借してコピペの集合体でやってみたのですが
って言うならそのコード上げろって話
ヘタに説明するより100倍早い

556 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net]
いやできなかったコード上げても何の説明にもならんから
現状と得たい結果の図示だな

557 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net]
コードを上げたほうがいいんじゃないかとか図で伝えるべきなんじゃないかとかそういうの引っくるめての伝えるスキルだよ
コミュニケーションは言葉に限定されない

558 名前:デフォルトの名無しさん mailto:sage [2022/09/21(水) 20:42:50.25 ID:9IkSSHYa.net]
>CSVにはツリー名、ツリー毎の合計サイズと、ツリー毎に最新更新ファイル(ファイル1つだけ)の日時を抜き出したい
変なモジュール入れんでも数行で書けるからがんばれ

559 名前:デフォルトの名無しさん [[ここ壊れてます] .net]
パワー!

560 名前:デフォルトの名無しさん [[ここ壊れてます] .net]
しっかしコマンドレットがコマンドライン実行時とスクリプト内呼び出しでパラメータ解釈が異なるって
どんなキチガイが仕様考えたのか気になるわw
switch型パラメータをスクリプト内で動的に外したり与える方法がないとか終わってる



561 名前:デフォルトの名無しさん mailto:sage [2022/09/21(水) 23:16:07.40 ID:9fmju/sW.net]
>>550
何を言ってるんだ?
ちゃんと質問したらお前の間違いを教えてもらえるかもしれんぞ

562 名前:デフォルトの名無しさん mailto:sage [2022/09/22(木) 00:48:03.74 ID:XoRPEjFK.net]
Ruby で、win32ole を使って、
フォルダ以下のサイズ(再帰的な子孫も含めて)は、

require 'win32ole'

fso = WIN32OLE.new( 'Scripting.FileSystemObject' )

folders = [ "C:/Users/Owner/Documents/test_1",
"C:/Users/Owner/Documents/test_2" ]

folders.each do |folder|
folder_obj = fso.GetFolder( folder )

puts File.expand_path( folder_obj.path ) # \ を、/ に変換する
puts "#{ folder_obj.name } : #{ folder_obj.size }"
end

出力
C:/Users/Owner/Documents/test_1
test_1 : 28803

C:/Users/Owner/Documents/test_2
test_2 : 4390

563 名前:552 mailto:sage [2022/09/22(木) 01:41:34.82 ID:XoRPEjFK.net]
Ruby で、フォルダ以下のファイル(再帰的な子孫も含めて)で、
更新時刻が最も最近のものを求めた

folders = [ "C:/Users/Owner/Documents/test_1",
"C:/Users/Owner/Documents/test_2" ]

folders.each do |folder|
# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠し directory, file を除く
glob_pattern = folder + "/**/*"

latest_file = Dir.glob( glob_pattern )
.select { |full_path| File.file?( full_path ) } # ファイルのみ
.max_by { |full_path| File.mtime( full_path ) } # 更新時刻が最も最近のファイルパス

puts "#{ latest_file }\n#{ File.mtime( latest_file ) }"
end

出力
C:/Users/Owner/Documents/test_1/a.txt
2022-05-19 14:38:35 +0900

C:/Users/Owner/Documents/test_2/x/x.txt
2022-02-24 16:01:54 +0900

564 名前:552 mailto:sage [[ここ壊れてます] .net]
Ruby で、CSV 形式で出力する部分は、

require 'csv'

result_ary = [
[ "C:/Users/Owner/Documents/test_1", "28,803", "2022-05-19 14:38:35 +0900" ],
[ "C:/Users/Owner/Documents/test_2", "4,390", "2022-02-24 16:01:54 +0900" ]
]

# 2次元配列を、CSV 文字列に変換する
csv_str = result_ary.map( &:to_csv ).join
print csv_str

出力
C:/Users/Owner/Documents/test_1,"28,803",2022-05-19 14:38:35 +0900
C:/Users/Owner/Documents/test_2,"4,390",2022-02-24 16:01:54 +0900

565 名前:デフォルトの名無しさん mailto:sage [2022/09/22(木) 09:18:39.47 ID:5Z2vYjCC.net]
>>541
@(
"C:\dir1"
"C:\dir2"
) | %{
  $prop = [Ordered] @{Path=$_}
  $file = @(Get-ChildItem -LiteralPath $_ -Force -Recurse -File)
  ([Ordered] @{LastWriteTime='Maximum'; Length='Sum';}).GetEnumerator() | %{
    $opt = @{'Property'=$_.Key; $_.Value=$true;}
    $prop += @{$_.Key = $file | measure @opt | select -exp $_.Value}
  }
  [PSCustomObject] $prop
} | ConvertTo-Csv -NoTypeInformation

566 名前:デフォルトの名無しさん mailto:sage [2022/09/23(金) 00:05:04.72 ID:r49iT1KO.net]
>>555
おおー無駄がなくてすごい
これぐらい書けるようになりてぇ

開始は配列の変わりにコマンドレットでも良さそう
Get-ChildItem -LiteralPath <親フォルダ> -Directory | ...

567 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 13:45:46.35 ID:5ly2Ski6.net]
>>556
確かに。てか半端に汎用性意識せず、素直にこんなんでも良かったな。
@(Get-ChildItem -LiteralPath <親フォルダ> -Directory).FullName | %{
  $file = @(Get-ChildItem -LiteralPath $_ -Force -Recurse -File)
  [PSCustomObject] @{
    Path     = $_
    LastWriteTime = ($file | measure LastWriteTime -Maximum).Maximum
    Length    = ($file | measure Length -Sum).Sum
  }
} | ConvertTo-Csv -NoTypeInformation

568 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 14:01:26.72 ID:5ly2Ski6.net]
いや、こうか。
Get-ChildItem -LiteralPath <親フォルダ> -Directory | %{
  $file = @($_ | Get-ChildItem -Force -Recurse -File)
  [PSCustomObject] @{
    Path     = $_.FullName
    LastWriteTime = ($file | measure LastWriteTime -Maximum).Maximum
    Length    = ($file | measure Length -Sum).Sum
  }
} | ConvertTo-Csv -NoTypeInformation

569 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 14:13:19.66 ID:76wlmrvm.net]
試してないけどフォルダにファイルが1個も無い場合を考慮できてない気がする

570 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 14:48:45.69 ID:5ly2Ski6.net]
知らんかった。前者つもりだった。
(@() | measure -Sum).Sum → 0
(@() | measure Length -Sum).Sum → Null



571 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 15:45:18.22 ID:76wlmrvm.net]
powershellはgciはともかくmeasureが遅くてファイルが多くなると辛くなるね
結局C#に丸投げとかの手段になりそう

572 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 16:18:35.15 ID:PDKGWlWe.net]
試してないけど
Get-ChildItem -LiteralPath <親フォルダ> -Directory | %{
 $Stat = $_ | Get-ChildItem -Force -Recurse -File | Measure-Object LastWriteTimeLastWriteTime, Length -Sum -Maximum
 [PSCustomObject] @{
  Path     = $_.FullName
  LastWriteTime = $Stat[0].Maximum
  Length    = $Stat[1].Sum
 }
} | ConvertTo-Csv -NoTypeInformation
ってやると多少効率的かと

573 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 17:09:36.54 ID:UvTk6pcp.net]
>>561
まあC#でやった方が速いわな

574 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 19:58:47.42 ID:5ly2Ski6.net]
>>562
なるほどな〜、余分な集計をする事になるとしても
measureを1回で済ませられれば効率的な可能性があるのか、
さらにパイプラインで列挙と集計が同時進行になる可能性もあったり?
と思い試してみたけど、残念ながらLastWriteTimeの-Sumがダメらしい。
-ea:SilentlyContinueなら?と思ったがLengthのMaximumしか出ない。
でもこのアイデアは使えそう。

575 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 20:11:16.46 ID:PDKGWlWe.net]
>>564
ああなるほど、だから小細工してたのか、すまんかった
てか、初めからURL書いとけば良かったな

$Stat = $_ | Get-ChildItem -Force -Recurse -File | Measure-Object LastWriteTime.Ticks, Length -Sum -Maximum
[PSCustomObject] @{
 Path     = $_.FullName
 LastWriteTime = [DateTime][Int64]$Stat[0].Maximum
 Length    = $Stat[1].Sum
}

https://stackoverflow.com/questions/66697384/measure-multiple-properties

576 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 21:00:46.43 ID:UvTk6pcp.net]
>>565
さも自分で考えたかのように書いて劣化パクリかよ

577 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 21:03:35.79 ID:PDKGWlWe.net]
そりゃすまんな

578 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 21:18:28.66 ID:5ly2Ski6.net]
PSv7だとmeasureに集計プロパティ使えるのか。
PSv5なので試せないのが残念。

速度の話が出てたからmeasureの速度がどんなもんか>>558で計ってみたら
自環境だと普通の実装(最高水位線と足し算)より7〜8倍くらい遅いわ。
まあ、標準コマンドレットのよくある結果だな…。

579 名前:デフォルトの名無しさん mailto:sage [2022/09/29(木) 21:06:47.50 ID:OAAH5wr1.net]
タスクマネージャの詳細タブからaudiodg.exeの関係の設定を変更する操作をスクリプトで書けますか?

580 名前:デフォルトの名無しさん mailto:sage [2022/09/29(木) 21:46:11.19 ID:NUiBz/8K.net]
Get-Process "audiodg" | %{ $_.ProcessorAffinity = $コア数 }
$コア数は2のn乗で表したコア数の数
たとえば若い番号の3コアだけ割り当てたい場合は 0xf



581 名前:デフォルトの名無しさん mailto:sage [2022/09/29(木) 21:47:29.47 ID:NUiBz/8K.net]
上の3は4の間違い
もちろんタスクマネージャーをいじろうと思えばできるけど面倒

582 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 01:54:30.65 ID:Ls0wbInl.net]
>>570
わからん・・・
2の4乗=16 != 0xf ?
4=2の2乗 だと 0x2 ?

コア数というよりフラグ?マスク?ってこと?

583 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 05:17:13.01 ID:oHn8O8ll.net]
マスクだね
https://learn.microsoft.com/ja-jp/dotnet/api/system.diagnostics.process.processoraffinity

584 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 09:21:08.41 ID:ZYrZXJKF.net]
皆さんありがとうございます!

585 名前:デフォルトの名無しさん mailto:sage [2022/10/31(月) 09:21:34.51 ID:fKpjF07r.net]
comobjectでofficeを操作してるとき、
$xxx.Count() が 2なのに
$xxx[0] 範囲外
$xxx[1] 範囲内
$xxx[2] 範囲内
$xxx[3] 範囲外
みたいなアクセスになることがあるんやが
これはどう理解すればええんや?

586 名前:デフォルトの名無しさん mailto:sage [2022/10/31(月) 09:37:52.98 ID:jAJ0SKjr.net]
Item使わないからじゃね

587 名前:デフォルトの名無しさん mailto:sage [2022/10/31(月) 12:19:33.83 ID:K5+OjW4X.net]
Excelってたしか値も書式もないセルはオブジェクト自体が存在しない扱いになるので、インデックスが0から始まるとは限らなかったはず
データが取れる前提で処理するとうまく行かない

588 名前:デフォルトの名無しさん mailto:sage [2022/10/31(月) 23:20:47.42 ID:9ETwK7p6.net]
>>576
これかも
明日試してみるわ!サンクス!

>>577
これは怖いな
今回は関係なさそうだけど、心に留めておくわ、サンクス

589 名前:デフォルトの名無しさん mailto:sage [2022/11/01(火) 16:19:30.34 ID:3yQnaOmT.net]
Excelは1オリジンやで

590 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 21:25:18.64 ID:HyYadl7b.net]
誰かmtkclient教えてクレメンス



591 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 12:43:06.89 ID:xY1K1bhL.net]
>>566
>>555からの流れ、色んな書き方があるんだなー、と非常に為になった

592 名前:デフォルトの名無しさん [2022/11/06(日) 19:05:17.89 ID:vSW2pkDA.net]
$a = "abc::de/f/ghi/123jk"
$b = $a.TrimEnd("/")
をしても$bの出力が「abc::de/f/ghi/」にならないのですが、どこが間違っているのでしょうか?

593 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 19:19:37.21 ID:NZll9bPy.net]
>>582
同じ勘違いしたことある
指定文字「を」末尾からtrimするのがTrimEnd

$a.TrimEnd("jk123")

Trimメソッドは正規表現使えないからreplaceステートメントをつかう

$a -replace "\w*$",''

594 名前:デフォルトの名無しさん [2022/11/06(日) 23:51:09.18 ID:vSW2pkDA.net]
>>583
ありがとうございます!
今回はreplaceを使っていこうと思います

595 名前:デフォルトの名無しさん mailto:sage [2022/11/10(木) 20:57:05.64 ID:bawORDDu.net]
PowerShell 7.3 General Availability
https://devblogs.microsoft.com/powershell/powershell-7-3-general-availability/
What's New in PowerShell 7.3
https://learn.microsoft.com/en-us/powershell/scripting/whats-new/what-s-new-in-powershell-73

596 名前:デフォルトの名無しさん mailto:sage [2022/11/12(土) 14:51:35.07 ID:p3H1JcgM.net]
>>585 日本語訳

PowerShell 7.3 の新機能
https://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/what-s-new-in-powershell-73

597 名前:デフォルトの名無しさん mailto:sage [2022/11/12(土) 15:22:51.03 ID:c/ILT9OL.net]
11でもPowershell起動すると新しいのお試ししろとか表示されるけど5.1で十分だよなぁ
他の鯖系のベンダーのモジュールが5.1に対応しなくなったら考えるわ程度

598 名前:デフォルトの名無しさん mailto:sage [2022/11/12(土) 19:04:11.88 ID:lKqjLh4g.net]
>>586
前からexperimentalで有ったのは知ってたし、オプションだから嫌なら切ればいいんだけども…

cmdから呼ばれる想定のコマンドは引数処理に癖があるからと

599 名前:いって、特定のプログラムのみ特別扱いするワークアラウンド的挙動にはちょっと賛同できない
ワークアラウンドというのはユーザーがやるものだ

pwsh側で個別対応をするとしても、ユーザーが期待する形式の引数を取って、コマンドの期待する形式に変換するラッパースクリプトを用意すれば済むだけの話

普段linux/macでpwsh使ってるから、どれ程の癖なのかは図りかねるが、
[]
[ここ壊れてます]

600 名前:デフォルトの名無しさん mailto:sage [2022/11/14(月) 01:13:06.37 ID:zoPzNIvr.net]
$obj.('行');

1. 上記を7.3で実行するとハングする。
2. 5.1や7.2ではハングしない。
3. $prop = '行'; $obj.$prop; でもハングする。
4. '行'が違う言葉だとハングしない。
5. $obj.行; だとハングしない。
バグ?バグなの?ゲイツに電凸していいの?



601 名前:589 mailto:sage [2022/11/14(月) 01:23:18.32 ID:zoPzNIvr.net]
あ環境はWindows11とmacOS13で再現してます。連投スマソ

602 名前:589 mailto:sage [2022/11/14(月) 21:56:16.00 ID:zoPzNIvr.net]
589の条件4についてだけど、
$obj.([System.Text.Encoding]::UTF8.GetString((0xE8, 0xA1, 0x8C)));
でもハングして、UTF-8での先頭バイトが0xE8だった場合にハングするっぽい。
毎回ハングするのであんまり回数試してないけど。

603 名前:デフォルトの名無しさん mailto:sage [2022/11/15(火) 01:46:29.41 ID:E2xRIJUz.net]
まともにテストしてないか
変なメンテナが紛れてるか

604 名前:デフォルトの名無しさん mailto:sage [2022/11/15(火) 11:09:43.75 ID:ADWqgLY3.net]
7.30-preview.2 Core win10(en-US)だけど大丈夫な感じ

$gyo =[System.Text.Encoding]::UTF8.GetString((0xE8, 0xA1, 0x8C)))
$gyo

$trans=@{$gyo="go"}
$trans.$gyo, $trans[$gyo]
go

(まだ日本語IME入れてない新品なので行が入力できないのはご愛嬌)
属性/キーはハッシュ可能な任意のビット列で構わないはずなので、単にエンコルーチンの問題のはず、7.30-preview-2以降のgitレポの差分みては

605 名前:デフォルトの名無しさん mailto:sage [2022/11/15(火) 11:40:25.67 ID:Xte85wf7.net]
cx-fxは開始バイトだから安定リリースで出してたらマルチバイト圏壊滅してそうだが

606 名前:589 mailto:sage [2022/11/16(水) 02:47:51.66 ID:VVslFgtK.net]
>>592-594 ども!
>>593 ありがとうございます。
preview.3 から preview.4の間でなんかあったとこまで突き止めましたが、
preview.3から5までのStart-PSBootstrapがバグっててビルドに予想以上に時間かかったからもう寝るお

607 名前:589 mailto:sage [2022/11/18(金) 02:58:42.77 ID:5YGh8aoa.net]
お巡りさんこの人でつ38909f7ee
でそのコミットの中身がこちら
Update .NET SDK version from `7.0.100-preview.2.22153.17` to `7.0.100-preview.4.22252.9` (#17061)
おふぅ。PowerShellのバグを追っていて大変なものを見つけてしまったーどうしよう?

608 名前:デフォルトの名無しさん mailto:sage [2022/11/29(火) 18:07:22.13 ID:bVQqRFK0.net]
以前は PowerShell の日本語ドキュメントのリポジトリが Github に置いてあったはずですが今は消えていますよね?
事情がよくわからないんですが、マイクロソフトとしてはコミュニティで日本語翻訳を運用しない (機械翻訳でやっていく?) ということなんでしょうか。

それはそれとして、諸事情でネットワーク接続できない場所で日本語ドキュメントを読みたいんですが
どこかでまとめてダウンロードする方法とかありませんかね?

609 名前:デフォルトの名無しさん [2022/11/29(火) 21:34:29.76 ID:S4GKm+YH.net]
>>597
マイクロソフトにかきらず、英語以外の言語に翻訳することをみんなやめてしまっただけ。

ソフトウェアの更新スピードが速すぎて、ドキュメントを人間が翻訳する時間がない。

610 名前:デフォルトの名無しさん mailto:sage [2022/11/29(火) 21:48:53.54 ID:noJ3pHan.net]
日本マイクソロフトは何してんの



611 名前:デフォルトの名無しさん mailto:sage [2022/11/29(火) 23:10:55.01 ID:F0R68kvV.net]
日本語にすると曖昧になっちゃうからな
英語で厳密に説明されたほうがいいだろうし、ソフトウェア技術者だったら英語は素養の一つだね

612 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 01:07:23.00 ID:oNUduEv2.net]
>>599
ちょまどはイベントに参加したり楽しくやってる

613 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 01:12:58.71 ID:TaPBZKHt.net]
文字列検索する時は、ラテン文字のキーワードが検索結果に埋もれない日本語ドキュメントのほうが便利

614 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 02:05:17.65 ID:k8p89eha.net]
>>597
Get-Helpで取れる情報ならUiCulture指定してSave-Help
https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_updatable_help
それ以外ならGitHubから英語ドキュメント落としてきて機械翻訳かな
オフライン環境でスクリプト書く気はしないから必要なドキュメントは限られるのでは

615 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 08:53:37.63 ID:QfqHtuzd.net]
どうしてもドキュメントを日本語化してほしいなら16ビット時代みたいに
日本語版がリリースされる頃には英語版の新バージョンがリリースされている
みたいな事になってもおま国とか文句言わないようにしないとね
英語版が完成してからじゃないと翻訳作業を始められないんだから

616 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 12:40:03.59 ID:4G7kek1Y.net]
Google, DeepL, みらい翻訳

「みんなの自動翻訳@TexTra®」は、
国立研究開発法人情報通信研究機構(NICT)が開発した自動翻訳サイトです。無料
mt-auto-minhon-mlt.ucri.jgn-x.jp/

翻訳したいサイトのURLを入力するだけで、自動翻訳結果をエディタ上に再現

617 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 13:17:37.01 ID:Occ07s0g.net]
機械が無料で一瞬でそれなりの翻訳をしてくれる時代になったのに
わざわざ多ヵ国の翻訳チームを雇って変わり続ける膨大なドキュメントへの人件費を出す判断なんてできんだろなあ

618 名前:597 mailto:sage [2022/11/30(水) 17:21:56.68 ID:zA9UzzGK.net]
私は現時点では PowerShell について全く知識を持たず、
入門的な資料を移動中の合間にタブレットコンピュータで読みたいと考えています。
(通信は出来ないので事前に入れておく必要があります。)

基本理念をわかれば個々のコマンドの資料はたぶん英語でも理解できると思うんですが
新しい概念そのものを英語で読むのはしんどいです。

オフラインで読みたいと思うと ePub (などの電子書籍形式) になっているとやりやすくて
そうするには元が Markdown なら一発で出来ると思ったんですが、
機械翻訳を通してその形に持っていくとなると面倒ですね。

619 名前:605 mailto:sage [2022/11/30(水) 17:40:14.72 ID:4G7kek1Y.net]
Markdown は、HTML になるから、
「みんなの自動翻訳@TexTra®」で翻訳できるのでは?

翻訳したいサイトのURLを入力するだけで、自動翻訳結果をエディタ上に再現と書いてあるから、
ローカルPC にある、HTMLへのパスを入力すれば?

620 名前:597 mailto:sage [2022/11/30(水) 18:10:28.67 ID:zA9UzzGK.net]
>>608
翻訳できることにはなんの疑いも持ってないですよ。
コマンド一発で出来るツールはないので手間がかかると言ってます。



621 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 21:29:56.51 ID:QfqHtuzd.net]
適当な電子書籍の解説本でも買えば?

622 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 23:01:06.28 ID:k8p89eha.net]
過去の公式日本語訳が出てきたとして、基本理念を理解したい人の役に立つレベルとは思えない
電子書籍買って読むほうがいい

623 名前:デフォルトの名無しさん mailto:sage [2022/12/01(木) 08:18:35.61 ID:iTNwCGJv.net]
インアクションの邦訳ぐらい?古いのしかないな

624 名前:デフォルトの名無しさん mailto:sage [2022/12/01(木) 13:08:12.37 ID:Qs+E1f1w.net]
もしも古い翻訳テキストが手元にあるなら
それでいいんじゃね
新しい要素だけググって調べてブラウザ上でctrl+Sするなりして保存しておけば?

625 名前:デフォルトの名無しさん [2022/12/03(土) 12:28:32.79 ID:Jt/U29yp.net]
配列の要素を逆順にしたものを得たいのですが, …たとえば,
$a = @(10, 0, 5)
これに対して
$a[-1..-$a.Length] …とすれば,@(5, 0, 10) が得られて,
それで不満は無いのですが,何かもっとシンプルに書ける気がして.
(→ でもこれって $a[-1..0] とは書けないんですね.)

あるいは
[array]::Reverse($a)
とすることで,$a 自体が逆順の中身に変えられるのですが
でも $a自体は 変えたく無いのです

感覚的には
$a.Reverse() とか
$a | Reverse-Object みたいに書けたらいいのに
とは思うのですが(…そんなものは無い)

文字列だったら
[linq.enumerable]::Reverse("abcdef") で逆順を得られるのに
同じ場所に 数値の配列を書いて
[linq.enumerable]::Reverse(@(0,5,1,2))
…としても,何故かできない (なぜなのかはc#に勉強不足な私には分からず)

ってなわけで,別に困ってるわけでは無いのですが
もっと シンプルな書き方ってありますか

626 名前:デフォルトの名無しさん [2022/12/03(土) 14:39:08.81 ID:H3EtATlx.net]
$a[length - 1 - n]

627 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 15:49:40.73 ID:h4dim/Vw.net]
>>614
とりあえず、$a[-1..-$a.Length]だと-1,0,1で並ぶから@(5,10,0)になっちゃうはず。
$a[$a.length..0] が正。
個人的にはlengthじゃなくてcount使ってほしい。

後はsort-object使うか。
$a|sort -des でいける。
ただし遅いので巨大配列には向かない。

628 名前:デフォルトの名無しさん [2022/12/03(土) 18:40:22.74 ID:Jt/U29yp.net]
>>616
$a[$a.Count..0] 言われてみれば! …これ使わせていただきます
なお,sort を使うと,どうしても数値でsortされてしまうので うまくいかない感じです
何の意味も無い基準でsortして(何の順番も変えないで) -desだけしてくれたらいいのですが

629 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 19:09:31.97 ID:K8Dj9wl7.net]
>>614
[linq.enumerable]::Reverse([int[]]@(0,5,1,2))
LinqのReverseはこれで動く

630 名前:デフォルトの名無しさん [2022/12/03(土) 19:46:36.52 ID:Jt/U29yp.net]
>>618 intの配列にcastってことなのか…半分くらいしか理解してませんが
ありがとうございます.
LINQは powershellだと 無理やり感があって,かえって使いにくい感じは ありますね



631 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 22:02:33.57 ID:vihcAie/.net]
Ruby なら、

reverse -> Array
reverse! -> self 破壊的変更

a = ["a", 2, true]
p a.reverse #=> [true, 2, "a"]
p a #=> ["a", 2, true] (変化なし)

a = ["a", 2, true]
p a.reverse! #=> [true, 2, "a"]
p a #=> [true, 2, "a"] 破壊的変更

632 名前:デフォルトの名無しさん [2022/12/05(月) 15:26:18.97 ID:9N6A06cG.net]
きっと とても初歩的なことだとは思うのですが

$a = "abc"
$job = start-job { write-host $a }
receive-job -Job $job # → 何も出力されない

これって スコープの問題なんでしょうか
{ブロック}の中の $aの中身を "abc"にしたいのですが

633 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 17:43:14.26 ID:sXIIIS0k.net]
$using:a
About_Remote_Variables

634 名前:デフォルトの名無しさん [2022/12/05(月) 18:59:35.95 ID:9N6A06cG.net]
>>622 ありがとうございます
ブロックの中の $a を $Using:$a と書けば望む動作になりました
まぁ、何でusingって名前なんだろ?とか
Remote Variablesとは言うけれど別にリモートじゃないし(?)など
まだ不思議な感じは残りますが…もうちょっと調べたり勉強してみます

635 名前:デフォルトの名無しさん [2022/12/05(月) 19:22:50.61 ID:9N6A06cG.net]
$a = "abc"
$job = start-job { param($str); write-host $str } -Arg $a
でも 受け渡せるんですね。

636 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 21:14:48.29 ID:Xw9Qnajp.net]
Start-Jobでスクリプトブロック実行すると
別プロセスのpowershell.exeが起動してそっちで動く。(少なくともPSv5.1では。)
イメージとしてはコンソールや.ps1から「powershell.exe -f 他スクリプト.ps1」で
他プロセスを動かすくらいに別スコープだと思ってればいいと思う。

637 名前:デフォルトの名無しさん [2022/12/06(火) 03:20:51.26 ID:PbeCdWM3.net]
>>599
マイクロソフトのサポートにはとんでもない質問が大量に押し寄せる。

Windows Serverが起動しなくなった。電源が入ってないけど、Windowsのバグに違いないやら、しつこい嫌がらせやら、女に変なことを聞く変態やらと3万円も払って電話してくる。

638 名前:デフォルトの名無しさん [2022/12/06(火) 03:22:42.62 ID:PbeCdWM3.net]
PowerShellのバージョンがわかりませんのでどうすればいいですか?

こんなのを3万円も払って教えてもらうのが日本人

639 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 06:55:15.41 ID:yvaEv+2c.net]
一時片手間にカスタマサポートやってたことあるけど結構トンデモ問合せは多い
いろいろ聞いて行ったら他社の製品の問合せだったなんてオチすらあるし

640 名前:デフォルトの名無しさん [2022/12/06(火) 07:03:21.20 ID:wGOv2qdu.net]
>>625 そういうイメージ…ということでわりと納得.
同じことですが…では、ブロックの中で処理中に 変数に何かを入れても
それは、receiveするまでは 取り出せないってことか…



641 名前:デフォルトの名無しさん mailto:sage [2022/12/19(月) 19:06:25.36 ID:ayS530mj.net]
functionの中でhashtable @{}を作成してその中にウィンドウと紐付いてるハンドルオブジェクトやらを入れて返して
functionの呼び出し側で使おうとしたら無効なオブジェクトやら何やらのエラーが出てまともに使えなかった
PSObjectに変換して返したらエラーは出なくなったがこれ何だろう
怖すぎなんだが

642 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 00:09:46.82 ID:5pWmYDMC.net]
参照型/値型とかその辺の理解は問題ない?
とエスパーしてみる

643 名前:デフォルトの名無しさん mailto:sage [2022/12/23(金) 17:58:06.26 ID:F84mgbO0.net]
紐付けてるオブジェクトやらは.NETの参照型ね
値型だったら恐らくこの問題は起きてないだろうし
PSCustomObjectのプロパティとhashtableの値への紐付けでオブジェクトの生存期間に差異があるようにしか見えないから
functionから戻る時に何か想定外な事が起きてるんだろうなあ

644 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 14:24:53.22 ID:r8IxISV7.net]
コマンド・プロンプトも一切つかったことない状況から
powershellの勉強最近始めたけど難しいね

先ず参考書籍少なすぎ
何から手を付けたらいいのか全くわからん

先輩諸兄はどんな感じで習得していったの?

645 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 14:35:15.62 ID:ZD0ehGa/.net]
必要に迫られて色々とネットで調べて解決策を探し回る
そのコードから理解できない部分や言語の基本を調べる(変数や表示の仕方とか色々と)
という泥縄式だな

646 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 15:00:48.14 ID:r8IxISV7.net]
ネットしかないのか、仕方ないな、、、

しばらくは苦しみながら覚えるしかないかぁ

647 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 15:45:26.24 ID:/tVTIbQ7.net]
Get-Help about_
で出てくるのを一通り読んどきゃ何も苦しむことなんてないだろ

648 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 17:56:17.16 ID:0E4juWNJ.net]
ある程度使えるようになってから書籍買って読んだら
「大体全部知ってるわ」ってなったから
ネットだけでもいけるだろ

649 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 18:20:49.07 ID:U6V4cNSL.net]
他の言語と違って思い込みて書かれた間違った記事が多いから警戒すべし

650 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 20:24:26.94 ID:jYPDn/gh.net]
ほかの開発言語やシェルプログラミングにまったく疎い状況からPoweshellで入門してゴリゴリ使いこなしてやろうという路線は正直筋が悪いと思う
とはいえ勉強のためにPythonあたりの入門書をやれとも言いづらい
やはり泥縄式かな



651 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 21:27:46.01 ID:T5RPj38W.net]
>>639
一応VBAとGASが多少できるなったから他の言語も余裕かな、っておもって
PowerShellに手を出したら苦戦してる感じ

一通り基礎を覚えたら実践的に色々と試してみたいけど
powershellは色々覚えることが多すぎてメンドイ、、、

652 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 21:53:19.53 ID:fSsOcWwB.net]
変数?配列?何それ状態から始めてる初心者だけど基本的な用語がわからないから検索にも苦労する
セオリーもわからないから無駄にあれこれやってあとはコメント書きまくってグチャグチャになってる

653 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 22:04:55.23 ID:vIW/uBHA.net]
PythonもJavaも全くコード書けないノンプログラマだけどPowerShellは分かり易い気がする

654 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 22:58:59.38 ID:B+wJL+Im.net]
素人だけど、「PowerShell実践ガイドブック」っていう本は、素人には理解しにくい仕様とかを理解するのにとても役に立った
ただ、いろいろ冗長でちょっと読みづらい本ではある

655 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 01:26:32.00 ID:++xg0WRh.net]
PowerShell上で cmd /C xxxx を使うのが最善という結論に到達する
こういうのでいいんだよ的な

656 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 14:16:21.29 ID:dmcJ6Qpo.net]
ヘルプが出来が良いので何も要らない気はするけど
ハック的なモノや中でどう動いてるとかはpowershellexplained、実用的な書法はPowerShellGetで人気のあるやつ読むとか

657 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 21:46:25.70 ID:D+6cXnGF.net]
PowerShell は配列周りがトリッキーなのを除けば比較的まともな言語だと思う

658 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 01:00:35.68 ID:036NTvOT.net]
覚え始めは Microsoft docs を探し、それでわからなければ個人の解説記事を探した
スクリプトを書くようになってからは about_ から知りたいことを追いかける事が増えた

上でも名前が上がった「PowerShell実践ガイドブック」は、ある程度できるようになってから読んだが
何もわからない状態で読むにも良いと思う
第2章までで基本的なことが身につく

659 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 15:03:24.27 ID:867KtYrP.net]
パワーシェルの勉強始めたいんですが、学習に良いサイトありませんか?

660 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 16:02:07.28 ID:HWC94+Gl.net]
>>648
実はこのスレだったりする
1つのサイト覗くよりたまにぜんぜん知らん知識が入ってくる
過去ログおすすめ



661 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 16:06:45.35 ID:HWC94+Gl.net]
あと間違った情報書く奴には必ず突っ込み入るから間違えたまま覚え事故も起き難くなる仕様だと個人的には思ってる

662 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 16:17:56.35 ID:HWC94+Gl.net]
powershell何某でぐぐって出てくる日本語の情報はなぜか間違ってたり思い込みで書かれた記事が放置されてて悲しい
情報源としてはstackoverflow辺りをまず探すのが安定
Microsoftの知りたかったことの全て系は役には立つけど知りたい事全てを補完できるわけではない

663 名前:デフォルトの名無しさん [2023/01/01(日) 00:27:17.84 ID:CeabMe2h.net]
やり方が多すぎて失敗しているものだからな

664 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 15:47:50.12 ID:naMqCIBL.net]
リリース当時は学生だったからPIAをむさぼり読んでたな、楽しい本だった
挙動で間違いやすいのは(スコープを除けば)基本パイプ周りだから、
パイプ使わないスクリプトを書いてけば初手で躓く要素は少ないと思う

665 名前:デフォルトの名無しさん [2023/01/03(火) 21:14:49.48 ID:AaMOQNR6.net]
>>653
シェルスクリプトを知っているのが前提だと思っていたが?

666 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 21:46:27.47 ID:cXTWG1PB.net]
パイプで間違う要素なんてあったっけ?
むしろ配列まわりの方が間違いやすい気がするが...

667 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 22:10:05.90 ID:naMqCIBL.net]
前提は知らんけど、配列回りで間違えるのがパイプ使ってる時では?

668 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 23:27:08.09 ID:cXTWG1PB.net]
>>656
いやパイプ関係なく PowerShell の配列は色々トリッキー

例えば複数のオブジェクトを配列で返すコマンドレットが要素が1つだけだとオブジェクト自体を返したりするとか
https://qiita.com/hitsumabushi845/items/fe4219ba9daa34f541c2

switch文に配列与えたら各要素を順番に適用する(要は勝手にループする)とか
https://step-learn.com/article/powershell/076-switch-loop.html

669 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 00:46:17.26 ID:v02S4T2G.net]
>>657
まさに前者をパイプ周り(のための)の仕様だって認識してる
カンマ演算子の使い方は知らないとできないけど、型指定しない変数に代入して原因がわからないってことはないでしょ
後者はforやforeach省略出来て便利ってだけで、トリッキーだとは思ったことないわ

670 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 03:45:39.75 ID:jtN0WhrQ.net]
switchの評価式に配列をぶち込む発想は他の言語経験有りなら起きないから無害だけど
function戻りの配列の扱いは慣れてても混乱するから特殊な事情が無い限りPSObjectや別のコンテナに入れて返す(脳死)



671 名前:デフォルトの名無しさん mailto:sage [2023/01/06(金) 23:20:27.35 ID:kugWcEru.net]
どなたか助けてください。相談です。

一つのファイルに置換したい複数の数列(0.005→0.000、0.006→0.001、0.007→0.002、etc‥)が存在した場合、うまく自動で全て置換する方法はないでしょうか?

下の置換のコマンドを繰り返し使用してるのですが明らかに非効率で何かうまくできないか考えてます。

(Get-Content ファイル名) | foreach { $_ -replace "置換前","置換後" } | Set-Content ファイル名

672 名前:デフォルトの名無しさん [2023/01/07(土) 08:57:10.32 ID:rjY6PjFx.net]
>>660
$hash = @{ 0.005 = 0.000; 0.006 = 0.001; 0.007 = 0.002 }
$hash[0.006]

とすると 0.001 が返るから、"置換後" にあたる部分を $hash["置換前"] とすればいい。
詳しくはハッシュとかハッシュテーブルでググれ

673 名前:デフォルトの名無しさん mailto:sage [2023/01/07(土) 14:47:12.03 ID:tZDUx9Ho.net]
ver6.0以降だとスクリプトブロック使えるから、一応こんな感じで一度にできることはできる

"対象の数値" -replace "^[-+]?[0-9]+[.]?[0-9]*", { [decimal]$_.value - 差分の数値 }

数字の足し引きならCSVデータとかで読みこんで処理した方がいいとは思うけど

674 名前:デフォルトの名無しさん mailto:sage [2023/01/07(土) 15:16:28.02 ID:fgMMnpAg.net]
>>661,662
すげー。ありがとうございます。

675 名前:デフォルトの名無しさん [2023/01/08(日) 03:23:42.25 ID:nZw+zsKC.net]
0.005を足した数値にしたいと書いてないのが不思議

質問者は聞き方がわかっていない

676 名前:デフォルトの名無しさん mailto:sage [2023/01/08(日) 09:53:58.06 ID:n7Qx+Bf+.net]
ちなみに、v5でも[regex]::Replace()のMatchEvaluatorにスクリプトブロックを渡せるから
>>662より手軽さが劣るけど同様の事ができる。

677 名前:デフォルトの名無しさん [2023/01/09(月) 14:33:22.12 ID:2QUdKeZJ.net]
サブディレクトリ以下の全てのファイルに対し、ゾーンIDの削除をしたいのですが、
各ファイルのゾーンIDは
Get-ChildItem -Recurse -File | ?{
$_ | Get-Item -Stream Zone.Identifier -ErrorAction Ignore;
} | Remove-Item -Stream Zone.Identifier;
に書けばできるみたいです。

powershell の勉強のため、下記のような書き方だと、どのように書けばできるのでしょうか?
$itemList = Get-ChildItem $targetFolder -Recurse;
foreach($item in $itemList){
Get-Item -Stream Zone.Identifier -ErrorAction Ignore;
}

678 名前:デフォルトの名無しさん mailto:sage [2023/01/09(月) 15:34:37.62 ID:2yNmR2Eh.net]
>>666
こういうこと?
foreach($item in $itemList){
if (Get-Item -LiteralPath $item.FullName -Stream Zone.Identifier -ErrorAction Ignore) {
Remove-Item -LiteralPath $item.FullName -Stream Zone.Identifier
}
}
もちろん$itemはLiteralPathの代わりにパイプでオブジェクトごと渡してもいいと思う

679 名前:デフォルトの名無しさん [2023/01/09(月) 15:52:05.35 ID:2QUdKeZJ.net]
>>667
ありがとうございます。
勉強になりました。

680 名前:デフォルトの名無しさん mailto:sage [2023/01/10(火) 05:44:39.22 ID:bjV4/8ri.net]
例えば、Ruby で、再帰的にフォルダのサイズを求めてみると、

require 'win32ole'
fso = WIN32OLE.new( 'Scripting.FileSystemObject' )

# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠しフォルダ・ファイルを除く。
# /**/* で再帰的に、以下の全てのフォルダ・ファイルを走査する
dir_path = "C:/Users/Owner/Documents/**/*"

target_dirs = Dir.glob( dir_path )
.select { |full_path| File.directory?( full_path ) } # フォルダのみ
.each do |folder|
folder_obj = fso.GetFolder( folder )

puts File.expand_path( folder_obj.path ) # \ を、/ に変換する
puts "#{ folder_obj.name } : #{ folder_obj.size }"
end

出力
C:/Users/Owner/Documents/a
a : 14231
C:/Users/Owner/Documents/a/b
b : 4666

# next で、次の繰り返しに進む事もできるが、
# select みたいなフィルターで絞り込む方が、可読性が高い
Dir.glob( dir_path ).each do |full_path|
next unless File.directory?( full_path ) # フォルダだけを処理する

puts full_path
end



681 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 12:43:06.27 ID:y+pH12Ov.net]
Tree /fとget-childitem select-object Full name,を組み合わせたデータがほしいのですが、ご存知の方、ご教示願います。

682 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 18:21:06.24 ID:g43oPRJS.net]
>>670
名前の通り再帰処理でフォルダのツリーデータ構造を作ってから出力する事になる。
powershellの関数呼び出しは100ぐらいのネストでスタックオーバーフローするので、
ある程度動作確認が出来たら再帰処理を配列とループに変換するか、
C#なりで書き直す必要があるかも。

683 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 23:52:13.30 ID:Aq+myoAC.net]
>>670
https://www.powershellgallery.com/packages/Show-Tree/1.0.0
146行目を書き換え Write-Output ("{0}+---{1}" -f $start, ($PSDriveFullPath))

684 名前:670 mailto:sage [2023/01/24(火) 00:18:36.99 ID:splC6Inp.net]
>>672
ありがとうございますm(_ _)m。できました。スクリプトの実行が無効になっているため、読み込むことができません。と出ましたが、ポリシーを変更してできました。
>>671
ありがとうございます。制限があるのですね。

685 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 20:31:25.08 ID:s0xdk+qH.net]
@("2023/01/01,123","2023-01-02,abc","2023 01 03,あいう") | convertfrom-string -delimiter "," | sort-object p1 -descending | convertto-csv -notypeinformation
"yyyy/MM/dd"っぽいと勝手に日付時間の形式に変換されるのですがされないようにできますか?
windows10 PSVersion 5.1.19041.2364

686 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 21:02:50.26 ID:s0xdk+qH.net]
@("`"2023/01/01`",`"123`"","`"2023/01/02`",`"abc`"","`"2023/01/03`",`"あいう`"") | `
convertfrom-string -delimiter "," | sort-object p1 -descending | foreach-object {"$($_.p1),$($_.p2)"}
こうすれば出来たっぽいけど何かめんどくさい

687 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 21:55:45.34 ID:Igk1TEx9.net]
>>674
日付でソートするならばConvertFrom-Stringによる日付処理のままDateTime型で扱うのが正しいのでは?

688 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 22:42:40.57 ID:s0xdk+qH.net]
csv出力する際に "2023/01/01" が "2023/01/01 00:00:00" となるのを避けたいということです
ソート部分は別の処理をするかもしれないです
わかり難くてすいません
あとは tostring() で変換し直すかくらいでしょうか

689 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 23:16:16.35 ID:4iQ2gNuN.net]
>>674
676 の方針で書き換え量少なめパターン
@("2023/01/01,123","2023-01-02,abc","2023 01 03,あいう") | convertfrom-string -delimiter "," | % { $_.P1 = $_.P1.ToShortDateString() ; $_ } | sort-object p1 -descending | convertto-csv -notypeinformation

Convertfrom-String を使いつつ変換したくないという裏には深い事情がありそうだが
その深い事情を無視していいなら新しくオブジェクトを作るのが楽かな
@("2023/01/01,123","2023-01-02,abc","2023 01 03,あいう") | %{ [PSCustomObject] @{ 'Date'=$_.split(',')[0]; 'content'=$_.split(',')[1] } }

690 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 23:25:37.64 ID:KpfZjU7w.net]
自分もConvertfrom-Stringさえ使わなければ楽だと思うが、
当初の質問通りConvertfrom-StringでDateTime型への自動変換を避ける方法、
という事なら
$a = @("2023/01/01,123", "2023-01-02,abc", "2023 01 03,あいう")
$t = @"
{p1*:2023/01/01},{p2:123}
{p1*:*},{p2:*}
"@
$a | ConvertFrom-String -TemplateContent $t

p1 p2
-- --
2023/01/01 123
2023-01-02 abc
2023 01 03 あいう



691 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 23:59:48.39 ID:s0xdk+qH.net]
>>678−679
ありがとうございます、参考にさせて頂きます
convertfrom-string を使っているのは前に使って動いてるからヨシッ!の精神と圧倒的な知識不足の為です

692 名前:674 mailto:sage [2023/02/09(木) 22:15:00.08 ID:Zgr5da8a.net]
PSCustomObject なんて便利なものがあるんですね
おかげで Convertfrom-String も使わないで済むようになり
日付の自動変換もされなくなりました、ありがとうございました

693 名前:デフォルトの名無しさん [2023/02/09(木) 23:20:46.77 ID:wH9zoD6W.net]
本来、肩こりを和らげるマッサージの福利厚生の充実よりも、肩こりしない環境にすることが重要なわけだが、
PowerShellやってる人は、肩こりを和らげるマッサージを喜ぶ傾向が顕著

694 名前:デフォルトの名無しさん mailto:sage [2023/02/09(木) 23:53:02.68 ID:KDi1Xk2q.net]
秀逸な例えをしたと思ってそう

695 名前:デフォルトの名無しさん mailto:sage [2023/02/10(金) 10:20:51.76 ID:UXgVE9re.net]
肩こりしない環境ってなんだろ
コマンドプロンプト?

696 名前:デフォルトの名無しさん mailto:sage [2023/02/10(金) 10:29:00.89 ID:SZzF5oES.net]
自分の慣れてる環境のことだろ

697 名前:デフォルトの名無しさん mailto:sage [2023/02/10(金) 10:36:58.88 ID:SshlofV9.net]
rubyってことかもな
これを言ったのがいつも突然出てくるruby野郎だったら間違いなくrubyだと言える

698 名前:デフォルトの名無しさん mailto:sage [2023/02/10(金) 11:52:35.79 ID:EJFy9nhI.net]
肩こりにはCUIはダメ
ぐいぐいするのが効くでしょう(秀逸)

699 名前:デフォルトの名無しさん mailto:sage [2023/02/10(金) 14:00:16.56 ID:fdH5JkI3.net]
Ruby では「2023/01/01, 2023-01-02, 2023 01 03」の内、
最後の形式だけ、Date.parse で日付オブジェクトに変換できない

日付オブジェクトに変換せず、文字列のままソートするのが簡単

date_texts = %w(2023/01/03 2023/01/01 2023/01/02)
p date_texts.sort # 日付の文字列でソート

#=> ["2023/01/01", "2023/01/02", "2023/01/03"]

# 要素内に空白を含むので、\ で要素内の空白をエスケープする
date_texts = %w(2023/01/03\ あいう 2023/01/01\ 123 2023/01/02\ abc)
p date_texts.sort # 全体の文字列でソート

#=> ["2023/01/01 123", "2023/01/02 abc", "2023/01/03 あいう"]

700 名前:688 mailto:sage [2023/02/10(金) 14:01:04.70 ID:fdH5JkI3.net]
Ruby で仮に、2列のCSV テキストとみなした場合でも、
sort_by で任意の列のソート順で、行をソートできる

require 'csv'

input = <<"EOT"
2023/01/03 あいう
2023/01/01 123
2023/01/02 abc
EOT

options = { col_sep:



701 名前: " " } # 空白区切り

p input_ary = CSV.parse( input, options ) # 2次元配列
#=> [ ["2023/01/03", "あいう"], ["2023/01/01", "123"], ["2023/01/02", "abc"] ]

# 日付列でソートする
p result_ary = input_ary.sort_by{ |row| row[ 0 ] }.map( &:itself )
#=> [ ["2023/01/01", "123"], ["2023/01/02", "abc"], ["2023/01/03", "あいう"] ]

# 2次元配列を、CSV 文字列に変換する
puts csv_str = result_ary.map( &:to_csv ).join

カンマ区切りで出力
2023/01/01,123
2023/01/02,abc
2023/01/03,あいう
[]
[ここ壊れてます]

702 名前:688 mailto:sage [2023/02/10(金) 17:56:45.48 ID:A9tz9okE.net]
Ruby の日付オブジェクトには、数十種類の書式がある

require 'date'

# デフォルトの書式は、下と同じ
puts date = Date.parse( '2023/01/01' )
#=> 2023-01-01

# %F: %Y-%m-%d と同等 (ISO 8601の日付フォーマット)
puts date.strftime( '%F' )
#=> 2023-01-01

# %T: 24時間制の時刻。%H:%M:%S と同等
puts date.strftime( '%F %T' )
#=> 2023-01-01 00:00:00

703 名前:デフォルトの名無しさん [2023/02/10(金) 21:41:15.34 ID:TDizb0jh.net]
目的と手段があべこべになってるって意味だよ、察しろよ

704 名前:デフォルトの名無しさん mailto:sage [2023/02/12(日) 21:55:38.94 ID:pO8qooq/.net]
確かにRubyを使うこと自体が目的になってる奴いるよな

705 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 17:44:45.89 ID:WNIjE3rx.net]
Excelを操作しようとしたら酷く遅い。
これは工夫が足りない感じ?

やりたいのは3000行、100列ぐらいに関数が詰まってて、その中でエラーとなってるセルを見つけること。
関数が別のブックを参照してて、その別ブックは日々自動生成されるからその生成されかたによってはどうしてもエラーになってしまう。

VBAでも出来るけど、他と併せて考えるとPowerShell向きの処理だから、これで始めたのに。
PowerShellからVBAのプロシージャ呼び出せば、この部分の処理は一瞬だけど、それは本末転倒だし。

706 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 18:06:52.69 ID:nz9Z1NDi.net]
>>693
COMのIDispatch経由だからVBAと比較すれば当然遅くなるよ
一個一個のセルを見て回るのなんかは特に遅い
powershell自体も遅いから遅さはさらに加速する
ワークブックを開けてるならCOMからVBAコードを動的に流し込んで処理させた方が全然速いかもしれない
CodeModule.InsertLines辺りでぐぐれば出てくると思う

707 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 21:45:54.83 ID:RKENxwK/.net]
全セルまとめて取ればどんな言語でも早いんじゃない?

708 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 01:42:49.14 ID:15y14fHP.net]
数式のチェックをするということならusedrange.formulaとかで二次元配列に入れてしまえば速いだろうね

709 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 07:28:37.93 ID:xSIr/CQB.net]
セルの値をチェックしたいのか数式をチェックしたいのかもわからんしそもそも既に作ってあるならその遅い部分のコード晒せばいいのに

としか思わん

710 名前:693 mailto:sage [2023/02/21(火) 12:34:29.62 ID:jIGEezda.net]
PowerShellでRangeに対してforeachを使ったら糞遅かったが、Range.Cellsに対して使ったら爆速でした。

VBAで.Cellsを付けないことは無いが、PowerShellだと書き方が変わるから気付かんかった。

ソースは仕事で晒せないが、記憶を頼りに再現したのを後で書くよ。



711 名前:デフォルトの名無しさん mailto:sage [2023/02/21(火) 15:29:46.97 ID:y0oxbjUQ.net]
やりたい内容によってはImportExcelとか使うといいかもしれない

712 名前:デフォルトの名無しさん mailto:sage [2023/02/21(火) 17:16:31.11 ID:mQxVjbPG.net]
Excel操作は真面目にやるとCOMの参照の管理と解放が大変で避けちゃう。
完全に自分用なら雑でもいいんだけどさ。
VBScriptくらいに気楽にやらせて欲しい。

713 名前:デフォルトの名無しさん mailto:sage [2023/02/21(火) 18:44:18.75 ID:7Z23bFwT.net]
あららSnoverさん去年退職しちゃったのか、、、
言語的には成熟してるし問題はないんだろうけど、残念だな

714 名前:デフォルトの名無しさん [2023/02/21(火) 19:36:25.83 ID:VTx8hARX.net]
>>698
素直にExcel VBAを書いた方が安全だよ。

715 名前:デフォルトの名無しさん mailto:sage [2023/02/24(金) 13:12:14.11 ID:xAv3d2xt.net]
gci -recでレジストリ検索出来るの便利だなって一昨日思った

716 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 21:04:03.19 ID:5eoJ3K3o.net]
大規模な PowerShell モジュールは Install-Module での導入がオススメです
https://jpwinsup.github.io/blog/2023/02/27/UserInterfaceAndApps/PowerShell/PowerShell-ImportModule-FunctionOverflow/

Windows PowerShell では、 1 セッションのうち利用できる関数 (Function) の数の上限を変数 $MaximumFunctionCount にて制御しており、既定では 4096 となります。
Import-Module にて PowerShell モジュールを導入しますと、この $MaximumFunctionCount で管理する関数の数にカウントされ 4096 を超えた場合にエラーが生じます。

Install-Module では、本事象は発生しませんので、Install-Module を、ご利用いただくことを推奨いたします。
単機能のモジュールであれば、今回のような制限が生じるほど大規模な関数 (Function) 数とならないですが、クラウド製品に対し提供されるモジュールは、大規模な関数数となる傾向がございます。
クラウド製品に対する PowerShell モジュールのご利用にはインターネット (オンライン) への接続が必須となりますため、Install-Module も利用可能でございます。

717 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 21:55:58.18 ID:NXRHGwBO.net]
vscodeのプラグインどうにかしてくれないかな
せめて参照関連はちゃんとして欲しい

718 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 23:08:46.00 ID:XEMkLhh3.net]
PowerShellの構文が分からなくなったときに今話題のChatGPTで質問してみたら
的確な回答返ってきてすげぇ助かったわ。もうパソコン教室は廃業だろこれ

719 名前:デフォルトの名無しさん mailto:sage [2023/03/10(金) 20:16:52.26 ID:qXeg3GIX.net]
ai のコード生成って結構すごいよね
コパイロット入れてるんだが、マジで打とうとしたコード先読みしてくる
インテリセンスみたいな数文字打って残りの補完じゃなくて、まるまる予測してきて更に当たってるっていう

720 名前:デフォルトの名無しさん mailto:sage [2023/03/15(水) 14:42:36.44 ID:o8REigww.net]
ここでいいですか

ttps://qiita.com/Midoliy/items/a033b763399c242dc5c5
C#をスクリプト言語として利用する方法

PowerShell 7.3.3 で、dotnet tool install -g dotnet-script を入力してもエラーになります↓

C:\Users\UserName0\AppData\Local\Temp\47744ec9-ca71-4312-b0e8-3f8bd18d5776\restore.csproj : error NU1101: パッケージ dotnet-scri
pt が見つかりません。ソース Microsoft Visual Studio Offline Packages には、この ID のパッケージが存在しません。
ツール パッケージを復元できませんでした。
ツール 'dotnet-script' をインストールできませんでした。この失敗は次の原因で生じた可能性があります。

* プレビュー リリースをインストールしようとしており、--version オプションを使用してバージョンを指定しなかった。
* この名前のパッケージが見つかったが、.NET ツールではなかった。
* 恐らくインターネットの接続の問題で、必須の NuGet フィードにアクセスできない。
* ツールの名前の誤入力。

パッケージの名前付けの強制を含む他の理由については、https://aka.ms/failure-installing-tool にアクセスしてください



721 名前:デフォルトの名無しさん mailto:sage [2023/03/15(水) 15:33:19.80 ID:IBd2LSQO.net]
そこ見てダメなら諦めたら
特にメリットないし

722 名前:デフォルトの名無しさん mailto:sage [2023/03/15(水) 21:33:00.90 ID:e2aqyp6Z.net]
>>708
https://stackoverflow.com/questions/58012732/unable-to-find-package-no-packages-exist-with-this-id-in-source-net-core
https://github.com/dotnet/sdk/issues/13429
を参考に英語のエラーメッセージでweb検索するとか。

723 名前:デフォルトの名無しさん mailto:sage [2023/03/17(金) 11:52:05.75 ID:1OmGmSd0.net]
>>707
コパイロットとやらはインタラクティブシェルでも使える?興味あり
gnureadlineうんこpsreadline最強と思ってたら思わぬ伏兵が…

bingのchatgptが話題になってるし、標準で付いてもおかしくないけど

724 名前:デフォルトの名無しさん mailto:sage [2023/03/17(金) 14:15:57.93 ID:piFUHGnm.net]
インタラクティブ(履歴)/スクリプトでもヒューリスティックにコンテキストを読んでくれるのは新しいね、もはや補完ではない気がするが

ところで-UseFussyが超便利

725 名前:デフォルトの名無しさん mailto:sage [2023/03/19(日) 10:19:36.25 ID:+AVX1Caz.net]
https://www.powershellgallery.com/packages?q=Copilot

726 名前:デフォルトの名無しさん mailto:sage [2023/03/27(月) 09:23:21.18 ID:qNF02T37.net]
f1で直近コマンドの、Alt-hで直近パラメータのヘルプがコマンドラインを汚さずにチラ見出来るけど
常時表示しておきたい

727 名前:デフォルトの名無しさん mailto:sage [2023/03/28(火) 15:38:45.60 ID:vZrgWFuJ.net]
>>714
https://learn.microsoft.com/en-us/powershell/scripting/learn/shell/dynamic-help?view=powershell-7.4

フックされてるShowCommandHelpあたりを改造してみては

728 名前:デフォルトの名無しさん mailto:sage [2023/03/31(金) 09:29:33.35 ID:Hum0KYCd.net]
コマンドプロンプトのstartコマンドのように
新しいウィンドウを作成せず、使うプロセッサを指定して起動するにはどうすれば良いですか

729 名前:デフォルトの名無しさん [2023/03/31(金) 10:04:55.21 ID:oEDBXBHf.net]
Add-Type によって、自作のクラスを使う処理を書いて、一応ちゃんと動くのですが
同じことを 何度もやろうとすると 二度目以降は「The type 〜 already exists.」と出て止まってしまいます.
そこで「既に そのタイプが存在しているかどうか」をチェックしたいのですが、これってどう書くんでしょうか

730 名前:デフォルトの名無しさん mailto:sage [2023/03/31(金) 22:12:52.48 ID:yFMegc6R.net]
>>717
こんなん
Add-Type @'
public class MyClass {
public void test() {
}
}
'@

if ("MyClass" -as [type]) {
"MyClass is exist"
}



731 名前:デフォルトの名無しさん mailto:sage [2023/03/31(金) 22:21:06.75 ID:bSGiEzAG.net]
>>716
(Start-Process -PassThru foo.exe).ProcessorAffinity = xxx

xxxの所で使いたいプロセッサを指定する

Start-Process -PassThru
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/start-process#-passthru
Process.ProcessorAffinity プロパティ
https://learn.microsoft.com/ja-jp/dotnet/api/system.diagnostics.process.processoraffinity

732 名前:デフォルトの名無しさん mailto:sage [2023/03/31(金) 22:35:53.19 ID:yFMegc6R.net]
>>719
>新しいウィンドウを作成せず
という指定が抜けてね?

733 名前:716 mailto:sage [2023/03/31(金) 22:58:55.98 ID:Hum0KYCd.net]
>>717
単純に try { [クラス] } catch { Add-Type 〜 } とか、知らんけど

>>719
Start-Processを使わない場合のように新しいウィンドウなしで起動したいです

734 名前:デフォルトの名無しさん mailto:sage [2023/03/31(金) 23:29:03.95 ID:bSGiEzAG.net]
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/start-process#-nonewwindow
-NoNewWindow
現在のコンソール ウィンドウで新しいプロセスを開始します。 Windows では、既定で PowerShell によって新しいウィンドウが開きます。

735 名前:716 mailto:sage [2023/03/31(金) 23:54:48.86 ID:Hum0KYCd.net]
>>722
最初はそれでいいと思ったんですが、コンソールの取り合いになります
(Start-Process netsh.exe -NoNewWindow とかで試すとわかりますが、くれぐれもご注意を)
取り合いにならないように -Wait も指定して
(Start-Process netsh.exe -NoNewWindow -Wait -PassThuru).ProcessorAffinity = xxx
とすると、-Wait が効きすぎて ProcessorAffinity をセットできないという罠

736 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 00:12:16.16 ID:rM0w1xSL.net]
つまり.NETのProcessorAffinityは存在するプロセスにしか適用できないから無理でいんじゃね
知らんけどWin32APIとかで別の方法を探った方がいいんじゃね

737 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 00:25:58.89 ID:rM0w1xSL.net]
たとえばWin32APIのCreateProcessにCREATE_SUSPENDEDというフラグがある
プロセスをサスペンド状態で作成してaffinity設定してからResumeThreadで開始
これでいけるんじゃね

738 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 03:49:24.51 ID:tD9Ph5o/.net]
Start-Jobの中で実行したら上手いこと裏でやってくれないだろうか

739 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 09:42:35.62 ID:nbrNF8T0.net]
Start-Process -NoNewWindow cmd.exe "/c start /affinity xxx /b foo.exe"

これくらいしか思い浮かばなかった

740 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 10:09:29.22 ID:rM0w1xSL.net]
定義が長くなったからこっちに貼り付けたよ
https://ideone.com/LOSuzD
使い方
bool [Win32API]::CreateProcessWithAffinity(appname, cmdline, affinity)
affinityはプロセスに直接設定するAPIが見つからなかったのでGet-ProcessをResumeThread前に呼び出して指定してる
サンプルはcmdを呼び出してpingをlocalhostに10回打ってる間にプロセス名とaffinity値を出してる



741 名前:727 mailto:sage [2023/04/01(土) 10:22:16.44 ID:nbrNF8T0.net]
Start-Process -NoNewWindow -Wait cmd.exe "/c start /affinity xxx /b foo.exe"
こうだった

742 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 10:27:57.30 ID:rM0w1xSL.net]
寝ぼけてた。コールバックの部分下だけで良かったわ
System.Diagnostics.Process.GetProcessById(pInfo.dwProcessId).ProcessorAffinity = (IntPtr)affinity;

743 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 10:32:18.54 ID:rM0w1xSL.net]
でもう一箇所、appnameに$nullを指定してもC#側型宣言で""に変換されてしまうので、CreateProcessの直前に下を追加しとくとcmdlineだけで動く
if (appname == "") { appname = null; }

744 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 10:52:36.56 ID:NrUMzMDg.net]
これパイプすればいいんだよ
ポイントは () を使わないこと

(Start-Process).ProcessorAffinity = xxx は NG
Start-Process | ForEach-Object {} で OK
(Start-Process) | ForEach-Object {} は NG
& { Start-Process } | ForEach-Object {} でも OK

745 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 11:09:34.29 ID:rM0w1xSL.net]
>>732
これ正解じゃない?
遠回りしたねえ

746 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 11:10:53.22 ID:rM0w1xSL.net]
Start-Process cmd.exe -ArgumentList '/c echo hello world & ping 127.0.0.1 -n 10' -NoNewWindow -PassThru | %{ $_.ProcessorAffinity = 1; $_ | select Name, ProcessorAffinity }

747 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 14:38:06.95 ID:khXUWf7f.net]
Start-Process cmd.exe -NoNewWindow -PassThru | % { $_.ProcessorAffinity = 1 } だと困る
Start-Process cmd.exe -NoNewWindow -PassThru -Wait | % { $_.ProcessorAffinity = 1 } か
Start-Process cmd.exe -NoNewWindow -PassThru | % { $_.ProcessorAffinity = 1; Wait-Process -Id $_.Id }

748 名前:デフォルトの名無しさん [2023/04/01(土) 16:54:32.28 ID:SzOWT/hN.net]
717です. 反応してくださったかた ありがとうございました

>>718
if ("MyClass" -as [type]) → なるほど!…これでした!

>>721
私も,とりあえずは
try{ [MyClass] >$null } catch{ Add-Type -Path "〜.cs" >$null }
で 済ませていたのですが
例外に たよる書き方は,なんとなくカッコ悪い感じがして(笑)

749 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 21:56:00.86 ID:sdpm0Gxz.net]
>>716
(Start-Process -FilePath 〜〜〜 -ArgumentList 〜〜〜 -WindowStyle Hidden

750 名前: -PassThru).ProcessorAffinity = 1 []
[ここ壊れてます]



751 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 22:32:49.48 ID:khXUWf7f.net]
それでは Start-Process を使わない場合と違って入力も出力もできない

752 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 22:58:19.34 ID:sdpm0Gxz.net]
あ〜、
> コマンドプロンプトのstartコマンドのように
> 新しいウィンドウを作成せず、使うプロセッサを指定して起動するにはどうすれば良いですか
というか
 新しいウィンドウを作成せず、
 コマンドプロンプトのstartコマンドのように使うプロセッサを指定して起動するにはどうすれば良いですか
という感じか。であればこれまでに出てた回答の方が正しいね。
ほぼ同じだけど自分なら
$proc = Start-Process -FilePath 〜 -NoNewWindow -PassThru; $proc.ProcessorAffinity = 1; $proc.WaitForExit();
みたいにするかなぁ。(でもStart-Processじゃなく小回りのきくProcessStartInfoを使うかな?)

753 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 00:15:44.70 ID:l9+T+h5c.net]
質問です。
外部コマンドの標準出力やエラー出力を一緒に変数に入れたいのですが、
$result=外部コマンド.exe 2>&1
この式で一見動作はしてるようのですが、外部コマンドからエラー出力があった場合に赤い色が付き、powershell的なエラーメッセージも追加されてしまいます。
意図としては色とか追加メッセージとかは不要で、純粋に外部コマンドの標準出力やエラー出力を一緒に変数に取り込みたいだけなのですが、
そういう場合どう記述したら良いでしょうか。

754 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 00:47:59.12 ID:h0WbN+8B.net]
外部コマンドの引数が不要またはシンプルなら、
簡単で分かりやすいのはcmd上で標準出力にする方法
$result=cmd /c "外部コマンド.exe 2>&1"

755 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 01:46:53.77 ID:l9+T+h5c.net]
>>741
cmd脱却を考えているので、できればpowershell流?の書き方があればお願いいたします

756 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 03:44:54.54 ID:byiZ93ic.net]
>>742
Powershellでcmdを使いこなす技術を鍛えたほうが幸せになれると思うよ

757 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 11:17:09.81 ID:l9+T+h5c.net]
ためしにChatGPTに質問してみたら以下の回答でした
質問「powershell上から外部コマンドを実行し、その標準出力とエラー出力を、powershellによる出力の加工を抑止した状態で1つの変数に入れたい」
$output = & <コマンド> 2>&1 | Out-String
Out-Stringは盲点でした。一応文字列として取得できているのでこれでいいのかな

758 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 11:29:33.76 ID:yOzYb5by.net]
PowerShellはあてにならないからcmdに頼ることも多いよな

Write-Host Test 1
New-Item -Path target1 -ItemType Directory
New-Item -Path junction1 -ItemType Junction -Value target1
Write-Host Test 2
New-Item -Path test2 -ItemType Directory
Push-Location -Path test2
New-Item -Path target2 -ItemType Directory
New-Item -Path junction2 -ItemType Junction -Value target2

これが失敗するなんて想像してなかった

759 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 15:23:02.64 ID:9IrG8+0n.net]
>>745
PowerShell5.1だと失敗しないな
7.3は駄目だった ターゲットのパスを絶対パスにすれば作れる

New-Item -ItemType Junction can't create relative link #18251
https://github.com/PowerShell/PowerShell/issues/18251

760 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 16:46:18.09 ID:yOzYb5by.net]
ジャンクションなら絶対パス必須でもいいけど
シンボリックリンクでは相対パスが使えないと不便

>>745 のテストをシンボリックリンクに変えてもやっぱりおかしい
ターゲットがディレクトリなのにファイルのシンボリックリンクになる
条件次第で逆にすることもできる
タイプ間違いだと補完や削除をするときに困るんだよな
だから最初からcmd.exeでmklinkしてる



761 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 21:47:00.28 ID:9IrG8+0n.net]
Target type detection (file/directory) for relative symlinks is still broken, even on Windows #15235
https://github.com/PowerShell/PowerShell/issues/15235

これか?
2年前に立ったissueなのにまだ直ってないみたい

762 名前:デフォルトの名無しさん mailto:sage [2023/04/03(月) 07:48:59.39 ID:Jr4h81FG.net]
>>739
あの〜、コマンドプロンプトのstartだと1行の
start /B /AFFINITY 1 cmd.exe
のように「新しいウィンドウを作成せず、使うプロセッサを指定して起動する」には
小回りのきくProcessStartInfoを使うとどう書くの?

763 名前:デフォルトの名無しさん mailto:sage [2023/04/03(月) 08:48:40.85 ID:hrmFy8ir.net]
.NETでの普通のやり方ならググるれば出てくるよ

764 名前:デフォルトの名無しさん mailto:sage [2023/04/03(月) 21:13:34.50 ID:d+sLTFCG.net]
例示ではプロセス起動・Process型オブジェクト取得にStart-Processを使ったけど
>>739は普段はProcessStartInfo使ってるってだけじゃないの。
私も引数あるときはStart-Process(-ArgumentList)避けてProcessクラス使う。

765 名前:デフォルトの名無しさん mailto:sage [2023/04/03(月) 21:20:59.87 ID:9kyxsKiX.net]
PowerShellってWebスクレイピングには向いてないですか?
Pythonで作った方がいいですか?
PowerShellは職場用のスクリプトを何個か作ったりして少し分かるのですが、Pythonはまったく不慣れなので迷ってます

766 名前:デフォルトの名無しさん mailto:sage [2023/04/03(月) 21:35:29.28 ID:NHigh4Tg.net]
Poweshellでちょっスクレイピング
sloppy-content.blog.jp/archives/12057529.html
【PowerShell】SeleniumモジュールでWebスクレイピングしたい
https://zenn.dev/hara_power/articles/815e3f3dc1e5655c4c22

767 名前:デフォルトの名無しさん mailto:sage [2023/04/03(月) 22:09:14.13 ID:FTaZkaBO.net]
Windowsに限ればスクレイピング以外にもブラウザに直接細工する手段が充実してるからライブラリ頼みのpythonより向いてるとも言える

768 名前:752 mailto:sage [2023/04/04(火) 10:40:01.35 ID:4xPC11r9.net]
>>753
>>754
ありがとうございます
PowerShellでやってみようと思います

769 名前:デフォルトの名無しさん mailto:sage [2023/04/08(土) 22:48:22.89 ID:wqsbQ+QM.net]
PowerShellでPersonal Communicationsを操作しようと思い
以下のサイトを参考にしようとしたのですが
https://www.tekizai.net/entry/2021/10/04/063000
64bit版のPowershellでは出来ないようです
64bit版でも動かせるように変更はできないでしょうか?

770 名前:デフォルトの名無しさん mailto:sage [2023/04/08(土) 23:26:55.43 ID:ymsLMaB3.net]
64bit環境用のPersonal CommunicationsのOCXやらが無い場合は32bitのpowershellからCreateObjectするしかないとは思うけど
そのサイトのVBA版では環境に関する言及がないね
32bit版Officeを使っているという前提で書いてるのかもしれないが試してみないと判らないね



771 名前:デフォルトの名無しさん [2023/04/10(月) 20:51:54.13 ID:4PCv5Fk3.net]
すいません、当方SEで技術的な質問です
administrator権限のユーザーでLinuxサーバーからパスワード認証でなく、秘密鍵と認証鍵の認証方式でwindowsサーバーにSSHを掛けたいのですが、administrator権限のユーザーですと、パスワードを聞かれてしまいます
他の権限のユーザーは問題無く認証されます
administrator権限では認証方式のSSHは使えないのでしょうか?

772 名前:デフォルトの名無しさん mailto:sage [2023/04/10(月) 21:12:02.69 ID:bM8RH+P4.net]
>>758
superuser.com/questions/1407020/ddg#1407042

773 名前:デフォルトの名無しさん [2023/04/10(月) 21:31:04.64 ID:4PCv5Fk3.net]
>>759
ありがとうございます
明日、業務で試してみます

774 名前:デフォルトの名無しさん mailto:sage [2023/04/14(金) 21:40:03.65 ID:qiPEiEw+.net]
Windowsのディスプレイ設定で拡大率を100%以外にしてると
フォームの文字がぼやけるんだけど、なにか解決策はありますか?


Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.text= "タイトルはぼやけない"
$label = New-Object System.Windows.Forms.Label
$label.Size = New-Object System.Drawing.Size(300,20)
$label.Text = "ディスプレイ拡大率が100%以外だと文字がぼやける"
$form.Controls.Add($label)
$form.ShowDialog()

775 名前:デフォルトの名無しさん mailto:sage [2023/04/14(金) 21:40:32.33 ID:qiPEiEw+.net]
ちなみにOSはWindows11です

776 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 13:51:30.62 ID:iq3ZlEDB.net]
その辺て外人もあまり正解に辿り着いてない箇所だな
俺も辿り着いたとは言えんけど面倒だった

777 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 14:12:07.08 ID:ig+gwe+P.net]
C#を使うのが最適解

778 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 15:02:15.83 ID:cOO792TH.net]
powershellじゃなくてWindowsFormsの問題でしょ
「WindowsForms ぼやけ」で検索したらいくらでも出てきたけど

779 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 19:25:15.71 ID:erslMsE0.net]
WPFで作れば違うのか?

780 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 20:21:51.02 ID:iq3ZlEDB.net]
ちょっと意識して組めばできなくはないから環境を変える程でもないな



781 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 22:14:25.62 ID:raQFwlCG.net]
c:\aaa\bbb\ccc\hhh
c:\aaa\ddd\eee
c:\aaa\fff\ggg(以下続く)
というフォルダ構造があった場合、ccc(サブフォルダhhhも含む)、eee、gggのフォルダを別のフォルダにコピーしたいんですがうまくいきません。

chatGPTに聞いたところ ($rootFolder=c:\aaa、$targetFolderはコピー先)
$targetFolders = Get-ChildItem $rootFolder -Recurse -Directory | Where-Object { $_.FullName -like "$rootFolder\*\*\[ceg]" }
となり、少し変更して
$targetFolders = Get-ChildItem $rootFolder -Recurse -Directory | Where-Object { $_.FullName -like "$rootFolder\*\*" }
としてみたんですが、これだとcccフォルダがコピー先に存在していた場合hhhフォルダがcccフォルダとは別にコピーされてしまいます。
同じフォルダ名があった場合サブフォルダの処理を飛ばしてフォルダ構造したままコピーする方法はないでしょうか。

782 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 22:16:07.91 ID:raQFwlCG.net]
フォルダ構造したまま→フォルダ構造を維持したまま

失礼しました。

783 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 23:22:30.72 ID:iq3ZlEDB.net]
・同じフォルダ名があった場合サブフォルダの処理を飛ばしたい
ってう制約を加えてchatGPTに聞いたらいいんじゃね

784 名前:768 mailto:sage [2023/04/16(日) 01:08:07.22 ID:i+x2SgN3.net]
>>770
試してますがうまくいきませんね。aaaやbbbが例えであることをうまく理解してくれなくて、
全てのフォルダ名を手入力する必要があるコードしか作ってくれません。○や△みたいな記号に置き換えても同じ。

get-childitemで特定の深さ以下のフォルダ名を取得することができればうまく行きそうですが、
-depthは特定の深さ「まで」のフォルダを検索するオプションですよね?
特定の深さ以下のフォルダを検索する方法はありませんか?

785 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 11:56:14.63 ID:QYDIaDii.net]
一発でrecursiveでやるのを諦めて泥臭く2重なり3重なりの繰り返し処理にして
自分でフォルダを掘り下げていけばいいんじゃないの

786 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 11:57:11.68 ID:QYDIaDii.net]
深さが動的なら関数にして再帰呼び出し

787 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 12:07:35.90 ID:Gz6gIEIr.net]
>>771
「特定の深さ以下」ではなく「特定の深さ直下」を対象としたいんだよね?

788 名前:デフォルトの名無しさん [2023/04/16(日) 12:38:10.68 ID:SPigkToS.net]
>>771
相対パスの概念がないのか?

789 名前:デフォルトの名無しさん [2023/04/16(日) 12:47:20.03 ID:SPigkToS.net]
>>768 はネタかもな

コピー先に何があるのかチェックしないという発想は、まったく理解できない。

初心者なら前提条件という概念がないのはわかる。

先にあったらこうする、そうでなかったらこうするなどの条件分岐がないなら、強引にやればいい。

そもそもROBOCOPYコマンドでできることをやろうとしているのは、これ学校の課題なのかなと思いました。

790 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 15:01:28.21 ID:EhcVUpdk.net]
深さ3のディレクトリをそのままコピーすりゃいいだけじゃないの?



791 名前:768 mailto:sage [2023/04/17(月) 01:51:03.87 ID:GaP+UugE.net]
>>774
そうなんですが、>>768だとd:\コピー先\ccc\hhhとしたいのにcccフォルダがすでにあると
d:\コピー先\ccc
d:\コピー先\hhhになっちゃうんですよね。

>>772の方法か、もしくは>>776robocopyとforeachで何とかできるか? とりあえず自分であがいてみます。

792 名前:デフォルトの名無しさん mailto:sage [2023/04/17(月) 02:46:16.45 ID:dBG5z/eM.net]
入出力をちゃんと定義できてないからおかしな事になる初心者あるあるだな

793 名前:デフォルトの名無しさん mailto:sage [2023/04/17(月) 11:31:05.75 ID:udj2SRYX.net]
特定の深度だけ処理してみた
※$Sourceはフルパス指定であること

param(
[string]
$Source,

# $Sourceからの相対深度
[int]
$RelativityDepth
)

# パスを\と/で区切って配列化
$SourceDirSplit = $Source.Split([System.IO.Path]::DirectorySeparatorChar).Split([System.IO.Path]::AltDirectorySeparatorChar)

foreach ($TargetDir in @(Get-ChildItem -LiteralPath $Source -Recurse -Directory))
{
# パスを\と/で区切って配列化
$TargetDirSplit = $TargetDir.FullName.Split([System.IO.Path]::DirectorySeparatorChar).Split([System.IO.Path]::AltDirectorySeparatorChar)

# 指定深度にあるDirを処理
if ($TargetDirSplit.Count -eq ($SourceDirSplit.Count + $RelativityDepth))
{
# 一致したディレクトリを返す
$TargetDir
}
}

794 名前:デフォルトの名無しさん mailto:sage [2023/04/19(水) 22:39:13.81 ID:CpwHPFTk.net]
Start-ThreadJob や Register-EngineEvent のスクリプトブロックの中で
キャプチャされずにWrite-Output 相当の出力をする方法はないでしょうか

パイプラインに流したいので Write-Host ではなく Write-Output したいです
別のプロセスを経由する方法は思いついたのですが残念過ぎますし
ForEach-Object -Parallel のようにキャプチャされなければ良いのに

  function hogepiyo {
    begin { 処理本体はここで Start-ThreadJob しておく }
    process { … }
    end { … }
    clean { … }
  }

  なんちゃら | hogepiyo | ぽげむた

のようにしたくて考えてます
要は入出力と処理を非同期にできれば他の方法でもありがたいです

795 名前:デフォルトの名無しさん mailto:sage [2023/04/20(木) 22:12:24.17 ID:dJqrvGvM.net]
キャプチャとか何言ってるのかわからない

796 名前:デフォルトの名無しさん mailto:sage [2023/04/20(木) 22:40:35.29 ID:fUuxiSJs.net]
PowerShellでフォーム作るの割と苦痛なんだけど何かデザインモードとかないの?

797 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 05:21:56.20 ID:ZJfuu8vu.net]
Where-object多様するスクリプトに数万行のcsv食わせたら処理に1時間くらいかかる…
大量のデータ処理はWhere-object使うなってみかけたけど使わん方がいいのか

798 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 07:34:50.39 ID:TBBX4m6H.net]
件数が少ないことが確実な時しか使わない。

スクリプトだとほとんど foreach(){} 使ってる。
パイプライン処理したい場合でも &{} や .{} や function の process{} あるいは filter。

799 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 09:17:07.60 ID:kA/+t8w0.net]
>>783
PowerShell Pro Tools
https://ironmansoftware.com/powershell-pro-tools

800 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 11:30:54.75 ID:c3fakvC2.net]
>>784
PowerShell スクリプトのパフォーマンスに関する考慮事項
ttps://learn.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/performance/script-authoring-considerations?view=powershell-7.3



801 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 17:50:40.46 ID:4gKwO2KA.net]
>>782
出力がコレクションにためられて Receive-Job が必要になるのを回避したい
Start-ThreadJob の -StreamingHost オプションの Write-Output 版な感じ
そんなオプションはないから回避方法を知りたい

Start-TheadJobだけでなくイベントハンドラから出力する場合も同じ
イベント飛ばせばいいかと思ったらハンドラがジョブ扱いされて頭抱えた
どうすれば Receive-Job を必要とせずに Write-Output 相当の出力ができるのだろう

802 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 18:06:57.94 ID:xAAOLjx6.net]
>>785
>>787

40万行処理するのに3時間かかったから作りなおすわ…

803 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 19:56:34.84 ID:6pSKsEtx.net]
>>788
Jobである必要がないならRunspacePoolでできるんじゃね

804 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 21:03:30.48 ID:Vzmd1cD+.net]
>>786
おお、あるのか来週会社で使ってみる
ありがとう

805 名前:デフォルトの名無しさん mailto:sage [2023/04/22(土) 10:34:00.20 ID:iFkcYPBt.net]
function target
・入力を読み続ける
・最後に読んだ入力を1秒間隔で出力し続ける
・入力が q なら終了

処理遅延を無視した理想的な使用例が

. { $s = Get-Date; 1; sleep 3; 2; sleep 3; 'q' } | target | % { '{0} {1}' -f (Get-Date) - $s, $_ }

0:00:00.0000000 1
0:00:01.0000000 1
0:00:02.0000000 1
0:00:03.0000000 2
0:00:04.0000000 2
0:00:05.0000000 2

となるような function target はどうすれば実現できますか
処理時間でずれていくのはもちろんかまいませんが
入力待ちにも出力を続ける具体例が知りたいです

806 名前:デフォルトの名無しさん mailto:sage [2023/04/22(土) 10:36:10.71 ID:iFkcYPBt.net]
おっと間違い
(Get-Date) - $s でなく ((Get-Date) - $s) だ

807 名前:デフォルトの名無しさん mailto:sage [2023/04/22(土) 16:45:49.14 ID:3JkCsMe2.net]
>>792
「qなら終了」が何を示すかによるが、powershellのパイプは途中で打ち切る事は原則できないと考えた方が良い。
(endブロックが呼ばれない不完全なハックならググれば見つかる)
またパイプ処理の待機はpowershellのメインスレッドの待機という意味になるので、
そこに非同期イベントを介入させたい場合はそのイベント用の別スレッドを走らせておく必要がある。

808 名前:デフォルトの名無しさん [2023/04/22(土) 21:39:35.55 ID:81urZ/Lj.net]
(New-Object -ComObject Shell.Application).NameSpace(10).MoveHere(ファイルパス)
上記の方法でファイルをごみ箱に移動する場合ファイルが1個なら問題ないんですが、
ファイルパスをを"z:\*"みたいにワイルドカードで指定するとなぜか
ごみ箱でなくC:\Users\ユーザー名にファイルが送られてしまいます。
どうすればごみ箱に送れましょうか?

809 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 10:54:07.72 ID:ElcI27v7.net]
>>794
q は出力スレッドの停止マークで、入力の最後も意味するつもりだった (その後の入力はない)
という考えをくみ取って欲しくて例を付けたのだが伝わらなくて残念

パイプラインの中断にSelect-Object -First 1する話は知ってる
ていうか本題から話をそらそうとしてません?

知りたいのはメインスレッド以外からプライマリパイプラインに出力する方法
パイプラインの次段に送るにはどうすればいいか具体例が欲しい

810 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 15:49:22.67 ID:fUzoPDLK.net]
シェルスクリプトやPowerShell が遅いのは、
毎行、何かのプロセスを起動するからじゃないの?
多くはプロセスの起動時間だろう

Ruby は、外部プロセスを起動しなければ、プロセスは1つのまま。
並行処理もあるけど

grep は、1GB を1秒!



811 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 16:01:56.38 ID:vCOHFjdN.net]
>>796
そもそもパイプは同期的にしか動かないので、次段でいくら細工しても上流が出力を起こしたタイミングに縛られる。
話を単純にするなら不規則な出力を受ける処理と一定間隔で出力する処理は分けるべきだろうね。

812 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 16:05:07.36 ID:fUzoPDLK.net]
>>795
移動なら、robocopy のmov/move を使えば?

813 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 16:10:27.14 ID:n0NMvdBV.net]
>>799
どうやればごみ箱に移動できましょうか?

814 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 16:33:01.94 ID:aISPDv4l.net]
>>795
シェル名前空間はバグだか仕様だか判らない所があるから真面目に考えても無駄
もうそういう仕様と考えてファイルは1個1個送れば?
ワイルドカードはgciで展開できるんだし

815 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 17:57:33.46 ID:ElcI27v7.net]
>>798
サブスレッドがパイプラインに書き込めば次段が動くんじゃないの?


816 名前:言い換えると >>792 のfunction targetは実現不可能ということ? []
[ここ壊れてます]

817 名前:デフォルトの名無しさん mailto:sage [2023/04/24(月) 17:53:43.44 ID:cODz6Qqq.net]
>>801
どうもありがとうございます。そうします。

818 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 01:01:33.91 ID:q0KJktEO.net]
最近この言語で書くことあるけど関数の呼び出しを最初に書かないとエラー起こすなんて知らなくて問題解決に時間がかかった
多分ほとんどの人が関数はメインの後に書きたいと思うんだけどファイル分けて呼び出したりしてるの?

819 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 07:59:40.97 ID:0OU27daL.net]
>>804
> 多分ほとんどの人が関数はメインの後に書きたいと思うんだけど

んなことはない
呼び出される方を前に書かなきゃいけないのは他の言語でも多いぞ

820 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 08:14:10.57 ID:Q567y34W.net]
>>805
定義を上書きできる言語なら呼び出し順序に意味があると思うけど、そうじゃないならただの手抜き仕様



821 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 08:17:30.73 ID:0OU27daL.net]
>>806
実行速度が速くなる、スコープが明確になる、などのメリットがあって敢えて採用されてるんだよ
JSとかも古くからあるfunction構文は順序関係ないが今推奨されてるアロー関数だと前に書かなきゃだめだ

822 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 08:19:33.10 ID:0OU27daL.net]
あとスパゲティを防ぐ効果があるというメリットもあるな
C言語だとそれを目的にプロトタイプを書かない人もいる

823 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 08:27:15.73 ID:h+X7r+oZ.net]
関数同士の依存関係が明確で前の関数が後の関数に依存しないなら初めてのコードを読みやすくなるというメリットもあるな

824 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 08:33:08.87 ID:TxIkuN+X.net]
ホイスティングってJS以外であるの?

825 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 09:07:53.85 ID:qRrW+mkA.net]
Java隆盛くらいの時代には関数はどこに書いても良いのが当たり前として定着したけど
関数型プログラミングでは関数宣言は変数や定数の宣言と同じようなものだからどうしても順序を意識せざるを得ない
順序の扱いを自動でやってくれる仕組みがホイスティングなんだけど、そのルールの分かりにくさやいやらしさが開発者に嫌われてJavaScriptのvarがletとconstに取って代わられた歴史がある

826 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 11:26:54.33 ID://VjHWfL.net]
>>804
メインの部分をメイン関数として書いて実行時にメイン関数を呼び出すようにすればよいのでは?PowerShellはシェルとしても動くので実行時に先に関数が定義されていないといけないのは自然な動作のような気もする。

827 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 11:29:40.93 ID:Y1VsObgt.net]
vbsは関数後書きでもokだよ
よしvbs使おう

828 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 11:43:20.51 ID:Xlw1eETD.net]
>>812
begin process endブロック使いたいときに発狂しそうだな

829 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 21:27:41.00 ID:RtJhGNCC.net]
powershellでもclass内なら順序関係なくなるよ

830 名前:デフォルトの名無しさん mailto:sage [2023/05/04(木) 17:38:09.61 ID:spWJYsDj.net]
自分のコード見たら別に後から宣言してても実行できてるんだが
コマンドレットの定義だとホイスティングされるとかある?



831 名前:デフォルトの名無しさん mailto:sage [2023/05/04(木) 17:56:23.79 ID:P088Z0u/.net]
>>816
どういうコード書いてんのよ

832 名前:デフォルトの名無しさん [2023/05/04(木) 21:18:57.29 ID:FdNSNO1e.net]
>>816
古臭いと言われても、前に書いた方が無駄な混乱をさけられる。

833 名前:デフォルトの名無しさん mailto:sage [2023/05/05(金) 18:03:31.01 ID:gmBJZ0Nw.net]
動的言語は第一級関数のクロージャが多いから、
関数外で宣言したローカル変数が、関数内へ持ち込まれるので、
スコープが広くて、ヤバイ

さらに、JS はホイスティングされるから、超ヤバイ

ただし、Ruby の関数だけは第一級関数のクロージャではなく、
関数外で宣言したローカル変数は、関数内へ持ち込まれない

だから他の言語よりも、圧倒的にバグらないので、初心者向き

834 名前:デフォルトの名無しさん [2023/07/08(土) 13:16:16.25 ID:UoEVlKLQl]
他人の権利を強奪して私腹を肥やす強盗殺人政治やってる論理もクソもないロクに勉強してない議員た゛らけ無能外道集団公明党と違って維新
は最低限の知的能力を有してる奴が多いのは橋下徹の意向で容赦なく知的能カの足切りやってる成果なんた゛ろうけど、いい年して玉遊ひ゛とか
してる無能を讃えてみたり,日本に原爆落とした世界最惡のならす゛者國家の覇権主義に利用されてるウクラヰナ状態になるリスクを無視して
軍拡推進してみたり,危險極まりない原發推進すれは゛電気料金は下がるた゛のほさ゛きか゛ら鉄道のЗ〇倍以上もの非効率クソ航空機によって莫大
な石油無駄に燃やしてヱネ価格暴騰させて温室効果カ゛ス倍増させて氣侯変動させて災害連發させて貿易赤字に.そんなバカの象徴萬博を誇っ
てみたり.騒音によって知的産業に威力業務妨害して壞滅させて原發とか笑わせるレヘ゛儿にまで曰本の技術カ低下させて.勉強妨害して犯罪
惹起しながら動物虐待は罰則強化しろ、子の虐待には金くれてやれた゛の,いつの間にか憲法の下の平等に反しないヘ゛一シックインカムも言わ
なくなって社会分断惹起して治安惡化とか,頭は回るか゛古い教育制度による時代遅れの固定観念による思慮のなさは直情的な橋下徹由来かな

創価学會員は.何百万人も殺傷して損害を与えて私腹を肥やし続けて逮捕者まで出てる世界最悪の殺人腐敗組織公明党を
池田センセ─が口をきけて容認するとか本気で思ってるとしたら侮辱にもほどか゛あるそ゛!
https://i.imgur.com/hnli1ga.jpeg

835 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 13:26:04.42 ID:GLUt9X10.net]
get-childitem select-object Full name,でownerを追加する方法はありますか?ご存知の方、ご教示願います。

836 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 17:48:28.46 ID:xt/PffdC.net]
>821
Get-ChildItemだけではowner情報は取れない、Get-Aclで情報取得する必要がある
組み合わせで良ければ以下の様にSelect-Objectでプロパティ追加すれば出来る
Get-ChildItem|Select-Object FullName,@{n="Owner";e={Get-Acl $_.fullname|% {$_.Owner}}}

837 名前:デフォルトの名無しさん mailto:sage [2023/07/07(金) 19:48:22.82 ID:5l+s6JZK.net]
Outlook を起動してメールを送りたいのですが
本文のメールのフォントサイズや色の指定が一切無視されます。
Outlook 側の設定なのか、コードが悪いのかもよくわからず。。。
スレ違いならすいません
===================

$outlook = New-Object -comObject Outlook.Application
$mail = $outlook.CreateItem(0)
$mail.Subject = "件名テスト"
$mail.HTMLBody = "<html>&

838 名前:lt;head><style type='text/css'>
body {font-size:11; font-family:Meiryo UI;}
</style></head><body>
ああああ<span style='text-decoration:underline; text-decoration-color:red;'>いいいい</span>ううう<br>
</body></html>"
$inspector = $mail.GetInspector
$inspector.Display()
#$mail.Send()
===================
上記のコードだとメイリオは設定されますが、フォントサイズは8.5になるし下線は黒色になります。
なにとぞご教示お願いします
[]
[ここ壊れてます]

839 名前:デフォルトの名無しさん mailto:sage [2023/07/10(月) 00:01:29.03 ID:pvSg+WfU.net]
font-sizeの値に単位が無いから無視されてんじゃね

840 名前:デフォルトの名無しさん mailto:sage [2023/07/10(月) 03:13:05.95 ID:ixw20e1S.net]
>>824
試したはず・・・と思いつつも確認したら普通に変更されました!!!
11px で確認したのかもしれません。11pt と書いたら普通に反映されました
ありがとうございます

ただ下線は相変わらず赤色にならず、黒色のままです。
#FF0000 も試したけど変わらず・・・
どうやら text-decoration-color がそもそも使えないようでした。
さささ<span style='text-decoration:underline; color:red;'>ししし</span>すすす<br>
とやったら文字も赤くなりましたが下線も赤くなりました。

Outlook に使える html の仕様との戦いな気がしてきた
これはどこで尋ねたら・・・



841 名前:デフォルトの名無しさん mailto:sage [2023/07/10(月) 10:11:13.02 ID:CzqO5vr+.net]
後はstyle属性をシングルクォーテーションで括ってるのが気になった
全体の括りをシングルにして属性値をダブルに変更で動くと思うよ

842 名前:デフォルトの名無しさん mailto:sage [2023/07/10(月) 10:51:54.81 ID:ixw20e1S.net]
シングルとダブルは変わりませんでした…
実際はPowerShellでメール本文内に変数を当てこむので
シングルのままでいこうと思います

あと下線だけ赤色は私の勘違いでした
赤下線の時は文字も赤くして問題なかったのでとりあえず解決しました

お手数おかけしました
ご助言くださった方ありがとうございました

843 名前:デフォルトの名無しさん mailto:sage [2023/07/13(木) 11:56:03.10 ID:cnmTEsiX.net]
二週間ほど前に自分で調べて書いたのに、どうやって書いて動かしたのか全く思い出せなくて困ってます
自分で自分が信じられないんですが、教えてください。

やりたいこと:Read-Hostで指定したフォルダに存在するフォルダを取得し、各フォルダに指定したファイルをコピーする
引っかかっている点:
1)$input = Read-Host "コピー先フォルダを指定"
たとえばここでcopyと入力。規定のフォルダがC:\作業とする。
入力の結果、c:\作業\copyとして、ここにあるサブフォルダを取得したいので
$inputをc:\作業\copyにしたい。
2)Get-ChildItem でディレクトリ名のみ取得するには?
それでforeachでやってたと思うんですが・・・。

844 名前:デフォルトの名無しさん mailto:sage [2023/07/13(木) 13:50:42.52 ID:K8IsBXo8.net]
Get-ChildItem -LiteralPath ([IO.Path]::Combine("C:\作業", (Read-Host "コピー先フォルダを指定"))) -Directory -Name

845 名前:デフォルトの名無しさん mailto:sage [2023/07/13(木) 17:51:09.66 ID:cnmTEsiX.net]
>>829
わー初見のコード
でもおかげでなんとかできました。ありがとう。

846 名前:デフォルトの名無しさん mailto:sage [2023/07/14(金) 04:02:22.77 ID:vOCFwCnb.net]
多分いままで書いてたコードはこれ

# 規定のフォルダのパスを作成
$parent = join-path 'c:\作業' $input

# 上記パスのサブフォルダ作成
$names = ls -pspath $parent -di | % name

下記はエイリアス(関数の別名)
ls := get-childitem
% := foreach-object

847 名前:デフォルトの名無しさん mailto:sage [2023/07/14(金) 04:02:59.81 ID:vOCFwCnb.net]
# 上記パスのサブフォルダ作成

# 上記パスのサブフォルダ名を取得

848 名前:820 mailto:sage [2023/07/18(火) 17:12:35.63 ID:jBHsPJa3.net]
>>822
遅くなりました。
set-location -pathで場所を指定したら、指定したフォルダのownerを取得できました。ありがとうございます。
get-Childitem -recruse -file ┃select-Object directoryName ,name ,extension ,Length Creationtime, lastACCESStime ,lastwriteTime, fullname ┃Export‐csv ‐Encodeing default xxx.csv
と一緒にできなかったのが悔やまれます。

849 名前:デフォルトの名無しさん mailto:sage [2023/07/18(火) 18:02:52.05 ID:uMqw2ex7.net]
そういう時はadd-memberするんだよ

850 名前:デフォルトの名無しさん mailto:sage [2023/07/18(火) 20:02:12.51 ID:x3+Ehzia.net]
>>822の何がだめで、あるいは何が分からなくて、そのコマンドに組み込めなかったのか分からんな。
起点ディレクトリ自体の情報もCSVに含めたい、って事なのかな。



851 名前:デフォルトの名無しさん mailto:sage [2023/07/18(火) 22:45:48.56 ID:BpIlHiPB.net]
powershellの学習曲線は険しい
本人が納得したならもうそれでいいだろう

852 名前:820 mailto:sage [2023/07/19(水) 08:31:15.42 ID:wWAjwZqt.net]
>>835
そうです。

853 名前:デフォルトの名無しさん mailto:sage [2023/07/19(水) 15:47:04.50 ID:mqKqy4GV.net]
ならこんな感じで。

$dirPath = "起点ディレクトリのフルパス"
[IO.FileInfo]::new($dirPath) | %{$_; $_ | Get-ChildItem -Recurse -File} | Select-Object DirectoryName, Name, Extension, Length, CreationTime, LastAccessTime, LastWriteTime, FullName, @{N="Owner";E={($_ | Get-Acl).Owner};} | Export-Csv -Encoding Default xxx.csv

CSVの出力先がフルパスなら、Set-Locationはいらない。

854 名前:820 mailto:sage [2023/07/24(月) 18:16:28.42 ID:yY3fBN5A.net]
>>838
ありがとうございますm(_ _)m
とりあえずownerを取得できました。列の入れ替えはPowerQueryで対処します。
neme,Extensio,owner,...したかったのですが。

855 名前:デフォルトの名無しさん mailto:sage [2023/08/02(水) 23:31:49.70 ID:8Lc0dkYb.net]
Pythonでやったら楽なのに…と思う処理も他のメンバーに配る可能性を考えると泣く泣くpowershellでやることになる
嫌いな言語ではないけど凝った処理を書こうとすると見た目の癖が強いソースコードになりがち

856 名前:デフォルトの名無しさん mailto:sage [2023/08/05(土) 08:55:12.86 ID:4wFerhHK.net]
Pythonは見た目の癖が強くないとでも?

857 名前:デフォルトの名無しさん mailto:sage [2023/08/05(土) 09:35:04.11 ID:wvUeqD5z.net]
泣く泣くpowershellに草

858 名前:デフォルトの名無しさん mailto:sage [2023/08/06(日) 22:29:47.72 ID:5CExyS7F.net]
質問なのですがパイプラインの結果を関数に渡して先頭からk番目を取り出すには一体どうすればorz
やりたいことはパイプラインの結果を検証する処理をサブルーチン化したい(k番目を取り出すのはその第一歩)

とりあえず書いたがうまく行ってないやつ:
function Test-RegEnt($reg_query_result, $exp_type, $exp_value) {
$reg_query_result | Select-Object -Index 2
}
Write-Output ("Test_A1:" + ($result | Select-Object -Index 2)) # 2行目が意図通りselectされる(" RegisteredOwner REG_SZ Admin")
$result2 = Test-RegEnt($result, 'REG_SZ', 'Admin')
Write-Output ("Test_A2:" + $result2)        # A1と同じ結果になるかと思いきや、'Admin' になる

859 名前:デフォルトの名無しさん mailto:sage [2023/08/06(日) 22:31:40.76 ID:5CExyS7F.net]
先頭3行抜かしましたorz
$result = reg query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v 'RegisteredOwner'
$cnt = 0
$result | ForEach-Object{ "TEST[$cnt}:" + $_; $cnt++ }
この次に>>843のコード。

860 名前:デフォルトの名無しさん mailto:sage [2023/08/06(日) 22:48:34.72 ID:5CExyS7F.net]
んまーなんかこれだとうまく行ったけんども思ってたのと違う……
function Test-RegEnt($exp_type, $exp_value) {
$Input | Select-Object -Index 2
}
$result = reg query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v 'RegisteredOwner'
$cnt = 0
$result | ForEach-Object{ "TEST[$cnt}:" + $_; $cnt++ }
Write-Output ("Test_A1:" + ($result | Select-Object -Index 2))
$result2 = ($result | Test-RegEnt('REG_SZ', 'Admin'))  # パイプラインの結果を引数ではなくパイプで渡す
Write-Output ("Test_A2:" + $result2)

実はパイプラインの結果(オブジェクトの配列)は関数引数に渡せなかったりするので



861 名前:
つなみにfunctionの引数部分で [array]$reg_query_result としてみてもうまく行かなかった。
[]
[ここ壊れてます]

862 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 03:16:48.48 ID:SSXgsNNw.net]
文法が違う。
Test-RegEnt -reg_query_result $result -exp_type 'REG_SZ' -exp_value 'Admin'
とか
Test-RegEnt $result 'REG_SZ' 'Admin'
とか。
または
function Test-RegEnt {
  Param (
    [Parameter(ValueFromPipeline=$true)]
    [string] $reg_query_result,
    [string] $exp_type,
    [string] $exp_value
  )
  Begin {
    $cnt = 0
  }
  Process {
    $cnt++
    $idx = $cnt - 1
    if ($idx -eq 2) {
      $reg_query_result
      return
    }
  }
}
$result | Test-RegEnt -exp_type 'REG_SZ' -exp_value 'Admin'

863 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 06:50:14.57 ID:L1yQ0BJe.net]
>>846
レス㌧クス
$Input利用(>>845)とBegin { } Process { }利用の違いはわかりた
$resultが数億オブジェクトだったりしたら後者の方がパイプラインがスムーズに流れてよさげ(未検証

一方、
>実はパイプラインの結果(オブジェクトの配列)は関数引数に渡せなかったりするので?(>>845)
については関数の呼び出し箇所が
 $result | Test-RegEnt -exp_type 'REG_SZ' -exp_value 'Admin' # (1) OK
 Test-RegEnt -reg_query_result $result -exp_type 'REG_SZ' -exp_value 'Admin' # (2) NG (エラー)
やったから、これは「パイプラインの結果は関数引数には渡せない」((1)のように書くしかない)ということでFA?

864 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 06:54:08.66 ID:FZVMVghc.net]
Select-ObjectのSkipとFirst使えばできるのでは?

865 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 06:56:57.16 ID:FZVMVghc.net]
関数でやりたいという要件を見落としていた

866 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 07:04:28.71 ID:FZVMVghc.net]
>>843
> $result2 = Test-RegEnt($result, 'REG_SZ', 'Admin')

$result2 = Test-RegEnt $result 'REG_SZ' 'Admin'
でやりたいことはできるのではないでしょうか

867 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 22:40:57.49 ID:SSXgsNNw.net]
パイプラインと引数のどちらでも動くようにしたいなら
function Test-RegEnt {
  Param (
    [Parameter(ValueFromPipeline=$true)]
    [string[]] $reg_query_result,
    [string] $exp_type,
    [string] $exp_value
  )
  Begin {
    $cnt = 0
  }
  Process {
    foreach ($item in $reg_query_result) {
      $cnt++
      $idx = $cnt - 1
      if ($idx -eq 2) {
        $item
        break
      }
    }
  }
}

あくまでシンプルめのサンプルなんでSelect-Object -Index 2と全く同じ挙動とか期待しないように。
※作りこむならパイプが繋がってるのかチェックして分岐の処理書いたりする。

なお、大量のデータをパイプラインに流すのはお勧めできない。
パイプラインは途中での打ち切りとか難しいし、
結局は普通にループ処理書いた方が速いし制御しやすいし分かりやすい事が多い気がする。

868 名前:デフォルトの名無しさん mailto:sage [2023/08/10(木) 07:01:52.35 ID:3iQsMBl9.net]
レス㌧クス、しかしながら大量データを引数で関数に渡すのはメモリ消費量、応答速度ともに悪くなることがわかったからやめるわサーセン;;;
どういうことかというと、bigfile.txtが(1行何か書いたいた後 Ctrl+A Ctrl+V Ctrl+V を22回反復とかで作った)
4194305行の巨大なテキストファイルだったとして、
  function Test-FileContent([string[]] $lines) { $cnt = 0; foreach ($line in $lines) { $cnt++; Write-Host "cnt=" $cnt } }
  $lines = Get-Content .\bigfile.txt # (1)
  Test-FileContent($lines) # Get-Content完了後の結果を引数で渡す
とするとお、「cnt= 1」が表示される前に(1)で永劫の時間待たされるますが、
  function Test-FileContent() { $cnt = 0; foreach ($line in $Input) { $cnt++; Write-Host "cnt=" $cnt } }
  Get-Content .\bigfile.txt | Test-FileContent  # Get-Contentが読んだら即パイプで渡す
とすると*即座に*「cnt= 1」以降のカウントが始まる

869 名前:デフォルトの名無しさん mailto:sage [2023/08/10(木) 07:07:45.76 ID:3iQsMBl9.net]
つなみに
>$resultが数億オブジェクトだったりしたら後者の方がパイプラインがスムーズに流れてよさげ(>>847)
も検証すた、
>>847のレスポンスが即時のコードと似通っているが関数内でBEGIN { } PROCESS { }でなく$Inputをforeachループで回した場合、
すわなち
  function Test-FileContent() { $cnt = 0; foreach ($line in $Input) { $cnt++; Write-Host "cnt=" $cnt } }
  Get-Content .\bigfile.txt | Test-FileContent
とすると、、「cnt= 1」が表示される前に永劫の時間待たされる、、、

というわけで、パイプライン(の後段まで)に大量のデータを無駄に流すなというのは真やが
生じてしまった大量のデータはむしろパイプラインにしか流さないのが正義……

870 名前:デフォルトの名無しさん mailto:sage [2023/08/10(木) 07:10:57.08 ID:3iQsMBl9.net]
>>852の肝心のところに誤記が合ったスマンヌorz
*即座に*「cnt= 1」以降のカウントが始まるコードは正しくはこれ↓
  function Test-FileContent() { BEGIN { $cnt = 0 } PROCESS { $cnt++; Write-Host "cnt=" $cnt } }
  Get-Content .\bigfile.txt | Test-FileContent



871 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 18:46:06.42 ID:I7dwFhkG.net]
パイプの利点は個数を意識しなくて済むことだけど中断が一切できないしデメリットの方が多い
よっぽどの事情でもない限りコマンドレット自作しても遅いだけで良い事なんて1つもない
公式のselect -firstなんかはパイプの流儀に従ってないから似た事をしようとしてもあれ?って自らの間違いに気付くんだよ
powershellの深遠を覗くとそのいい加減さにガッカリするだけ

872 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 19:17:06.70 ID:SL3m3m5F.net]
一番の利点はメモリの節約です

873 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 19:30:40.13 ID:I7dwFhkG.net]
メモリなんて遅さで相殺される
powershell + 大量データ = 遅くて不採用

874 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 19:42:42.98 ID:bAYgNtyZ.net]
>>857
使いどころを履き違えるとそうなる

875 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 19:56:15.04 ID:I7dwFhkG.net]
>>858
パイプに希望を見てるのかな
その認識では近く失望させられるだろう

876 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 20:07:52.72 ID:PQblbJTG.net]
一番良いのは、Windowsを使わない
これにかぎる
こんなクソなOSを世界中から捨てるべき

877 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 20:09:59.59 ID:SL3m3m5F.net]
Windowsは汎用事務処理端末としては競合なしだ

878 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 20:27:11.32 ID:SL3m3m5F.net]
メモリ効率とスループットは交換できるようなものではない
手軽さが不要ならPythonでも使っておけばいい

879 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 21:36:23.24 ID:55Ub7uv5.net]
いまだにPowerShellがWindows専用だと思ってるアホを真っ先に捨てるべき

880 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:05:41.72 ID:FP8PIUGD.net]
>>843の質問に戻るのですだが、動かなかったのは単純だが根本的な誤解してたのが原因……
C/C++と同じだろうというつもりで
>$result2 = Test-RegEnt($result, 'REG_SZ', 'Admin')
という呼び出し方に書いたが、これだと「Test-RegEntの第一引数$reg_query_resultに「配列」@($result, 'REG_SZ', 'Admin')を渡す」という意味になる
ので、関数内で
>$reg_query_result | Select-Object -Index 2
とやったら当然そのindex=2の要素 'Admin' が関数の出力となってた、というしくみ



881 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:07:08.58 ID:FP8PIUGD.net]
正しくは>>846式に
>Test-RegEnt -reg_query_result $result -exp_type 'REG_SZ' -exp_value 'Admin'
またはその省略表記としては
>Test-RegEnt $result 'REG_SZ' 'Admin' # カンマ区切りではなくてスペース区切り
にせねばならなかった
ことがわかったorz
止むにやまれない事情で昨日一日で1500行書いてデバッグしたらその過程でわかった|||。n_

882 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:11:54.59 ID:FP8PIUGD.net]
あと他のスクリプトをincludeするときの欠き方が気づかないとわかりにくい……
util.ps1 を同じフォルダにある someapp.ps1 からインクルードする場合は
'.\util.ps1'
ではダメで、
.'.\util.ps1'
にしないとutil.ps1で定義した何物も呼び出せないorz
ここで先頭の「.」はutil.ps1のスクリプトスコープを呼び出し元のスコープと同じにするという意味やがちょう紛らわしい……

883 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:20:54.21 ID:FP8PIUGD.net]
あと関数内においては代入文、[void]にキャストした文、if文とかの条件式 を除く全ての文が出力を持つ、
という仕様のせいで危うく恐ろしいバグを作り込むところやった;;;
function Show-ErrDlg($msg) {
  $wsobj = new-object -comobject wscript.shell
  $wsobj.popup($msg, 0, 'エラー', 0 -bor 16)
}


884 名前:function Test-Equipment1() {
  $result = (何かのテスト)
  if (!$result) { Show-ErrDlg('何かのテスト failed.') }
  return $result
}
でとするとテストが失敗したときも
[]
[ここ壊れてます]

885 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:25:27.54 ID:FP8PIUGD.net]
  if (!(Test-Equipment1) { exit 1 }
  (テスト正常終了の表示処理)
でテスト正常終了の表示が出るorz

これは何でかというと$wsobj.popup($msg, 0, 'エラー', 0 -bor 16) 」がクリックされたボタンの番号を出力する結果、$resultがまたしても配列
 @( (「なんかのテスト」の結果), ($wsobj.popup()でクリックされたボタンの番号) )
となりこれが Test-Equipment1() の戻り値となり、それをif文で評価したら最後の要素

886 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:27:54.43 ID:FP8PIUGD.net]
(OKボタンのコード6)と評価されるため、!6なので常に偽になるというしくみ、、、、
こう修正すたら直った
function Show-ErrDlg($msg) {
  $wsobj = new-object -comobject wscript.shell
  [void] $wsobj.popup($msg, 0, 'エラー', 0 -bor 16) # [void]付ける
}

わかるかこんなもん……
および原理的にlint的な機械的チェックもできない…… 

887 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:35:32.35 ID:FP8PIUGD.net]
これはデフォルトで出力無しとして、
なんかの接頭辞を付けた文だけが結果がパイプに出力されるるようにする仕様であるべきだった希ガス
(出力が無いというミスはすぐ気づける
てかWrite-Outputを省略可能としているのがそもその誤り……
※ 個人の感想です

いっぱい連投したがTeamsのつもりでShift+Enterしたら投稿されてしまったせいやスマンヌorz
いじょ

888 名前:デフォルトの名無しさん 転載ダメ mailto:sagete [2023/08/12(土) 00:58:59.52 ID:H+b+A9qi.net]
============================
function Hoge([int]$num) {
echo "Debug"
return ($num + 1)
}

$a = Hoge(1)
echo $a
============================
こうすると $a には Debug と 2 の2つが入る

============================
function Hoge([int]$num) {
.{
echo "Debug"
} | Out-Null
return ($num + 1)
}

$a = Hoge(1)
echo $a
============================
こうすると $a には 2 の1つしか入らない
不要なところは 「 .{ ~~~ } | Out-Null 」で表示を抑制したら楽になるかも

889 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 01:19:17.04 ID:DbL0Mu2X.net]
>>843に言える事はパイプで何番目とかいう考えは捨てた方がいい
パイプは途中で処理を打ち切る機能が欠落してるから何番目だけに用があろうが全ストリームを読み終わるまで終わらない

890 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 08:19:31.33 ID:IRt4i0hm.net]
ほぼ誤差だが |Out-Null より $null= で処理した方がパフォーマンスがよく、可読性も高い



891 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 08:23:13.14 ID:ueiwXwrP.net]
PowerShell スクリプトのパフォーマンスに関する考慮事項
https://learn.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/performance/script-authoring-considerations

892 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 22:00:12.59 ID:pISu+im0.net]
>>872
わかりた
パイプラインの打ち切りは、実現方法はあるが円満な解決方法はなさげ(どれもこれもなんかしらのミソがつく

パイプで$n番目、というだけならSelect-Objectしたらv3以降ならn+1番目以降を打ち切ってくれる
  $n = 2
  Get-Content .\bigfile.txt | Select-Object -Index $n | Foreach-Object { Write-Output "cnt=${n}: $_" } # bigfile.txtが1億行あっても瞬時に戻って来る
が、これは「Select-Object -Index ~」部分を関数化したら元の木阿弥になる
  function Select-Nth($n) { $Input | Select-Object -Index $n | Foreach-Object { Write-Output "cnt=${n}: $_" } }
  Get-Content .\bigfile.txt | Select-Nth(2) # bigfile.txtを1億行全部読み込んでからおもむろに出力する
構文的に$_を使った関数やフィルタとしては書けない

データを見て条件が成立したら打ち切り、というのになるともっとマンドクセ……
https://winscript.jp/powershell/308

893 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 22:23:22.94 ID:pISu+im0.net]
>>871
それな!
ワカル
㌧クス、

>>873
わかりた
function Hoge([int]$num) {
[void].{
echo "Debug"
}
return ($num + 1)
}
$a = Hoge(1)
echo $a
でも逝けた

894 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 22:55:15.75 ID:zGmVrirz.net]
関数の出力が意図せず(うっかり)複数個所から行われ分かりにくい点は
バッチとかシェルスクリプトの挙動に合わせすぎた為だろうね。

例えばping.exeを対象2か所に実行するバッチ(.bat)をパイプで繋げたら、
バッチ1つの実行で、ping2回の20行程度がパイプに流れる。

PowerShellスクリプトや関数もこれと同じだと考えればそんな違和感ないはずなんだけど、
元々他の言語なんかで「関数の戻り値は1つ(明示的な1つor関数末尾の1つ)」とか
「明示的に変数格納や出力などしなければ、メソッドや関数の戻り値は捨てられる」
って事に慣れてるし、PowerShellも同じ文法だから同じ挙動を期待しちゃう。

上でも出てるけど、標準ではパイプに流さない仕様とした方が
敬遠される点が減ったと思う。

895 名前:デフォルトの名無しさん mailto:sage [2023/08/14(月) 13:31:51.80 ID:4NX3l0Vm.net]
パイプはスレ違いのバッチスレでドヤ顔ワンライナーするぐらいしか能が無いと言っても過言

896 名前:デフォルトの名無しさん mailto:sage [2023/08/14(月) 21:15:06.40 ID:5teSXOgl.net]
1GiB程度のファイルを処理するときにはパイプは重宝するよ

897 名前:デフォルトの名無しさん mailto:sage [2023/08/15(火) 05:53:15.07 ID:WIzBRZyi.net]
バッチファイルのパイプはメカニズムが違う
あれは実質一時ファイルを作って次段に渡しているだけなので遅い、と言おうと思ったが
"*<CR><LF>" を2^23個書き並べたbigfile.txtに対してコマンドプロンプトで
  type bigfile.txt | find /C "*"
とやったら「瞬時に」
  4194304
と返って来るのに、PowerShellで
  Get-Content .\bigfile.txt | find.exe /C "*"
とやったら永劫の時間待たされた後
  FIND: パラメーターの書式が違います
と言われた後Ctrl+Cにも応答しなくなた……どうなってるのこれ……

898 名前:デフォルトの名無しさん mailto:sage [2023/08/15(火) 14:11:57.72 ID:e55ZiwZ3.net]
そりゃパイプで外部コマンドに送ったら1行ずつfind.exe実行して終了するだろうから
おかしなことにもなるだろうよ

899 名前:デフォルトの名無しさん mailto:sage [2023/08/15(火) 15:18:16.71 ID:qi/dYdNU.net]
> あれは実質一時ファイルを作って次段に渡しているだけなので遅い

それはシングルタスクだったDOS時代の話だろ
NTのcmd.exeには当てはまらない

900 名前:デフォルトの名無しさん mailto:sage [2023/08/15(火) 15:39:41.88 ID:LS4gbGEC.net]
cmd.exeはパイプやfor /Fのコマンドとかワーカースレッドを生成して
別タスク(子環境)としてデータの送り手や受け手を作ってるかな



901 名前:デフォルトの名無しさん mailto:sage [2023/08/24(木) 22:36:16.57 ID:W+JHQ2GG.net]
Get-WinEventでSystem.evtxだかのファイルを処理させるとコマンドレットが終了しても一定時間プロセスがファイル掴みっぱなしになるのどうにかしてくれ
わざわざ別プロセスでGet-WinEvent用のpowershell起動させる間抜けなコードになったぞ

902 名前:デフォルトの名無しさん mailto:sage [2023/08/25(金) 11:28:27.28 ID:WAOpDjEy.net]
処理速度都合なのかな〜って思ってるけど閉じる手段は提供して欲しい。

自分は.NETのクラス使って処理書いちゃった。

903 名前:デフォルトの名無しさん mailto:sage [2023/09/04(月) 19:42:45.42 ID:hSX1x29k.net]
エクスプローラでファイル選択してコピーして

(Get-ClipBoard -Format FileDropList).GetType().ToString()
→ System.Collections.Generic.List`1[System.Management.Automation.PSObject]
うん。

Get-ClipBoard -Format FileDropList | %{$_.GetType().ToString()}
→ System.Collections.Generic.List`1[System.Management.Automation.PSObject]
うn?

foreach( $info in Get-ClipBoard -Format FileDropList ){ $info.GetType().ToString() }
→ System.Collections.Generic.List`1[System.Management.Automation.PSObject]
えぇ…

Get-ClipBoard -Format FileDropList | %{$_} | %{$_.GetType().ToString()}
→ System.IO.FileInfo


[System.IO.FileInfo[]](Get-ClipBoard -Format FileDropList) | %{$_.GetType().ToString()}
→ System.IO.FileInfo
うーん…

$list = Get-ClipBoard -Format FileDropList
$list | %{$_.GetType().ToString()}
→ System.IO.FileInfo
まぁ…

なんか不必要に使いづらい気がするのは自分だけかな。

904 名前:デフォルトの名無しさん mailto:sage [2023/09/06(水) 19:07:34.39 ID:1kNnDW8h.net]
$(Get-ClipBoard -Format FileDropList) | %{$_.GetType().ToString()}
→ System.IO.FileInfo
バッドノウハウの領域だなー

905 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 10:37:58.96 ID:EIIMdpOe.net]
隠し属性が設定されたファイルが排他されてるとかで読めない状況のときに
-ForceついたGet-Contentで読もうとすると隠し属性解除されるのは理由あるんだろうか

906 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 13:50:19.66 ID:KE5ufRbn.net]
質問で申し訳ない
AccessでエクスポートしたxlsxをPowershellでComObjectを作成してOpenしたいんだけど
破損している云々で発行元を信用しますか?ってダイアログのせいでOpen出来ない

https://learn.microsoft.com/ja-jp/office/vba/api/excel.workbooks.open
ここによると15個目の引数で1を指定(xlRepairFile)すれば良さそうなんだけど
Powershellで実行するとOpenプロパティが無いよって怒られる。

実際のコードはこう
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $True
$fileName = (Get-ChildItem "test.xlsx").FullName
$book = $excel.Workbooks.Open($fileName, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, 1)

907 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 16:40:21.35 ID:OgaNelN6.net]
CSVでエクスポートしなよ

908 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 17:47:39.83 ID:EIIMdpOe.net]
とりあえずこうすると回避できた。

using namespace Microsoft.Office.Interop.Excel

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $True
$fileName = (Get-ChildItem "test.xlsx").FullName

$param = @([Type]::Missing) * 15
$param[0] = $fileName
$param[14] = [XlCorruptLoad]::xlRepairFile
$workbooks = $excel.Workbooks
$book = $workbooks.Open.Invoke($param)

909 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 18:53:31.49 ID:uneKtCE6.net]
>>891
あざす!めっちゃ参考になるます

910 名前:デフォルトの名無しさん 転載ダメ mailto:sagete [2023/09/13(水) 02:20:54.13 ID:E0UN4wqY.net]
$param = @([Type]::Missing) * 15

$param = @([Type]::Missing) * 0xFF
のほうが人にやさしい気がする



911 名前:デフォルトの名無しさん mailto:sage [2023/09/13(水) 07:53:07.83 ID:mwnND43t.net]
は?

912 名前:デフォルトの名無しさん mailto:sage [2023/09/13(水) 09:33:15.43 ID:ozJmt5GG.net]
ひ?

913 名前:デフォルトの名無しさん mailto:sage [2023/09/13(水) 23:41:10.61 ID:tgD8Mqqk.net]
>>893の後者は配列に255を掛けてるように見えるのだが
人にやさしい部分てどこ?

914 名前:デフォルトの名無しさん mailto:sage [2023/09/14(木) 03:25:22.93 ID:37z8xtDS.net]
マスクしてるのかと思ったわ
ちゃんとソース見てなかった
すまんこ

915 名前:デフォルトの名無しさん [2023/09/16(土) 23:53:08.17 ID:DkE7QlfD.net]
PowershellのGUI使って簡単な時報を作りたい。
System.Windows.Forms.Timerを使って作ったんだが今何時判定で$Aの数字が毎回リセットされるんでIntervalの回数だけ別ウィンドウが開きまくる。
使い方間違ってるか?教えてくれさい。

$timerTestTick {
【適当に現在時表示】
  if(【指定した時間になったら】-and【$Aがtrueなら】){
  start-prosess 【音楽ファイルを別ウィンドウで再生して処理継続】
  $A = false
}
}
$timerTest.Add_Tick($timerTestTick)
$timerTest.Interval = 200
$timerTest.Enabled = $TRUE
$timerTest.Start()

【適当にフォーム作って表示】

916 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 01:59:03.31 ID:ENG0J7cr.net]
>$Aの数字が毎回リセットされるんで
それ$Aを更新しようとする度に毎回スクリプトブロックで別の$Aが生成されるからやね
([ref]$A).Value = $false
と書けば元の$Aを探しにいくから更新できると思う
Powershellのはまりポイントの1つやね

917 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 03:18:20.18 ID:LjIc1dUH.net]
powershellでGUIって、c#使えない宗教的理由でもあるの?

918 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 05:45:06.34 ID:5It5oWIy.net]
>>899
スクリプトブロックていうのが働いてるのか。とりあえず試してみるありがとう。

>>900
宗教的理由というより書けないから出来ることで色々やってみてた。
というかPowerShell単体でC#つかえるの?

919 名前:デフォルトの名無しさん [2023/09/17(日) 09:35:27.80 ID:LYUgOkBe.net]
PowerShellでGUI作れるんか! 
知らんかった これは興味ある

920 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 09:48:58.34 ID:oJeCWV6s.net]
>>902
システム管理のサンプル スクリプト
https://learn.microsoft.com/ja-jp/powershell/scripting/samples/sample-scripts-for-administration

公式ドキュメントならここの「UI 要素の作成」って所を見てみるといい



921 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 13:31:47.95 ID:LJFSWd1b.net]
GUI作れるとかマジか
ワザワザHTMLソース内部に仕込んでWEBベースでやりとりしてた俺は一体・・・

922 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 14:04:19.59 ID:ENG0J7cr.net]
一応.NET言語の1つではあるからGUIは普通に作れるが
俺はC#コード埋め込んでFuncやAction経由で必要時にpowershellと連携する感じの使い方だな
Powershellのコードだけで作るの自体が割と面倒なのや型チェックが働かない辺りとかかあんまメリットを感じない

923 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:32:36.63 ID:cR6Dxv5m.net]
htaの代わりとしてforms呼び出して組んでたけどcssが便利すぎて最近は使ってないな...
wpfはどうなんだろうか...

924 名前:デフォルトの名無しさん mailto:sage [2023/09/29(金) 04:49:25.46 ID:wxGTflxT.net]
まじでかいな

925 名前:デフォルトの名無しさん [2023/10/01(日) 14:37:52.98 ID:nRV7BOcHv]
防災訓練とか災害ボランティアって工ラヰなーとかスコ゛ヰなーとか思われるとでも思っちゃってるのかな
都心まで数珠つなぎて゛騒音に温室効果ガスにコロナにとまき散らさせて気候変動させて海水温上昇させて地球破壊して
日本どころか世界中で土砂崩れに洪水、暴風、熱中症、森林火災にと災害連發させて
JALだのАΝΑだのクソアイヌドゥだの酒飲んで業務してるクサイマークだのゴキブリフライヤ−だの殺人テ囗リストに
天下り賄賂癒着してる世界最悪の殺人腐敗テロ組織公明党斉藤鉄夫ら国土破壊省をスル一しながら何寝ぼけたことやってんだかな
こういう安易な自己満足が気候変動テロを肯定してさらなる多くの人々を死に追いやってることを自覚しろや力ス
憲法カ゛ン無視で人権に財産権にと侵害して威力業務妨害して私腹を肥やしてる諸悪の根源を殲滅して
災害の連発を食い止めることこそ本質だといい加減、気づけやオナニーバカ
(羽田)ttps://www.call4.jp/info.php?Type=itеms&id=I0000062 , ttΡs://haneda-Рroject.jimdofreе.com/
(成田)ttps://n-souonhigaisosyoudan.amebaownd.com/
(テロ組織)тtps://i.imgur.com/hnli1ga.jpеg

926 名前:デフォルトの名無しさん [2023/10/06(金) 21:47:54.00 ID:ESX4xHYZ.net]
日付を元に指定範囲内の一意の数字を出すってできる?
200ぐらいある今日の一言的なものを毎日ランダムで出したいんだがアプリケーションを再起動すると変数リセットされて別の単語出てしまうのを抑止したい。

927 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 22:00:29.66 ID:7j+1PDTD.net]
その日の初回の結果をファイルに出力して
2回目以降はそのファイルを読み込みに行けば良いのでは

928 名前:デフォルトの名無しさん [2023/10/06(金) 22:04:29.98 ID:ESX4xHYZ.net]
>>910
それしかないかなぁ
ファイル出力を避けたかったんだが

929 名前:デフォルトの名無しさん [2023/10/06(金) 22:35:50.48 ID:ESX4xHYZ.net]
>>910
できそうだからファイル出力の方向でやってみるありがとう。

930 名前:デフォルトの名無しさん [2023/10/06(金) 22:36:00.82 ID:ESX4xHYZ.net]
>>910
できそうだからファイル出力の方向でやってみるありがとう。



931 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 23:26:20.49 ID:WmRjQTiM.net]
その条件なら日付をシード値とみなせるんだから
別の単語が出てくる方がおかしいんじゃないのか
基礎的な論理思考力が欠けているね

932 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 23:44:27.78 ID:7j+1PDTD.net]
あ、-SetSeedって完全固定の疑似乱数なのか。
再起動したら変わると思ってた。

933 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 04:01:41.30 ID:lBZtWf6D.net]
Get-Random -SetSeed $(Get-Date -Format "yyyymmdd") -Maximum 200

934 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 06:18:44.31 ID:xTEoYklV.net]
>>916
seedなんてもんがあったのか!
ありがとう!

935 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 15:47:42.69 ID:lBZtWf6D.net]
912 と 913 をワンライナーで視覚化しただけやぞ

936 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 20:27:09.33 ID:bO8eXdHU.net]
>>906
wpfも普通にいけるけど、vsのデザイナーがないと厳しいから、じゃあc#でいいかとなりがち

htaの代替としたらwpfかwinformで枠だけ作ってwebview2埋め込むのがおすすめ

qiitaでも記事があったはず

937 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 22:07:55.52 ID:SlOLtELZ.net]
webview2ランタイム自体の埋め込み手段がなあ

938 名前:デフォルトの名無しさん [2023/10/20(金) 16:26:02.69 ID:3co0KDj6.net]
こんにちは
フォルダの配下のすべてのテキストファイルを結合した文字列を出力したいです
フォルダ直下のファイルだけなら

Get-Content *.txt

でできました
該当するファイルの一覧は

Get-ChildItem -Recurse -Filter "*.txt" -Name

でできましたが

Get-ChildItem -Recurse -Filter "*.txt" -Name | Get-Content

としてもエラーになります

939 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 19:30:02.44 ID:qU4/oN+w.net]
「 -Name」が不要。

940 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 20:49:00.72 ID:3co0KDj6.net]
できました!



941 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 16:01:28.45 ID:Vjqv9VpS.net]
PSNativeCommandPreserveBytePipe が楽しみすぎる

942 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 16:01:33.19 ID:Vjqv9VpS.net]
PSNativeCommandPreserveBytePipe が楽しみすぎる

943 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 16:59:01.62 ID:sGPoKgPO.net]
この言語って3次元以上の配列って出来ないって認識であってる?
二次元は
$array[0,0]で良いんだよね?
三次元というかジャグ配列?はとりあえず使えるから
$array[0][0,0]
でやってるんだけど中の2,3次元目とか中の要素数カウントが出来なくて結構困ってる

944 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 18:05:21.98 ID:BgNWqm6B.net]
ジャグ配列で良いんだったら$array[0][0][0]…といくらでも入れ子にすれば良かろうに

945 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 19:44:43.60 ID:CQ6pveQE.net]
多次元配列はこうじゃない?
$array = [Object[,,]]::new(4,5,6) # 3次元、4×5×6
$array[0,0,0] = "(0, 0, 0)"
$array[0,0,1] = "(0, 0, 1)"

# 参照は「$arraya[0,0,0]」だと配列スライスと間違えそうだから「$array.Get(0,0,0)」の方が安全かも。

946 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 19:47:15.76 ID:CQ6pveQE.net]
要素数は
$array.GetLength(0) # 4
$array.GetLength(1) # 5
$array.GetLength(2) # 6

947 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 19:54:44.51 ID:sGPoKgPO.net]
あぁそっか普通に出来るのか初期化の仕方が悪かったみたい
普通の初期化でも3次元出来るんだね
調べたらジャグ配列のが処理早いそうなので結局そっち採用すると思う
レスしてくれた方有難う

948 名前:デフォルトの名無しさん mailto:sage [2023/11/10(金) 20:49:31.69 ID:qelae/OI.net]
7.4のGAはいつごろになりそう?

949 名前:デフォルトの名無しさん mailto:sage [2023/11/11(土) 09:09:55.24 ID:JcjqK/bB.net]
PowerShell Community Call - October 19 2023
https://github.com/PowerShell/PowerShell-RFC/blob/master/CommunityCall/notes/20231019_Notes.md

Ideally a GA Nov, may have 7.5 preview in December, not guaranteed

950 名前:デフォルトの名無しさん mailto:sage [2023/11/11(土) 09:43:40.20 ID:FLa2E6qS.net]
Ideally に進んで今月中の GA に期待

ところで [console]::OutputEncoding って shift_jis と utf-8 のどっちにしてます?



951 名前:デフォルトの名無しさん mailto:sage [2023/11/11(土) 16:23:53.35 ID:CPZqzXvF.net]
7入れて何かいい事あんの?
それ、OS標準の5.1でできますよね?
もしかして、デベロッパーのオナニーに付き合わされていませんか?

952 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 04:03:18.80 ID:jdIWedpQ.net]
powershellでデフォルトの環境に手を加えないとできないことは他のPG言語に任せるべきだと思う

953 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 12:28:59.88 ID:mJhoQ9VQ.net]
Windows PowerShell 5.1 と PowerShell 7.x の相違点
ttps://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.3

入れる入れないは個人の自由
5と7は共存できるし別にデメリットないから7入れてるよ

954 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 16:32:02.61 ID:K6g/AyoW.net]
スクリプト言語としてならどっちでもいいけど
インタラクティブなコマンドラインシェルとしてなら7が圧倒的に便利
sjis出力コマンドとutf-8出力コマンドの混在環境なら7.4でさらに便利

955 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 21:46:23.90 ID:q3mytz3V.net]
>>937
シェルとしてどんな点が改善されているのですか?

956 名前:デフォルトの名無しさん mailto:sage [2023/11/15(水) 00:20:29.90 ID:oV9ZzUgm.net]
半角英数のファイルにUTF-16を追加する事故が起きないのは助かる

957 名前:デフォルトの名無しさん mailto:sage [2023/11/15(水) 23:34:51.35 ID:Ik7Afwvr.net]
最近始めたんですが

958 名前:デフォルトの名無しさん mailto:sage [2023/11/15(水) 23:40:29.80 ID:Ik7Afwvr.net]
aに1代入したいんですがどうすればいいですか?

function hoge(){
[int]$a;
function moge(){
$this.a = 1;
}
moge;
return $a;
}

hoge #

959 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 09:22:30.17 ID:HndTNurg.net]
・classのメソッドとして書く(何か知らんがレキシカルスコープになる)
・javascriptを使う

960 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 10:09:03.23 ID:vDdnsPkv.net]
Get-Variable とか >>475,899 とか $script:a とか。

なお「[int]$a」では宣言できてない。



961 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 12:06:19.94 ID:HndTNurg.net]
ref[]はpowerahellにおいてCポインタ程度には重要知識なのに
界隈で然程語られる事もなく知られていない
知られてはいけないとでも言うのだろうか…

962 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 13:08:37.33 ID:evZ76lXK.net]
何言ってんだか

963 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 13:38:46.26 ID:WvJyjQhC.net]
>>942
とあるオブジェクトの初期設定にこんな感じで書いてたんですが無理そうですか
了解しました
class hoge:object{
[object]$o_a;
[object]$o_b;
hoge (){
[int] $cnt;
function object_a_init(){
$this.cnt = 1;
}
object_a_init;
}
}

964 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 15:17:07.39 ID:FRf+5dUd.net]
親スコープにある変数の値を変えたいなら
Set-Variable -Name a -Value 1 -Scope 1

965 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 17:00:58.20 ID:HndTNurg.net]
>>946
>>943をよく読んだ方がいいよ
昔の俺のレスの引用だけどね
変数の型指定は値で初期化する必要があるよ

966 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 17:15:32.66 ID:JFk7nC9m.net]
横からすいません
なんでこれはエラーになるんでしょうか
pwsh -nop -c "[System.Text.Encoding]::GetEncoding(932)"

-c を使わずに pwsh -nop と起動して
[System.Text.Encoding]::GetEncoding(932)
を入れると動くのもわからない・・・

967 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 18:13:00.55 ID:vDdnsPkv.net]
エラーって何のエラーなの

968 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 20:12:17.64 ID:JFk7nC9m.net]
MethodInvocationException: Exception calling "GetEncoding" with "1" argument(s): "No data is available for encoding 932. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method."

だそうです

969 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 20:17:57.10 ID:JFk7nC9m.net]
Encoding.RegisterProvider でぐぐったら解決しました

970 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 22:05:45.00 ID:wYK3pDi3.net]
>>941を動くように直したげたよ
function hoge(){
[int]$a = "1" # $aを値で初期化しつつ型を強制。型宣言というよりキャストに相当。[int]に強制されるので値が文字列でも$aにはSystem.Int32に変換された値が入る
$a.GetType() | Write-Host # $aの値の型をコンソールに出力 System.Int32
function moge(){
([ref]$a).Value = 1 # >>943-944の言うブロックで変数を生成せず既存の変数を参照して値を代入する記法
}
moge
$a # 関数の打ち切りの意図を除きreturnキーワード不要。powershellのfuncitonは最後に限らず値を返す式は全部返そうとする
}
hoge



971 名前:デフォルトの名無しさん mailto:sage [2023/11/17(金) 11:55:26.61 ID:i3gkpHOP.net]
>>941
参照渡しでやってみれば?

--------
function hoge
{
[int] $a = 1234

function moge
{
param (
[ref] $b
)

$b.Value = 5678
}

moge -b ([ref] $a)
return $a
}

hoge
--------

about_Ref
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_ref?view=powershell-7.3

972 名前:デフォルトの名無しさん mailto:sage [2023/11/17(金) 14:37:28.42 ID:05VltA/O.net]
PowerShell 7.4 General Availability
https://devblogs.microsoft.com/powershell/powershell-7-4-general-availability/

PSNativeCommandPreserveBytePipe 待ってた!

973 名前:デフォルトの名無しさん mailto:sage [2023/11/17(金) 20:30:46.86 ID:Wtzmq/3L.net]
リンク先読んでないけど、.exeにパイプしたときに早くなる(普通になる)のかな

974 名前:デフォルトの名無しさん [2023/11/20(月) 14:11:07.62 ID:HI5+Omcp.net]
文字列を8文字ごとに分割して配列に格納したいのですが
文字列が8文字以下だと1文字ずつ分割されてしまいます。

$nums = @()
$nums = $num -split '(.{1,8})' | Where-Object{$_}

上記を実行すると、
$num = 12345678 のとき、$num[0] は 1が格納されるのですが、
12345678が格納されるようにするには、どうすればよいでしょうか。

975 名前:デフォルトの名無しさん mailto:sage [2023/11/20(月) 14:50:35.31 ID:HI5+Omcp.net]
>>957
すみません。誤字です。

誤: $num[0] は 1が格納されるのですが、
正: $nums[0] は 1が格納されるのですが、

976 名前:デフォルトの名無しさん mailto:sage [2023/11/20(月) 15:52:48.41 ID:fHSnLnjq.net]
$numsには文字列の"12345678"が代入されてるから
$nums[0]だと"12345678"の1文字目の1が返る

1行目を [string[]]$nums = @() とするか
2行目を $nums = @(12345678 -split '(.{1,8})' | Where-Object{$_}) とすればOK

977 名前:デフォルトの名無しさん [2023/11/20(月) 17:23:25.47 ID:HI5+Omcp.net]
>>0957

ありがとうございます!
できました。

978 名前:デフォルトの名無しさん mailto:sage [2023/11/21(火) 21:09:20.96 ID:qJoihvDX.net]
PowerShell 7.4 だと

PS> python -c 'print("\\")'
\

と期待通りになるけど Windows PowerShell 5.1 だと

PS> python -c 'print("\\")'
 File "<string>", line 1
  print(\)
      ^
SyntaxError: unexpected character after line continuation character

となるのは何が起きてるの?
7.4 でも $PSNativeCommandArgumentPassing を Legacy にすると同じみたいだけど
具体的にどうなってるのか今更だけど知っておきたい

979 名前:デフォルトの名無しさん mailto:sage [2023/11/21(火) 21:20:45.10 ID:CeBFd4j1.net]
>>961
解析の停止:--%
https://learn.microsoft.com/ja-jp/previous-versions/windows/powershell-scripting/hh847892%28v=wps.640%29#%E8%A7%A3%E6%9E%90%E3%81%AE%E5%81%9C%E6%AD%A2--

980 名前:デフォルトの名無しさん mailto:sage [2023/11/21(火) 22:46:00.10 ID:qJoihvDX.net]
対処法が知りたいんじゃなくてどう解析されたかが知りたい



981 名前:デフォルトの名無しさん mailto:sage [2023/11/21(火) 22:57:00.47 ID:wGZJ97Pn.net]
コマンドラインのパース内容をデバッグできるコマンドレットがあって
inactionで紹介されてた気がするけど何か思い出せない

982 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 00:52:11.84 ID:z2bY/yQG.net]
$PSVersionTable
PSVersion 5.1

Ruby の1-liner では、%Q 記法があるから大丈夫

ruby -e 'print %Q(\\)'
\

ruby -e 'print %Q(あaい)'
あaい

983 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 04:23:14.63 ID:nZzIGDLb.net]
>>964
Get-Command | sls "breakpoint|callstack"

デバッガーについて - PowerShell | Microsoft Learn
ttps://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_debuggers

984 名前:?view=powershell-5.1 []
[ここ壊れてます]

985 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 10:26:54.20 ID:Yh77KGhz.net]
>>966
回答ありがとう、でも思い出せないのは>>961の流れからの「コマンドラインのパース」自体の事だったんだ。

in Action引っ張り出して確認したが↓の事で、これで違いが分かるかも。(v7.4で確認してない。)
Trace-Command -Option All NativeCommandParameterBinder -PSHost {python -c 'print("\\")'}

986 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 10:52:24.03 ID:Yh77KGhz.net]
他に、形態素解析みたいに分解・解析できる機能もあった気がするが忘れた

987 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 14:18:25.39 ID:W8vcuvaF.net]
PowerShell 7.4 だと python -c 'print("\\")' ですむことを
Windows PowerShell 5.1 だとどう書けばいいんだ
--% を使っても使わなくても分からん

988 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 15:05:51.75 ID:fKGlzN6D.net]
パラメータの干渉受けたくないなら普通にStart-Processでいいでしょ

989 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 15:26:30.66 ID:W8vcuvaF.net]
対話シェルでStart-Processするのはつらい

990 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 15:34:55.56 ID:W8vcuvaF.net]
つらいのは我慢するとしてStart-Processを使ってどう書けばいいの



991 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 20:54:48.61 ID:5rDf7evN.net]
pythonの引用符はシングルもダブルもエスケープシーケンス展開されるからおかしな解釈になってるだけだな
pythonの仕様を呪うがいい

992 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 22:06:38.07 ID:W8vcuvaF.net]
pythonは例として使っただけだしどうでもいいよ
あくまで興味の対象はPowerShellのコマンドラインのパース
やっぱ 7.4 すげぇで終わってもいいんだけど

なんか 7.4 の --% が腐ってる気がする
5.1 の想定通りの --% と違って勝手に引用符加えてぶっ壊してる感じ
はやいとこ直して欲しい

993 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 22:37:16.49 ID:5rDf7evN.net]
うーんどうでもいい変なの相手しちゃった

994 名前:デフォルトの名無しさん mailto:sage [2023/11/23(木) 17:39:38.00 ID:Rimm12ii.net]
いやわかんないなら別にいいけど一応書いとくわ
もちろん 7.4 を Windows で使う話

stop-parsing token (--%) は以後のパースをしないはずなのに
引用符無視して空白で引数を分割してコマンド起動してるっぽい
CreateProcessまでに引用符が変に補完されるから意図通り動かない

--% が出てきたら引数の分割はネイティブコマンドに任せないとあかん
$PSNativeCommandArgumentPassing が Legacy の時と同じ処理な

そういうわけで Legacy 扱いされる .cmd とかでは問題ない
おかしいのは Standard 扱いされる .exe なんかの場合だけ

PSNativeCommandArgumentPassing の説明
>この実験的な機能が有効になっていると、PowerShell は、ネイティブの実行可能
>ファイルを呼び出すときに、文字列を再構築する現在の機構ではなく、
>StartProcessInfo オブジェクトの ArgumentList プロパティを使用します。

にある、文字列を再構築するのが Legacy、Argumentlist を使うのが Standard
という違いがわかれば理解できる話なんだが期待はしてない

995 名前:デフォルトの名無しさん [2023/11/23(木) 22:03:41.74 ID:KHOftQWe.net]
Powershellを体系的に学ぶにあたっておすすめの本ってありますか?
やりたいことをググってコードをコピペして使用してる状態で、コードの理解度が深まらないと思ったので体系的に学びたいと思いました。
自分のPowershellの用途は、日常的な作業の自動化(テキストファイルの読み書き、ファイルの起動やタスキル、アクティブウィンドウの切り替え、robocopyでのバックアップなど)で使っています。

996 名前:デフォルトの名無しさん mailto:sage [2023/11/23(木) 22:45:32.85 ID:38VIgpCL.net]
馬鹿には無理

997 名前:デフォルトの名無しさん mailto:sage [2023/11/23(木) 23:00:45.15 ID:09UkZirn.net]
Windows PowerShell in Action Third Editionは読んだかね
https://sd.blackball.lv/library/Windows_PowerShell_in_Action_3rd_Edition_(2017).pdf
ただしこの本は6年前の情報。英語PDFだけど今は色々と翻訳手段もあるから読めると思う
powershellならWindows上の事であれば大抵の事はできるけど
本当に便利に使うならC#や.NETの前提知識があった方がいいだろうね
C#関連で可能な事ならほぼpowershellに置き換え可能だから

998 名前:デフォルトの名無しさん mailto:sage [2023/11/24(金) 00:12:01.77 ID:kL+9jaCp.net]
Powershell で複雑なものは書けないから結局、Ruby になる。
WSL2, Linux側からなら、Windows側をいじれるし

999 名前:デフォルトの名無しさん mailto:sage [2023/11/24(金) 03:38:21.50 ID:k2LHl+dn.net]
rubyガイジなんだろうけどそこでrubyになるのは贔屓目に見てもおかしいだろ

1000 名前:デフォルトの名無しさん [2023/11/24(金) 05:42:11.56 ID:IciYTcVm.net]
>>977
コードをコピーしてchatGPTかPerplexityで「PowerShellで"〜〜〜"はどういう意味?」を聞けばいい



1001 名前:デフォルトの名無しさん [2023/11/24(金) 13:14:03.37 ID:4NGqTzL9.net]
>>977
「PowerShell実践ガイドブック」は、PowerShellの動作の仕組みが詳しく解説されていてよかった
謎に思える挙動についても説明がある
ちょっと古いが(5年半前に出版)

1002 名前:デフォルトの名無しさん mailto:sage [2023/11/25(土) 12:02:22.73 ID:pLnatqec.net]
microsoft learn じゃダメなの?
ttps://learn.microsoft.com/ja-jp/powershell/scripting/how-to-use-docs?view=powershell-7.4
ttps://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about?view=powershell-7.4

1003 名前:デフォルトの名無しさん mailto:sage [2023/11/25(土) 18:06:48.53 ID:wD6fmxci.net]
MSの自動翻訳は5分と読んでられない

1004 名前:デフォルトの名無しさん mailto:sage [2023/11/25(土) 18:41:01.39 ID:444pwTGg.net]
英語ページでOK

1005 名前:デフォルトの名無しさん mailto:sage [2023/11/25(土) 18:53:18.66 ID:Q+kYJTm7.net]
975です。おすすめのドキュメント教えてくれた方ありがとうございます。
一つ気になったのですが、学習の順番としてはC#もしくは.NETから入ったほうが効率的ですか?
自分がPowershell始めたきっかけがグローバルホットキーをうまく使いたいというのが始まりで、
後述URLのコードをベースに継ぎ足しで書き加えている状態です。

PowerShellとC#でグローバルホットキーを登録する
https://qiita.com/minr/items/72b02d673727f9eb4c37

※自分のC#のレベルはHelloWorld出したぐらいまで、.NETについても知識としてほぼ白紙です。

1006 名前:デフォルトの名無しさん mailto:sage [2023/11/25(土) 19:23:35.12 ID:c65Q6uO9.net]
ダボゥクリッコゥで実行出来ない面倒臭いものを誰が使うんですか?

1007 名前:デフォルトの名無しさん mailto:sage [2023/11/25(土) 21:21:00.31 ID:2+5b9joX.net]
ダブルクリックで実行できたWSHはLOVELETTERワームやら何やらでセキュリティが低いとみなされて非推奨になりましたとさ
めでたしめでたし

1008 名前:デフォルトの名無しさん mailto:sage [2023/11/26(日) 00:07:05.46 ID:tHVdGucZ.net]
例えば、デスクトップにショートカットを作って、リンク先を以下のようにすると、
ダブルクリックでPowershell を起動して、Ruby でスクリプトを実行する

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe "ruby C:/Users/Owner/Documents/Ruby/a.rb"

初心者はRuby で始めるべき。
C# はRubyの10倍、時間が掛かるし難しい

1009 名前:デフォルトの名無しさん mailto:sage [2023/11/26(日) 04:20:48.27 ID:xBck3nSS.net]
こんなんに粘着されちゃmatzが気の毒だわな

1010 名前:デフォルトの名無しさん [2023/11/26(日) 07:10:42.58 ID:forkl5ep.net]
同じ民族同士、分断せずに仲良くしろよ

DevBlogs - Microsoft Developer Blogs
ttps://devblogs.microsoft.com/



1011 名前:デフォルトの名無しさん [2023/11/26(日) 10:47:01.19 ID:d/KzVdDP.net]
MatzはWindowsやC++に興味無いから
よほどエゴサでもしないかぎり気の毒なことにはならないわ
知らぬが仏

1012 名前:デフォルトの名無しさん mailto:sage [2023/11/26(日) 15:25:10.25 ID:06WEnIxy.net]


1013 名前:デフォルトの名無しさん mailto:sage [2023/11/26(日) 15:25:17.90 ID:06WEnIxy.net]


1014 名前:デフォルトの名無しさん mailto:sage [2023/11/26(日) 15:37:23.40 ID:tLrTLV3h.net]
というか、Windowsの日本語localizationのデフォルトが未だにクゾだから、
「☑ベータ: ワールドワイド言語サポートを Unicode UTF-8 を使用」
を最初から標準にしていないかぎり、Windowsを日本語で使うこと自体、クソということになる

1015 名前:デフォルトの名無しさん [2023/11/29(水) 13:21:53.02 ID:FINewHXp.net]
外部コマンドを実行するときに外部コマンド自体は正常な戻り値を返してるのにpowershellで動かすとNativeCommandErrorって例外が出るんだけどなんでだかわかる人おる?

1016 名前:デフォルトの名無しさん mailto:sage [2023/11/29(水) 15:06:21.22 ID:UMPQWy8o.net]
そういうのはまず再現できるコードを貼ってね

1017 名前:デフォルトの名無しさん mailto:sage [2023/11/29(水) 16:09:41.88 ID:0g8RZ7sB.net]
ISE上で実行した場合に標準エラー出力があると
戻り値に関係なくNativeCommandErrorになるけど、このこと?

そうでなければ>>998にプラスしてバージョンなどの環境も示してね。

あと次スレ
https://mevius.5ch.net/test/read.cgi/tech/1701241669/

1018 名前:デフォルトの名無しさん [2023/11/29(水) 17:02:28.41 ID:FINewHXp.net]
>>999
多分それですありがとうございます

1019 名前:デフォルトの名無しさん mailto:sage [2023/11/29(水) 18:41:30.81 ID:Emfdd1vJ.net]
質問いいですか

1020 名前:デフォルトの名無しさん mailto:sage [2023/11/29(水) 19:21:40.65 ID:0g8RZ7sB.net]
だめです



1021 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 654日 0時間 45分 29秒

1022 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






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

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

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