前スレ
PowerShell -Part 5
https://mevius.5ch.net/test/read.cgi/tech/1615994992/
次スレは>>980が立ててね!!
PowerShell -Part 6
レス数が1000を超えています。これ以上書き込みはできません。
2022/02/13(日) 18:36:12.07ID:LaQ04ZoE
2022/02/13(日) 19:10:00.19ID:DaRcZGJS
>>1 乙
2022/02/15(火) 11:59:52.53ID:5Cl7umfN
>>1posh
2022/02/15(火) 16:10:21.28ID:8dPt5mlU
2022/02/17(木) 00:21:49.24ID:CBYlGRMr
今までコマンドプロンプトを使っていましたが、windows power shellに乗り換えました。
コマンドプロンプトでは、エクスプローラーからドラッグ&ドロップでファイルパスが入力できましたが、
windows power shellではできませんでした。
ファイルパスを楽に入力する方法はないんでしょうか
コマンドプロンプトでは、エクスプローラーからドラッグ&ドロップでファイルパスが入力できましたが、
windows power shellではできませんでした。
ファイルパスを楽に入力する方法はないんでしょうか
2022/02/17(木) 09:30:47.39ID:zynXt0BH
普通にできるけど
2022/02/17(木) 15:17:37.72ID:1Rki5Xrp
ドラッグ&ドロップを扱うのはコンソールの仕事なんじゃ?
conhostで試してみたけどcmd/pwsh/windows powershellどれでもいけた
あんまり設定弄ってないはずだけど、左上クリックして出てくるメニューのプロパティからコピペ関連の項目があるので触ってみては
wtで試すと何れのシェルでもファイルのD&Dは受け付けなかった、異常に高機能なのに意外
wtのことならwtスレで聞くといいかと
conhostで試してみたけどcmd/pwsh/windows powershellどれでもいけた
あんまり設定弄ってないはずだけど、左上クリックして出てくるメニューのプロパティからコピペ関連の項目があるので触ってみては
wtで試すと何れのシェルでもファイルのD&Dは受け付けなかった、異常に高機能なのに意外
wtのことならwtスレで聞くといいかと
2022/02/17(木) 15:25:50.87ID:1Rki5Xrp
追伸
wtはexplorer上でファイルをコピーしてctrl+[shift+]vでペーストするとファイル名が入力される
D&Dにこだわる理由がないなら慣れた方が早そう、労力は大して変わらないだろう
wtはexplorer上でファイルをコピーしてctrl+[shift+]vでペーストするとファイル名が入力される
D&Dにこだわる理由がないなら慣れた方が早そう、労力は大して変わらないだろう
95
2022/02/17(木) 19:52:12.95ID:CBYlGRMr >>6-8
power shellはwindowsボタンを右クリックして起動するやつを使いました。
今試したら、D&Dできないのは「管理者として実行」する方で、通常モードならD&Dできました。
管理者モードかどうかで挙動が変わるんですね・・・。
power shellはwindowsボタンを右クリックして起動するやつを使いました。
今試したら、D&Dできないのは「管理者として実行」する方で、通常モードならD&Dできました。
管理者モードかどうかで挙動が変わるんですね・・・。
2022/02/17(木) 22:56:43.04ID:urCZGbW+
UIPIって仕組みで権限またぎのドラッグアンドドロップは禁止されてるみたいね
2022/02/19(土) 09:43:41.33ID:Z9XVFihU
wtスレってどこだよ
勝手が違うから戻してほしいしこんなの作る前に非コンソールのpowershell出せよ
勝手が違うから戻してほしいしこんなの作る前に非コンソールのpowershell出せよ
2022/02/19(土) 10:18:51.14ID:Klz8S7Ad
まるでスマホの使い方がわからず店頭でキレて周りに介助してもらおうとするおじいちゃんと同じ言動で草
wtにファイル名をドロップできないのは誤解で、cmdと同じ管理者モード間のOSによるセキュリティ機構のUIPIが原因だった
wtはcmdよりよっぽど癖がない良アプリ
Powershellのほうがよほど癖強い
あとwtは普通に元に戻せる
wtにファイル名をドロップできないのは誤解で、cmdと同じ管理者モード間のOSによるセキュリティ機構のUIPIが原因だった
wtはcmdよりよっぽど癖がない良アプリ
Powershellのほうがよほど癖強い
あとwtは普通に元に戻せる
2022/02/19(土) 14:02:07.12ID:x/upE6G9
2022/02/19(土) 15:57:35.72ID:22rkCkNI
>>13
ドラッグアンドドロップという操作が危険だから狙い撃ちで制限されているというわけではなくて、プロセス間のメッセージ通信に対して制約が掛けられた結果ドラッグアンドドロップも使えなくなった
ドラッグアンドドロップという操作が危険だから狙い撃ちで制限されているというわけではなくて、プロセス間のメッセージ通信に対して制約が掛けられた結果ドラッグアンドドロップも使えなくなった
2022/02/19(土) 16:04:56.07ID:x/upE6G9
>>14
ああなるほど、それなら納得
ああなるほど、それなら納得
168
2022/02/22(火) 02:53:21.18ID:LHZaRsEg2022/02/22(火) 08:44:56.08ID:mFRfNBZm
Allow dragging files or folders into Terminal's Command Prompt window to display their path #12377
https://github.com/microsoft/terminal/issues/12377
https://github.com/microsoft/terminal/issues/12377
2022/02/22(火) 20:22:44.35ID:wkvlg9SU
前スレの質問者に本当に必要だったものは、たぶんこういうのだと思うんだ…
class node {
[node]$val;
[node[]]$children;
}
class node {
[node]$val;
[node[]]$children;
}
2022/02/22(火) 20:24:23.06ID:wkvlg9SU
まちがえた→[object]$val
教えたがりおじさん見苦しい
教えたがりおじさん見苦しい
2022/02/22(火) 21:34:19.39ID:5aCEOBVD
昔csvdeのエクスポートデータをVBSで木構造に変換したりしたけどその時はジャグ配列でなんとかなった
powershellだと配列に色々罠があるから大変そう
コマンドレット化されてるデータ構造を扱う事は得意でもテキストを1から解析して階層データとして扱うのには向かない気がする
powershellだと配列に色々罠があるから大変そう
コマンドレット化されてるデータ構造を扱う事は得意でもテキストを1から解析して階層データとして扱うのには向かない気がする
2022/02/22(火) 22:00:01.99ID:LHZaRsEg
木のテキスト表現がカッコや""等ならbalancing groupでパースするのが便利だよ
perl/Pythonよりdotnetのパターン言語の方が強い(丸パクリだから当然だけど)
perl/Pythonよりdotnetのパターン言語の方が強い(丸パクリだから当然だけど)
2022/02/22(火) 22:10:34.21ID:LHZaRsEg
2022/02/22(火) 22:27:40.62ID:U3xoo538
逆説的だけど、.NETに詳しくない俺みたいな人ほどテキスト処理は抑えておくべき
なんか良く分からん物が返ってきても、オブジェクトの印字表現をOut-Fileで捕まえてテキスト処理にフォールバックできる()
なんか良く分からん物が返ってきても、オブジェクトの印字表現をOut-Fileで捕まえてテキスト処理にフォールバックできる()
2022/02/22(火) 22:59:38.55ID:LHZaRsEg
-match一発でパースが済まない木の表現は、段落を使って木を表現するyamlみたいなやつ
balancing group+複数行マッチで頑張れるかもしれないけど、地道にインデント数えてるわ
balancing group+複数行マッチで頑張れるかもしれないけど、地道にインデント数えてるわ
2022/02/22(火) 23:31:15.02ID:+zCOrMmD
一見不器用でもインデントレベルは素直に数えるのが正解
例えばpythonインタプリタもカウンタを使って構文をパースしてる
yaml系のシリアル化フォーマットは、インデントを数えるだけでパーサが書ける移植性が売り
例えばpythonインタプリタもカウンタを使って構文をパースしてる
yaml系のシリアル化フォーマットは、インデントを数えるだけでパーサが書ける移植性が売り
2022/02/23(水) 20:35:53.13ID:KVH3xsak
Chromeでもパスワードにメモを付けて保存できるようになるみたいね
27915
2022/02/25(金) 01:33:26.38ID:wLKzA9jy 変数を文字列の中に入れ込んでしまって、消せないフォルダが出来てしまいました
C:\works\+ $a
削除もリネームもフォルダ移動すら出来ません
どうすれば削除出来ますでしょうか?
お知恵を貸してください
C:\works\+ $a
削除もリネームもフォルダ移動すら出来ません
どうすれば削除出来ますでしょうか?
お知恵を貸してください
2022/02/25(金) 02:07:17.42ID:3hSRN4MI
ファイル名に$が入って、$aが展開されちゃう的な?ならエスケープすればいいだけでは
`$a
意図を汲めてるかちょっと自信ないけど
`$a
意図を汲めてるかちょっと自信ないけど
29915
2022/02/25(金) 07:49:52.49ID:wLKzA9jy >>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で作成
細かい所はあまり覚えてませんがこんな感じです
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で作成
細かい所はあまり覚えてませんがこんな感じです
2022/02/25(金) 08:55:58.66ID:Ex9z+jLY
うちの環境では削除できた
なんかのプロセスにロックされてるんじゃないの?
なんかのプロセスにロックされてるんじゃないの?
2022/02/25(金) 09:22:05.48ID:Ttq2k6xT
エラーメッセージを貼らない奴の相手してもしょうがない
32915
2022/02/25(金) 11:29:32.26ID:omaqMYjV >>31
これは失礼しました
エラーは下記です。普通の名前のフォルダは削除出来ます
Remove-Item : 引数 '$null' を受け入れる位置指定パラメーターが見つかりません。
発生場所 行:1 文字:1
+ Remove-Item + $a
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Remove-Item]、ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
これは失礼しました
エラーは下記です。普通の名前のフォルダは削除出来ます
Remove-Item : 引数 '$null' を受け入れる位置指定パラメーターが見つかりません。
発生場所 行:1 文字:1
+ Remove-Item + $a
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Remove-Item]、ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
33915
2022/02/25(金) 11:32:06.01ID:omaqMYjV ちなみにフォルダを右クリックして出てくるプロパティ→セキュリティのタブには
「要求されたセキュリティ権限は利用できないか、または表示されません。」
とのエラーも出てます
「要求されたセキュリティ権限は利用できないか、または表示されません。」
とのエラーも出てます
2022/02/25(金) 11:40:38.52ID:Ttq2k6xT
35915
2022/02/25(金) 12:06:55.57ID:omaqMYjV >>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
すみません。。
やってみました
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
2022/02/25(金) 12:16:43.02ID:SH4WT7RG
コマンドプロンプトを管理者権限で起動
rd /s /q エクスプローラーから対象フォルダをD&D
これで無理なら排他制御キャンセルするソフト使うかPCを一旦再起動
rd /s /q エクスプローラーから対象フォルダをD&D
これで無理なら排他制御キャンセルするソフト使うかPCを一旦再起動
2022/02/25(金) 12:24:59.94ID:Ttq2k6xT
38915
2022/02/25(金) 12:30:35.39ID:omaqMYjV >>36
ありがとう御座います
「指定されたファイルが見つかりません」
と返されました。再起動も状況変わらず
Dirコマンドでは+ $a は表示されておりエクスプローラでも見えてるのですが何故か認識されないです
ありがとう御座います
「指定されたファイルが見つかりません」
と返されました。再起動も状況変わらず
Dirコマンドでは+ $a は表示されておりエクスプローラでも見えてるのですが何故か認識されないです
2022/02/25(金) 12:36:38.88ID:yKl3/QUV
コマンドで消したいだけならワイルドカードやタブ補完で選択すればいいじゃない
再起動後エクスプローラーから消せないか試したの?
何がしたいのか分からん
再起動後エクスプローラーから消せないか試したの?
何がしたいのか分からん
40915
2022/02/25(金) 12:42:21.42ID:omaqMYjV >>37
空白で思い出しました
試行錯誤してて
'"C:\works\' + $a + '\"'
のような事もやってました
なので(なのかどうかも分かりませんが)フォルダの名前には + $a と後ろにも空白が入っています
空白で思い出しました
試行錯誤してて
'"C:\works\' + $a + '\"'
のような事もやってました
なので(なのかどうかも分かりませんが)フォルダの名前には + $a と後ろにも空白が入っています
41915
2022/02/25(金) 12:44:41.55ID:omaqMYjV42915
2022/02/25(金) 12:48:15.22ID:omaqMYjV 追記正確なフルパス名
[]は半角スペースです
C:\works\[]+[]$a[]
[]は半角スペースです
C:\works\[]+[]$a[]
2022/02/25(金) 12:55:42.52ID:SH4WT7RG
その親フォルダにカレントディレクトリを移動して他に$付くフォルダが無い、或いは削除してしまって良いなら
for /d %a in (*$*) do rd /s /q "%~a"
for /d %a in (*$*) do rd /s /q "%~a"
2022/02/25(金) 13:03:31.62ID:SH4WT7RG
2022/02/25(金) 13:04:14.85ID:AEqwOQnl
C:\worksごと消せばいい
46915
2022/02/25(金) 13:06:19.04ID:omaqMYjV >>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→「指定されたファイルが見つかりません」
やはり指定されたファイルが見つかりませんと返されました
一旦整理します
目的︰ + $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→「指定されたファイルが見つかりません」
47915
2022/02/25(金) 13:07:15.53ID:omaqMYjV 上記 $y → $a です
すみません
すみません
2022/02/25(金) 13:11:33.74ID:AEqwOQnl
フォルダが消したいだけならPowershell関係ないからこちらでどうぞ
Windows 10 質問スレッド Part82
https://mevius.5ch.net/test/read.cgi/win/1644831539/
Windows 10 質問スレッド Part82
https://mevius.5ch.net/test/read.cgi/win/1644831539/
2022/02/25(金) 13:17:48.06ID:MEIpOner
\\?\C:\fogo
2022/02/25(金) 15:04:10.02ID:gazry23L
2022/02/25(金) 20:57:30.79ID:FVUZxr5Y
dir "*a*" などとして対象のフォルダだけ表示されることを確認して
dir "*a*" |
dir "*a*" |
2022/02/25(金) 20:58:43.73ID:FVUZxr5Y
dir "*a*" | % {remove-item -LiteralPath $_.Name}
でどうだろうか
でどうだろうか
2022/02/25(金) 21:06:53.72ID:zbdaU1gm
55915
2022/02/26(土) 12:47:40.66ID:AL/cEm3C ありがとうございます。
レス遅くなりました。以下のように返ってきました。
>>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
レス遅くなりました。以下のように返ってきました。
>>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
56915
2022/02/26(土) 12:47:51.62ID:AL/cEm3C2022/02/26(土) 13:19:35.91ID:zbGeAZZp
Win10の質問スレ行けって言ったのに何故行かないのかな?
powershellに拘る理由がわからないよ
仕方ないのでこっちで回答するわ
Poweshell関係ないけど
https://itojisan.xyz/パソコンのトラブル/windows10でフォルダ・ファイルを削除できない/
これ全部試せ
powershellに拘る理由がわからないよ
仕方ないのでこっちで回答するわ
Poweshell関係ないけど
https://itojisan.xyz/パソコンのトラブル/windows10でフォルダ・ファイルを削除できない/
これ全部試せ
2022/02/26(土) 13:34:00.21ID:DA2+bsLA
これ本来含まれないはずの+が含まれてるから消さないんでしょ
ディスクエディタかなんかで強制的に消せる名前にリネームするしかないのでは?
(FAT時代にしかやったことないからNTFSでできるかは知らん)
曖昧な記憶のスクリプトを正確に思い出せればなんとかなるやもしれんが
普通の方法では+がファイル名かフォルダ名の一部と解釈されないから消すのは無理だと思う
なかなかコーナーケースのバグ見つけたなw
多分PSでどうこうできる領域じゃない
再インストールが一番早いかもw
ディスクエディタかなんかで強制的に消せる名前にリネームするしかないのでは?
(FAT時代にしかやったことないからNTFSでできるかは知らん)
曖昧な記憶のスクリプトを正確に思い出せればなんとかなるやもしれんが
普通の方法では+がファイル名かフォルダ名の一部と解釈されないから消すのは無理だと思う
なかなかコーナーケースのバグ見つけたなw
多分PSでどうこうできる領域じゃない
再インストールが一番早いかもw
2022/02/26(土) 13:36:55.01ID:+OtunY2h
当てずっぽうで試す前に、まずabout_Quoting_Rulesを読んでくれ
何かおかしい文字が入ってるのかは、[byte[]]にキャストすれば分かるから
それ見て正しくクオートして入力してくれ
何かおかしい文字が入ってるのかは、[byte[]]にキャストすれば分かるから
それ見て正しくクオートして入力してくれ
2022/02/26(土) 14:08:05.70ID:+OtunY2h
>>58
+を特別扱いするのはNTFSじゃなくて、特定のコマンドの仕様では?(copy fi+le等)
色んなコマンドが内部で引いてる可能性があるから避けたほうが無難な文字とは思うけど
$もNTFS的には合法だけど、予約名のプレフィックスにする慣習なので、なので避けたほうがいいのは確か
undocumentedなのもいっぱいある
+を特別扱いするのはNTFSじゃなくて、特定のコマンドの仕様では?(copy fi+le等)
色んなコマンドが内部で引いてる可能性があるから避けたほうが無難な文字とは思うけど
$もNTFS的には合法だけど、予約名のプレフィックスにする慣習なので、なので避けたほうがいいのは確か
undocumentedなのもいっぱいある
2022/02/26(土) 14:54:37.65ID:+OtunY2h
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
うーん?
> ni -d sandbox |sl
> echo valid? >'+ $a'
> gci |select name
Name
----
+ $a
> ri '+ $a' &&echo $?
True
> gci |select name
# no output
うーん?
2022/02/26(土) 15:18:46.03ID:1IWc50so
cmdを起動して
rd "\\.\C:\works\ + $a "
rd "\\.\C:\works\ + $a "
2022/02/26(土) 15:22:25.68ID:1IWc50so
ダメなら引用符ありなしと、//./ と //?/ を変化させて試してみて
2022/02/26(土) 15:46:10.03ID:EUVpr27z
検証した
cmdを起動して rd "\\?\C:\works\ + $a " が正解だった
このやり方はPowershell経由では消えない
末尾スペースが再現できなかったから md "\\?\C:\works\ + $a " で作った
cmdを起動して rd "\\?\C:\works\ + $a " が正解だった
このやり方はPowershell経由では消えない
末尾スペースが再現できなかったから md "\\?\C:\works\ + $a " で作った
66915
2022/02/26(土) 16:04:31.69ID:AL/cEm3C 因みに rd “\\?\〜“ってどんな意味でしょうか?
2022/02/26(土) 16:07:54.37ID:EUVpr27z
2022/02/26(土) 16:49:18.98ID:+OtunY2h
ずこー
ファイル名に末尾スペースはNTFS的に非合法のはずなのに、なんで作れちゃうかな
闇が深い
ファイル名に末尾スペースはNTFS的に非合法のはずなのに、なんで作れちゃうかな
闇が深い
2022/02/26(土) 16:54:25.81ID:+OtunY2h
一応補足しとくとシェルは関係ない、pwshから非合法パス名へアクセスするのにも(ri)Remove-Item "\\?\~"は使える(使えてしまう)
2022/02/26(土) 19:13:10.48ID:kQiC9zng
-LiteralPathが多分必要
2022/02/26(土) 20:14:14.01ID:+OtunY2h
ri -lp '\\?\C:\Users\ore\sandbox\trailing 'で消せた
そもそも-literalpath指定無しには正しくない名前のファイルは作れないようになってる
標準のFileSystemプロバイダは静かに切り詰めるようだけど、できればエラーにしてほしいところ
そもそも-literalpath指定無しには正しくない名前のファイルは作れないようになってる
標準のFileSystemプロバイダは静かに切り詰めるようだけど、できればエラーにしてほしいところ
2022/02/26(土) 20:16:53.67ID:+OtunY2h
当たり前だがext4上では合法だから普通に作れるな
プロバイダ依存きをつける
プロバイダ依存きをつける
2022/02/26(土) 20:28:51.97ID:HRmzshO4
各々のプログラムのモラルに任せられてるのが残念なところ
pwshからコマンドレットを使う限りはうっかり変なもの作るの阻止してくれるのが救いか
linux/mac上ならそもそもOSがハネてくれるのでpwshで余計なチェック挟む必要もないのだけど
pwshからコマンドレットを使う限りはうっかり変なもの作るの阻止してくれるのが救いか
linux/mac上ならそもそもOSがハネてくれるのでpwshで余計なチェック挟む必要もないのだけど
2022/02/26(土) 20:33:36.43ID:7VK+waus
Mac特有の濁点ユニコードもそのまま入るし互換性のためだろう
2022/02/26(土) 20:34:30.39ID:HRmzshO4
2022/02/26(土) 23:23:38.20ID:U2u/902M
いや真似しても普通には再現できなかったよ
\\?\ でなんとか作った
条件もわからんしいたずらに憂いてもしょうがない
\\?\ でなんとか作った
条件もわからんしいたずらに憂いてもしょうがない
2022/02/28(月) 02:46:56.51ID:RHAmUG8r
APIで普通に作れるから対策したつもりてもコマンドを適当に組み合わせたら偶然できるようなレベル
web上に消し方の情報が沢山あるのはそういう理由
web上に消し方の情報が沢山あるのはそういう理由
2022/02/28(月) 10:01:03.24ID:1ziskyp5
2022/02/28(月) 13:10:38.48ID:5+6VAuli
試す気はないけど
>>64で再現できるんでね?
>>64で再現できるんでね?
2022/02/28(月) 14:17:24.11ID:9W2zYqHy
そりゃあえて迂回したらな
Test-Path -IsValidは信頼できるのだろうか?
中身分からものに頼るよりendswith(". ")とかで自分でバリデーションするべきか
Test-Path -IsValidは信頼できるのだろうか?
中身分からものに頼るよりendswith(". ")とかで自分でバリデーションするべきか
2022/02/28(月) 14:24:32.38ID:9W2zYqHy
任意文字列渡されてもそのまま作らせない、あるいは勝手に置換+ユニークIDにリネームが現実的な防御策か
ファイルシステム移行で問題起こす事もあるし、どこでも合法なファイル名に正規化しておいた方が後のため
ファイルシステム移行で問題起こす事もあるし、どこでも合法なファイル名に正規化しておいた方が後のため
2022/02/28(月) 15:01:04.99ID:Xoh24ILj
2022/02/28(月) 15:11:14.28ID:NrGkgOto
bashとか平気で不正ファイルポンポン作るからヤバい
OSが拒否するのを期待してるからそれ自体が悪い訳ではないのだが、安易にwindowsで使うのは本当にヤバい
OSが拒否するのを期待してるからそれ自体が悪い訳ではないのだが、安易にwindowsで使うのは本当にヤバい
2022/02/28(月) 15:27:14.93ID:9W2zYqHy
win版のgitに付いてくるの使ってるけど、unix系ツールはファイルシステムに気を使う移植は見たことがない
仮想ドライブに隔離してしまうのが手っ取り早くて安全そう
仮想ドライブに隔離してしまうのが手っ取り早くて安全そう
2022/02/28(月) 15:40:26.92ID:9W2zYqHy
2022/02/28(月) 15:51:52.53ID:9W2zYqHy
win11ではこっそり治ってたりしねーかなこれ、なければwin12に乞うご期待…
2022/03/01(火) 03:09:34.84ID:L/ghTddK
2022/03/01(火) 03:14:07.19ID:L/ghTddK
2022/03/01(火) 13:31:53.46ID:fDW5QBJr
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オプションでも同じだった
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オプションでも同じだった
2022/03/01(火) 13:42:53.50ID:fDW5QBJr
ファイル名の末尾の英字取って
3---.txt
3-1-.txt
4---.txt
4-1-.txt
としたら
3---.txt
3-1-.txt
4---.txt
4-1-.txt
になったけど意味が判らない
変なバグに遭遇した気分
3---.txt
3-1-.txt
4---.txt
4-1-.txt
としたら
3---.txt
3-1-.txt
4---.txt
4-1-.txt
になったけど意味が判らない
変なバグに遭遇した気分
2022/03/01(火) 16:20:44.39ID:XlErARwx
最近のWindowsは9.txtの後ろに10.txtが並ぶように数の大小を考慮したソートを標準で行うからそのアルゴリズムが生む微妙な綾じゃね
レジストリによって挙動が変わるはず
文字コード順を順守させたいならファイル名標準のソートにならないように、ハッシュテーブルの引数なんかを使って単なる文字列としてソートしてあげればいいんじゃないかな
レジストリによって挙動が変わるはず
文字コード順を順守させたいならファイル名標準のソートにならないように、ハッシュテーブルの引数なんかを使って単なる文字列としてソートしてあげればいいんじゃないかな
2022/03/01(火) 22:49:13.37ID:qg4SVCg0
テストしてないし遅い気がするけど
下準備なしがよければ
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)})
下準備なしがよければ
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)})
2022/03/02(水) 17:07:09.87ID:HFEr6ITo
2022/03/02(水) 17:54:20.18ID:qWIZmWPY
2022/03/02(水) 21:57:02.42ID:Gj5Erajd
PowerShellでSQliteのデータベースに追記操作しようと思っていますが
テーブル名を変数にし、カラムと追記したい内容を配列で操作しようとすると上手くいきません。
一括で出来ないなら配列内ループでと思いやってみましたが、そちらもうまくいきませんでした。
配列でINSERTするには、以下のサンプルだとどういった記述をすればよいのでしょうか?
テーブル名を変数にし、カラムと追記したい内容を配列で操作しようとすると上手くいきません。
一括で出来ないなら配列内ループでと思いやってみましたが、そちらもうまくいきませんでした。
配列でINSERTするには、以下のサンプルだとどういった記述をすればよいのでしょうか?
2022/03/02(水) 21:57:57.51ID:Gj5Erajd
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
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
2022/03/02(水) 21:59:03.05ID:Gj5Erajd
$Table = "List"
$ArrCol = @("No","Name","Gender")
$ArrRecord = @("1","山田","男")
$ArrCol = @("No","Name","Gender")
$ArrRecord = @("1","山田","男")
2022/03/02(水) 21:59:46.03ID:Gj5Erajd
# レコードの追加
$cmd.CommandText = @"
INSERT INTO $Table ($ArrCol) values ($ArrRecord)
"@
$cmd.CommandText = @"
INSERT INTO $Table ($ArrCol) values ($ArrRecord)
"@
2022/03/03(木) 00:11:25.85ID:Ai6V8ofW
どこでどんなエラーが出てるのか分からないし試してないけど
文字列の中で配列変数をそのまま展開してるのが原因なんじゃないかな。
$cmd.CommandText = @"
INSERT INTO $Table ($($ArrCol -join ', ')) values ($($ArrRecord -replace '^|$', "'" -join ', '))
"@
※余計なお世話だろうけどインジェクション対策がないので必要なら入れてね。
(SQLiteがサポートしてるか知らないけど通常はSQLパラメータを使用。)
文字列の中で配列変数をそのまま展開してるのが原因なんじゃないかな。
$cmd.CommandText = @"
INSERT INTO $Table ($($ArrCol -join ', ')) values ($($ArrRecord -replace '^|$', "'" -join ', '))
"@
※余計なお世話だろうけどインジェクション対策がないので必要なら入れてね。
(SQLiteがサポートしてるか知らないけど通常はSQLパラメータを使用。)
100デフォルトの名無しさん
2022/03/03(木) 07:55:37.70ID:vKIVQ1+Z101デフォルトの名無しさん
2022/03/03(木) 22:26:57.79ID:vKIVQ1+Z すみません、色々試したのですがわからずまた質問させてください
$Table = "2022"
$ArrCol = @("No","Day","Name")
$ArrRecord = @("1","2022/03/03","山田")
だとして
$Table = "2022"
$ArrCol = @("No","Day","Name")
$ArrRecord = @("1","2022/03/03","山田")
だとして
102デフォルトの名無しさん
2022/03/03(木) 22:35:42.15ID:vKIVQ1+Z cmd.CommandText = @"
INSERT INTO "2020" ("No","Day","Name") values ("1","2022/03/03","山田")
"@
だとエラーなくデータベースに追記出来るのですが
INSERT INTO "2020" ("No","Day","Name") values ("1","2022/03/03","山田")
"@
だとエラーなくデータベースに追記出来るのですが
103デフォルトの名無しさん
2022/03/03(木) 22:37:17.23ID:vKIVQ1+Z $cmd.CommandText = @"
INSERT INTO [string]$Table ("No","Day","Name") values ("1","2022/03/03","山田")
"@
だと"0"個の引数を指定して"ExecuteNonQuery"を呼び出し中に例外が発生しました"SQLite error near "2022":syntax error"
INSERT INTO [string]$Table ("No","Day","Name") values ("1","2022/03/03","山田")
"@
だと"0"個の引数を指定して"ExecuteNonQuery"を呼び出し中に例外が発生しました"SQLite error near "2022":syntax error"
104デフォルトの名無しさん
2022/03/03(木) 22:37:58.49ID:vKIVQ1+Z あと
$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"
とエラーが出てデータベースを変更できませんでした
色々試したのですが理由がわからず申し訳ございませんが教えたもらいたく
$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"
とエラーが出てデータベースを変更できませんでした
色々試したのですが理由がわからず申し訳ございませんが教えたもらいたく
105デフォルトの名無しさん
2022/03/03(木) 22:42:34.74ID:vKIVQ1+Z すみません
5chだとSQL関係で書き込めなかったのですが
$cmd.え(E)xecuteNonQuery() | Out-Null
も各場所で記入しています
5chだとSQL関係で書き込めなかったのですが
$cmd.え(E)xecuteNonQuery() | Out-Null
も各場所で記入しています
106デフォルトの名無しさん
2022/03/04(金) 01:01:51.54ID:rY0dcLRW 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, 山田)
いろいろミスに気づくはず
軽く見た感じ次のように展開されてる気がする
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, 山田)
107デフォルトの名無しさん
2022/03/05(土) 08:12:15.74ID:UxduI4YM 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.
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.
10892
2022/03/05(土) 11:18:59.79ID:2eHlJFPP >>92
1つ目の例のUnicodeはUTF-16LEの事だからだめだったね。
BigEndianUnicode(UTF-16BE)にする必要があったし、
そもそもbyte型にしてエンディアン気にする必要もないから、
gci | sort {[int[]][char[]]$_.Name | %{'{0,5}' -f $_}}
でよいはず。
※全く関係ない別の作業中になんか急に気づいた。
1つ目の例のUnicodeはUTF-16LEの事だからだめだったね。
BigEndianUnicode(UTF-16BE)にする必要があったし、
そもそもbyte型にしてエンディアン気にする必要もないから、
gci | sort {[int[]][char[]]$_.Name | %{'{0,5}' -f $_}}
でよいはず。
※全く関係ない別の作業中になんか急に気づいた。
10999
2022/03/05(土) 11:34:56.78ID:2eHlJFPP SQLiteがカラム名等を「"」で括る事を要求しているなら
$cmd.CommandText = @"
INSERT INTO "$Table" ($($ArrCol -replace '^|$', '"' -join ', ')) values ($($ArrRecord -replace '^|$', '"' -join ', '))
"@
かな。>>106さんの言う通りなので確認してみて。
これもだめなら、成功例と、失敗例や変数値のテーブル名が違うからそこかも。
$cmd.CommandText = @"
INSERT INTO "$Table" ($($ArrCol -replace '^|$', '"' -join ', ')) values ($($ArrRecord -replace '^|$', '"' -join ', '))
"@
かな。>>106さんの言う通りなので確認してみて。
これもだめなら、成功例と、失敗例や変数値のテーブル名が違うからそこかも。
110デフォルトの名無しさん
2022/03/05(土) 17:03:38.16ID:aFkos6IC >>107
もう開発やめりゃいいのにな
これまでWindowsに入ってるから採用されてきただけで、わざわざ入れて使うならPowerShellなんか選ばれるわけがない
コマンドレットで簡単に導入できるようにするならPowerShellじゃなくてPythonにでもしたほうがいいんじゃないか
もう開発やめりゃいいのにな
これまでWindowsに入ってるから採用されてきただけで、わざわざ入れて使うならPowerShellなんか選ばれるわけがない
コマンドレットで簡単に導入できるようにするならPowerShellじゃなくてPythonにでもしたほうがいいんじゃないか
111デフォルトの名無しさん
2022/03/05(土) 22:04:13.92ID:BfpuuE1g インストールしてなくてもpythonコマンドでMSストア版pythonのダウンロードページに飛ばされるから、既にpwsh7よりも導入が楽という悲しみ
112デフォルトの名無しさん
2022/03/05(土) 22:12:35.50ID:vfk/Azs+ PowerShellってそんな残念なプログラム言語なんですか?
がんばって勉強したのに納得できません
がんばって勉強したのに納得できません
113デフォルトの名無しさん
2022/03/05(土) 22:41:29.84ID:ws14fGQi PowerShell5系は向こう10年は大丈夫
6以降はAzure以外では全く使われておらず、Azureに生涯を捧げるのでない限りは完全無視でOK
6以降はAzure以外では全く使われておらず、Azureに生涯を捧げるのでない限りは完全無視でOK
114デフォルトの名無しさん
2022/03/06(日) 11:25:06.52ID:2dMAfvhM メインは蛇使いだけど
色々インポートしなくてもそこそこ戦えるのでregex、小規模データ処理、重くない数値計算がシェルから直接引けるpwshは有り難い
ネイティブライブラリ揃ってないからパワーが居るのはPython、まあPython自体はpwshとドングリ背比べ(処理速度、標準ライブラリもほぼ等価)だけど、やはりライブラリが強い
色々インポートしなくてもそこそこ戦えるのでregex、小規模データ処理、重くない数値計算がシェルから直接引けるpwshは有り難い
ネイティブライブラリ揃ってないからパワーが居るのはPython、まあPython自体はpwshとドングリ背比べ(処理速度、標準ライブラリもほぼ等価)だけど、やはりライブラリが強い
115デフォルトの名無しさん
2022/03/06(日) 11:37:06.16ID:Ou5vEvLf 蛇使いwww
蠍と射手の間かよwww
蠍と射手の間かよwww
116デフォルトの名無しさん
2022/03/06(日) 14:35:41.73ID:2wKnUbYj Pythonは.NETを使えないから糞
117デフォルトの名無しさん
2022/03/06(日) 15:35:16.76ID:+PaQnGDE PowershellとPythonだと得意分野が違うよね
118デフォルトの名無しさん
2022/03/06(日) 16:40:58.28ID:N33QeZ0g ちょっと詳しい人に聞きたいんだけど開発環境で使用しているSDKのコマンドがcmdだと実行可能だけどPowershellだと一切認識されませんてエラーがでるんだけどこの理由はなぜ?
WIndows 11だとターミナルのデフォがPowershellなのにもやもやする、この解決方法はある?
もう一つ、ファイル名を指定して実行で起動したcmdからはSDKのコマンドが実行できるのに、Terminal(wt.exe)の既定のcmdからコマンドを実行すると認識されていませんエラーが出るんだけどこの原因もなぜ?解決方法はある?
cmdとpowershellとterminalと複数のshellを用意してMSは何がしたいのかマジで意味がわからない
WSLとか作っててOSSに寛容になったんだからさっさとデフォのShellをbashかzshにしてくれれば開発環境としてより便利なのに・・・
WIndows 11だとターミナルのデフォがPowershellなのにもやもやする、この解決方法はある?
もう一つ、ファイル名を指定して実行で起動したcmdからはSDKのコマンドが実行できるのに、Terminal(wt.exe)の既定のcmdからコマンドを実行すると認識されていませんエラーが出るんだけどこの原因もなぜ?解決方法はある?
cmdとpowershellとterminalと複数のshellを用意してMSは何がしたいのかマジで意味がわからない
WSLとか作っててOSSに寛容になったんだからさっさとデフォのShellをbashかzshにしてくれれば開発環境としてより便利なのに・・・
119デフォルトの名無しさん
2022/03/06(日) 16:49:05.43ID:4qF5AnI1 しかもそのデフォルトで開くPowerShell、既に非推奨のバージョンなんだぜ
もう完全に破綻してるからWSLだけ使えばいいのよ
もう完全に破綻してるからWSLだけ使えばいいのよ
120デフォルトの名無しさん
2022/03/06(日) 17:14:53.35ID:Y34SWeR7121デフォルトの名無しさん
2022/03/06(日) 19:53:05.95ID:+PaQnGDE bashとかは言語的にはPowershellに比べて時代遅れ過ぎるわ
さっさとPowershell7に統一したほうが遥かにマシ
さっさとPowershell7に統一したほうが遥かにマシ
122デフォルトの名無しさん
2022/03/06(日) 20:11:36.59ID:GpPJTCKS 10や11に標準で入ってる5.1で動くようにしてる人が大半じゃないの
機能的にも特にこれ以上期待するものはないんだけど
機能的にも特にこれ以上期待するものはないんだけど
123デフォルトの名無しさん
2022/03/06(日) 20:14:22.19ID:N33QeZ0g >>119
いやマジでそれでしたwww
PS7をインストールしてPS7で実行したらCLI認識しましたイミフwww
そしてPS7をインストールしてもアップデートされずWin11デフォのPS5がそのままアンインストールもできず鎮座してるくそすぎて草
いやマジでそれでしたwww
PS7をインストールしてPS7で実行したらCLI認識しましたイミフwww
そしてPS7をインストールしてもアップデートされずWin11デフォのPS5がそのままアンインストールもできず鎮座してるくそすぎて草
124デフォルトの名無しさん
2022/03/07(月) 00:21:21.62ID:M26ldpDZ125デフォルトの名無しさん
2022/03/07(月) 17:43:24.45ID:GqmKE44y 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')"
引数で文字列配列を指定する簡単な方法はありますか?
.ps1側に変更を加えるのは無しで、Param()は以下の指定だとします。
Param( [string[]] $p1, [string[]] $p2 )
普段はPowerShellコンソールや他のスクリプトからこの.ps1を使っています。
これを.batに組み込みたい事があったものの配列の指定方法が分からず、
以下のように-Commandにして回避しました。
-Fileの場合でも指定方法があったのかな、と気になっています。
powershell.exe -c "〜.ps1 -p1 @('aaa', 'bbb') -p2 @('ccc', 'ddd')"
12696
2022/03/08(火) 02:39:16.58ID:BWZbDM8v $Table = "2022"
$ArrCol = @("No","Day","Name")
$ArrRecord = @("1","","")
このようにブランクの配列があると
'1', ', ','
上のように途中の「""」が「'」シングルクォーテーション1つになりエラーが起こっているということがわかりました。
ですので
$ArrRecord | foreach-object -Process {$_ -replace '"',"'"}
として配列内で変換しようと思ったのですが、$_の時点でダブルクォーテーションが取れており上手く変換できない状態です
($($ArrRecord -replace '^|$', '"' -join ', '))の「'^|$'」は正規表現で前と後ろを「"」で変換するということですよね
途中のパイプの意味がわかっていないです
$ArrCol = @("No","Day","Name")
$ArrRecord = @("1","","")
このようにブランクの配列があると
'1', ', ','
上のように途中の「""」が「'」シングルクォーテーション1つになりエラーが起こっているということがわかりました。
ですので
$ArrRecord | foreach-object -Process {$_ -replace '"',"'"}
として配列内で変換しようと思ったのですが、$_の時点でダブルクォーテーションが取れており上手く変換できない状態です
($($ArrRecord -replace '^|$', '"' -join ', '))の「'^|$'」は正規表現で前と後ろを「"」で変換するということですよね
途中のパイプの意味がわかっていないです
127デフォルトの名無しさん
2022/03/08(火) 10:15:51.20ID:HM66xeZm >>126
苦戦してるね
まずプログラミング一般の基礎として、ソースコード上に文字列型の変数値を直接書きたいということを伝えるための(文字列リテラルの)引用符と、文字列の中に引用符という文字データを含めたいと伝えるための引用符は別なので理解・区別しておかないとずっと混乱する
$_の時点で引用符が取れたという感覚は間違いで、今回文字列の中身には引用符文字は含まれていなくて、文字列リテラルですと伝える引用符になってる
次に、^|$ で置換する発想は、文字列の特定の位置が先頭または末尾なら置換というところまでは狙いどおり
でも空の文字列だった場合、正規表現処理が文字列を左から走査したとき「先頭かつ末尾」という単一の位置しかないので、置換も一回しか行われず引用符一つだけになるというバグになってる
例えばこうすれば文字列リテラルのなかに引用符文字を入れられる
($("""$ArrRecord""" -join ', '))
($("`"$ArrRecord`"" -join ', '))
($("'$ArrRecord'" -join ', '))
いずれも外側の二重引用符がリテラルの引用符で、内側の引用符が文字データの引用符
苦戦してるね
まずプログラミング一般の基礎として、ソースコード上に文字列型の変数値を直接書きたいということを伝えるための(文字列リテラルの)引用符と、文字列の中に引用符という文字データを含めたいと伝えるための引用符は別なので理解・区別しておかないとずっと混乱する
$_の時点で引用符が取れたという感覚は間違いで、今回文字列の中身には引用符文字は含まれていなくて、文字列リテラルですと伝える引用符になってる
次に、^|$ で置換する発想は、文字列の特定の位置が先頭または末尾なら置換というところまでは狙いどおり
でも空の文字列だった場合、正規表現処理が文字列を左から走査したとき「先頭かつ末尾」という単一の位置しかないので、置換も一回しか行われず引用符一つだけになるというバグになってる
例えばこうすれば文字列リテラルのなかに引用符文字を入れられる
($("""$ArrRecord""" -join ', '))
($("`"$ArrRecord`"" -join ', '))
($("'$ArrRecord'" -join ', '))
いずれも外側の二重引用符がリテラルの引用符で、内側の引用符が文字データの引用符
128デフォルトの名無しさん
2022/03/08(火) 10:21:04.34ID:HM66xeZm >>127
配列じゃなくて各要素の文字列を囲まないとダメたった
($("""$_""" -join ', '))
($("`"$_`"" -join ', '))
($("'$_'" -join ', '))
あと正規表現のパイプは「または」という意味
配列じゃなくて各要素の文字列を囲まないとダメたった
($("""$_""" -join ', '))
($("`"$_`"" -join ', '))
($("'$_'" -join ', '))
あと正規表現のパイプは「または」という意味
129デフォルトの名無しさん
2022/03/08(火) 16:05:01.58ID:zfJt6x7/ PowerShellのバージョン問題はwslに最新のpowershellを入れるでok?
130デフォルトの名無しさん
2022/03/09(水) 00:49:55.24ID:oTLaCJPf131デフォルトの名無しさん
2022/03/09(水) 07:01:31.59ID:RwKAl9+/ LinuxでPowershell使う理由なんてあるか?
bashの方が明らかに上だろ
bashの方が明らかに上だろ
132デフォルトの名無しさん
2022/03/09(水) 09:36:42.19ID:taLplzJg > bashの方が明らかに上だろ
確かにバカをあぶり出す能力は高いなw
確かにバカをあぶり出す能力は高いなw
133デフォルトの名無しさん
2022/03/09(水) 10:12:30.93ID:EcV8v1IL134デフォルトの名無しさん
2022/03/09(水) 15:06:09.10ID:Cj1SKgXQ powershellはC#埋め込んでそこで定義したクラスとかがpowershellで使えるとこがいいところだから
bashもそうしたらいいとおもう
bashもそうしたらいいとおもう
135デフォルトの名無しさん
2022/03/09(水) 17:46:07.31ID:KONqX93R それはPSってよりCOMじゃね
136デフォルトの名無しさん
2022/03/09(水) 19:10:34.11ID:g4d6cmq/ めっちゃ前からある機能だしCOMなんて1mmも関係ないぞ
https://codezine.jp/article/detail/5007
https://codezine.jp/article/detail/5007
137デフォルトの名無しさん
2022/03/09(水) 21:24:55.35ID:oTLaCJPf コマンドレットの出力がオブジェクトで目的のプロパティから値が取り出しやすい
Where-object一つ覚えればフィルター出来るからコマンド毎にフィルタの仕様で悩む必要が無い
正規表現がperl拡張表現で標準搭載、コマンドやら環境によって規格が違うとか悩む必要がない
シェルスクリプトとしてそれだけでも全然いいわ
Where-object一つ覚えればフィルター出来るからコマンド毎にフィルタの仕様で悩む必要が無い
正規表現がperl拡張表現で標準搭載、コマンドやら環境によって規格が違うとか悩む必要がない
シェルスクリプトとしてそれだけでも全然いいわ
138デフォルトの名無しさん
2022/03/12(土) 11:12:49.22ID:2x7XRkpq regex沼に入る気はないけど$matches.namedで参照できるだけでもかなり有り難い
pwsh固有の事情としては(?-i)を繁用するな
sls等コマンドレットに-CaseSensitive渡したり-[ci]matchが入り乱れてたのがスッキリした
pwsh固有の事情としては(?-i)を繁用するな
sls等コマンドレットに-CaseSensitive渡したり-[ci]matchが入り乱れてたのがスッキリした
139デフォルトの名無しさん
2022/03/12(土) 11:27:19.44ID:2x7XRkpq あとStringとString[]どっちも渡ってくるから(?m)/(?-m)もpwsh的には重要か
140デフォルトの名無しさん
2022/03/15(火) 01:12:21.45ID:z4wleAC0141デフォルトの名無しさん
2022/03/16(水) 22:20:26.82ID:Rh84s05v 二つの引数をとる関数に引数を二つ渡したら、一個目引数が全部持っていくのはなんで?
コード
function war {
param($putin, $zelenskyy)
Write-Host 'putin has ' $putin
Write-Host 'zelenskyy has ' $zelenskyy
}
war('Russian','Ukraine')
結果
putin has Russian Ukraine
zelenskyy has
コード
function war {
param($putin, $zelenskyy)
Write-Host 'putin has ' $putin
Write-Host 'zelenskyy has ' $zelenskyy
}
war('Russian','Ukraine')
結果
putin has Russian Ukraine
zelenskyy has
142デフォルトの名無しさん
2022/03/16(水) 22:33:14.06ID:ET0x7ZFa143デフォルトの名無しさん
2022/03/16(水) 22:41:56.39ID:Rh84s05v 呼び出すときに恰好つけるとダメなのか
144デフォルトの名無しさん
2022/03/17(木) 00:07:43.00ID:0/d09PRO 格好も括弧も関係ない
シェルなんだから引数の区切りは空白と言うだけの話
シェルなんだから引数の区切りは空白と言うだけの話
145デフォルトの名無しさん
2022/03/17(木) 00:50:39.64ID:DCNM1l/p war Russian Ukraine
にしろっつーことでしょ?
にしろっつーことでしょ?
146デフォルトの名無しさん
2022/03/17(木) 00:52:00.94ID:DCNM1l/p 失礼、こうだね
war ‘Russian’ ‘Ukraine’
war ‘Russian’ ‘Ukraine’
147デフォルトの名無しさん
2022/03/17(木) 08:43:01.98ID:vPjPamJP Set-StrictMode -Version 2.0 おすすめ
https://docs.microsoft.com/ja-jp/previous-versions/dd347614(v=technet.10)#%E4%BE%8B-2
https://docs.microsoft.com/ja-jp/previous-versions/dd347614(v=technet.10)#%E4%BE%8B-2
148デフォルトの名無しさん
2022/03/17(木) 12:57:17.38ID:ENyjKfBg 赤文字で出るエラーメッセージをログに出力して、
エラーログが出てるか適当な箇所で判定して、ログをnotepadで開くってことをやりたいです。
標準エラー出力みたいなのの取得方法を教えて下さい
エラーログが出てるか適当な箇所で判定して、ログをnotepadで開くってことをやりたいです。
標準エラー出力みたいなのの取得方法を教えて下さい
149デフォルトの名無しさん
2022/03/17(木) 15:06:14.72ID:9VjLQzax いくら補完あると言ってもコマンドレットの名前冗長すぎんだよ
150デフォルトの名無しさん
2022/03/17(木) 15:18:43.63ID:zTqRydhk >>149
良く使うやつはaliasあるやん
良く使うやつはaliasあるやん
151デフォルトの名無しさん
2022/03/17(木) 21:22:30.00ID:KFCC0Q8d 長いから分かりやすくていいんだろ
wとか言われてもユーザーを笑いものにするコマンドか?としか思えんし
wとか言われてもユーザーを笑いものにするコマンドか?としか思えんし
152デフォルトの名無しさん
2022/03/19(土) 11:18:52.00ID:7PrXFgOi 構文はtclっぽいねえ
153デフォルトの名無しさん
2022/03/19(土) 12:37:58.38ID:vJYdrJTe 配列の配列について
$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
$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
154デフォルトの名無しさん
2022/03/19(土) 12:39:12.90ID:vJYdrJTe だが、カンマを省略すると
$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
$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
155デフォルトの名無しさん
2022/03/19(土) 12:40:41.61ID:vJYdrJTe 改行してカンマをいれると
$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
どういうことなのか教えてよ。
$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
どういうことなのか教えてよ。
156デフォルトの名無しさん
2022/03/19(土) 14:10:16.88ID:advrh/I1 powershellで配列データ構造を扱ってはいけない
157デフォルトの名無しさん
2022/03/19(土) 16:28:22.32ID:vJYdrJTe https://docs.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/everything-about-arrays?view=powershell-7.2#nested-arrays
「これらの例では、コンマは非常に重要です。 以前に示した通常の複数行での配列の例では、コンマは省略可能でした。 多次元配列の場合はそうではありません。」
そうではありませんと言われても、エラーになるわけでもなく、どうなるのか誰か教えて
「これらの例では、コンマは非常に重要です。 以前に示した通常の複数行での配列の例では、コンマは省略可能でした。 多次元配列の場合はそうではありません。」
そうではありませんと言われても、エラーになるわけでもなく、どうなるのか誰か教えて
158デフォルトの名無しさん
2022/03/19(土) 23:33:26.82ID:GptrjqcJ159デフォルトの名無しさん
2022/03/19(土) 23:33:48.95ID:GptrjqcJ160デフォルトの名無しさん
2022/03/20(日) 00:30:34.10ID:V8R16naX 追加。
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';))); )
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';))); )
161デフォルトの名無しさん
2022/03/20(日) 01:20:05.34ID:EnzWedk+ 暗黙のWrite-Output
コマンドレットのような何某かの出力を持つものと、Powershellのスクリプト内で定義された関数や式の評価結果を
うまいこと混ぜることが出来るようにする仕掛けなのでしょうか
完全に理解しては居ませんがが、理解に努めます
文法知識は「Windows PowerShell実践システム管理ガイド 第3版(日経BP)」の第2章を読んだだけなのですが
これだけは全然足りないtのを痛感しました
何かお勧めはありませんか
コマンドレットのような何某かの出力を持つものと、Powershellのスクリプト内で定義された関数や式の評価結果を
うまいこと混ぜることが出来るようにする仕掛けなのでしょうか
完全に理解しては居ませんがが、理解に努めます
文法知識は「Windows PowerShell実践システム管理ガイド 第3版(日経BP)」の第2章を読んだだけなのですが
これだけは全然足りないtのを痛感しました
何かお勧めはありませんか
162デフォルトの名無しさん
2022/03/20(日) 01:39:27.35ID:KeTIMbSf powershellは行志向寄りの言語だから改行はC/C++でいう暗黙の副作用完了点みたいな意味を持っている
何も考えず複数行にまたがる式を書くと思わぬ事故に繋がるから、C/C++の\やVBの_みたいに行継続を示す`を行末に付けるといいよ
$array_of_array = @( @('1-1', '1-2', '1-3') `
, @('2-1', '2-2'))
何も考えず複数行にまたがる式を書くと思わぬ事故に繋がるから、C/C++の\やVBの_みたいに行継続を示す`を行末に付けるといいよ
$array_of_array = @( @('1-1', '1-2', '1-3') `
, @('2-1', '2-2'))
163デフォルトの名無しさん
2022/03/20(日) 14:33:02.79ID:V8R16naX >>161
今回の挙動の予想や理解は、構文のパース(式・文の区切り)、
独特なパイプラインの挙動、分かりづらい「単項 ,」の存在などがあり
わりと難易度の高いものです。
>>156、>>162さんに同意で、配列の配列(ジャグ配列)を避け
行の継続を「`」で明示する事をお勧めします。
書籍では『Windows PowerShell イン アクション』がお勧めです。
ただv1の本なので今となっては内容が古く、紙だと新品の入手が難しいです。
※これのv5以上版が日本語で出て欲しい…。
https://www.sbcr.jp/product/4797337362/
あとは>>157のMSのサイト等。
about_*も有用な事が書かれてますが、日本語訳やサンプルコードの質が酷く、
多くの人がよく使う機能と一部の人が稀に使う機能が同じ扱いの記述なのが難点。
今回の挙動の予想や理解は、構文のパース(式・文の区切り)、
独特なパイプラインの挙動、分かりづらい「単項 ,」の存在などがあり
わりと難易度の高いものです。
>>156、>>162さんに同意で、配列の配列(ジャグ配列)を避け
行の継続を「`」で明示する事をお勧めします。
書籍では『Windows PowerShell イン アクション』がお勧めです。
ただv1の本なので今となっては内容が古く、紙だと新品の入手が難しいです。
※これのv5以上版が日本語で出て欲しい…。
https://www.sbcr.jp/product/4797337362/
あとは>>157のMSのサイト等。
about_*も有用な事が書かれてますが、日本語訳やサンプルコードの質が酷く、
多くの人がよく使う機能と一部の人が稀に使う機能が同じ扱いの記述なのが難点。
164デフォルトの名無しさん
2022/03/20(日) 22:00:12.10ID:L+yKE55O Powershellの洋書翻訳はもっと盛んになってほしい
オライリーのクックブックも原著は改定4版まで出てるのに日本語は初版のままだし
オライリーのクックブックも原著は改定4版まで出てるのに日本語は初版のままだし
165デフォルトの名無しさん
2022/03/21(月) 00:56:42.09ID:OI2SuuED 今時英語できないの日本人だけだからな
土人とか馬鹿にしてる韓国、中国、インド、ベトナム、フィリピンなんてネイティブレベルで英語できるからな
これで日本のレベルは低くないとかそれ以前の問題だよ
土人とか馬鹿にしてる韓国、中国、インド、ベトナム、フィリピンなんてネイティブレベルで英語できるからな
これで日本のレベルは低くないとかそれ以前の問題だよ
166デフォルトの名無しさん
2022/03/21(月) 08:39:53.52ID:2Zu3Swq+ エリート層は英語できるだろうよ
馬鹿は海外だと底辺でも英語ペラペラだと思ってやがるが
馬鹿は海外だと底辺でも英語ペラペラだと思ってやがるが
167デフォルトの名無しさん
2022/03/21(月) 09:24:20.27ID:JwhA0ika 日本ですら母国語での情報の鮮度が落ちるんだから
それらの国のプログラミング学習希望者は
必然的に英語の勉強からしないといけないだけの話じゃないかな?
日本のレベルが低いとか
英語できるのはエリート層だけとか
そういう問題じゃないと思いますよ
アニメ理解したいから日本語勉強しましたと
同じレベルの話な気がする
それらの国のプログラミング学習希望者は
必然的に英語の勉強からしないといけないだけの話じゃないかな?
日本のレベルが低いとか
英語できるのはエリート層だけとか
そういう問題じゃないと思いますよ
アニメ理解したいから日本語勉強しましたと
同じレベルの話な気がする
168デフォルトの名無しさん
2022/03/21(月) 09:42:44.22ID:3OVxtXqz まとめて挙がってるけど国によって差は大きい
インドとフィリピンは英語が公用語で世界でも有数の英語話者が多い国
日本の英語力が低すぎて世界に遅れを取っているというのは同意
学校教育も都度見直されてるしそのうち改善されるんじゃねーの、知らんけど
プログラマーなら英語を読むだけでもできるように少しずつ学ぶ気概は欲しい
ボク英語わからないんですと幼稚な変数名を付け続けるのはよくない
インドとフィリピンは英語が公用語で世界でも有数の英語話者が多い国
日本の英語力が低すぎて世界に遅れを取っているというのは同意
学校教育も都度見直されてるしそのうち改善されるんじゃねーの、知らんけど
プログラマーなら英語を読むだけでもできるように少しずつ学ぶ気概は欲しい
ボク英語わからないんですと幼稚な変数名を付け続けるのはよくない
169デフォルトの名無しさん
2022/03/21(月) 14:48:55.98ID:fHQFhWIP 日本は国内に金と仕事があるせいで海外でなくても稼げるからなあ
英語理解できなくても儲かる職業の筆頭が
マスコミと教育と役人政治家の時点で英語教育が変わるわけ無いじゃん
英語理解できなくても儲かる職業の筆頭が
マスコミと教育と役人政治家の時点で英語教育が変わるわけ無いじゃん
170デフォルトの名無しさん
2022/03/21(月) 16:01:23.66ID:l99FVYBX ITに限定すると英語は必要なんだけど英語に限らず日本のITエンジニアの多くは勉強しない
能力を伸ばしても給料が上がらず残業が増やされるだけと諦めるのが常態化している
能力を伸ばしても給料が上がらず残業が増やされるだけと諦めるのが常態化している
171デフォルトの名無しさん
2022/03/21(月) 16:10:09.00ID:l99FVYBX 国内に金があるというのは微妙な話になってきている
世界ワースト級の低成長による沈下を続けていて、本当に有能なエンジニアは海外に流出して残るのはIT土方ばかり
ノーベル賞受賞者が元日本人ばかりというのと同じような話が起こってる
GAFAのようなIT企業が伸びないから低成長から抜け出さない負のスパイラル
世界ワースト級の低成長による沈下を続けていて、本当に有能なエンジニアは海外に流出して残るのはIT土方ばかり
ノーベル賞受賞者が元日本人ばかりというのと同じような話が起こってる
GAFAのようなIT企業が伸びないから低成長から抜け出さない負のスパイラル
172デフォルトの名無しさん
2022/03/21(月) 21:14:58.00ID:dTmdB0AV 海外ならGAFAみたいな企業がたくさんあるとでも思ってるのかこのゴミは
GAFAは世界中でも1つしか無いんだよ
GAFAは世界中でも1つしか無いんだよ
173デフォルトの名無しさん
2022/03/21(月) 21:25:38.84ID:vIzK+CHc GAFAはひとつとな?
MARCHはひとつみたいな哲学かな?
のようなという日本語の意味はわかるのかな?
MARCHはひとつみたいな哲学かな?
のようなという日本語の意味はわかるのかな?
174デフォルトの名無しさん
2022/03/21(月) 22:11:34.27ID:y82izW1t 脱線しとるな
175デフォルトの名無しさん
2022/03/22(火) 00:10:37.43ID:KVIRUNm3 これ使って出来ることってフォルダ弄りファイル弄り設定弄りだけ?
他に出来ることないの?
他に出来ることないの?
176デフォルトの名無しさん
2022/03/22(火) 00:21:42.31ID:kikOm2qa あとは何かプログラムを走らせたり、せいぜいOSの機能を実行するくらいかな
リモートで出来たりするけど、しょせんはローカルに出来ることがリモートでも出来るってだけだな
まだ勉強をはじめたばっかりだけど、そのマシンで出来ないことは出来ないんだなって分かった
リモートで出来たりするけど、しょせんはローカルに出来ることがリモートでも出来るってだけだな
まだ勉強をはじめたばっかりだけど、そのマシンで出来ないことは出来ないんだなって分かった
177デフォルトの名無しさん
2022/03/22(火) 00:25:39.51ID:gjcW4Tfu >>175
bashなんかのシェルとは違って.NETベースだからC#やVB.NETでできることは一通りできるよbashなんかと違ってね
メンテが楽だからあえてpowershellでGUIを作ったりする場合もある
bashなんかのシェルとは違って.NETベースだからC#やVB.NETでできることは一通りできるよbashなんかと違ってね
メンテが楽だからあえてpowershellでGUIを作ったりする場合もある
178デフォルトの名無しさん
2022/03/22(火) 00:37:38.83ID:aUdC0GfB 正規表現使えるしWindowsだとわざわざPythonセットアップして使うより楽だし利便性高い気がする
179デフォルトの名無しさん
2022/03/23(水) 00:40:52.77ID:G2Twh9Sv180デフォルトの名無しさん
2022/03/23(水) 04:18:15.48ID:IVt1k3VA181デフォルトの名無しさん
2022/03/23(水) 08:31:22.61ID:eqSZnoCQ182デフォルトの名無しさん
2022/03/23(水) 09:01:03.65ID:TpwnHNL9 分かってるくせに…
対面だと「何いってんだコイツ…」とか思いながらも愛想笑いしてそうだな
対面だと「何いってんだコイツ…」とか思いながらも愛想笑いしてそうだな
183デフォルトの名無しさん
2022/03/23(水) 10:01:20.99ID:Jvnypl+E 釣りでしょ
面倒見いい人なら、オマエそれブーメランやんけーて言ってあげたら喜ぶよ
面倒見いい人なら、オマエそれブーメランやんけーて言ってあげたら喜ぶよ
184デフォルトの名無しさん
2022/03/23(水) 10:04:37.18ID:11NHOGIK この煽り合いもPowershellスキルの一部なんですか?
185デフォルトの名無しさん
2022/03/24(木) 03:56:01.53ID:cKyI7Sj4 write-sqltabledateで列名は指定できますか?
計算列のあるテーブルでその列を飛ばしたいのですがPsCustumObjectのプロパティ名が無視されて並び順で投入されてしまいます。
計算列のあるテーブルでその列を飛ばしたいのですがPsCustumObjectのプロパティ名が無視されて並び順で投入されてしまいます。
186デフォルトの名無しさん
2022/03/24(木) 21:13:21.68ID:vudxrsxx187デフォルトの名無しさん
2022/03/25(金) 04:05:40.26ID:qE/8IX5m188デフォルトの名無しさん
2022/03/26(土) 14:42:03.29ID:u+BPDoH4 そういう挙動ということはWrite-SqlTableDataはメタデータを考慮してなさそうだし
Invoke-Sqlcmdでやれば?
Invoke-Sqlcmdでやれば?
189デフォルトの名無しさん
2022/03/26(土) 14:50:17.14ID:pYdvgAQA コマンドレットの命名規則をケバブケースにしたMSの馬鹿を殺してやりたい
補完でタブ押して確定してまたタブ押して確定してってのがめちゃくちゃイライラする
補完でタブ押して確定してまたタブ押して確定してってのがめちゃくちゃイライラする
190デフォルトの名無しさん
2022/03/26(土) 14:56:08.98ID:VSlpRLnL 自分の思い通りじゃないとすぐにイライラしたり殺したくなったりする
191デフォルトの名無しさん
2022/03/26(土) 18:44:07.02ID:MJID/KD0 ちんちんシュッ!シュッ!シュッ!
192デフォルトの名無しさん
2022/03/26(土) 21:08:39.76ID:MzILs1Nj >補完でタブ押して確定してまたタブ押して確定して
状況が分からん
状況が分からん
193デフォルトの名無しさん
2022/03/26(土) 21:42:22.31ID:M1Ul1dov 文字列をPowerShellの文字列リテラルとして出力したいのですが、どうやったら楽ちんに出来ますか?
例えば下記を実行すると
$s = "``i`'`""
function literally {
param ($t)
return $t
}
Write-Output (literally $s)
実行結果は
`i'"
こうなりますが、
"``i`'`""
こうなってくれる function literally は既存の関数にありますか?
例えば下記を実行すると
$s = "``i`'`""
function literally {
param ($t)
return $t
}
Write-Output (literally $s)
実行結果は
`i'"
こうなりますが、
"``i`'`""
こうなってくれる function literally は既存の関数にありますか?
194デフォルトの名無しさん
2022/03/27(日) 06:15:33.62ID:LvwD4OI0195デフォルトの名無しさん
2022/03/27(日) 13:30:01.63ID:mnGGi+fZ >>193
literally が何を意図してるのかわからんが
単一引用符のヒアドキュメントで囲むとか
$s = @'
"``i`'`""
'@
必要なリテラル部分だけ抜き出したファイルを作成してgcで読むとかすりゃいいんじゃね
あとは必要ならInvoke-Expressionなりして使う
まじめにコード内でエスケープ処理とかやろうとしたら一晩掛かるよ
literally が何を意図してるのかわからんが
単一引用符のヒアドキュメントで囲むとか
$s = @'
"``i`'`""
'@
必要なリテラル部分だけ抜き出したファイルを作成してgcで読むとかすりゃいいんじゃね
あとは必要ならInvoke-Expressionなりして使う
まじめにコード内でエスケープ処理とかやろうとしたら一晩掛かるよ
196デフォルトの名無しさん
2022/03/28(月) 00:44:41.31ID:8p5xi9DH まじめなエスケープ処理を10分くらいでできる関数とかないですか
197デフォルトの名無しさん
2022/03/28(月) 00:54:22.58ID:8p5xi9DH --- ここから x.ps1 ---
function x {
$s = (Get-Content -Path 'a.txt')
Write-Output ('$a = ' + "'" + $s + "'")
}
x | Out-File 'a.ps1'
--- ここまで ---
--- a.txt の中身が ---
im.dat
--- ここまで ---
の場合
function x {
$s = (Get-Content -Path 'a.txt')
Write-Output ('$a = ' + "'" + $s + "'")
}
x | Out-File 'a.ps1'
--- ここまで ---
--- a.txt の中身が ---
im.dat
--- ここまで ---
の場合
198デフォルトの名無しさん
2022/03/28(月) 00:57:03.84ID:8p5xi9DH a.ps1 は
$a = 'im.dat'
となって PowerShellで読み込める
--- a.txt の中身が ---
i'm.dat
--- ここまで ---
の場合
a.ps1 は
$a = 'i'm.dat'
となってシンタックスエラーになる。こういう場合のためにエスケープ処理をしたいのです。
$a = 'im.dat'
となって PowerShellで読み込める
--- a.txt の中身が ---
i'm.dat
--- ここまで ---
の場合
a.ps1 は
$a = 'i'm.dat'
となってシンタックスエラーになる。こういう場合のためにエスケープ処理をしたいのです。
199デフォルトの名無しさん
2022/03/28(月) 02:14:50.68ID:vgVAp+/s200デフォルトの名無しさん
2022/03/28(月) 02:28:26.94ID:8p5xi9DH a.txt の内容が下記の場合はエラーになります。
'@.dat
----
いまさら気が付きましたが、やりたいことは、
PowerShellスクリプトをPowerShellで出力したいので、文字列をエスケープしたい。
最初から、こう言えればよかった。
'@.dat
----
いまさら気が付きましたが、やりたいことは、
PowerShellスクリプトをPowerShellで出力したいので、文字列をエスケープしたい。
最初から、こう言えればよかった。
201デフォルトの名無しさん
2022/03/28(月) 07:29:09.01ID:vgVAp+/s >>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'
そういうのも想定するなら'@で分割して結合するだけ
これで穴の無さそうなエスケープ処理相当にはなったかな
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'
202デフォルトの名無しさん
2022/03/28(月) 08:39:09.99ID:5tj62u6D 文字列リテラルの構文仕様を見るかぎり、
function ConvertTo-StringLiteral ([string] $s) {
'"{0}"' -f ($s -replace '[$"\u201C-\u201E`]', '`$&')
}
でいいのでは。
function x {
$s = Get-Content a.txt
'$a = ' + (ConvertTo-StringLiteral $s)
}
みたいに使う。
function ConvertTo-StringLiteral ([string] $s) {
'"{0}"' -f ($s -replace '[$"\u201C-\u201E`]', '`$&')
}
でいいのでは。
function x {
$s = Get-Content a.txt
'$a = ' + (ConvertTo-StringLiteral $s)
}
みたいに使う。
203デフォルトの名無しさん
2022/03/28(月) 09:30:54.03ID:5tj62u6D >>201
普通の「'」以外のシングルクォート類(*)も、正当なシングルクォート文字なので、
a.txt に「‘@.dat」とか入力されるとエラーになる穴が...。
(*) U+2018、U+2019、U+201A、U+201B
普通の「'」以外のシングルクォート類(*)も、正当なシングルクォート文字なので、
a.txt に「‘@.dat」とか入力されるとエラーになる穴が...。
(*) U+2018、U+2019、U+201A、U+201B
204デフォルトの名無しさん
2022/03/28(月) 20:36:51.74ID:vgVAp+/s205デフォルトの名無しさん
2022/03/29(火) 02:15:34.71ID:ieHzhZh4 >>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]", "'$&")
}
こうすればいいのだろうか?
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]", "'$&")
}
こうすればいいのだろうか?
206デフォルトの名無しさん
2022/03/29(火) 02:33:47.96ID:ieHzhZh4 何でインデントついてるんだろと思ったら\u3000でしたか
207202
2022/03/29(火) 09:28:46.66ID:H9URZ70O208デフォルトの名無しさん
2022/03/29(火) 21:51:03.77ID:SKE99kDT209デフォルトの名無しさん
2022/04/04(月) 21:22:25.32ID:ECqCrQfL >>1
$url=$($site="+pj.og.ldn.iakkokA3%etis=q?hcraes/moc.elgoog.www//:sptth".ToCharArray();[Array]::Reverse($site);-join $site)
"ソビエト人","支那人","朝鮮人" | % {start "$url$_";sleep 21}
$url=$($site="+pj.og.ldn.iakkokA3%etis=q?hcraes/moc.elgoog.www//:sptth".ToCharArray();[Array]::Reverse($site);-join $site)
"ソビエト人","支那人","朝鮮人" | % {start "$url$_";sleep 21}
210デフォルトの名無しさん
2022/04/07(木) 22:32:51.33ID:49oapsGv (Get-Date).ToString("M/d") # 4/7
(Get-Date).ToString("M") # 4月7日
(Get-Date).ToString("d") # 2022/04/07
"M"と"d"単体で取れないのは仕様なの?
(Get-Date).ToString("M") # 4月7日
(Get-Date).ToString("d") # 2022/04/07
"M"と"d"単体で取れないのは仕様なの?
211デフォルトの名無しさん
2022/04/07(木) 22:51:48.46ID:UZkBrI19212デフォルトの名無しさん
2022/04/07(木) 23:27:13.95ID:49oapsGv >>211
なるほど。ありがとう
なるほど。ありがとう
213デフォルトの名無しさん
2022/04/13(水) 14:32:54.13ID:Wntan1Ql いえいえ
214デフォルトの名無しさん
2022/04/13(水) 21:32:59.17ID:wBIIYhTi 事務員がこれ使って自動化して評価されるかね?
Excel VBAとかだと認知されてるし動きも分かるからアピールになりそうだけど、これはps1をダブルクリックしたら既に結果が出てるキンクリ状態になるんで何か地味なんだよね
出来ることは多彩なのにさ
Excel VBAとかだと認知されてるし動きも分かるからアピールになりそうだけど、これはps1をダブルクリックしたら既に結果が出てるキンクリ状態になるんで何か地味なんだよね
出来ることは多彩なのにさ
215デフォルトの名無しさん
2022/04/14(木) 08:19:21.43ID:Qn5tHQbB 結果を開いて見せつけてやればよろしいかと
216デフォルトの名無しさん
2022/04/14(木) 16:18:50.55ID:NCtDoq3M キンクリ状態てどういう意味なん
例えばExcel操作の自動化なら最初に$excel.Visible = $true
とでもしとけば同じようにリアルタイムで処理中の動きが出てくるけど
事務員ならいらん仕事押し付けられるのがオチだから隠しとけ
この程度でドヤりたいならIT土方にでも転職しなよ
例えばExcel操作の自動化なら最初に$excel.Visible = $true
とでもしとけば同じようにリアルタイムで処理中の動きが出てくるけど
事務員ならいらん仕事押し付けられるのがオチだから隠しとけ
この程度でドヤりたいならIT土方にでも転職しなよ
217デフォルトの名無しさん
2022/04/14(木) 20:27:06.96ID:PvzsrQHs 事務員がマクロやスクリプトで評価されても給料や時給が上がったりはしないだろ
都合よく使われるだけだよ
退屈な定常業務から抜け出したい動機なら良いのかも
都合よく使われるだけだよ
退屈な定常業務から抜け出したい動機なら良いのかも
218デフォルトの名無しさん
2022/04/14(木) 20:32:25.20ID:PvzsrQHs ×定常業務
○定型業務
○定型業務
219デフォルトの名無しさん
2022/04/14(木) 20:56:37.25ID:gLpPhM76 >>214
レスから知性を感じない
レスから知性を感じない
220デフォルトの名無しさん
2022/04/14(木) 21:57:43.29ID:ICzBofFJ それがパワー・シェルの能力……
ボクがこのps1をダブルクリックした時点で"結果"はもう確定しているッ!!
マクロみたいなトロいもんじゃあないんです
ボクがこのps1をダブルクリックした時点で"結果"はもう確定しているッ!!
マクロみたいなトロいもんじゃあないんです
221214
2022/04/14(木) 22:27:15.00ID:7HZEzgeQ やっぱり評判あんま芳しく無いからやめとくわ
回答してくれた皆さんありがとう
回答してくれた皆さんありがとう
222デフォルトの名無しさん
2022/04/15(金) 01:21:33.96ID:BWy9qJpj >>220
ダブルクリックしたらISEが開いたんだが
ダブルクリックしたらISEが開いたんだが
223デフォルトの名無しさん
2022/04/15(金) 08:51:23.89ID:UtgXyNoL パワーシェル
破壊力 A
スピード B
射程距離 A
持続力 B
精密動作性 E
成長性 E
タイプ 自動操縦型
能力 人が嫌がる仕事をする
To Be Continued…
破壊力 A
スピード B
射程距離 A
持続力 B
精密動作性 E
成長性 E
タイプ 自動操縦型
能力 人が嫌がる仕事をする
To Be Continued…
224デフォルトの名無しさん
2022/04/15(金) 11:34:08.46ID:0ObfuMR0 パワーシェルのスピードは最下位ランクだろ
C#埋め込むなら別だが
C#埋め込むなら別だが
225デフォルトの名無しさん
2022/04/15(金) 11:53:27.02ID:UtgXyNoL Cランクが人並みだからそれよりちょっと速いBランクが妥当
226デフォルトの名無しさん
2022/04/15(金) 12:21:45.82ID:wKBILFEa ウマナミナノネー
227デフォルトの名無しさん
2022/04/15(金) 20:16:25.51ID:k1oDZsjR windowsに標準に入っているってことだけはかなり優遇されてる
228デフォルトの名無しさん
2022/04/15(金) 20:50:36.38ID:6g+y36jy JScript.NETも入っているぞー
229デフォルトの名無しさん
2022/04/15(金) 21:04:54.33ID:k1oDZsjR プログラミングにおける認知度の低さは調べにくいし致命的
230デフォルトの名無しさん
2022/04/15(金) 23:12:56.97ID:41Kz9otF プログラミング言語の人気ランキング、順位変動は縮小傾向にある――RedMonkが調査
https://atmarkit.itmedia.co.jp/ait/articles/2204/13/news040.html
このランキングだとPowerShellは17位だぞ
Rustに勝ってる!
https://atmarkit.itmedia.co.jp/ait/articles/2204/13/news040.html
このランキングだとPowerShellは17位だぞ
Rustに勝ってる!
231デフォルトの名無しさん
2022/04/15(金) 23:31:17.12ID:3ZMsARLO PowerShellはランキングとか関係ないでしょ
PS5止まりで.NET4.8と心中する運命しかない、完全に袋小路の言語だよ
PS5止まりで.NET4.8と心中する運命しかない、完全に袋小路の言語だよ
232デフォルトの名無しさん
2022/04/16(土) 00:54:32.11ID:Zcudz7ky Windowsと共に来たりWindowsと共に滅ぶべし
233デフォルトの名無しさん
2022/04/16(土) 12:02:03.34ID:nVJ4wCm0234デフォルトの名無しさん
2022/04/16(土) 12:30:34.16ID:4vTOoh05 >>231
それってよく聞くけどなんの問題があるの?
Powershellなんてそもそもbetter MS-DOSであり
better WSHでしかないんだからなんの問題もないでしょ
なんか過剰な期待をしてた人がいるの?
それってよく聞くけどなんの問題があるの?
Powershellなんてそもそもbetter MS-DOSであり
better WSHでしかないんだからなんの問題もないでしょ
なんか過剰な期待をしてた人がいるの?
235デフォルトの名無しさん
2022/04/16(土) 12:58:53.88ID:NFUA2B25 そもそもすでにオープンソースなんだし衰退することはあるだろうけど袋小路とか意味わからん
236デフォルトの名無しさん
2022/04/16(土) 15:51:46.54ID:9cJTCJfn Powershellはオープンソースとして元気にやってるよ
7.3でコミュニティ主体の機能改善になりそうなのはこの辺とか?
scriptblockの引数の数でオーバーロード解決できるようにしたいというもの
https://github.com/PowerShell/PowerShell/issues/16940
7.3でコミュニティ主体の機能改善になりそうなのはこの辺とか?
scriptblockの引数の数でオーバーロード解決できるようにしたいというもの
https://github.com/PowerShell/PowerShell/issues/16940
237デフォルトの名無しさん
2022/04/16(土) 15:57:59.43ID:9cJTCJfn あとはc言語とかrustのようなネイティブアプリからPowershellをホスト出来るようになっていたりする
https://github.com/awakecoding/pwsh-native-host
https://github.com/awakecoding/pwsh-native-host
238デフォルトの名無しさん
2022/04/16(土) 16:17:49.58ID:GtnKHoFP 元気もなにも開発してるのMSの社員だし、6以降は事実上Azure専用だよ
239デフォルトの名無しさん
2022/04/16(土) 16:24:09.56ID:nVJ4wCm0 >>237
コードちら見したけど普通にPSプロセス呼んでプロセス間通信した方がよくないってなった
コードちら見したけど普通にPSプロセス呼んでプロセス間通信した方がよくないってなった
240デフォルトの名無しさん
2022/04/16(土) 18:36:59.47ID:9cJTCJfn >>239
新たにプロセスを立ち上げることでコマンドライン等が生成されるのを回避したいらしい
新たにプロセスを立ち上げることでコマンドライン等が生成されるのを回避したいらしい
241デフォルトの名無しさん
2022/04/21(木) 00:00:35.45ID:9X1k5UGW Powershell使えたら小5と付き合えますか?
242デフォルトの名無しさん
2022/04/21(木) 00:43:18.15ID:KtzHzoax きみが小5か小6なら付き合えるかもしれないね!
243デフォルトの名無しさん
2022/04/21(木) 02:16:18.40ID:/A3pqg11 20年位前の30代前半の頃、小6と付き合ってた
powershellのお陰だと思うよたぶん
powershellのお陰だと思うよたぶん
244デフォルトの名無しさん
2022/04/21(木) 03:15:46.74ID:+OyHOy+D >>243
そのころpowershellは未だ無いだろ
おれの場合は30年位前に小6と付き合っていると噂されたが事実はそのようなことはなく
当時powershellがあれば付き合えたのは確実だったと思う
そのころpowershellは未だ無いだろ
おれの場合は30年位前に小6と付き合っていると噂されたが事実はそのようなことはなく
当時powershellがあれば付き合えたのは確実だったと思う
245デフォルトの名無しさん
2022/04/21(木) 15:56:01.36ID:6s2N7jdI ワイも小学生低学年のころ、かけっこで1位だった
PowerShellのおかげだろうなあ
PowerShellのおかげだろうなあ
246デフォルトの名無しさん
2022/04/29(金) 11:16:42.60ID:8kZAWy9o htmlの特定のID(例:<div id="XXX">)の中身を取得するにはどうすればいいでしょうか?
htmlのソース自体は$sourceに格納しています。
htmlのソース自体は$sourceに格納しています。
247デフォルトの名無しさん
2022/04/29(金) 11:18:43.54ID:RNDpr+pH 文字コードを文字に変換するコマンドはありますでしょうか。
PS > change-moji -code SJIS 0x41
A
PS >
こういうコマンドです。
PS > change-moji -code SJIS 0x41
A
PS >
こういうコマンドです。
248デフォルトの名無しさん
2022/04/29(金) 11:25:23.63ID:X7f5QGPR [char]0x41
249デフォルトの名無しさん
2022/04/29(金) 18:39:45.29ID:RNDpr+pH >>248
ありがとうございます。
ありがとうございます。
250デフォルトの名無しさん
2022/04/29(金) 23:23:53.91ID:X7f5QGPR >>246
$html = New-Object -ComObject "HTMLFile"
$html.IHTMLDocument2_write($source)
$html.getElementsByTagName("div") | ?{ $_.ID -like "特定のID" }
みたいにCOM使ってDOMで操作するか、正規表現で自力で解析するかしか思いつかない
powershellの定番の処理方法があるなら俺が聞きたい
$html = New-Object -ComObject "HTMLFile"
$html.IHTMLDocument2_write($source)
$html.getElementsByTagName("div") | ?{ $_.ID -like "特定のID" }
みたいにCOM使ってDOMで操作するか、正規表現で自力で解析するかしか思いつかない
powershellの定番の処理方法があるなら俺が聞きたい
251デフォルトの名無しさん
2022/04/30(土) 02:08:01.29ID:TTQ8Rhtz 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 #=> い
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<div>あ</div>
<div id="xyz">い</div>
EOT
element = doc.at_css( '#xyz' )
puts element.content #=> い
252デフォルトの名無しさん
2022/04/30(土) 02:45:41.62ID:PTNoCeDZ getElementsByTagName 使うなら getElementById でいいんじゃない
253デフォルトの名無しさん
2022/04/30(土) 13:04:46.37ID:9f5J4pIa Windows11は、結構Powershellが主役の位置に躍り出てきて、コマンドプロンプトの影が薄くなってる。
254デフォルトの名無しさん
2022/04/30(土) 15:40:15.85ID:6Xk9b1VA255デフォルトの名無しさん
2022/04/30(土) 23:17:02.29ID:/67qPyiA xml形式ならselect-xmlというコマンドレットがあるんだけどね
256デフォルトの名無しさん
2022/05/01(日) 07:07:03.47ID:Rd1MW222 Invoke-WebRequest でパースできるんだから Web からだけじゃなく html を格納した変数とかもソースにできればいいのにね
257デフォルトの名無しさん
2022/05/01(日) 22:31:03.32ID:bsI6eYYg COMのやつってIEのパーサなんだよね
くやしいけどこの辺を高度にやりたいならスクレイピングに定評のあるスクリプトでやった方がいいと思う
くやしいけどこの辺を高度にやりたいならスクレイピングに定評のあるスクリプトでやった方がいいと思う
258デフォルトの名無しさん
2022/05/02(月) 03:17:08.47ID:GCJ++Ydj259デフォルトの名無しさん
2022/05/07(土) 22:39:06.01ID:A4G1I3Hd $idContents = $html.getElementById($idName).innerHTML
でinnerHTMLを取得して、$idContentsに格納してある「src」の値(src="https://〜〜.jpg)はどうやって取得するのでしょうか?
でinnerHTMLを取得して、$idContentsに格納してある「src」の値(src="https://〜〜.jpg)はどうやって取得するのでしょうか?
260デフォルトの名無しさん
2022/05/07(土) 23:18:18.03ID:aihC1Ap7 innerHTMLは使わない
getAttribute("src")を使う
getAttribute("src")を使う
261デフォルトの名無しさん
2022/05/08(日) 11:03:41.82ID:KUDJnBX7 $idContents = $html.getElementById($idName).getAttribute("src")
で試したのですが、$idContentsの中身は何もない状態です。
試しに、$idContents = $html.getElementById($idName)だけで実行すると、
$idContentsの中身に
innerHTML : <IMG id=img src="https://〜〜jpg/keystamp=〜〜;></A>
はあります。
で試したのですが、$idContentsの中身は何もない状態です。
試しに、$idContents = $html.getElementById($idName)だけで実行すると、
$idContentsの中身に
innerHTML : <IMG id=img src="https://〜〜jpg/keystamp=〜〜;></A>
はあります。
262デフォルトの名無しさん
2022/05/08(日) 12:11:23.98ID:q3KU1av3 $idNameは'img'なのか?
263デフォルトの名無しさん
2022/05/08(日) 12:17:10.62ID:KUDJnBX7 $idNameは'img'ではなく、'kr3'になります。
264デフォルトの名無しさん
2022/05/08(日) 12:25:56.66ID:q3KU1av3 だから取得したいのは、id=imgのIMGタグにあるsrc属性値じゃないのか?
$idNameを'img'にしろよ
$idNameを'img'にしろよ
265デフォルトの名無しさん
2022/05/08(日) 12:30:38.21ID:vSiZdN2k ID:KUDJnBX7はバカなんだろうね
266デフォルトの名無しさん
2022/05/08(日) 12:47:35.64ID:KUDJnBX7 >>264
なるほどです。ありがとうございました。
なるほどです。ありがとうございました。
267デフォルトの名無しさん
2022/05/09(月) 13:37:41.35ID:Plp0Diry 特定のフォルダの中にファイルが10個以上あったらタイムスタンプが一番古いファイルを削除する処理をPowerShellでどう書くかどなたか教えろください。。
スクリプトはタスクスケジューラで日次で走らせるイメージです。
スクリプトはタスクスケジューラで日次で走らせるイメージです。
268デフォルトの名無しさん
2022/05/09(月) 13:54:29.50ID:7AqNU3U0 一番古い一個だけを削除?それとも9個残して削除?
269デフォルトの名無しさん
2022/05/09(月) 14:11:58.68ID:I+mG682T270デフォルトの名無しさん
2022/05/09(月) 16:57:08.12ID:Plp0Diry >>268
一番古い一個だけを削除か、最新の9個を残してそれ以外を削除、の簡単な方でお願いしたいです。
一番古い一個だけを削除か、最新の9個を残してそれ以外を削除、の簡単な方でお願いしたいです。
271デフォルトの名無しさん
2022/05/09(月) 17:37:09.13ID:7AqNU3U0 >>270
269の30を9に変更するのが簡単だと思います
一番古い一個だけを消すのは Select-Object -Skip 9 | Select-Object -Last と二回もSelect-Object するのでとても難易度が高いです
269の30を9に変更するのが簡単だと思います
一番古い一個だけを消すのは Select-Object -Skip 9 | Select-Object -Last と二回もSelect-Object するのでとても難易度が高いです
272デフォルトの名無しさん
2022/05/09(月) 22:37:25.90ID:lywqA2G/ その質問バッチファイルスレで見たぞ
powershellの回答も貼ってある
powershellの回答も貼ってある
273デフォルトの名無しさん
2022/05/10(火) 00:05:58.23ID:aI8FHZ+3 【.cmd】 バッチファイルスクリプト %14 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1597442426/757-764
漏れが763 に、Ruby で書いた。
これをPower Shell(PS)用に書き直せばよい
764には誰かが、PSで書いている
https://mevius.5ch.net/test/read.cgi/tech/1597442426/757-764
漏れが763 に、Ruby で書いた。
これをPower Shell(PS)用に書き直せばよい
764には誰かが、PSで書いている
274デフォルトの名無しさん
2022/05/10(火) 01:07:57.29ID:0qiVBd6f Multicsだったのか
275デフォルトの名無しさん
2022/05/10(火) 23:04:11.60ID:gcxSlYEt フリーランスエンジニアになってからの年収推移を公開【現在年収1000万】
【実体験】仕事ができない新卒エンジニアでも月収70万フリーランスになれる理由
フリーランスエンジニアは年収900万円までは余裕!現役フリーランスエンジニアが徹底解説
フリーエンジニアの平均年収!未経験が年収1000万円を超える方法とは?
月額150万円以上も可能?ITフリーランスで高単価を獲得できる理由
在宅で年収1000万稼ぐフリーランスエンジニアの稼ぎ方【再現できる】
フリーランスのエンジニアやるなら45歳までに貯金5000万円作れないと死ぬ説
【実体験】仕事ができない新卒エンジニアでも月収70万フリーランスになれる理由
フリーランスエンジニアは年収900万円までは余裕!現役フリーランスエンジニアが徹底解説
フリーエンジニアの平均年収!未経験が年収1000万円を超える方法とは?
月額150万円以上も可能?ITフリーランスで高単価を獲得できる理由
在宅で年収1000万稼ぐフリーランスエンジニアの稼ぎ方【再現できる】
フリーランスのエンジニアやるなら45歳までに貯金5000万円作れないと死ぬ説
276デフォルトの名無しさん
2022/05/12(木) 17:12:26.22ID:QXSbgRzq フォルダ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
以下スクリプトを書いてみましたが、これだと1つずつの圧縮はできないようで。。。
//フォルダA内のファイル名(拡張子なし)を取得
$src = Get-ChildItem -Name C:\folderA
$file = [System.IO.Path]::GetFileNameWithoutExtension("$src")
//ファイル圧縮とフォルダ移動
Compress-Archive -Path C:\folderA\*.* -DestinationPath C:\folderB\$file
277デフォルトの名無しさん
2022/05/12(木) 18:00:29.84ID:J4rOXsT5 if やらforやらはBASICからやり直せ
278デフォルトの名無しさん
2022/05/12(木) 18:08:53.97ID:3e5cbbRq >>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}
以下のサンプルみたいに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}
279デフォルトの名無しさん
2022/05/12(木) 18:27:26.96ID:ZUpAZ75N PowerShellで複数アイテムに同じ処理をする場合は、アイテムをリストアップした出力をパイプでForEach-Objectに渡して
ForEach-Object の中で、一個ずつ($_ という変数で参照できる)処理するのが定番と思うの。
get-childitem | foreach-object { write-output $_.fullname $_.name }
とりあえず、これをやってみると感じが分かると思うの。
ForEach-Object の中で、一個ずつ($_ という変数で参照できる)処理するのが定番と思うの。
get-childitem | foreach-object { write-output $_.fullname $_.name }
とりあえず、これをやってみると感じが分かると思うの。
280デフォルトの名無しさん
2022/05/12(木) 20:27:03.08ID:QXSbgRzq281デフォルトの名無しさん
2022/05/12(木) 22:15:13.98ID:3P57KS6y 何だその言い方
お前周りから嫌われてると思うぞ
お前周りから嫌われてると思うぞ
282デフォルトの名無しさん
2022/05/12(木) 23:17:43.20ID:TAn4nFm7 ここは労働の場じゃないからな
金のやり取りを伴ってる仕事とは違うのになんでお客様気分丸出しでいられるんだよ
金のやり取りを伴ってる仕事とは違うのになんでお客様気分丸出しでいられるんだよ
283デフォルトの名無しさん
2022/05/12(木) 23:26:53.76ID:C4APGYH2 誰かが持ち上げてくれるからじゃないの
284デフォルトの名無しさん
2022/05/12(木) 23:56:30.38ID:z9H8Cfuc >>280
Compress-Archive の使い方(パラメーターの指定方法)は分かってますか?
ファイル一個だけで試してみましたか?
それを調べてから
Get-ChildItem -path "C:\folderA" -File | ForEach-Object {
Compress-Archive -LiteralPath $_.FullName -DestinationPath ("C:\folderB\" + $_.Name + ".zip")
}
これの意味を考えてみてください。
Compress-Archive の使い方(パラメーターの指定方法)は分かってますか?
ファイル一個だけで試してみましたか?
それを調べてから
Get-ChildItem -path "C:\folderA" -File | ForEach-Object {
Compress-Archive -LiteralPath $_.FullName -DestinationPath ("C:\folderB\" + $_.Name + ".zip")
}
これの意味を考えてみてください。
285276
2022/05/13(金) 00:26:01.86ID:/s7ZcOSV 解決しました!ありがとうございます!
286デフォルトの名無しさん
2022/05/13(金) 03:41:22.40ID:tKRLPzFb 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 }) # 圧縮
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 }) # 圧縮
287デフォルトの名無しさん
2022/05/13(金) 15:56:54.19ID:LpRC3aDE gciとかの-forceパラメータって必須だろうに
デフォでオフなのがなんだかな
デフォでオフなのがなんだかな
288デフォルトの名無しさん
2022/05/13(金) 19:23:39.98ID:Sc/EfT9l わざわざ隠し属性で隠してるのにディフォで表示しろとか頭おかしい
289デフォルトの名無しさん
2022/05/13(金) 22:56:09.66ID:uctr9r2r foreach中に最後の要素でないって判定どこかでできないですか
これができなくてforに書き直すはめになること何回もあるんですけど…
Foreach-Objectの場合もあったらお願いします
これができなくてforに書き直すはめになること何回もあるんですけど…
Foreach-Objectの場合もあったらお願いします
290デフォルトの名無しさん
2022/05/13(金) 23:28:29.60ID:dqCr6D+p 原理的に無理だろ...
291デフォルトの名無しさん
2022/05/14(土) 00:16:48.73ID:5a0Y4MKv 最後の要素でないってどういう目的で知りたいの?
本当に知りたいときもあるけど慣れてない人が書きがちなコードでもあるので気になった
カンマ区切りにするために最後ならカンマを付けない分岐を書くとかそういうの
本当に知りたいときもあるけど慣れてない人が書きがちなコードでもあるので気になった
カンマ区切りにするために最後ならカンマを付けない分岐を書くとかそういうの
292デフォルトの名無しさん
2022/05/14(土) 00:17:48.74ID:hb3+ANgg カウンタを用意してforeach対象のコンテナのlengthと都度比較する
これがモダンプログラミング()
これがモダンプログラミング()
293デフォルトの名無しさん
2022/05/14(土) 00:27:25.14ID:hb3+ANgg >>291
次の処理の前準備を現在の要素も使ってやってて最後だけ不要なとき
$i = 0
foreach ($item in $list) {
# $itemの処理
#
if (++$i -lt $list.length) {
# 前準備
}
}
これなら普通にforのが見やすい
次の処理の前準備を現在の要素も使ってやってて最後だけ不要なとき
$i = 0
foreach ($item in $list) {
# $itemの処理
#
if (++$i -lt $list.length) {
# 前準備
}
}
これなら普通にforのが見やすい
294デフォルトの名無しさん
2022/05/14(土) 05:45:14.69ID:NJOQ17Ts そういう最後だけ処理が違うってのは同じように処理しといて後から取り除く方が良くね?
二度手間で美しく無いように思えるけれどそれよりも
一々「最後かどうか」の判別に毎回if挿む方がバカらしく感じる
二度手間で美しく無いように思えるけれどそれよりも
一々「最後かどうか」の判別に毎回if挿む方がバカらしく感じる
295デフォルトの名無しさん
2022/05/14(土) 05:57:00.05ID:0bRjAEIy 前準備ってなにさ
296デフォルトの名無しさん
2022/05/14(土) 06:07:55.24ID:Wt4JCGPH297デフォルトの名無しさん
2022/05/14(土) 08:23:02.72ID:m7B1u9M5 カンマ区切りしたいだけなら $list -join ',' で十分だな
298デフォルトの名無しさん
2022/05/14(土) 09:47:46.73ID:R8RMhLQi そう、joinで済むんだよね
慣れてない人はフラグや分岐で処理しがち
だからまずは具体的にどんな処理をしようとしてるのか聞きたかったんだ
慣れてない人はフラグや分岐で処理しがち
だからまずは具体的にどんな処理をしようとしてるのか聞きたかったんだ
299デフォルトの名無しさん
2022/05/14(土) 10:32:45.51ID:kcOGS6gO カンマの話は>>291が勝手に言ってるだけなのにjoinですむとかあたおかかよw
300デフォルトの名無しさん
2022/05/14(土) 11:19:53.60ID:0bRjAEIy いや分からないから聞いてるのよ
301デフォルトの名無しさん
2022/05/14(土) 11:23:04.66ID:etUAy71A ID変わってるけど291=298な
判定する必要のない例としてカンマ区切りを挙げて、だから具体的な例を教えてくれと書いたのに、カンマ区切りのうまいやり方をレクチャーしてくれる人が出てきたから説明しただけよ
判定する必要のない例としてカンマ区切りを挙げて、だから具体的な例を教えてくれと書いたのに、カンマ区切りのうまいやり方をレクチャーしてくれる人が出てきたから説明しただけよ
302デフォルトの名無しさん
2022/05/14(土) 12:41:49.36ID:HwJxcgzF303デフォルトの名無しさん
2022/05/14(土) 13:05:47.91ID:Ws3jUYfQ 具体的な処理が分からんとどうしようもないだろ
準備じゃなくて、準備のための情報の保存にすることならできるんじゃないか
#itemの準備
#itemの処理
#次のitemの準備のための設定
として実際の準備は次のループの先頭で行うようにする
準備じゃなくて、準備のための情報の保存にすることならできるんじゃないか
#itemの準備
#itemの処理
#次のitemの準備のための設定
として実際の準備は次のループの先頭で行うようにする
304デフォルトの名無しさん
2022/05/14(土) 13:37:46.90ID:hb3+ANgg はあ…やっぱり論点ズラしで無いことを正当化する流れになったかw
無いなら無いでいいよ
無いなら無いでいいよ
305デフォルトの名無しさん
2022/05/14(土) 13:39:58.87ID:HwJxcgzF >>289
最初、最後、何番目などには別処理をする場合は、foreachは向いてないというか
もともと for があって、何番目かを気にせず全部の要素に同じ処理をすることが多いので、そういう場合用に foreach があると思ってます
最初、最後、何番目などには別処理をする場合は、foreachは向いてないというか
もともと for があって、何番目かを気にせず全部の要素に同じ処理をすることが多いので、そういう場合用に foreach があると思ってます
306デフォルトの名無しさん
2022/05/14(土) 14:20:17.76ID:lDPvxjtF >>304
無いことを正当化してる書き込みは見当たらないけどどのレスのこと?
無いことを正当化してる書き込みは見当たらないけどどのレスのこと?
307デフォルトの名無しさん
2022/05/14(土) 15:09:44.46ID:Y4vxLItZ だからforeachでは原理的に無理
foreach($item in $items){ ... }
はざっくり
$e = $items.GetEnumerator();
while ($e.MoveNext()) {
$item = $e.Current;
...
}
みたいなコードになるから$e.MoveNext()を呼ぶまで最後かどうかはわからない
極端な話、乱数で最後にするかを決めるような実装されたらどうしようもない
foreach($item in $items){ ... }
はざっくり
$e = $items.GetEnumerator();
while ($e.MoveNext()) {
$item = $e.Current;
...
}
みたいなコードになるから$e.MoveNext()を呼ぶまで最後かどうかはわからない
極端な話、乱数で最後にするかを決めるような実装されたらどうしようもない
308デフォルトの名無しさん
2022/05/14(土) 16:18:41.32ID:YaxyXfsS 最後の要素って$list[-1]でいいんじゃないの?
if($item -ne $list[-1]){前処理}でいけると思うけど
if($item -ne $list[-1]){前処理}でいけると思うけど
309デフォルトの名無しさん
2022/05/14(土) 18:19:29.97ID:POYL5zWo <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")
<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")
310デフォルトの名無しさん
2022/05/14(土) 18:55:56.30ID:QtW6yb+i 合ってないよ
section要素にはsrcもhrefもないんだから取れない
子や孫の要素からイイ感じで取ってきてくれるような期待をしてるんだろうけど、内側がどんな構造でいくつのimg要素とかがあるのかわかんないんだから、そんなのでイイ感じに取られる曖昧な挙動は逆に困る
要素をid指定で取ったあと.ChildNodesで自分で辿ったりする必要がある
querySelectorが使えれば楽なんだけどね
何度も似たような質問を繰り返すよりもまずHTML DOMの基礎を多少でも勉強しないとずっとハマるだけだし応用もできないよ
section要素にはsrcもhrefもないんだから取れない
子や孫の要素からイイ感じで取ってきてくれるような期待をしてるんだろうけど、内側がどんな構造でいくつのimg要素とかがあるのかわかんないんだから、そんなのでイイ感じに取られる曖昧な挙動は逆に困る
要素をid指定で取ったあと.ChildNodesで自分で辿ったりする必要がある
querySelectorが使えれば楽なんだけどね
何度も似たような質問を繰り返すよりもまずHTML DOMの基礎を多少でも勉強しないとずっとハマるだけだし応用もできないよ
311デフォルトの名無しさん
2022/05/14(土) 19:43:46.46ID:POYL5zWo ありがとうございます。HTML DOMを勉強してみます。
312デフォルトの名無しさん
2022/05/17(火) 11:55:50.17ID:w1KKtOUX PowerShellである処理について、変数の値だけ変えてそれぞれに同じ処理を実行したい場合、以下のように変数の値の数だけ実処理を複数段書けば実行できました。
ただ、これだとスマートではないと思いますので、ループ処理?のような形で最初に全変数を定義する等して、実際の処理自体は1か所だけにしたいのですが、どなたか書き方教えろください。。
------------
$変数a1 = 1-a
$変数b1 = 1-b
~~処理~~
------------
$変数a2 = 2-a
$変数b2 = 2-b
~~処理~~
------------
$変数a3 = 3-a
$変数b3 = 3-b
~~処理~~
------------
ただ、これだとスマートではないと思いますので、ループ処理?のような形で最初に全変数を定義する等して、実際の処理自体は1か所だけにしたいのですが、どなたか書き方教えろください。。
------------
$変数a1 = 1-a
$変数b1 = 1-b
~~処理~~
------------
$変数a2 = 2-a
$変数b2 = 2-b
~~処理~~
------------
$変数a3 = 3-a
$変数b3 = 3-b
~~処理~~
------------
313デフォルトの名無しさん
2022/05/17(火) 15:36:54.01ID:VMMgADOG コンテナでググれ
314デフォルトの名無しさん
2022/05/17(火) 19:17:50.09ID:ZA1GChKV ググれとか言う奴はスレから出ていけ
315デフォルトの名無しさん
2022/05/17(火) 20:03:10.54ID:xbjGOtM1316デフォルトの名無しさん
2022/05/18(水) 03:24:17.13ID:CLYU5EG2 こんな初歩の初心者にpowershellの配列は難しい気がする
別の規格がちゃんとしてる言語を1つでも履修して出直してもらいたいな
プロの俺でもフィルタ関連とか関数から返した場合とかでしょっちゅう間違えるんで…
別の規格がちゃんとしてる言語を1つでも履修して出直してもらいたいな
プロの俺でもフィルタ関連とか関数から返した場合とかでしょっちゅう間違えるんで…
317デフォルトの名無しさん
2022/05/18(水) 09:11:28.21ID:b9KxG2vQ ベテランでも諳んじて一発正解するのは難しいかったりするけど、シェルなんだから試行錯誤で構造化プログラミングの感覚を摑めばいいと思うよ
固定長配列でハコとして使う分には落とし穴もそうないのでは
パイプは使うかもしれないし使わないかもしれない
せっかくの気付きなんだから試してみるチャンス
固定長配列でハコとして使う分には落とし穴もそうないのでは
パイプは使うかもしれないし使わないかもしれない
せっかくの気付きなんだから試してみるチャンス
318デフォルトの名無しさん
2022/05/18(水) 10:26:21.69ID:Q05gEBgM まずforeach文で作ってみればいい、そんな難しくはない
foreach-objectとかのコマンドレットにしたい、てのは次の段階にしてみよう
foreach-objectとかのコマンドレットにしたい、てのは次の段階にしてみよう
319デフォルトの名無しさん
2022/05/19(木) 01:52:14.72ID:r92G1leA .NETのジェネリックなコレクションを使う癖を付ければpsの変な仕様に振り回されないで済むかも
320デフォルトの名無しさん
2022/05/19(木) 10:22:09.77ID:hhrIPFsF そもそも配列やコレクションをループで回したりするのはPowerShell的な発想ではない
積極的にパイプを使うんだよ
それに馴染めないならもうインラインでC#書いたほうがいい
積極的にパイプを使うんだよ
それに馴染めないならもうインラインでC#書いたほうがいい
321デフォルトの名無しさん
2022/05/19(木) 11:54:46.82ID:AWcD8iuw 初学者がパイプの意味を理解するのはハードル高いと思う
コードが長くてもいいから自分のやりたいことをロジックにして組み立てる
それも出来ないうちからパイプでかくなんてさらに混乱するだけ
コマンドレットを見てすぐ処理を想像できるような慣れてる人ならいいと思うけどね
コードが長くてもいいから自分のやりたいことをロジックにして組み立てる
それも出来ないうちからパイプでかくなんてさらに混乱するだけ
コマンドレットを見てすぐ処理を想像できるような慣れてる人ならいいと思うけどね
322デフォルトの名無しさん
2022/05/19(木) 12:11:52.45ID:vDWzHeJO323デフォルトの名無しさん
2022/05/19(木) 12:19:41.05ID:HGJ493WX 初心者ですでにスクリプトも書いていてリファクタの相談なのに、パイプ使わないならC#でって…
原理主義なのか話を聞かない人なのか柔軟性が動脈硬化起こしてる人なのか
原理主義なのか話を聞かない人なのか柔軟性が動脈硬化起こしてる人なのか
324デフォルトの名無しさん
2022/05/19(木) 14:36:52.46ID:mIjloFOo パイプに拒絶反応してる奴らがわらわらとw
325デフォルトの名無しさん
2022/05/19(木) 15:37:07.78ID:i7u7qPJB PowerShellのパイプはクセあるからなあ
326デフォルトの名無しさん
2022/05/19(木) 15:57:51.90ID:K1O9Nfx2 だが、そこが良い
327デフォルトの名無しさん
2022/05/19(木) 16:21:27.92ID:vDWzHeJO ドトネトのコレクションはPS的には未知の参照型オブジェクトだから
PSのスコープの影響も受けないし、
配列みたいに勝手に構造を壊されたりもしないから積極的に使う事をお勧めしたい
PSのスコープの影響も受けないし、
配列みたいに勝手に構造を壊されたりもしないから積極的に使う事をお勧めしたい
328デフォルトの名無しさん
2022/05/19(木) 17:15:25.08ID:z1zzxM54329デフォルトの名無しさん
2022/05/19(木) 17:16:58.08ID:z1zzxM54 ID変わったけど323=328な
好きなものを無条件に全肯定しないと則敵認定ってまさに信者やん
好きなものを無条件に全肯定しないと則敵認定ってまさに信者やん
330デフォルトの名無しさん
2022/05/20(金) 15:12:12.74ID:rcI504Fo -pv/-ovで黒魔術できるのがpwshパイプの真骨頂、汚いけど…
パイプは一般にバッファ単位の目詰まりが難だけど、これは-obで自由に調節できる
-pv/-ov/-ovは共通パラメータだからいつでも使えるしpitfallsは大体これで解決できるからパイプ活用したいなら、最重要で覚えるべし
パイプは一般にバッファ単位の目詰まりが難だけど、これは-obで自由に調節できる
-pv/-ov/-ovは共通パラメータだからいつでも使えるしpitfallsは大体これで解決できるからパイプ活用したいなら、最重要で覚えるべし
331デフォルトの名無しさん
2022/05/20(金) 20:50:08.65ID:8qofalUL >>330
パイプで最重要で覚える事はさあ、パイプはめっちゃコストコが掛かる書き方だな!って理解することじゃないかなあ
1行ずつ読んでパイプに渡してたら日が暮れるし…ずっとパイプの中で暮らさないといけない程変な言語でもない…
あっこの処理、パイプで連携したら効率いいかも…なんてあんまないのでな
これがパイプの真骨頂!って例を見せてくれたら、まあ考えを改めてもいいが…君の発言は新しいもの好きの勇み足発言にしか見えなくて痛々しい…
パイプで最重要で覚える事はさあ、パイプはめっちゃコストコが掛かる書き方だな!って理解することじゃないかなあ
1行ずつ読んでパイプに渡してたら日が暮れるし…ずっとパイプの中で暮らさないといけない程変な言語でもない…
あっこの処理、パイプで連携したら効率いいかも…なんてあんまないのでな
これがパイプの真骨頂!って例を見せてくれたら、まあ考えを改めてもいいが…君の発言は新しいもの好きの勇み足発言にしか見えなくて痛々しい…
332デフォルトの名無しさん
2022/05/20(金) 20:56:56.50ID:zxJBX/+G PowetShell大好きパイプ大好き
可能な限りパイプを使うように努めてるよ
可能な限りパイプを使うように努めてるよ
333デフォルトの名無しさん
2022/05/20(金) 20:58:03.25ID:zxJBX/+G ちょっと間違えちゃった
334デフォルトの名無しさん
2022/05/20(金) 21:00:45.78ID:slL0jKxc アホらし
C#と同じように書きたいならAdd-TypeでC#書けばいいでしょ
C#と同じように書きたいならAdd-TypeでC#書けばいいでしょ
335デフォルトの名無しさん
2022/05/20(金) 21:52:53.66ID:XK9Y5vcV 俺はバイブの方が好き♡
336デフォルトの名無しさん
2022/05/21(土) 04:11:37.11ID:xI11xSxR 結局どんな言語や書き方であろうと慣れでしか無い
読み辛いとか言う奴の大半が適応力やワーキングメモリの低い低能
読み辛いとか言う奴の大半が適応力やワーキングメモリの低い低能
337デフォルトの名無しさん
2022/05/29(日) 14:10:16.59ID:KYl341LT 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
以下データ
という感じであれば最高です。
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
以下データ
という感じであれば最高です。
338デフォルトの名無しさん
2022/05/29(日) 15:56:20.58ID:2VGP7oaH bash -c "paste -d , a.csv b.csv"
339デフォルトの名無しさん
2022/05/29(日) 18:24:56.01ID:maoDzYC5 カラムの順序指定もしたいみたいだから、cutとかでもう1処理いるね。
PowerShellだと
(>>338) | ConvertFrom-Csv | select id,name,address,phone,gender | ConvertTo-Csv
ただしConvertFrom-Csv・ConvertTo-Csvは
元データを正確に再現する必要がある場合には難あり。
(Trim()が掛かるとかダブルクォーテーションで括られるとか。)
PowerShellだと
(>>338) | ConvertFrom-Csv | select id,name,address,phone,gender | ConvertTo-Csv
ただしConvertFrom-Csv・ConvertTo-Csvは
元データを正確に再現する必要がある場合には難あり。
(Trim()が掛かるとかダブルクォーテーションで括られるとか。)
340デフォルトの名無しさん
2022/05/29(日) 18:27:45.99ID:maoDzYC5 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.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
}
}
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.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
}
}
341デフォルトの名無しさん
2022/05/29(日) 18:28:27.86ID:maoDzYC5 注意:
・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
・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
342デフォルトの名無しさん
2022/05/29(日) 19:20:10.32ID:KYl341LT >>338-340
ありがとうございます!
書き起こしてくれるなんて、感謝のしようがありません・・。
少し読み解くのに時間がかかりそうですが、半日考えても良い手が思いつかなかったので
しっかり読んで身に着けたいと思います。
ありがとうございました。
ありがとうございます!
書き起こしてくれるなんて、感謝のしようがありません・・。
少し読み解くのに時間がかかりそうですが、半日考えても良い手が思いつかなかったので
しっかり読んで身に着けたいと思います。
ありがとうございました。
343デフォルトの名無しさん
2022/05/29(日) 23:48:36.53ID:MBI5r2Hn 割とちゃんとした風なのが出てきてよかったな
>>337の結合は別にCSVとして処理する必要ねーじゃんと思ってたわ
>>337の結合は別にCSVとして処理する必要ねーじゃんと思ってたわ
344デフォルトの名無しさん
2022/05/30(月) 22:45:36.14ID:5eMIb3Vr どこでみんな基礎を習得してるか気になる
都度ネット検索して見よう見まねでやってるけどちゃんと体型立てて学んだ方が良い気が最近してる
上のcsv解決の発想だって全然出てこないもの
都度ネット検索して見よう見まねでやってるけどちゃんと体型立てて学んだ方が良い気が最近してる
上のcsv解決の発想だって全然出てこないもの
345デフォルトの名無しさん
2022/05/30(月) 23:00:34.01ID:1p0oXEXT PowerShellから入る人なんていないでしょ
初学者がPowerShellでまともなプログラミングを学ぶのは難しいからC#でもやった方がいいよ
初学者がPowerShellでまともなプログラミングを学ぶのは難しいからC#でもやった方がいいよ
346デフォルトの名無しさん
2022/05/30(月) 23:03:23.68ID:6thXMpkz 薄々そうじゃないかと思ってた
やっぱC#行くべきなのね
やっぱC#行くべきなのね
347デフォルトの名無しさん
2022/05/30(月) 23:08:03.98ID:fHLpS2ag >>345
C#もJavaも含めてほぼプログラム言語扱えない非プログラマーだけどPowershellは普通に学習出来たよ
C#もJavaも含めてほぼプログラム言語扱えない非プログラマーだけどPowershellは普通に学習出来たよ
348デフォルトの名無しさん
2022/05/30(月) 23:14:06.95ID:5eMIb3Vr 会社では追加基本インストール禁止だから使える自動化ツールがVBA、WSH、CMD、Powershell くらいしか無いのです
VBA VBSは一通り使えるけどやっぱモダンなの使いたいって事でpowershellを使いこなしたいんですよ
っていうパターンは自分以外にもきっといるんだろうなって思って
VBA VBSは一通り使えるけどやっぱモダンなの使いたいって事でpowershellを使いこなしたいんですよ
っていうパターンは自分以外にもきっといるんだろうなって思って
349デフォルトの名無しさん
2022/05/30(月) 23:14:46.76ID:0w3w2Q9u >>347
どうやって学習した?
どうやって学習した?
350デフォルトの名無しさん
2022/05/30(月) 23:16:19.58ID:bPn6KqG1 どの言語を学んでも解決ロジックなんかは数をこなして他人のソースサンプルを見るとかしていかないと見につかない
C#とか言語仕様は入門書が充実してるところが違うだけで読んだからといって
問題解決力が身につくわけではないことは心得ておかないとね
教科書を全部読んだからといって入試問題が解けるか?ってこと
C#とか言語仕様は入門書が充実してるところが違うだけで読んだからといって
問題解決力が身につくわけではないことは心得ておかないとね
教科書を全部読んだからといって入試問題が解けるか?ってこと
351デフォルトの名無しさん
2022/05/30(月) 23:16:45.35ID:0w3w2Q9u352デフォルトの名無しさん
2022/05/30(月) 23:29:45.91ID:ArE2ZMbw >>348
プライベートのPCでやればいい
プロでプログラミングやってる人間は学生時代やプライベートの時間など多かれ少なかれ仕事以外の時間を捧げてるんだよ
基礎から学ぶというのはそういう連中と同じ土俵に立つってことだ
プライベートのPCでやればいい
プロでプログラミングやってる人間は学生時代やプライベートの時間など多かれ少なかれ仕事以外の時間を捧げてるんだよ
基礎から学ぶというのはそういう連中と同じ土俵に立つってことだ
353デフォルトの名無しさん
2022/05/30(月) 23:38:38.76ID:fHLpS2ag354デフォルトの名無しさん
2022/05/30(月) 23:38:47.91ID:5eMIb3Vr 方法論を聞いてるのに精神論を語る奴っているよね
355デフォルトの名無しさん
2022/05/30(月) 23:49:53.74ID:+PNdSWJO 普通にpwsh使ってコマンドライン作業してれば覚える
スクリプトもその延長線上
スクリプトもその延長線上
356デフォルトの名無しさん
2022/05/30(月) 23:54:36.28ID:9dnvWkql いうほど精神論説いてるやついる?
〇〇論を聞いてるのに〇〇論を、そういう気の利いたフレーズを言ってみたい気持ちが先行してるように見える
〇〇論を聞いてるのに〇〇論を、そういう気の利いたフレーズを言ってみたい気持ちが先行してるように見える
357デフォルトの名無しさん
2022/05/30(月) 23:57:11.82ID:NR5IHQxQ 本腰入れて文法とかほじくりたいならまずはpowershellexplainedってブログオススメ
358デフォルトの名無しさん
2022/05/31(火) 00:32:11.60ID:eW10AB/z やりたいことが先にあって、それを如何に良く実現するかをあれやこれや試行錯誤していくのがいいよ
漠然と習得したいとか体系的にとかやってると漠然としか身につかない
あと人のものをよく見ること
こういうやり方があったのか、ってのを一つでも多く体験するのがいい
漠然と習得したいとか体系的にとかやってると漠然としか身につかない
あと人のものをよく見ること
こういうやり方があったのか、ってのを一つでも多く体験するのがいい
359デフォルトの名無しさん
2022/05/31(火) 00:43:09.74ID:z7NqqS3T コマンドラインで補完叩きながら必要そうなパラメータやメンバ探してれば大体望みのものが見つかるはず
フラッシュ暗記的にどこに使えそうなものがあったか思い出せればヘルプも引ける
俺がワンライナー以上の事をするときの具体的な手順
必要そうな関数を一つ定義してはパラメータ与えて何回かチェック、動けばfunction:から追記リダイレクトして最後にvimで手直ししてmainを添えて取り敢えず動くものを完成
暇なときに気が向いたら体裁整えたり関数まとめたり構造化
副産物として汎用性高そうなの出来たら$profileにも追記
こういうlisp的なサイクル回して使っていくのがいいと思う
フラッシュ暗記的にどこに使えそうなものがあったか思い出せればヘルプも引ける
俺がワンライナー以上の事をするときの具体的な手順
必要そうな関数を一つ定義してはパラメータ与えて何回かチェック、動けばfunction:から追記リダイレクトして最後にvimで手直ししてmainを添えて取り敢えず動くものを完成
暇なときに気が向いたら体裁整えたり関数まとめたり構造化
副産物として汎用性高そうなの出来たら$profileにも追記
こういうlisp的なサイクル回して使っていくのがいいと思う
360デフォルトの名無しさん
2022/05/31(火) 00:43:37.67ID:BZqNx7Tc361デフォルトの名無しさん
2022/05/31(火) 23:10:25.48ID:OuANH9gG このコマンドがうまく動きません。
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コマンドの場合がうまくいきません。
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コマンドの場合がうまくいきません。
362デフォルトの名無しさん
2022/06/01(水) 04:00:12.01ID:U+A7iBPz remove-item.***なんて言う実行ファイルは存在しないから無理なのは当たり前
どうしてもstart-processに繋げないといけないの?
どうしてもstart-processに繋げないといけないの?
363361
2022/06/01(水) 05:21:30.48ID:lJWk1HAY >>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行でまとめる方法です。
レスありがとうございます。
> どうしても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行でまとめる方法です。
364デフォルトの名無しさん
2022/06/01(水) 11:08:03.91ID:yxFCK4Jy >>363
自分もこの問題は解決出来なかった
UAC有効な環境で管理者権限使うならStart-processか管理者権限実行なのも一緒
しかしStart-processはコマンドレット実行出来ない模様
ワークアラウンドで別のcmdスクリプト作ってそいつをStart-processで実行させるという非スマートな力業でどうにかするしかなかった
自分もこの問題は解決出来なかった
UAC有効な環境で管理者権限使うならStart-processか管理者権限実行なのも一緒
しかしStart-processはコマンドレット実行出来ない模様
ワークアラウンドで別のcmdスクリプト作ってそいつをStart-processで実行させるという非スマートな力業でどうにかするしかなかった
365デフォルトの名無しさん
2022/06/01(水) 11:27:22.75ID:HV/k13ls powershell -NoProfile -ExecutionPolicy unrestricted -command "Start-Process -Verb runas -FilePath powershell.exe -ArgumentList ‘-command remove-item C:\Users\Public\Desktop\test'"
試してないけどこんな感じで出来ん?
不備とかエスケープ処理が必要だったりとかあるかも
powershellから昇格させたpowershell呼んでそこでdel
試してないけどこんな感じで出来ん?
不備とかエスケープ処理が必要だったりとかあるかも
powershellから昇格させたpowershell呼んでそこでdel
366デフォルトの名無しさん
2022/06/02(木) 00:03:43.97ID:B9Goniqn >>365
出来ました
出来ました
368デフォルトの名無しさん
2022/06/04(土) 17:47:37.42ID:TSmSPUgr 定義した変数のメモリ開放は$nullの代入でいいのでしょうか?
メモリリソースが足りませんとエラーがでるので。
メモリリソースが足りませんとエラーがでるので。
369デフォルトの名無しさん
2022/06/04(土) 18:56:11.76ID:IRaDT1CY Remove-Variable
まあ設計を見直した方がいいと思うけど
まあ設計を見直した方がいいと思うけど
370デフォルトの名無しさん
2022/06/04(土) 20:19:25.41ID:TSmSPUgr ありがとうございます!
371デフォルトの名無しさん
2022/06/18(土) 20:04:49.41ID:2rZBula1 フォルダ内にあるすべての画像ファイルにおいて、その画像の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.
とエラーがでるのですが、パスの設定方法がいまいちわかりません。
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.
とエラーがでるのですが、パスの設定方法がいまいちわかりません。
372デフォルトの名無しさん
2022/06/18(土) 20:44:46.51ID:opzT6/bZ Remove-Item $_.FullName
か
$_ | Remove-Item
かな
か
$_ | Remove-Item
かな
373デフォルトの名無しさん
2022/06/18(土) 20:51:53.83ID:2rZBula1 ありがとうございます。やってみます!
374デフォルトの名無しさん
2022/06/19(日) 00:03:25.24ID:d/5y1flf VSCode でも、コマンドプロンプト・PowerShell を使うと、
ファイル・フォルダ操作のアクセス権限が無いから、
右下のトーストに、そういうエラー通知が来る
そこで、アプリに対して、操作を許可する
それと、Windows でもファイルパス区切りに、/ を使える。
C:/Users/Owner/Documents/a.txt
ファイル・フォルダ操作のアクセス権限が無いから、
右下のトーストに、そういうエラー通知が来る
そこで、アプリに対して、操作を許可する
それと、Windows でもファイルパス区切りに、/ を使える。
C:/Users/Owner/Documents/a.txt
375デフォルトの名無しさん
2022/06/19(日) 18:24:35.04ID:xfiYTNc0 今までこれを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はそれら管理者権限付与の自動化や再起動不要が可能と聞きました
ネットにはバッチのような記述解説サイトが乏しいので、コードの代替案、またはおすすめの参考書等があれば教えてください〜
-------
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はそれら管理者権限付与の自動化や再起動不要が可能と聞きました
ネットにはバッチのような記述解説サイトが乏しいので、コードの代替案、またはおすすめの参考書等があれば教えてください〜
376デフォルトの名無しさん
2022/06/19(日) 19:51:13.64ID:k543CSlC377デフォルトの名無しさん
2022/06/19(日) 22:46:16.09ID:WW6NzJIS サービスを削除でぐぐれ
378デフォルトの名無しさん
2022/06/20(月) 08:42:33.76ID:sIvuqcVm レジストリを直接編集するな
Windows 秘話: なぞのキー
https://docs.microsoft.com/ja-jp/previous-versions/technet-magazine/dn456530(v=msdn.10)
> 変更または操作されることがまったく意図されていない設定が存在します。そのような設定を見つけたときには、とにかくそっとしておいてください。
Windows 秘話: なぞのキー
https://docs.microsoft.com/ja-jp/previous-versions/technet-magazine/dn456530(v=msdn.10)
> 変更または操作されることがまったく意図されていない設定が存在します。そのような設定を見つけたときには、とにかくそっとしておいてください。
379デフォルトの名無しさん
2022/06/20(月) 08:48:02.21ID:3bt1t/j5 それはメーカーが分解すんなって言うのと同等の話
380デフォルトの名無しさん
2022/06/20(月) 10:58:01.21ID:4+IWkf9p 目的がテレメトリ関連の通信の遮断だしサービス削除しかないと思うけどな
381デフォルトの名無しさん
2022/06/20(月) 12:48:20.89ID:LhK9JJfo Stop-ServiceやSet-Serviceあたり使えばいいんじゃね
382デフォルトの名無しさん
2022/06/20(月) 12:50:56.18ID:E6UoKUAB ハード的家電において、メーカーの分解拒否声明は「簡単に直せる部分を民間でやられたら業績下がるやんけ」理論が殆どと、感電・火災防止が少しって感じ
同じくソフトにおいても、メーカーの調整拒否声明は「テレメトリを拒否されると情報転売が減って業績下がるやんけ」理論がほぼ全てで、僅かに不測の事態とその対応への危惧(面倒≒ユーザー側の心配はしていない)が含まれる感じ
大体、テレメトリの最終的な購入先は巡り巡ってそれらを利用したがっているガチ支那チョン露などの反社集団でしょうに
だから米国大手の支那癒着や制裁緩和の声が消えないわけで
例え吸われても、利用先が日本国内または米国のみであればそんなに問題視しませんわ
逆にDoSvcなんかは設定での表面上なOFFやグルポをしようと内部でMB単位のダウンロードをしっかりしていますし、
DoSvc動作用の基礎データか何かと期待したいものの時間経過で増大します→つまり120%ガチテレメトリなんですよ
そしてスタートアップを無効にしなければOS設定にかかわらず強制実行+勝手に通信+削除しようと復活増量し続ける
無効にしたスタートアップさえ手動(トリガー)へ勝手に戻される→高頻度自主改変がなければOSから「DoSvcの無い空間」を作り出せない
こんなソフトの癌とも言えるものを放置出来る方々の無神経さは平和の極みですな
安いからっつって支那産PCを大量購入し自衛隊へ配布した馬鹿で愚かな国賊官僚と同レベルに思う
同じくソフトにおいても、メーカーの調整拒否声明は「テレメトリを拒否されると情報転売が減って業績下がるやんけ」理論がほぼ全てで、僅かに不測の事態とその対応への危惧(面倒≒ユーザー側の心配はしていない)が含まれる感じ
大体、テレメトリの最終的な購入先は巡り巡ってそれらを利用したがっているガチ支那チョン露などの反社集団でしょうに
だから米国大手の支那癒着や制裁緩和の声が消えないわけで
例え吸われても、利用先が日本国内または米国のみであればそんなに問題視しませんわ
逆にDoSvcなんかは設定での表面上なOFFやグルポをしようと内部でMB単位のダウンロードをしっかりしていますし、
DoSvc動作用の基礎データか何かと期待したいものの時間経過で増大します→つまり120%ガチテレメトリなんですよ
そしてスタートアップを無効にしなければOS設定にかかわらず強制実行+勝手に通信+削除しようと復活増量し続ける
無効にしたスタートアップさえ手動(トリガー)へ勝手に戻される→高頻度自主改変がなければOSから「DoSvcの無い空間」を作り出せない
こんなソフトの癌とも言えるものを放置出来る方々の無神経さは平和の極みですな
安いからっつって支那産PCを大量購入し自衛隊へ配布した馬鹿で愚かな国賊官僚と同レベルに思う
383デフォルトの名無しさん
2022/06/20(月) 14:23:54.66ID:XSN9SiQv384デフォルトの名無しさん
2022/06/20(月) 14:47:00.73ID:YswTafv8 会社の物とかでなければレジストリくらい好きに弄ったらいいだろ
それで何かあっても自己責任ってだけで
それで何かあっても自己責任ってだけで
385デフォルトの名無しさん
2022/06/20(月) 14:58:58.89ID:h1SesB6c レジストリ編集では期待通りにいかないことを体験的に踏まえた上で上手くいく手順としてPSでやりたいって流れの質問なのにレジストリ編集するな!ってクソバイスやん
自己責任を理解せずに杓子定規で正しさを主張し続ける人にはアレな傾向を感じざるを得ない
自己責任を理解せずに杓子定規で正しさを主張し続ける人にはアレな傾向を感じざるを得ない
386デフォルトの名無しさん
2022/06/20(月) 15:20:32.49ID:4G+nodK/ batはレジストリの値を弄ってるのみにしか見えん
この後にPCを再起動でもさせるのか?
この後にPCを再起動でもさせるのか?
387デフォルトの名無しさん
2022/06/20(月) 15:32:06.62ID:JJsUxIz5 だいぶ前から色んなところで聞いているけど
タスクマネージャーで権限がないから書き込めないとか
黒窓が出るのが嫌だとか
原因を追求する気もないのに聞いて回るクソヤロウだよ
タスクマネージャーで権限がないから書き込めないとか
黒窓が出るのが嫌だとか
原因を追求する気もないのに聞いて回るクソヤロウだよ
388デフォルトの名無しさん
2022/06/20(月) 15:46:09.48ID:3ZXlTK7A389デフォルトの名無しさん
2022/06/20(月) 17:32:51.93ID:6RdOG7wm390デフォルトの名無しさん
2022/06/20(月) 18:28:34.00ID:E6UoKUAB バッチスレは論外ですな
batやスケジューラの挙動に関して最初から細かく説明していたのですが、どう考えてもガチ支那の五毛っぽいDQNが私の最後のレスを部分的にチラ見しただけで、答えている感じでしたね^^;
冷やかしがオナニーしている状態で、バッチスレの名が泣いていました
原因も提示し、それら打開策などの例や実施結果を挙げつつも、堂々巡りの、それもむっちゃ浅い既出内容をドヤ顔で書き込まれる感じ
バッチスレで唯一のプログラミングスレらしい収穫は「俺だったら.ps1で作る」という言葉、ただひとつのみでしたわorz
あとはなかなかまとまった時間が作れず、もう少ししたらps1版のサービス削除などもネット検索・吟味できそうです
最も盛んでしたwinXP時代にソフトを制作していた年代は今50前後?で開発・更新停止などが相次いでいますよね
そんで2022年現在、高校辺りでプログラミングを必修とする云々が出ている
間が20年くらいスッカラカンなのは日本の経済力低迷を表しているようで大変残念です
そりゃ今の官僚層が自衛隊へ支那産PC送ったりするはずですわ、そんなのが国を回しているんだから^^;
batやスケジューラの挙動に関して最初から細かく説明していたのですが、どう考えてもガチ支那の五毛っぽいDQNが私の最後のレスを部分的にチラ見しただけで、答えている感じでしたね^^;
冷やかしがオナニーしている状態で、バッチスレの名が泣いていました
原因も提示し、それら打開策などの例や実施結果を挙げつつも、堂々巡りの、それもむっちゃ浅い既出内容をドヤ顔で書き込まれる感じ
バッチスレで唯一のプログラミングスレらしい収穫は「俺だったら.ps1で作る」という言葉、ただひとつのみでしたわorz
あとはなかなかまとまった時間が作れず、もう少ししたらps1版のサービス削除などもネット検索・吟味できそうです
最も盛んでしたwinXP時代にソフトを制作していた年代は今50前後?で開発・更新停止などが相次いでいますよね
そんで2022年現在、高校辺りでプログラミングを必修とする云々が出ている
間が20年くらいスッカラカンなのは日本の経済力低迷を表しているようで大変残念です
そりゃ今の官僚層が自衛隊へ支那産PC送ったりするはずですわ、そんなのが国を回しているんだから^^;
391デフォルトの名無しさん
2022/06/20(月) 20:16:43.25ID:+SBlN13D 直接編集しちゃいけないなんてルールはないから好きにしな
無知が無学のまま弄った責任を負わされることを防ぐためのおまじないでしかないよ
無知が無学のまま弄った責任を負わされることを防ぐためのおまじないでしかないよ
392デフォルトの名無しさん
2022/06/20(月) 20:23:12.95ID:ItZjQb2L 行き着いた答えがレジストリ書き換えの定期実行だから頭悪いにも程がある
393デフォルトの名無しさん
2022/06/20(月) 21:31:17.15ID:yjTGWQu/ 俺はちゃんとバッチスレにサービスの設定を変えるコマンドの事書いたぞ
コマンドのドキュメントのリンク付きで
このスレでも他の人が設定変更用のコマンドレットのこと書いてるし
何をどう見てるのやら
コマンドのドキュメントのリンク付きで
このスレでも他の人が設定変更用のコマンドレットのこと書いてるし
何をどう見てるのやら
394デフォルトの名無しさん
2022/06/20(月) 22:24:09.27ID:4G+nodK/ レジストリなんて不整合があれば書き戻されることもあるのでレジストリ弄るだけで解決しない
395デフォルトの名無しさん
2022/06/21(火) 00:22:01.55ID:KK61fTqr てかバッチスレが余りにも低水準かつ五毛全開だったからこそ呆れ、唯一のまともなアドバイスに従ってパワシェへ切り替えようとしているのにさ
わざわざ別スレのリンク貼ったりパワシェスレへ出張(笑)してきたり、ほんま意味不明ですわw
ま、ストーカー云々の類いはリアルもネットも気色悪いですしバッチスレ関係者から得られるものが無いのも経験済み
似た主題なので両方のスレを高頻度で訪問しているのかな、そう思うことにして特定のレスは流し聞きしときますよwww
わざわざ別スレのリンク貼ったりパワシェスレへ出張(笑)してきたり、ほんま意味不明ですわw
ま、ストーカー云々の類いはリアルもネットも気色悪いですしバッチスレ関係者から得られるものが無いのも経験済み
似た主題なので両方のスレを高頻度で訪問しているのかな、そう思うことにして特定のレスは流し聞きしときますよwww
396デフォルトの名無しさん
2022/06/21(火) 00:36:09.32ID:xELEw2uC Linux なら、systemd とか
Windows の仕組みは知らないけど、
レジストリはその結果を収めたデータベースだから、
結果をいじっても問題解決にはならない
設定は各アプリ製作者が作っているものだから、
製作者以外の人間にできる事は、アプリをアンインストールする事だけ
設定にも様々な依存関係があるから、
アプリの内容も分からない人が、ある設定を変えても、どう作用するか分からない
例えば、アプリのメモリが解放されなくなって、
他のアプリも動かなくなるかも
それに設定を変えても、再起動しないと有効にならないかも知れないし、
再起動すると、設定が元に戻るかも知れない
OS 起動時の処理に、設定読み込みを登録しているかも知れない
Windows の仕組みは知らないけど、
レジストリはその結果を収めたデータベースだから、
結果をいじっても問題解決にはならない
設定は各アプリ製作者が作っているものだから、
製作者以外の人間にできる事は、アプリをアンインストールする事だけ
設定にも様々な依存関係があるから、
アプリの内容も分からない人が、ある設定を変えても、どう作用するか分からない
例えば、アプリのメモリが解放されなくなって、
他のアプリも動かなくなるかも
それに設定を変えても、再起動しないと有効にならないかも知れないし、
再起動すると、設定が元に戻るかも知れない
OS 起動時の処理に、設定読み込みを登録しているかも知れない
397デフォルトの名無しさん
2022/06/21(火) 09:15:38.14ID:lQ/zAxwG ウダウダと一体何の話をしてるんだ
いいからStop-ServiceとSet-Service使えよ
ただ老人がじゃれ合いたいだけなのか?
いいからStop-ServiceとSet-Service使えよ
ただ老人がじゃれ合いたいだけなのか?
398デフォルトの名無しさん
2022/06/21(火) 11:49:55.72ID:+f2eC/vV こんな辺境にまでやべーやつ | Out-Null
399デフォルトの名無しさん
2022/06/22(水) 20:51:18.50ID:At4JlVSH >>375
管理者やSYSTEMじゃなくてTrustedInstallerとして実行しても駄目か?
もちろんレジストリをいじるんじゃんなくてSet-Serviceを使うんだぞ
もう見てないかもしれんが
管理者やSYSTEMじゃなくてTrustedInstallerとして実行しても駄目か?
もちろんレジストリをいじるんじゃんなくてSet-Serviceを使うんだぞ
もう見てないかもしれんが
400デフォルトの名無しさん
2022/06/22(水) 22:28:41.71ID:OsaOMnRZ わざわざ召喚しようとする馬鹿発見伝
401デフォルトの名無しさん
2022/06/24(金) 13:29:04.40ID:VuoDyj+3 最近foreach文のコレクションの要素を受け取る変数の名前をつけるのが
めんどくさくって
for文のカウンター変数の名前に i を使うのはよくありますが
foreachにも同じような定石ってありますか?
めんどくさくって
for文のカウンター変数の名前に i を使うのはよくありますが
foreachにも同じような定石ってありますか?
402デフォルトの名無しさん
2022/06/24(金) 13:47:20.90ID:4Qrsm7mD aオブジェクト名
403デフォルトの名無しさん
2022/06/24(金) 14:25:06.98ID:K2we1Lar e
404デフォルトの名無しさん
2022/06/24(金) 20:56:03.77ID:EMaN3eAt Item
405デフォルトの名無しさん
2022/06/24(金) 23:55:58.07ID:/S8ogjuv item, element
406デフォルトの名無しさん
2022/06/26(日) 07:43:19.31ID:G39l7ngg 例えば$url = "https://yyyy.xxx/aaa/bbbb/2/"があり、最後の[2/]をカウンタを使ってアクセスしたいとおもいます。
その際、$nextUrl = ($url -replace ".{2}$") + $cnt + "`\"
で行けると思ったのですが、何か間違えていますでしょうか?
その際、$nextUrl = ($url -replace ".{2}$") + $cnt + "`\"
で行けると思ったのですが、何か間違えていますでしょうか?
407デフォルトの名無しさん
2022/06/26(日) 08:16:14.03ID:JGEtGMnz -replaceの使い方を間違えてる
408デフォルトの名無しさん
2022/06/26(日) 11:32:39.54ID:G39l7ngg replaceですか。ありがとうございます
409デフォルトの名無しさん
2022/06/29(水) 00:00:51.24ID:x2p/lm6W 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
なぜうまくいかないのか謎。
----------------------------
$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
なぜうまくいかないのか謎。
410デフォルトの名無しさん
2022/06/29(水) 00:51:19.50ID:cjQj2yfD $col のnew-object生成をforeach{}内に移動してみては
411デフォルトの名無しさん
2022/06/29(水) 07:19:16.62ID:x2p/lm6W412デフォルトの名無しさん
2022/06/29(水) 08:20:00.62ID:8GN1KOCk PSObjectは参照型
ArrayListに追加されるのはオブジェクトそのものじゃなくてオブジェクトの参照だけ
ArrayListに追加されるのはオブジェクトそのものじゃなくてオブジェクトの参照だけ
413デフォルトの名無しさん
2022/06/29(水) 09:10:01.99ID:ofsaM31D >>412
完全に理解しました。thx
完全に理解しました。thx
414デフォルトの名無しさん
2022/06/29(水) 14:16:08.11ID:SZ5j8L6g 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
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
415デフォルトの名無しさん
2022/06/29(水) 21:06:08.62ID:h+5hcb7e PSCustomObjectは積極的に使っていいものかどうか判断できない
結局C#でクラスや構造体宣言して使った方がいい気がするし
Powershellで作成したPSCustomObjectを、同ソースに埋め込んだC#コード側から参照する方法ってある?
結局C#でクラスや構造体宣言して使った方がいい気がするし
Powershellで作成したPSCustomObjectを、同ソースに埋め込んだC#コード側から参照する方法ってある?
416デフォルトの名無しさん
2022/06/29(水) 21:46:04.47ID:4kwBO65f >>415
dynamic
dynamic
417デフォルトの名無しさん
2022/06/30(木) 01:46:52.84ID:LVSNczoT >>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)追加する使い方なら意外と手軽に使える。
日本語カラム名の使用も問題ないし。
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)追加する使い方なら意外と手軽に使える。
日本語カラム名の使用も問題ないし。
418デフォルトの名無しさん
2022/07/06(水) 09:44:42.33ID:L+R7c7Gd -replaceと-ireplaceの違いって分かりますか?
まだ勉強中ですが、当然のように出てきて両方同じ説明しかされてないので気になって調べてみてもどこにも解説がなくて…
扱える値の範囲が違ったりとかするんでしょうか?
普通はどっちを使うものなんですか?
まだ勉強中ですが、当然のように出てきて両方同じ説明しかされてないので気になって調べてみてもどこにも解説がなくて…
扱える値の範囲が違ったりとかするんでしょうか?
普通はどっちを使うものなんですか?
419デフォルトの名無しさん
2022/07/06(水) 11:05:49.65ID:MXaUuSJv 1.完全に理解した←初心者
2.チョットワカル←中級者
3.全然判らん←上級者
2.チョットワカル←中級者
3.全然判らん←上級者
420デフォルトの名無しさん
2022/07/06(水) 11:41:17.81ID:HSp/EaB5 >>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
そこんとこ間違ってもらっちゃ困るときは ireplace か creplace
普通がどっちかは分かりません。
https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-7.2
既定では、 -replace 演算子では大文字と小文字が区別されません。
大文字と小文字を区別するには、次を使用します -creplace。
明示的に大文字と小文字を区別しないようにするには、次を使用します -ireplace。
replaceの既定動作を変更する方法は知りません。
大文字小文字を区別しようがしまいがどっちでもいいときは replace
そこんとこ間違ってもらっちゃ困るときは ireplace か creplace
普通がどっちかは分かりません。
421デフォルトの名無しさん
2022/07/06(水) 13:11:25.93ID:c6fRPAAn 例えば、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", "みかん"] ]
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", "みかん"] ]
422デフォルトの名無しさん
2022/07/06(水) 13:16:19.97ID:iisDFTgh423デフォルトの名無しさん
2022/07/06(水) 20:34:21.87ID:428zggiP 迷ったら明示でいいと思う
424デフォルトの名無しさん
2022/07/06(水) 22:49:51.62ID:pVM7wVd2 パワシェルの-replaceは勝手に右辺を正規表現と解釈するから
それが必要ない場合は文字列.Replace()のがいいよ
それが必要ない場合は文字列.Replace()のがいいよ
425デフォルトの名無しさん
2022/07/07(木) 08:47:36.53ID:fDYvmpy4426デフォルトの名無しさん
2022/07/08(金) 13:33:50.89ID:EP1tRVB4 Windowsでコマンドラインシェルとして使う場合に
外部コマンド引数のクオーテーションの振る舞いをなんとかして欲しい
例えばpwshを外部コマンドとして使うとして
pwsh -nop -c "`$a = 'abc'; `$a | out-host"
は期待通り abc が出力されるのに
pwsh -nop -c '$a = "abc"; $a | out-host'
はエラーになるの不便過ぎる
外部コマンド引数のクオーテーションの振る舞いをなんとかして欲しい
例えばpwshを外部コマンドとして使うとして
pwsh -nop -c "`$a = 'abc'; `$a | out-host"
は期待通り abc が出力されるのに
pwsh -nop -c '$a = "abc"; $a | out-host'
はエラーになるの不便過ぎる
427デフォルトの名無しさん
2022/07/08(金) 20:51:35.26ID:Bjqd/A21 補完が有効になってやっとまともに使えるようになったなよくこんなクソ長くて覚え辛くて入力し辛いコマンドレットなんて使ってるよなお前ら
しかしMSって言語やフレームワークでもそうだが命名規則にセンスねーゎ
なんでnpmやgitみたいに使いやすく作れないのか壊滅的にセンスねーゎ
しかしMSって言語やフレームワークでもそうだが命名規則にセンスねーゎ
なんでnpmやgitみたいに使いやすく作れないのか壊滅的にセンスねーゎ
428デフォルトの名無しさん
2022/07/08(金) 21:48:06.89ID:SkLqj5eb429デフォルトの名無しさん
2022/07/08(金) 22:10:30.33ID:EP1tRVB4 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.
これほんと何がどうしてこうなるの?
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.
これほんと何がどうしてこうなるの?
430デフォルトの名無しさん
2022/07/08(金) 23:27:21.05ID:UIv0TQaX pwsh.exeへのコマンドラインとして解釈されるから、まずOSのルールに従って引数リストが次のように分解される
-nop
-c
'$a
=
abc
;
$a
|
out-host'
pwsh.exeの内側でコマンド文字列を再結合した時点では既にダブルクォートが失われているという寸法
-nop
-c
'$a
=
abc
;
$a
|
out-host'
pwsh.exeの内側でコマンド文字列を再結合した時点では既にダブルクォートが失われているという寸法
431デフォルトの名無しさん
2022/07/08(金) 23:35:00.16ID:v6YmQ/+d PS内で呼び出すならスクリプトブロックでよくね?
432デフォルトの名無しさん
2022/07/08(金) 23:40:56.26ID:UIv0TQaX 無茶言うなよ…
pwshの-cより右ならスクリプト扱いで、cmdやその他大勢の右ならOS解釈? pwshという同名のオレオレアプリの類だったときもスクリプト扱い?
言語仕様の一貫性的にあかんことになるだろ常考
pwshの-cより右ならスクリプト扱いで、cmdやその他大勢の右ならOS解釈? pwshという同名のオレオレアプリの類だったときもスクリプト扱い?
言語仕様の一貫性的にあかんことになるだろ常考
433デフォルトの名無しさん
2022/07/08(金) 23:49:47.55ID:cCHwpa3p もしかして
リモートコマンド
リモートコマンド
434デフォルトの名無しさん
2022/07/08(金) 23:52:42.34ID:PFPNTTsE >>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にコンパイルした際のコンパイラの仕様。)
「'$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にコンパイルした際のコンパイラの仕様。)
435デフォルトの名無しさん
2022/07/09(土) 00:09:26.45ID:qWQ5DRIr Linuxのpowershellなら
PS> pwsh -nop -c '$a = "abc"; $a | out-host'
abc
になるんだろうな
PS> pwsh -nop -c '$a = "abc"; $a | out-host'
abc
になるんだろうな
436デフォルトの名無しさん
2022/07/09(土) 08:04:26.74ID:qWQ5DRIr コマンドプロンプトで
pwsh -nop -c "$a=\"abc\"; $a | out-host"
とするのは " 内部の " をエスケープするように見えて自然に納得できる
Windows版のPowerShellだけ
pwsh -nop -c '$a=\"abc\"; $a | out-host'
とするのは ' 内部の " をエスケープさせられて気持ち悪すぎる
おまけにLinux版でこう書くと動かないんでしょ
pwsh -nop -c "$a=\"abc\"; $a | out-host"
とするのは " 内部の " をエスケープするように見えて自然に納得できる
Windows版のPowerShellだけ
pwsh -nop -c '$a=\"abc\"; $a | out-host'
とするのは ' 内部の " をエスケープさせられて気持ち悪すぎる
おまけにLinux版でこう書くと動かないんでしょ
437デフォルトの名無しさん
2022/07/09(土) 10:32:21.09ID:d4+i07Ea >>436
コマンドプロンプト(cmd)だともっと高難易度の問題がある。
cmdのメタキャラ(&, |, <, >など)が偶数番目の「"」の後にあるとだめとか、
powershellコンソール以上に問題有り。
pwsh -nop -c "$a=\"&abc\"; $a | out-host"
同一のシェル名(pwsh)であっても、OSによって他プロセス起動の作法が違うのは仕方ないと思う。
国や地域で言葉や文化が違っても仕方ない感じ。
(POSIXとかに規定あればば別だが。)
例えば「ping」を動かすだけにしても結局オプションも挙動も違う訳だし、
現時点では他プロセス使う時点で、移植性考慮はプログラマの領分かな〜と思ってる。
コマンドプロンプト(cmd)だともっと高難易度の問題がある。
cmdのメタキャラ(&, |, <, >など)が偶数番目の「"」の後にあるとだめとか、
powershellコンソール以上に問題有り。
pwsh -nop -c "$a=\"&abc\"; $a | out-host"
同一のシェル名(pwsh)であっても、OSによって他プロセス起動の作法が違うのは仕方ないと思う。
国や地域で言葉や文化が違っても仕方ない感じ。
(POSIXとかに規定あればば別だが。)
例えば「ping」を動かすだけにしても結局オプションも挙動も違う訳だし、
現時点では他プロセス使う時点で、移植性考慮はプログラマの領分かな〜と思ってる。
438デフォルトの名無しさん
2022/07/09(土) 10:48:49.98ID:d4+i07Ea 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"')
自分だとほぼ下記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"')
439デフォルトの名無しさん
2022/07/09(土) 10:59:09.60ID:qWQ5DRIr MSYS2のbashもWindows上のコマンドラインシェルだけど
pwsh -nop -c "\$a = 'abc'; \$a | out-host"
pwsh -nop -c '$a = "abc"; $a | out-host'
のどちらでも動くんだよね
PowerShellには頑張って欲しい
pwsh -nop -c "\$a = 'abc'; \$a | out-host"
pwsh -nop -c '$a = "abc"; $a | out-host'
のどちらでも動くんだよね
PowerShellには頑張って欲しい
440デフォルトの名無しさん
2022/07/09(土) 14:41:14.65ID:OGG0CV73 わざわざProcessStartInfo使うとかめんどくさいわ
Start-Processでいい
Start-Process -FilePath 'powershell.exe' -ArgumentList '-nop -c "$a = \"abc\"; $a | out-host"' -NoNewWindow -Wait
Start-Processでいい
Start-Process -FilePath 'powershell.exe' -ArgumentList '-nop -c "$a = \"abc\"; $a | out-host"' -NoNewWindow -Wait
441デフォルトの名無しさん
2022/07/09(土) 21:16:37.86ID:d4+i07Ea ProcessStartInfoが面倒なのは同意。
Start-Processで済む時は使う事もあって
大体はUseShellExecute = $trueの時かな。
Start-Processを使わない一番の理由は-Redirect*がファイルパス指定な事。
出力を無加工でファイル出力したい事がまずないので使いづらい。
なんで-PassThruのProcessオブジェクトの出力制御変更のスイッチじゃないのか。
標準出力・エラーを同時に制御するとデッドロックしやすいからかな。
Start-Processがその辺うまい事制御してくれたらスクリプトでも使うんだけど。
Start-Processで済む時は使う事もあって
大体はUseShellExecute = $trueの時かな。
Start-Processを使わない一番の理由は-Redirect*がファイルパス指定な事。
出力を無加工でファイル出力したい事がまずないので使いづらい。
なんで-PassThruのProcessオブジェクトの出力制御変更のスイッチじゃないのか。
標準出力・エラーを同時に制御するとデッドロックしやすいからかな。
Start-Processがその辺うまい事制御してくれたらスクリプトでも使うんだけど。
442デフォルトの名無しさん
2022/07/09(土) 21:55:59.58ID:0vXUA52p コマンドラインパラメーターの処理はexeをビルドした処理系のスタートアップコードに依存するのだ
MSのC/C++やMingwとかで微妙に変わってくるのだガハハ
WindowsでC/C++/C#の場合argvとかではなくWin32APIのGetCommandLineで取得するのが一番正解に近い
MSのC/C++やMingwとかで微妙に変わってくるのだガハハ
WindowsでC/C++/C#の場合argvとかではなくWin32APIのGetCommandLineで取得するのが一番正解に近い
443デフォルトの名無しさん
2022/07/09(土) 22:06:03.52ID:qWQ5DRIr444デフォルトの名無しさん
2022/07/09(土) 22:40:11.92ID:GKrnmeJx 引数のワイルドカードを展開するかしないかみたいなやつね
445デフォルトの名無しさん
2022/07/09(土) 23:17:22.46ID:d4+i07Ea MSもこの辺の気持ち悪さ・分かりづらさは分かってるみたいで
core v7とかだと環境変数かなんかで、パースルール変更できるんじゃなかったっけ。
Win10のv5.1しか使わないから知らんけど。
core v7とかだと環境変数かなんかで、パースルール変更できるんじゃなかったっけ。
Win10のv5.1しか使わないから知らんけど。
446デフォルトの名無しさん
2022/07/10(日) 00:25:59.02ID:qiFT6lHF 実行順がわかりにくい
447デフォルトの名無しさん
2022/07/10(日) 00:55:31.74ID:KsOikrPY 何言いたいかがわかりにくい
448デフォルトの名無しさん
2022/07/10(日) 01:17:57.68ID:KsOikrPY449デフォルトの名無しさん
2022/07/10(日) 04:27:28.58ID:qiFT6lHF UNIXのシェルスクリプトのマネにならないようにした結果がこれ
450デフォルトの名無しさん
2022/07/10(日) 04:30:45.24ID:qiFT6lHF PowerShellは、記号に独自の意味を持たせているから、PowerShell職人を養成しないと使いこなせない。
451デフォルトの名無しさん
2022/07/10(日) 09:49:01.94ID:os7PFybL PowerShell in ActionにはUNIXシェルを参考にしたっていろんな所に書いてあるけど
たとえば比較演算子とか
たとえば比較演算子とか
452デフォルトの名無しさん
2022/07/10(日) 10:20:51.27ID:j6DdFbos powershellはPerlの匂いがする
俺が好きになった理由はここ
俺が好きになった理由はここ
453デフォルトの名無しさん
2022/07/10(日) 20:59:21.65ID:KsOikrPY454デフォルトの名無しさん
2022/07/10(日) 21:53:38.94ID:bG/pnkmn powershellの記号が特殊とかはあまり思わないな
それより配列の扱いがトリッキーとかの方が職人の養成が必要と思う
それより配列の扱いがトリッキーとかの方が職人の養成が必要と思う
455デフォルトの名無しさん
2022/07/10(日) 22:11:42.01ID:PiYySnCe ファイル名に[]が含まれてて苦労した人なのかなと思った
456デフォルトの名無しさん
2022/07/10(日) 22:53:56.17ID:qiFT6lHF >>453
バッチファイルとの相性が最悪なのに気づかないとは情けないよ、あんた。
バッチファイルとの相性が最悪なのに気づかないとは情けないよ、あんた。
457デフォルトの名無しさん
2022/07/10(日) 22:55:51.37ID:qiFT6lHF >>451
あらゆる言語を参考にして、いろいろ混ぜ込んで、奇妙奇天烈なものになってしまった。
あらゆる言語を参考にして、いろいろ混ぜ込んで、奇妙奇天烈なものになってしまった。
458デフォルトの名無しさん
2022/07/10(日) 23:58:19.25ID:RTsqHO1/ まあ最大の問題は、空白をトークンの区切り、改行を入力に終わりとしたことだな
459デフォルトの名無しさん
2022/07/11(月) 00:03:16.90ID:bX2QAhdS 変数のスコープが他と違うPowershellには何も期待してない
グローバル変数を更新したつもりがローカル変数と見なされたりして使い難すぎる
グローバルデータを全部.NETのコンテナに逃がしてようやく使えるようになった
グローバル変数を更新したつもりがローカル変数と見なされたりして使い難すぎる
グローバルデータを全部.NETのコンテナに逃がしてようやく使えるようになった
460デフォルトの名無しさん
2022/07/11(月) 00:04:59.61ID:vt1vW9IA ファイルや文字列の操作の構文がヘンテコすぎる
461デフォルトの名無しさん
2022/07/11(月) 01:41:49.71ID:4UtqkfgJ 超ヘンテコなJavaScriptだって一世を風靡したんだからPowershellだっていけるし(震え声
462デフォルトの名無しさん
2022/07/11(月) 03:32:17.37ID:vt1vW9IA >>461
あんたPowerShellをほどんど知らないでしょ?
あんたPowerShellをほどんど知らないでしょ?
463デフォルトの名無しさん
2022/07/11(月) 07:53:28.56ID:3aArSxtS464デフォルトの名無しさん
2022/07/11(月) 09:42:24.64ID:zwDcIdQY465デフォルトの名無しさん
2022/07/11(月) 10:44:52.35ID:KonxbxUI あんた
あのこの
なんなのさ
あのこの
なんなのさ
466デフォルトの名無しさん
2022/07/11(月) 11:27:13.34ID:4o6o7MFx おらシェル子のこどほどんどしらねっちゃ
467デフォルトの名無しさん
2022/07/11(月) 13:10:07.01ID:ekYGS06D そもそもpsでスクリプト使うならバッチじゃなくてps1だろ
468デフォルトの名無しさん
2022/07/11(月) 20:50:06.93ID:M3Mn448S >>460
どこがどうヘンテコって思い込んでるんだ?
どこがどうヘンテコって思い込んでるんだ?
469デフォルトの名無しさん
2022/07/12(火) 00:36:46.01ID:XdROtN2x Perlなんかもヘンテコって思ってれば筋は通る
470デフォルトの名無しさん
2022/07/14(木) 22:41:31.83ID:ztzbKaJ8 久々にvbsで書いたらめっちゃ素直でスラスラ書けるわ
Powershellはせめてレキシカルスコープで作り直してくれ
クラス使えって?
Powershellはせめてレキシカルスコープで作り直してくれ
クラス使えって?
471デフォルトの名無しさん
2022/07/15(金) 10:39:19.02ID:y/m5s/RL VBSはクソだろ
https://twitter.com/Benshi_Orator/status/1546400388680945665
https://twitter.com/5chan_nel (5ch newer account)
https://twitter.com/Benshi_Orator/status/1546400388680945665
https://twitter.com/5chan_nel (5ch newer account)
472デフォルトの名無しさん
2022/07/15(金) 12:26:17.41ID:nJv/8gNm473デフォルトの名無しさん
2022/07/15(金) 13:13:05.28ID:Wgy0KDme ダイナミックスコープだったような
474デフォルトの名無しさん
2022/07/15(金) 13:20:06.85ID:Wgy0KDme 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
これにより、動的スコープの苦痛が少し軽減されます。
しかし、どうすればコピーオンライトを回避できますか?
しかし、私が驚いたもう1つの点は、変数が内部スコープ内でコピーオンライトとして動作することです。
$array=@("g")
function foo() {
$array += "h" Write-Host $array
}
& { $array +="s" Write-Host $array }
foo Write-Host $array
出力は次のとおりです。
g s
g h
g
これにより、動的スコープの苦痛が少し軽減されます。
しかし、どうすればコピーオンライトを回避できますか?
475デフォルトの名無しさん
2022/07/15(金) 13:22:56.94ID:Wgy0KDme これの解決策
([ref]$array).Value += "h"
ちとうんこすぎるね
([ref]$array).Value += "h"
ちとうんこすぎるね
476デフォルトの名無しさん
2022/07/15(金) 14:34:08.02ID:ROJrTMPq コピーオンライトじゃなくてローカル変数が新しく定義されてるだけでは
動的スコープが嫌ならGetNewClosure()を呼べ
[PSv2]PowerShellでクロージャ&カリー化
https://winscript.jp/powershell/204
ScriptBlock.GetNewClosure Method
https://docs.microsoft.com/en-us/dotnet/api/system.management.automation.scriptblock.getnewclosure
動的スコープが嫌ならGetNewClosure()を呼べ
[PSv2]PowerShellでクロージャ&カリー化
https://winscript.jp/powershell/204
ScriptBlock.GetNewClosure Method
https://docs.microsoft.com/en-us/dotnet/api/system.management.automation.scriptblock.getnewclosure
477デフォルトの名無しさん
2022/07/15(金) 16:26:41.50ID:mFZqR7Di せめて問題を理解してからレスしろよ
この動的スコープとは何ですか?
ほとんどのプログラムは、理解しやすいため、レキシカルとも呼ばれる静的スコープを使用します。ソースコードを見ると、範囲内にあるものがわかります。Pythonの例では、スコープ内のxの唯一の値はxのグローバル値です。
対照的に、PowerShellは動的スコープを使用します。このモデルでは、スコープスタックに基づいて実行時に変数を検索します。関数を呼び出すたびに、新しいスコープを作成し、すべての値を親スコープからそのスコープにコピーします。PowerShellの例では、printXがsetAndprintXから呼び出されると、setAndprintXスコープで設定された$xの値を取得します。
なぜ動的スコープが必要なのですか?
字句スコープよりも動的スコープを選択する理由について、適切な説明を思い付くことができません。
「健康は病人だけが見ることができる王冠です」
この動的スコープとは何ですか?
ほとんどのプログラムは、理解しやすいため、レキシカルとも呼ばれる静的スコープを使用します。ソースコードを見ると、範囲内にあるものがわかります。Pythonの例では、スコープ内のxの唯一の値はxのグローバル値です。
対照的に、PowerShellは動的スコープを使用します。このモデルでは、スコープスタックに基づいて実行時に変数を検索します。関数を呼び出すたびに、新しいスコープを作成し、すべての値を親スコープからそのスコープにコピーします。PowerShellの例では、printXがsetAndprintXから呼び出されると、setAndprintXスコープで設定された$xの値を取得します。
なぜ動的スコープが必要なのですか?
字句スコープよりも動的スコープを選択する理由について、適切な説明を思い付くことができません。
「健康は病人だけが見ることができる王冠です」
478デフォルトの名無しさん
2022/07/15(金) 17:59:02.69ID:jPbc5odD function foo() {
$global:array += "h" Write-Host $array
}
& { $global:array +="s" Write-Host $array }
ってやるだけじゃねーの?
そもそもグローバル変数自体はそれ程使わん、ましてや関数やスクリプトブロックで更新なんてほぼやらん
$global:array += "h" Write-Host $array
}
& { $global:array +="s" Write-Host $array }
ってやるだけじゃねーの?
そもそもグローバル変数自体はそれ程使わん、ましてや関数やスクリプトブロックで更新なんてほぼやらん
479デフォルトの名無しさん
2022/07/15(金) 21:33:28.03ID:Keau4pUF >>477
PowerShell in ActionによるとダイナミックスコープはUNIXシェルを参考にしたらしい
PowerShell in ActionによるとダイナミックスコープはUNIXシェルを参考にしたらしい
480デフォルトの名無しさん
2022/07/15(金) 23:56:32.68ID:avBUMPl6 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
$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
481デフォルトの名無しさん
2022/07/16(土) 13:19:21.19ID:3YCfDQK3482デフォルトの名無しさん
2022/07/16(土) 14:25:05.61ID:QBrOblFw483デフォルトの名無しさん
2022/07/16(土) 14:36:33.24ID:3YCfDQK3 >>482
えーつまり$array += "h"は文字列への追加じゃなくて
やってることは$array = $array + "h"相当で新規に文字列のインスタンスとローカル変数が作成されるってことなの?
$arrayに対してのAdd相当は$global:的な装飾子以外にないの?
えーつまり$array += "h"は文字列への追加じゃなくて
やってることは$array = $array + "h"相当で新規に文字列のインスタンスとローカル変数が作成されるってことなの?
$arrayに対してのAdd相当は$global:的な装飾子以外にないの?
484デフォルトの名無しさん
2022/07/16(土) 15:02:15.96ID:m/XBj/Ao メインclerだけど、動的静的スコープの使い分けがclの武器と刷り込まれてた
評判悪いのか…
呼び出し側から振り分けられるのは便利では?出力先とか
評判悪いのか…
呼び出し側から振り分けられるのは便利では?出力先とか
485デフォルトの名無しさん
2022/07/16(土) 15:49:49.15ID:OVIs5jsH lispのようにメモリ上フラットにオブジェクトが住む思想(~pwshのfunction:プロバイダ)だと、動的スコープになるのが自然では
レキシカルな文脈が無いのだから
レキシカルな文脈が無いのだから
486デフォルトの名無しさん
2022/07/16(土) 15:54:08.82ID:yus9SEVI Powershellの配列は固定長だよ
追加はできない
+=演算子はその見た目のイメージ通り、新しい配列による再代入を伴う
これはスコープとは関係ない問題
追加はできない
+=演算子はその見た目のイメージ通り、新しい配列による再代入を伴う
これはスコープとは関係ない問題
487デフォルトの名無しさん
2022/07/16(土) 15:57:07.03ID:m/XBj/Ao ミュータブルかイミュータブルか、あと参照の話がごっちゃになってるよね
GetNewClosureはclのfunctionフォームと等価だね
GetNewClosureはclのfunctionフォームと等価だね
488デフォルトの名無しさん
2022/07/16(土) 16:10:18.66ID:XIhDxiQx >>479
unixシェルもpwshもclもそうだけど、関数定義をズラズラっとダンプできて、それをちゃんと読み戻せる言語は原理的にレキシカルスコープでは有り得ない
(暗黙のうちにletやクロージャ生成を行う)ブロックぽい構文でレキシカルスコープを模倣することは可能だけど
unixシェルもpwshもclもそうだけど、関数定義をズラズラっとダンプできて、それをちゃんと読み戻せる言語は原理的にレキシカルスコープでは有り得ない
(暗黙のうちにletやクロージャ生成を行う)ブロックぽい構文でレキシカルスコープを模倣することは可能だけど
489デフォルトの名無しさん
2022/07/16(土) 17:23:13.80ID:3YCfDQK3 LISP族はletか何かで変数に対しての宣言を必ずするからダイナミックでも違和感ないでしょ
Powershellの違和感は暗黙的に変数の意味が代わるところじゃないかな
Powershellの違和感は暗黙的に変数の意味が代わるところじゃないかな
490デフォルトの名無しさん
2022/07/17(日) 18:41:53.37ID:zSvUsLU3 コード適当に書いていってある程度の規模になった頃にそろそそ関数化でもすっか!
ってなった時に下手にグローバル変数更新してたりすると即はまるなコレ
しかも一見何が悪いのかさっぱり判らないという
Powershellコーティング十か条でも壁に貼っとかないとな
ってなった時に下手にグローバル変数更新してたりすると即はまるなコレ
しかも一見何が悪いのかさっぱり判らないという
Powershellコーティング十か条でも壁に貼っとかないとな
491デフォルトの名無しさん
2022/07/17(日) 21:43:25.29ID:dCc2dzlx 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
https://docs.microsoft.com/ja-jp/previous-versions/dd315289(v=technet.10)
PowerShell のスコープ完全に理解した
https://tech.blog.aerie.jp/entry/powershell-advent-calendar-2018-18
492デフォルトの名無しさん
2022/07/17(日) 22:10:40.71ID:CGK3IbQv いや下手にグローバル変数更新はできんだろ、参照だけ
493デフォルトの名無しさん
2022/07/17(日) 22:11:26.62ID:LMlAcWpL494デフォルトの名無しさん
2022/07/17(日) 23:45:40.91ID:zSvUsLU3 >>491
MSの自動翻訳は的が外れてて知りたいことは何も書かれてない…
個人のurlの人は説明が無茶苦茶で到底理解できてると思えない中身。スコープでググってこれが引っかかるなら悪質
結局のところ、参照渡しや参照書き換えの仕方を知ってればスコープはほぼ気にしなくていいという結論に至った
値渡しだけで済む書き方ができればなお良い
MSの自動翻訳は的が外れてて知りたいことは何も書かれてない…
個人のurlの人は説明が無茶苦茶で到底理解できてると思えない中身。スコープでググってこれが引っかかるなら悪質
結局のところ、参照渡しや参照書き換えの仕方を知ってればスコープはほぼ気にしなくていいという結論に至った
値渡しだけで済む書き方ができればなお良い
495デフォルトの名無しさん
2022/07/18(月) 00:19:34.95ID:+HoBYfWN 結論出てよかったね
496デフォルトの名無しさん
2022/07/18(月) 21:25:16.34ID:0lMMqLG2 スコープの話をしたいわけじゃなかったのなら最初からそう言ってほしかった
497デフォルトの名無しさん
2022/07/18(月) 21:46:18.36ID:RQQtBm3R 文句付けたいけど根拠となる知識は無いから
498デフォルトの名無しさん
2022/07/20(水) 22:59:35.63ID:DVSzMIGJ Pesterって使ってる?
使ってないとしたらUTどうしてる?
証跡としてコードカバレッジ出す目的に今も使ってるけどPowerShellの言語としてとか実行ホスト(exe)の機能ではなく
式単位にブレークポイント仕掛けて実現してるんだかで処理速度も普段よりかなり遅いし、あんまり便利って気がしない。
(うろ覚え)記述によってはうまくコードカバレッジに反映されない事もあった気がする。
そんとき忙しくて詳しく調査してらんなくてコードの方変えた気がする。
確かif文の条件内で変数に代入したりしてる場合だったかな。
while($null -ne ($line = $stream.ReadLine())){}みたいなのだったかな。
使ってないとしたらUTどうしてる?
証跡としてコードカバレッジ出す目的に今も使ってるけどPowerShellの言語としてとか実行ホスト(exe)の機能ではなく
式単位にブレークポイント仕掛けて実現してるんだかで処理速度も普段よりかなり遅いし、あんまり便利って気がしない。
(うろ覚え)記述によってはうまくコードカバレッジに反映されない事もあった気がする。
そんとき忙しくて詳しく調査してらんなくてコードの方変えた気がする。
確かif文の条件内で変数に代入したりしてる場合だったかな。
while($null -ne ($line = $stream.ReadLine())){}みたいなのだったかな。
499デフォルトの名無しさん
2022/07/20(水) 23:06:57.28ID:ZWOh364P PowerShellなんか想定した運用で動きゃいいでしょ
真面目にテスト書くようなものはC#で書きなさい
真面目にテスト書くようなものはC#で書きなさい
500デフォルトの名無しさん
2022/07/21(木) 22:42:00.80ID:o92gVnUV 以下のごく普通?の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
'{"":"あーあ" }' | 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
501デフォルトの名無しさん
2022/07/21(木) 23:21:49.49ID:hK8T/Nr3 >>500
PowerShell Core ではバグとして修正されてるらしい
https://github.com/PowerShell/PowerShell/issues/1755
PowerShell Core は使ったことないが、Windows PowerShellが認めるJSONは独特なので外部とのデータ連携に使うには向いてない印象。
PowerShellからPowerShellへの受け渡しなら苦労は少ないけど、それならJSONで入出力する必要がないことが多い。
PowerShell Core ではバグとして修正されてるらしい
https://github.com/PowerShell/PowerShell/issues/1755
PowerShell Core は使ったことないが、Windows PowerShellが認めるJSONは独特なので外部とのデータ連携に使うには向いてない印象。
PowerShellからPowerShellへの受け渡しなら苦労は少ないけど、それならJSONで入出力する必要がないことが多い。
502デフォルトの名無しさん
2022/07/22(金) 00:05:10.76ID:DccLQn0d 名前なしの値ってjson採用してるアプリで普通に使われるんだよね
困ったわい
困ったわい
503デフォルトの名無しさん
2022/07/22(金) 01:13:11.32ID:bxySyujx JavaScriptってプロパティ名で空文字列が使えるもんなあ
JavaScriptの仕様がファンキーすぎる気がしないでもない
JavaScriptの仕様がファンキーすぎる気がしないでもない
504デフォルトの名無しさん
2022/07/27(水) 19:10:35.01ID:LaxYcXsV ハッシュテーブルの実装的には問題ないんだろうか?
どれとは言わんがある言語のハッシュテーブル実装用のハッシュ関数(種はランダム)に空文字列""通したら恒等的に0なんだが
どれとは言わんがある言語のハッシュテーブル実装用のハッシュ関数(種はランダム)に空文字列""通したら恒等的に0なんだが
505デフォルトの名無しさん
2022/07/27(水) 19:11:49.39ID:C81kwZF2 バッチスレでPowerShell使いなよってアドバイスもらって
GetでJSON取得⇒JSON要素出力がこんなに簡単に出来るなんて感動した
curlコマンドとjqコマンド駆使してやってたのがアホみたいだった
でも構文とコマンドレット覚えるのは面倒
GetでJSON取得⇒JSON要素出力がこんなに簡単に出来るなんて感動した
curlコマンドとjqコマンド駆使してやってたのがアホみたいだった
でも構文とコマンドレット覚えるのは面倒
506デフォルトの名無しさん
2022/07/27(水) 19:50:05.55ID:ATmfTI/o 種を要求するハッシュ関数ってよくあるんか?セキュリティ対策?
ずっと同じ値が帰ってくるならハッシュテーブル的には問題ないかと
ずっと同じ値が帰ってくるならハッシュテーブル的には問題ないかと
507デフォルトの名無しさん
2022/07/27(水) 20:16:25.64ID:xJ8anoa4 >>504 がなんか勘違いしてるんだろうと思う
種なんて聞いたことないし空文字列で 0 を返すのはよくある実装だと思う
種なんて聞いたことないし空文字列で 0 を返すのはよくある実装だと思う
508デフォルトの名無しさん
2022/07/27(水) 20:35:46.87ID:8xZeKJIl >>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で扱かれてるわけで、まあ大丈夫なんでしょう
起動時環境ノイズから勝手に取ってくるのが普通かと
同じハッシュ値持つキーがあると、まあ実装によるが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で扱かれてるわけで、まあ大丈夫なんでしょう
509デフォルトの名無しさん
2022/07/27(水) 20:38:19.25ID:8xZeKJIl >>507
デバッグ用に手動で植える機能はあるはずだよ、マニュアルのどっか見たら書いてるはず、もちろん非推奨だけど
デバッグ用に手動で植える機能はあるはずだよ、マニュアルのどっか見たら書いてるはず、もちろん非推奨だけど
510デフォルトの名無しさん
2022/07/27(水) 20:49:17.30ID:8xZeKJIl 今perl環境無いので記述だけ、v5.8以来ハッシュ関数の種は秘密に植えてるようで、あと人力で植えたい人への植え方
誰か検証たのむ
https://perldoc.jp/docs/perl/5.36.0/perlsec.pod#Algorithmic32Complexity32Attacks
既にwebで流行ってた頃だと思うんだけど大丈夫だったのか
誰か検証たのむ
https://perldoc.jp/docs/perl/5.36.0/perlsec.pod#Algorithmic32Complexity32Attacks
既にwebで流行ってた頃だと思うんだけど大丈夫だったのか
511デフォルトの名無しさん
2022/07/27(水) 20:49:36.14ID:8xZeKJIl 今perl環境無いので記述だけ、v5.8以来ハッシュ関数の種は秘密に植えてるようで、あと人力で植えたい人への植え方
誰か検証たのむ
https://perldoc.jp/docs/perl/5.36.0/perlsec.pod#Algorithmic32Complexity32Attacks
既にwebで流行ってた頃だと思うんだけど大丈夫だったのか
誰か検証たのむ
https://perldoc.jp/docs/perl/5.36.0/perlsec.pod#Algorithmic32Complexity32Attacks
既にwebで流行ってた頃だと思うんだけど大丈夫だったのか
512デフォルトの名無しさん
2022/07/27(水) 20:50:04.66ID:8xZeKJIl 今perl環境無いので記述だけ、v5.8以来ハッシュ関数の種は秘密に植えてるようで、あと人力で植えたい人への植え方
誰か検証たのむ
tps://perldoc.jp/docs/perl/5.36.0/perlsec.pod#Algorithmic32Complexity32Attacks
既にwebで流行ってた頃だと思うんだけど大丈夫だったのか
誰か検証たのむ
tps://perldoc.jp/docs/perl/5.36.0/perlsec.pod#Algorithmic32Complexity32Attacks
既にwebで流行ってた頃だと思うんだけど大丈夫だったのか
513デフォルトの名無しさん
2022/07/27(水) 20:50:41.34ID:8xZeKJIl 今perl環境無いので記述だけ、v5.8以来ハッシュ関数の種は秘密に植えてるようで、あと人力で植えたい人への植え方
誰か検証たのむ
perldoc.jp/docs/perl/5.36.0/perlsec.pod#Algorithmic32Complexity32Attacks
(そのまま貼れない)
既にwebで流行ってた頃だと思うんだけど大丈夫だったのか
誰か検証たのむ
perldoc.jp/docs/perl/5.36.0/perlsec.pod#Algorithmic32Complexity32Attacks
(そのまま貼れない)
既にwebで流行ってた頃だと思うんだけど大丈夫だったのか
514デフォルトの名無しさん
2022/07/27(水) 20:51:20.66ID:8xZeKJIl 連投ごめん
515デフォルトの名無しさん
2022/07/27(水) 21:27:35.49ID:xJ8anoa4 とりあえずマニュアルをちゃんと読むことをお勧めしておく
https://docs.python.org/ja/3/library/functions.html?highlight=hash#hash
https://docs.python.org/ja/3/library/functions.html?highlight=hash#hash
516デフォルトの名無しさん
2022/07/27(水) 21:29:23.20ID:rYm6iVSU で、件のjsの仕様だが、空文字でもよしなにハッシュしてくれるってことかいな?多分
空文字をキーとして使う事に関しては、言語固有のデータ型の概念も絡む
パスカル文字列でもc文字列でも、空文字列自体はいかなるバイト表現も持ち得ない
値がなけりゃ関数にも渡せない
文字数や終端の0埋めバイトごと渡せば値になるが、そこは思想の問題だろうね
空文字をキーとして使う事に関しては、言語固有のデータ型の概念も絡む
パスカル文字列でもc文字列でも、空文字列自体はいかなるバイト表現も持ち得ない
値がなけりゃ関数にも渡せない
文字数や終端の0埋めバイトごと渡せば値になるが、そこは思想の問題だろうね
517デフォルトの名無しさん
2022/07/27(水) 21:36:12.72ID:8xZeKJIl >>515
そこは言語リファレンスであって、リファレンス実装の(c)pythonとは(建前上)関係がない
インタプリタについてはこっち、hash関数のランダム化とどうしても植えたい人用
https://docs.python.org/3/using/cmdline.html#envvar-PYTHONHASHSEED
そこは言語リファレンスであって、リファレンス実装の(c)pythonとは(建前上)関係がない
インタプリタについてはこっち、hash関数のランダム化とどうしても植えたい人用
https://docs.python.org/3/using/cmdline.html#envvar-PYTHONHASHSEED
518デフォルトの名無しさん
2022/07/27(水) 22:08:43.58ID:xJ8anoa4 ああすまん、最近の実装まで追いかけきれてなかったな
なるほど一つ賢くなったわ、ありがとう
なるほど一つ賢くなったわ、ありがとう
519デフォルトの名無しさん
2022/07/27(水) 22:10:01.71ID:ZpfKnwiP 実装のドキュメントもランダム化の有無に関わらず空文字列に0を返す事については触れてないな
まあ実装の詳細も詳細だし、保証する意味も無いから、気になるならソース読むしかない
気になるなら、この実装に問題無いんですか、と元気があるなら問い合わせる案件
まあ実装の詳細も詳細だし、保証する意味も無いから、気になるならソース読むしかない
気になるなら、この実装に問題無いんですか、と元気があるなら問い合わせる案件
520デフォルトの名無しさん
2022/07/27(水) 22:30:36.76ID:Sct47BON とりあえずPythonでhash("")==0なことはundocumentedなので依存するコードは書いちゃダメってことかな
偶々タイプが面倒だったのか、それでもよく見つけたな
一点だけ分かって現実に問題になるかはともかく、理想的なハッシュ関数の振る舞い(=完全にランダムに見える)として好ましくないのは確か
pwshのこういう面白ネタないかな、まあまだまだ開発中なので山ほどありそうなのがアレだけど
偶々タイプが面倒だったのか、それでもよく見つけたな
一点だけ分かって現実に問題になるかはともかく、理想的なハッシュ関数の振る舞い(=完全にランダムに見える)として好ましくないのは確か
pwshのこういう面白ネタないかな、まあまだまだ開発中なので山ほどありそうなのがアレだけど
521デフォルトの名無しさん
2022/07/27(水) 22:32:46.88ID:8xZeKJIl undocumentedはMSのお家芸です
522デフォルトの名無しさん
2022/07/27(水) 22:49:04.75ID:FyEJHrzo 面白そうなのでハッシュ衝突させてみた
d=dict()
d[0]="int 0"
d[""]="nullstr"
print(hash(0), hash(""), d)
0 0 {0: 'int 0', '': 'nullstr'}
たった2個ぶつけて死ぬ事はまあ無いが、いくらか試して中身は予想付いてきた
スレチごめん
d=dict()
d[0]="int 0"
d[""]="nullstr"
print(hash(0), hash(""), d)
0 0 {0: 'int 0', '': 'nullstr'}
たった2個ぶつけて死ぬ事はまあ無いが、いくらか試して中身は予想付いてきた
スレチごめん
523デフォルトの名無しさん
2022/07/27(水) 23:59:51.61ID:su1evgJ+ 面白そうなので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
なんだかなー
$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
なんだかなー
524デフォルトの名無しさん
2022/07/28(木) 00:20:32.59ID:y/Pgitn8 複数のNaNをキーにしたハッシュリテラル書くとInvalidOperation例外投げるな、Duplicate Keys 'NaN' are not allowed...らしい
アサインすると値が上書き
見方によってはハッシュテーブルというアルゴリズムの敗北と言えるかもしれん
困る機会も思いつかないのが幸い
アサインすると値が上書き
見方によってはハッシュテーブルというアルゴリズムの敗北と言えるかもしれん
困る機会も思いつかないのが幸い
525デフォルトの名無しさん
2022/07/28(木) 00:31:26.53ID:8WeqhqUG どのNaNとNaNも互いに値が等しくないからといって、キーがNaNまみれのハッシュ$nansが作れたとして
じゃあ$nans[NaN]はどの値を返せば正解なんだよ
じゃあ$nans[NaN]はどの値を返せば正解なんだよ
526デフォルトの名無しさん
2022/07/28(木) 00:51:33.48ID:y/Pgitn8 抽象データ構造としての連想配列なら、NaNがインデックスとして渡されたら探索すらせずに常に$nullを返せばいい
NaNと-eqなキーは$nansがNaNまみれであるかに関わらず存在し得ないんだから
ハッシュテーブルはあくまで"ほぼ-eq"を使った連想配列の実装
$nan=[double]::NaN;
$ht=@{$nan="abc"}; $h[$nan]
は"abc" を返すはず
NaNと-eqなキーは$nansがNaNまみれであるかに関わらず存在し得ないんだから
ハッシュテーブルはあくまで"ほぼ-eq"を使った連想配列の実装
$nan=[double]::NaN;
$ht=@{$nan="abc"}; $h[$nan]
は"abc" を返すはず
527デフォルトの名無しさん
2022/07/28(木) 01:22:01.83ID:AWyQ+yiB そもそもnanは論理学と数学基礎論の公理、同一律を否定しているので、論理的思考を行っている限り無矛盾に理解することは原理的に不可能だぞ
考えるな、感じろ
考えるな、感じろ
528デフォルトの名無しさん
2022/07/28(木) 13:14:46.86ID:y/Pgitn8 >>505
jqはフィルターとして便利なだけじゃなく、プログラミング言語として非常に面白いと思ってるので、学ぶ価値ありだと思うよ
移行前はcmd+vimで何でもやってたな
vimは安定してwinサポートしてたし、ユニコ以前から常に日本語パッチ供給されてて、強力なテキスト処理とある程度の構造化データ処理もできる入手性よいツールとして稀有だったはず
引数に直接スクリプト渡して非インタラクティブにバッチ処理できるからbatの中身はほぼvim/exスクリプトだった
多分2000年あたりでvim並みの機能かつ日本語サポートもしっかりしてるのはperlくらい
jqはフィルターとして便利なだけじゃなく、プログラミング言語として非常に面白いと思ってるので、学ぶ価値ありだと思うよ
移行前はcmd+vimで何でもやってたな
vimは安定してwinサポートしてたし、ユニコ以前から常に日本語パッチ供給されてて、強力なテキスト処理とある程度の構造化データ処理もできる入手性よいツールとして稀有だったはず
引数に直接スクリプト渡して非インタラクティブにバッチ処理できるからbatの中身はほぼvim/exスクリプトだった
多分2000年あたりでvim並みの機能かつ日本語サポートもしっかりしてるのはperlくらい
529デフォルトの名無しさん
2022/07/28(木) 14:57:01.82ID:HSo5zcUE コードエディタとしては愛用してるけど、vimをコマンドとして使う発想に時代を感じる
530デフォルトの名無しさん
2022/07/28(木) 15:19:13.17ID:HSo5zcUE こんな感じかね
vim -es "g/\W?\|\Wwhere/ s//Where-Object/p" -c wq $profile
こわいから-c wqはしないけど
findstrでパターンマッチ、for /f ... in (file.txt)で行毎にスキャンして置換したのをechoとかやってたな
vim -es "g/\W?\|\Wwhere/ s//Where-Object/p" -c wq $profile
こわいから-c wqはしないけど
findstrでパターンマッチ、for /f ... in (file.txt)で行毎にスキャンして置換したのをechoとかやってたな
531デフォルトの名無しさん
2022/07/28(木) 15:43:37.36ID:y/Pgitn8 for /f "tokens=...delims=...skip=...eol=..."はプレーンな行毎のテーブルの処理には悪くない、明示的にフォーマットを指定してパースするので、むしろ分かりやすいまである
クオートやエスケープの解釈、ダメ文字などイレギュラーに全く対応出来なかったり、/フラグ毎にforの挙動が別コマンドと言えるほど違ったりで、融通が全く効かないのがアレというだけ
for /fで扱いやすいフォーマットで書いて読む閉じた世界に住んでるなら幸せ
クオートやエスケープの解釈、ダメ文字などイレギュラーに全く対応出来なかったり、/フラグ毎にforの挙動が別コマンドと言えるほど違ったりで、融通が全く効かないのがアレというだけ
for /fで扱いやすいフォーマットで書いて読む閉じた世界に住んでるなら幸せ
532デフォルトの名無しさん
2022/07/28(木) 16:33:20.60ID:y/Pgitn8 >>530
あーよく見たら$proflleか
フリーフォーマットをfor /fで走査は黒魔術になるな、行をどう分割するにしろ、変数展開時の文字列置換は分割単位毎だし、行内複数マッチの場合どうするのか考えるだけでぞっとする
vimに引数でコマンド渡すにはたとえ単一引数でも-cが必要、兄弟のsedやvi(m)のエイリアスexは専ら引数にコマンドを期待するので-e落として紛れはないけど、vi(m)はその名の通りvisualエディタだからはじめの引数にファイルを期待する
あーよく見たら$proflleか
フリーフォーマットをfor /fで走査は黒魔術になるな、行をどう分割するにしろ、変数展開時の文字列置換は分割単位毎だし、行内複数マッチの場合どうするのか考えるだけでぞっとする
vimに引数でコマンド渡すにはたとえ単一引数でも-cが必要、兄弟のsedやvi(m)のエイリアスexは専ら引数にコマンドを期待するので-e落として紛れはないけど、vi(m)はその名の通りvisualエディタだからはじめの引数にファイルを期待する
533デフォルトの名無しさん
2022/07/29(金) 21:36:58.16ID:HWojhWX3 最近仕事で触ることになって使い方習ったけど全然わからん
534デフォルトの名無しさん
2022/07/29(金) 21:41:36.22ID:wZddRh7F 右も左も分からないなら、とりあえず良く使いそうなコマンドレットはエイリアスが事前に定義されてるので、galで出てくるのを順番に弄り回したりghするといいかも
535デフォルトの名無しさん
2022/07/29(金) 23:32:09.97ID:HWojhWX3 基本文法を覚える前にVB.NETでモジュールメソッド作成して呼び出すやり方覚えたら動けばいいやでそっちばかり使ってしまってなかなか覚えられない
536デフォルトの名無しさん
2022/09/13(火) 01:54:14.48ID:G28B9gdh $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上でも効果があるのかは試してみないと分かりません
こちらの解決法が分かる方が居ましたら是非教えて欲しいです
変更は
$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上でも効果があるのかは試してみないと分かりません
こちらの解決法が分かる方が居ましたら是非教えて欲しいです
537デフォルトの名無しさん
2022/09/13(火) 10:05:14.78ID:3Aj3EGjO プロファイルに記述、じゃだめ?
PS> notepad $PROFILE.CurrentUserAllHosts
PS> notepad $PROFILE.CurrentUserAllHosts
538デフォルトの名無しさん
2022/09/13(火) 17:28:13.33ID:BFM47HY2 >>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に置き換えられ便利になると思ったのですが残念です
ありがとうございます
$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に置き換えられ便利になると思ったのですが残念です
539デフォルトの名無しさん
2022/09/13(火) 18:34:17.55ID:3Aj3EGjO 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()
}
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()
}
540デフォルトの名無しさん
2022/09/13(火) 18:36:39.73ID:3Aj3EGjO 誤:$proc = [Process]::Start($si)
正:$proc = [Diagnostics.Process]::Start($si)
動作確認してないので他にもあるかも。
正:$proc = [Diagnostics.Process]::Start($si)
動作確認してないので他にもあるかも。
541デフォルトの名無しさん
2022/09/21(水) 00:41:00.54ID:MPN5wMTP 同階層にフォルダツリーA~Zまであり、それぞれのツリーの中身はバラバラです。
それぞれのツリーのCSVを出力したいのですが、やり方がイマイチ分かりません。
CSVにはツリー名、ツリー毎の合計サイズと、ツリー毎に最新更新ファイル(ファイル1つだけ)の日時を抜き出したいです。
PSFolderSizeをインストールして色んなサイトから拝借してコピペの集合体でやってみたのですが、各ツリー内の更新日を取得する部分とフォルダサイズを取得する部分を同時に行う事が私の頭では無理でした。何方かお助け頂けないでしょうか
それぞれのツリーのCSVを出力したいのですが、やり方がイマイチ分かりません。
CSVにはツリー名、ツリー毎の合計サイズと、ツリー毎に最新更新ファイル(ファイル1つだけ)の日時を抜き出したいです。
PSFolderSizeをインストールして色んなサイトから拝借してコピペの集合体でやってみたのですが、各ツリー内の更新日を取得する部分とフォルダサイズを取得する部分を同時に行う事が私の頭では無理でした。何方かお助け頂けないでしょうか
542デフォルトの名無しさん
2022/09/21(水) 17:45:18.14ID:xipfHTvE ツリーて何だ?
フォルダに階層があってその中全部見たいということならGet-ChildItem -Recurseだぞ
フォルダに階層があってその中全部見たいということならGet-ChildItem -Recurseだぞ
543デフォルトの名無しさん
2022/09/21(水) 17:57:09.50ID:Wu29T3MH ・コード貼ってバカにされるの嫌
・具体例挙げるなど仕様詳細説明面倒臭いから文章から汲み取れ
・全部やれ
こういうことだろう
舐め腐ってるヤツはスルーしときなよ
・具体例挙げるなど仕様詳細説明面倒臭いから文章から汲み取れ
・全部やれ
こういうことだろう
舐め腐ってるヤツはスルーしときなよ
544デフォルトの名無しさん
2022/09/21(水) 18:12:43.86ID:6s8rSvAF 本人はいたって真面目なパターンだろ
ググった情報を組み合わせるスキルがないということは、悲しいかな往々にして他人に要件を一発で伝えるスキルも不足しがち
同時にやるのが無理めに感じるのはパイプを使おうとしてるからだろう
for文とローカル変数で書き変えれば簡単
ググった情報を組み合わせるスキルがないということは、悲しいかな往々にして他人に要件を一発で伝えるスキルも不足しがち
同時にやるのが無理めに感じるのはパイプを使おうとしてるからだろう
for文とローカル変数で書き変えれば簡単
545デフォルトの名無しさん
2022/09/21(水) 18:29:01.13ID:757dNGj4 伝えるスキルうんぬんの前に
> PSFolderSizeをインストールして色んなサイトから拝借してコピペの集合体でやってみたのですが
って言うならそのコード上げろって話
ヘタに説明するより100倍早い
> PSFolderSizeをインストールして色んなサイトから拝借してコピペの集合体でやってみたのですが
って言うならそのコード上げろって話
ヘタに説明するより100倍早い
546デフォルトの名無しさん
2022/09/21(水) 18:53:18.61ID:VZ2CqY7n いやできなかったコード上げても何の説明にもならんから
現状と得たい結果の図示だな
現状と得たい結果の図示だな
547デフォルトの名無しさん
2022/09/21(水) 19:02:42.62ID:6s8rSvAF コードを上げたほうがいいんじゃないかとか図で伝えるべきなんじゃないかとかそういうの引っくるめての伝えるスキルだよ
コミュニケーションは言葉に限定されない
コミュニケーションは言葉に限定されない
548デフォルトの名無しさん
2022/09/21(水) 20:42:50.25ID:9IkSSHYa >CSVにはツリー名、ツリー毎の合計サイズと、ツリー毎に最新更新ファイル(ファイル1つだけ)の日時を抜き出したい
変なモジュール入れんでも数行で書けるからがんばれ
変なモジュール入れんでも数行で書けるからがんばれ
549デフォルトの名無しさん
2022/09/21(水) 22:28:24.59ID:RTQsXz5w パワー!
550デフォルトの名無しさん
2022/09/21(水) 22:31:28.97ID:RTQsXz5w しっかしコマンドレットがコマンドライン実行時とスクリプト内呼び出しでパラメータ解釈が異なるって
どんなキチガイが仕様考えたのか気になるわw
switch型パラメータをスクリプト内で動的に外したり与える方法がないとか終わってる
どんなキチガイが仕様考えたのか気になるわw
switch型パラメータをスクリプト内で動的に外したり与える方法がないとか終わってる
551デフォルトの名無しさん
2022/09/21(水) 23:16:07.40ID:9fmju/sW552デフォルトの名無しさん
2022/09/22(木) 00:48:03.74ID:XoRPEjFK 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
フォルダ以下のサイズ(再帰的な子孫も含めて)は、
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
553552
2022/09/22(木) 01:41:34.82ID:XoRPEjFK 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
更新時刻が最も最近のものを求めた
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
554552
2022/09/22(木) 05:06:16.90ID:XoRPEjFK 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
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
555デフォルトの名無しさん
2022/09/22(木) 09:18:39.47ID:5Z2vYjCC >>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
@(
"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
556デフォルトの名無しさん
2022/09/23(金) 00:05:04.72ID:r49iT1KO >>555
おおー無駄がなくてすごい
これぐらい書けるようになりてぇ
開始は配列の変わりにコマンドレットでも良さそう
Get-ChildItem -LiteralPath <親フォルダ> -Directory | ...
おおー無駄がなくてすごい
これぐらい書けるようになりてぇ
開始は配列の変わりにコマンドレットでも良さそう
Get-ChildItem -LiteralPath <親フォルダ> -Directory | ...
557デフォルトの名無しさん
2022/09/25(日) 13:45:46.35ID:5ly2Ski6 >>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
確かに。てか半端に汎用性意識せず、素直にこんなんでも良かったな。
@(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
558デフォルトの名無しさん
2022/09/25(日) 14:01:26.72ID:5ly2Ski6 いや、こうか。
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
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
559デフォルトの名無しさん
2022/09/25(日) 14:13:19.66ID:76wlmrvm 試してないけどフォルダにファイルが1個も無い場合を考慮できてない気がする
560デフォルトの名無しさん
2022/09/25(日) 14:48:45.69ID:5ly2Ski6 知らんかった。前者つもりだった。
(@() | measure -Sum).Sum → 0
(@() | measure Length -Sum).Sum → Null
(@() | measure -Sum).Sum → 0
(@() | measure Length -Sum).Sum → Null
561デフォルトの名無しさん
2022/09/25(日) 15:45:18.22ID:76wlmrvm powershellはgciはともかくmeasureが遅くてファイルが多くなると辛くなるね
結局C#に丸投げとかの手段になりそう
結局C#に丸投げとかの手段になりそう
562デフォルトの名無しさん
2022/09/25(日) 16:18:35.15ID:PDKGWlWe 試してないけど
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
ってやると多少効率的かと
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
ってやると多少効率的かと
563デフォルトの名無しさん
2022/09/25(日) 17:09:36.54ID:UvTk6pcp >>561
まあC#でやった方が速いわな
まあC#でやった方が速いわな
564デフォルトの名無しさん
2022/09/25(日) 19:58:47.42ID:5ly2Ski6 >>562
なるほどな〜、余分な集計をする事になるとしても
measureを1回で済ませられれば効率的な可能性があるのか、
さらにパイプラインで列挙と集計が同時進行になる可能性もあったり?
と思い試してみたけど、残念ながらLastWriteTimeの-Sumがダメらしい。
-ea:SilentlyContinueなら?と思ったがLengthのMaximumしか出ない。
でもこのアイデアは使えそう。
なるほどな〜、余分な集計をする事になるとしても
measureを1回で済ませられれば効率的な可能性があるのか、
さらにパイプラインで列挙と集計が同時進行になる可能性もあったり?
と思い試してみたけど、残念ながらLastWriteTimeの-Sumがダメらしい。
-ea:SilentlyContinueなら?と思ったがLengthのMaximumしか出ない。
でもこのアイデアは使えそう。
565デフォルトの名無しさん
2022/09/25(日) 20:11:16.46ID:PDKGWlWe >>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
ああなるほど、だから小細工してたのか、すまんかった
てか、初めから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
566デフォルトの名無しさん
2022/09/25(日) 21:00:46.43ID:UvTk6pcp >>565
さも自分で考えたかのように書いて劣化パクリかよ
さも自分で考えたかのように書いて劣化パクリかよ
567デフォルトの名無しさん
2022/09/25(日) 21:03:35.79ID:PDKGWlWe そりゃすまんな
568デフォルトの名無しさん
2022/09/25(日) 21:18:28.66ID:5ly2Ski6 PSv7だとmeasureに集計プロパティ使えるのか。
PSv5なので試せないのが残念。
速度の話が出てたからmeasureの速度がどんなもんか>>558で計ってみたら
自環境だと普通の実装(最高水位線と足し算)より7〜8倍くらい遅いわ。
まあ、標準コマンドレットのよくある結果だな…。
PSv5なので試せないのが残念。
速度の話が出てたからmeasureの速度がどんなもんか>>558で計ってみたら
自環境だと普通の実装(最高水位線と足し算)より7〜8倍くらい遅いわ。
まあ、標準コマンドレットのよくある結果だな…。
569デフォルトの名無しさん
2022/09/29(木) 21:06:47.50ID:OAAH5wr1 タスクマネージャの詳細タブからaudiodg.exeの関係の設定を変更する操作をスクリプトで書けますか?
570デフォルトの名無しさん
2022/09/29(木) 21:46:11.19ID:NUiBz/8K Get-Process "audiodg" | %{ $_.ProcessorAffinity = $コア数 }
$コア数は2のn乗で表したコア数の数
たとえば若い番号の3コアだけ割り当てたい場合は 0xf
$コア数は2のn乗で表したコア数の数
たとえば若い番号の3コアだけ割り当てたい場合は 0xf
571デフォルトの名無しさん
2022/09/29(木) 21:47:29.47ID:NUiBz/8K 上の3は4の間違い
もちろんタスクマネージャーをいじろうと思えばできるけど面倒
もちろんタスクマネージャーをいじろうと思えばできるけど面倒
572デフォルトの名無しさん
2022/09/30(金) 01:54:30.65ID:Ls0wbInl573デフォルトの名無しさん
2022/09/30(金) 05:17:13.01ID:oHn8O8ll574デフォルトの名無しさん
2022/09/30(金) 09:21:08.41ID:ZYrZXJKF 皆さんありがとうございます!
575デフォルトの名無しさん
2022/10/31(月) 09:21:34.51ID:fKpjF07r comobjectでofficeを操作してるとき、
$xxx.Count() が 2なのに
$xxx[0] 範囲外
$xxx[1] 範囲内
$xxx[2] 範囲内
$xxx[3] 範囲外
みたいなアクセスになることがあるんやが
これはどう理解すればええんや?
$xxx.Count() が 2なのに
$xxx[0] 範囲外
$xxx[1] 範囲内
$xxx[2] 範囲内
$xxx[3] 範囲外
みたいなアクセスになることがあるんやが
これはどう理解すればええんや?
576デフォルトの名無しさん
2022/10/31(月) 09:37:52.98ID:jAJ0SKjr Item使わないからじゃね
577デフォルトの名無しさん
2022/10/31(月) 12:19:33.83ID:K5+OjW4X Excelってたしか値も書式もないセルはオブジェクト自体が存在しない扱いになるので、インデックスが0から始まるとは限らなかったはず
データが取れる前提で処理するとうまく行かない
データが取れる前提で処理するとうまく行かない
578デフォルトの名無しさん
2022/10/31(月) 23:20:47.42ID:9ETwK7p6579デフォルトの名無しさん
2022/11/01(火) 16:19:30.34ID:3yQnaOmT Excelは1オリジンやで
580デフォルトの名無しさん
2022/11/04(金) 21:25:18.64ID:HyYadl7b 誰かmtkclient教えてクレメンス
581デフォルトの名無しさん
2022/11/06(日) 12:43:06.89ID:xY1K1bhL582デフォルトの名無しさん
2022/11/06(日) 19:05:17.89ID:vSW2pkDA $a = "abc::de/f/ghi/123jk"
$b = $a.TrimEnd("/")
をしても$bの出力が「abc::de/f/ghi/」にならないのですが、どこが間違っているのでしょうか?
$b = $a.TrimEnd("/")
をしても$bの出力が「abc::de/f/ghi/」にならないのですが、どこが間違っているのでしょうか?
583デフォルトの名無しさん
2022/11/06(日) 19:19:37.21ID:NZll9bPy >>582
同じ勘違いしたことある
指定文字「を」末尾からtrimするのがTrimEnd
$a.TrimEnd("jk123")
Trimメソッドは正規表現使えないからreplaceステートメントをつかう
$a -replace "\w*$",''
同じ勘違いしたことある
指定文字「を」末尾からtrimするのがTrimEnd
$a.TrimEnd("jk123")
Trimメソッドは正規表現使えないからreplaceステートメントをつかう
$a -replace "\w*$",''
584デフォルトの名無しさん
2022/11/06(日) 23:51:09.18ID:vSW2pkDA585デフォルトの名無しさん
2022/11/10(木) 20:57:05.64ID:bawORDDu 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
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
586デフォルトの名無しさん
2022/11/12(土) 14:51:35.07ID:p3H1JcgM >>585 日本語訳
PowerShell 7.3 の新機能
https://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/what-s-new-in-powershell-73
PowerShell 7.3 の新機能
https://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/what-s-new-in-powershell-73
587デフォルトの名無しさん
2022/11/12(土) 15:22:51.03ID:c/ILT9OL 11でもPowershell起動すると新しいのお試ししろとか表示されるけど5.1で十分だよなぁ
他の鯖系のベンダーのモジュールが5.1に対応しなくなったら考えるわ程度
他の鯖系のベンダーのモジュールが5.1に対応しなくなったら考えるわ程度
588デフォルトの名無しさん
2022/11/12(土) 19:04:11.88ID:lKqjLh4g >>586
前からexperimentalで有ったのは知ってたし、オプションだから嫌なら切ればいいんだけども…
cmdから呼ばれる想定のコマンドは引数処理に癖があるからといって、特定のプログラムのみ特別扱いするワークアラウンド的挙動にはちょっと賛同できない
ワークアラウンドというのはユーザーがやるものだ
pwsh側で個別対応をするとしても、ユーザーが期待する形式の引数を取って、コマンドの期待する形式に変換するラッパースクリプトを用意すれば済むだけの話
普段linux/macでpwsh使ってるから、どれ程の癖なのかは図りかねるが、
前からexperimentalで有ったのは知ってたし、オプションだから嫌なら切ればいいんだけども…
cmdから呼ばれる想定のコマンドは引数処理に癖があるからといって、特定のプログラムのみ特別扱いするワークアラウンド的挙動にはちょっと賛同できない
ワークアラウンドというのはユーザーがやるものだ
pwsh側で個別対応をするとしても、ユーザーが期待する形式の引数を取って、コマンドの期待する形式に変換するラッパースクリプトを用意すれば済むだけの話
普段linux/macでpwsh使ってるから、どれ程の癖なのかは図りかねるが、
589デフォルトの名無しさん
2022/11/14(月) 01:13:06.37ID:zoPzNIvr $obj.('行');
1. 上記を7.3で実行するとハングする。
2. 5.1や7.2ではハングしない。
3. $prop = '行'; $obj.$prop; でもハングする。
4. '行'が違う言葉だとハングしない。
5. $obj.行; だとハングしない。
バグ?バグなの?ゲイツに電凸していいの?
1. 上記を7.3で実行するとハングする。
2. 5.1や7.2ではハングしない。
3. $prop = '行'; $obj.$prop; でもハングする。
4. '行'が違う言葉だとハングしない。
5. $obj.行; だとハングしない。
バグ?バグなの?ゲイツに電凸していいの?
590589
2022/11/14(月) 01:23:18.32ID:zoPzNIvr あ環境はWindows11とmacOS13で再現してます。連投スマソ
591589
2022/11/14(月) 21:56:16.00ID:zoPzNIvr 589の条件4についてだけど、
$obj.([System.Text.Encoding]::UTF8.GetString((0xE8, 0xA1, 0x8C)));
でもハングして、UTF-8での先頭バイトが0xE8だった場合にハングするっぽい。
毎回ハングするのであんまり回数試してないけど。
$obj.([System.Text.Encoding]::UTF8.GetString((0xE8, 0xA1, 0x8C)));
でもハングして、UTF-8での先頭バイトが0xE8だった場合にハングするっぽい。
毎回ハングするのであんまり回数試してないけど。
592デフォルトの名無しさん
2022/11/15(火) 01:46:29.41ID:E2xRIJUz まともにテストしてないか
変なメンテナが紛れてるか
変なメンテナが紛れてるか
593デフォルトの名無しさん
2022/11/15(火) 11:09:43.75ID:ADWqgLY3 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レポの差分みては
$gyo =[System.Text.Encoding]::UTF8.GetString((0xE8, 0xA1, 0x8C)))
$gyo
行
$trans=@{$gyo="go"}
$trans.$gyo, $trans[$gyo]
go
(まだ日本語IME入れてない新品なので行が入力できないのはご愛嬌)
属性/キーはハッシュ可能な任意のビット列で構わないはずなので、単にエンコルーチンの問題のはず、7.30-preview-2以降のgitレポの差分みては
594デフォルトの名無しさん
2022/11/15(火) 11:40:25.67ID:Xte85wf7 cx-fxは開始バイトだから安定リリースで出してたらマルチバイト圏壊滅してそうだが
595589
2022/11/16(水) 02:47:51.66ID:VVslFgtK596589
2022/11/18(金) 02:58:42.77ID:5YGh8aoa お巡りさんこの人でつ38909f7ee
でそのコミットの中身がこちら
Update .NET SDK version from `7.0.100-preview.2.22153.17` to `7.0.100-preview.4.22252.9` (#17061)
おふぅ。PowerShellのバグを追っていて大変なものを見つけてしまったーどうしよう?
でそのコミットの中身がこちら
Update .NET SDK version from `7.0.100-preview.2.22153.17` to `7.0.100-preview.4.22252.9` (#17061)
おふぅ。PowerShellのバグを追っていて大変なものを見つけてしまったーどうしよう?
597デフォルトの名無しさん
2022/11/29(火) 18:07:22.13ID:bVQqRFK0 以前は PowerShell の日本語ドキュメントのリポジトリが Github に置いてあったはずですが今は消えていますよね?
事情がよくわからないんですが、マイクロソフトとしてはコミュニティで日本語翻訳を運用しない (機械翻訳でやっていく?) ということなんでしょうか。
それはそれとして、諸事情でネットワーク接続できない場所で日本語ドキュメントを読みたいんですが
どこかでまとめてダウンロードする方法とかありませんかね?
事情がよくわからないんですが、マイクロソフトとしてはコミュニティで日本語翻訳を運用しない (機械翻訳でやっていく?) ということなんでしょうか。
それはそれとして、諸事情でネットワーク接続できない場所で日本語ドキュメントを読みたいんですが
どこかでまとめてダウンロードする方法とかありませんかね?
598デフォルトの名無しさん
2022/11/29(火) 21:34:29.76ID:S4GKm+YH599デフォルトの名無しさん
2022/11/29(火) 21:48:53.54ID:noJ3pHan 日本マイクソロフトは何してんの
600デフォルトの名無しさん
2022/11/29(火) 23:10:55.01ID:F0R68kvV 日本語にすると曖昧になっちゃうからな
英語で厳密に説明されたほうがいいだろうし、ソフトウェア技術者だったら英語は素養の一つだね
英語で厳密に説明されたほうがいいだろうし、ソフトウェア技術者だったら英語は素養の一つだね
601デフォルトの名無しさん
2022/11/30(水) 01:07:23.00ID:oNUduEv2 >>599
ちょまどはイベントに参加したり楽しくやってる
ちょまどはイベントに参加したり楽しくやってる
602デフォルトの名無しさん
2022/11/30(水) 01:12:58.71ID:TaPBZKHt 文字列検索する時は、ラテン文字のキーワードが検索結果に埋もれない日本語ドキュメントのほうが便利
603デフォルトの名無しさん
2022/11/30(水) 02:05:17.65ID:k8p89eha >>597
Get-Helpで取れる情報ならUiCulture指定してSave-Help
https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_updatable_help
それ以外ならGitHubから英語ドキュメント落としてきて機械翻訳かな
オフライン環境でスクリプト書く気はしないから必要なドキュメントは限られるのでは
Get-Helpで取れる情報ならUiCulture指定してSave-Help
https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_updatable_help
それ以外ならGitHubから英語ドキュメント落としてきて機械翻訳かな
オフライン環境でスクリプト書く気はしないから必要なドキュメントは限られるのでは
604デフォルトの名無しさん
2022/11/30(水) 08:53:37.63ID:QfqHtuzd どうしてもドキュメントを日本語化してほしいなら16ビット時代みたいに
日本語版がリリースされる頃には英語版の新バージョンがリリースされている
みたいな事になってもおま国とか文句言わないようにしないとね
英語版が完成してからじゃないと翻訳作業を始められないんだから
日本語版がリリースされる頃には英語版の新バージョンがリリースされている
みたいな事になってもおま国とか文句言わないようにしないとね
英語版が完成してからじゃないと翻訳作業を始められないんだから
605デフォルトの名無しさん
2022/11/30(水) 12:40:03.59ID:4G7kek1Y Google, DeepL, みらい翻訳
「みんなの自動翻訳@TexTra®」は、
国立研究開発法人情報通信研究機構(NICT)が開発した自動翻訳サイトです。無料
mt-auto-minhon-mlt.ucri.jgn-x.jp/
翻訳したいサイトのURLを入力するだけで、自動翻訳結果をエディタ上に再現
「みんなの自動翻訳@TexTra®」は、
国立研究開発法人情報通信研究機構(NICT)が開発した自動翻訳サイトです。無料
mt-auto-minhon-mlt.ucri.jgn-x.jp/
翻訳したいサイトのURLを入力するだけで、自動翻訳結果をエディタ上に再現
606デフォルトの名無しさん
2022/11/30(水) 13:17:37.01ID:Occ07s0g 機械が無料で一瞬でそれなりの翻訳をしてくれる時代になったのに
わざわざ多ヵ国の翻訳チームを雇って変わり続ける膨大なドキュメントへの人件費を出す判断なんてできんだろなあ
わざわざ多ヵ国の翻訳チームを雇って変わり続ける膨大なドキュメントへの人件費を出す判断なんてできんだろなあ
607597
2022/11/30(水) 17:21:56.68ID:zA9UzzGK 私は現時点では PowerShell について全く知識を持たず、
入門的な資料を移動中の合間にタブレットコンピュータで読みたいと考えています。
(通信は出来ないので事前に入れておく必要があります。)
基本理念をわかれば個々のコマンドの資料はたぶん英語でも理解できると思うんですが
新しい概念そのものを英語で読むのはしんどいです。
オフラインで読みたいと思うと ePub (などの電子書籍形式) になっているとやりやすくて
そうするには元が Markdown なら一発で出来ると思ったんですが、
機械翻訳を通してその形に持っていくとなると面倒ですね。
入門的な資料を移動中の合間にタブレットコンピュータで読みたいと考えています。
(通信は出来ないので事前に入れておく必要があります。)
基本理念をわかれば個々のコマンドの資料はたぶん英語でも理解できると思うんですが
新しい概念そのものを英語で読むのはしんどいです。
オフラインで読みたいと思うと ePub (などの電子書籍形式) になっているとやりやすくて
そうするには元が Markdown なら一発で出来ると思ったんですが、
機械翻訳を通してその形に持っていくとなると面倒ですね。
608605
2022/11/30(水) 17:40:14.72ID:4G7kek1Y Markdown は、HTML になるから、
「みんなの自動翻訳@TexTra®」で翻訳できるのでは?
翻訳したいサイトのURLを入力するだけで、自動翻訳結果をエディタ上に再現と書いてあるから、
ローカルPC にある、HTMLへのパスを入力すれば?
「みんなの自動翻訳@TexTra®」で翻訳できるのでは?
翻訳したいサイトのURLを入力するだけで、自動翻訳結果をエディタ上に再現と書いてあるから、
ローカルPC にある、HTMLへのパスを入力すれば?
609597
2022/11/30(水) 18:10:28.67ID:zA9UzzGK610デフォルトの名無しさん
2022/11/30(水) 21:29:56.51ID:QfqHtuzd 適当な電子書籍の解説本でも買えば?
611デフォルトの名無しさん
2022/11/30(水) 23:01:06.28ID:k8p89eha 過去の公式日本語訳が出てきたとして、基本理念を理解したい人の役に立つレベルとは思えない
電子書籍買って読むほうがいい
電子書籍買って読むほうがいい
612デフォルトの名無しさん
2022/12/01(木) 08:18:35.61ID:iTNwCGJv インアクションの邦訳ぐらい?古いのしかないな
613デフォルトの名無しさん
2022/12/01(木) 13:08:12.37ID:Qs+E1f1w もしも古い翻訳テキストが手元にあるなら
それでいいんじゃね
新しい要素だけググって調べてブラウザ上でctrl+Sするなりして保存しておけば?
それでいいんじゃね
新しい要素だけググって調べてブラウザ上でctrl+Sするなりして保存しておけば?
614デフォルトの名無しさん
2022/12/03(土) 12:28:32.79ID:Jt/U29yp 配列の要素を逆順にしたものを得たいのですが, …たとえば,
$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#に勉強不足な私には分からず)
ってなわけで,別に困ってるわけでは無いのですが
もっと シンプルな書き方ってありますか
$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#に勉強不足な私には分からず)
ってなわけで,別に困ってるわけでは無いのですが
もっと シンプルな書き方ってありますか
615デフォルトの名無しさん
2022/12/03(土) 14:39:08.81ID:H3EtATlx $a[length - 1 - n]
616デフォルトの名無しさん
2022/12/03(土) 15:49:40.73ID:h4dim/Vw >>614
とりあえず、$a[-1..-$a.Length]だと-1,0,1で並ぶから@(5,10,0)になっちゃうはず。
$a[$a.length..0] が正。
個人的にはlengthじゃなくてcount使ってほしい。
後はsort-object使うか。
$a|sort -des でいける。
ただし遅いので巨大配列には向かない。
とりあえず、$a[-1..-$a.Length]だと-1,0,1で並ぶから@(5,10,0)になっちゃうはず。
$a[$a.length..0] が正。
個人的にはlengthじゃなくてcount使ってほしい。
後はsort-object使うか。
$a|sort -des でいける。
ただし遅いので巨大配列には向かない。
617デフォルトの名無しさん
2022/12/03(土) 18:40:22.74ID:Jt/U29yp >>616
$a[$a.Count..0] 言われてみれば! …これ使わせていただきます
なお,sort を使うと,どうしても数値でsortされてしまうので うまくいかない感じです
何の意味も無い基準でsortして(何の順番も変えないで) -desだけしてくれたらいいのですが
$a[$a.Count..0] 言われてみれば! …これ使わせていただきます
なお,sort を使うと,どうしても数値でsortされてしまうので うまくいかない感じです
何の意味も無い基準でsortして(何の順番も変えないで) -desだけしてくれたらいいのですが
618デフォルトの名無しさん
2022/12/03(土) 19:09:31.97ID:K8Dj9wl7619デフォルトの名無しさん
2022/12/03(土) 19:46:36.52ID:Jt/U29yp >>618 intの配列にcastってことなのか…半分くらいしか理解してませんが
ありがとうございます.
LINQは powershellだと 無理やり感があって,かえって使いにくい感じは ありますね
ありがとうございます.
LINQは powershellだと 無理やり感があって,かえって使いにくい感じは ありますね
620デフォルトの名無しさん
2022/12/03(土) 22:02:33.57ID:vihcAie/ 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"] 破壊的変更
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"] 破壊的変更
621デフォルトの名無しさん
2022/12/05(月) 15:26:18.97ID:9N6A06cG きっと とても初歩的なことだとは思うのですが
$a = "abc"
$job = start-job { write-host $a }
receive-job -Job $job # → 何も出力されない
これって スコープの問題なんでしょうか
{ブロック}の中の $aの中身を "abc"にしたいのですが
$a = "abc"
$job = start-job { write-host $a }
receive-job -Job $job # → 何も出力されない
これって スコープの問題なんでしょうか
{ブロック}の中の $aの中身を "abc"にしたいのですが
622デフォルトの名無しさん
2022/12/05(月) 17:43:14.26ID:sXIIIS0k $using:a
About_Remote_Variables
About_Remote_Variables
623デフォルトの名無しさん
2022/12/05(月) 18:59:35.95ID:9N6A06cG >>622 ありがとうございます
ブロックの中の $a を $Using:$a と書けば望む動作になりました
まぁ、何でusingって名前なんだろ?とか
Remote Variablesとは言うけれど別にリモートじゃないし(?)など
まだ不思議な感じは残りますが…もうちょっと調べたり勉強してみます
ブロックの中の $a を $Using:$a と書けば望む動作になりました
まぁ、何でusingって名前なんだろ?とか
Remote Variablesとは言うけれど別にリモートじゃないし(?)など
まだ不思議な感じは残りますが…もうちょっと調べたり勉強してみます
624デフォルトの名無しさん
2022/12/05(月) 19:22:50.61ID:9N6A06cG $a = "abc"
$job = start-job { param($str); write-host $str } -Arg $a
でも 受け渡せるんですね。
$job = start-job { param($str); write-host $str } -Arg $a
でも 受け渡せるんですね。
625デフォルトの名無しさん
2022/12/05(月) 21:14:48.29ID:Xw9Qnajp Start-Jobでスクリプトブロック実行すると
別プロセスのpowershell.exeが起動してそっちで動く。(少なくともPSv5.1では。)
イメージとしてはコンソールや.ps1から「powershell.exe -f 他スクリプト.ps1」で
他プロセスを動かすくらいに別スコープだと思ってればいいと思う。
別プロセスのpowershell.exeが起動してそっちで動く。(少なくともPSv5.1では。)
イメージとしてはコンソールや.ps1から「powershell.exe -f 他スクリプト.ps1」で
他プロセスを動かすくらいに別スコープだと思ってればいいと思う。
626デフォルトの名無しさん
2022/12/06(火) 03:20:51.26ID:PbeCdWM3 >>599
マイクロソフトのサポートにはとんでもない質問が大量に押し寄せる。
Windows Serverが起動しなくなった。電源が入ってないけど、Windowsのバグに違いないやら、しつこい嫌がらせやら、女に変なことを聞く変態やらと3万円も払って電話してくる。
マイクロソフトのサポートにはとんでもない質問が大量に押し寄せる。
Windows Serverが起動しなくなった。電源が入ってないけど、Windowsのバグに違いないやら、しつこい嫌がらせやら、女に変なことを聞く変態やらと3万円も払って電話してくる。
627デフォルトの名無しさん
2022/12/06(火) 03:22:42.62ID:PbeCdWM3 PowerShellのバージョンがわかりませんのでどうすればいいですか?
こんなのを3万円も払って教えてもらうのが日本人
こんなのを3万円も払って教えてもらうのが日本人
628デフォルトの名無しさん
2022/12/06(火) 06:55:15.41ID:yvaEv+2c 一時片手間にカスタマサポートやってたことあるけど結構トンデモ問合せは多い
いろいろ聞いて行ったら他社の製品の問合せだったなんてオチすらあるし
いろいろ聞いて行ったら他社の製品の問合せだったなんてオチすらあるし
629デフォルトの名無しさん
2022/12/06(火) 07:03:21.20ID:wGOv2qdu630デフォルトの名無しさん
2022/12/19(月) 19:06:25.36ID:ayS530mj functionの中でhashtable @{}を作成してその中にウィンドウと紐付いてるハンドルオブジェクトやらを入れて返して
functionの呼び出し側で使おうとしたら無効なオブジェクトやら何やらのエラーが出てまともに使えなかった
PSObjectに変換して返したらエラーは出なくなったがこれ何だろう
怖すぎなんだが
functionの呼び出し側で使おうとしたら無効なオブジェクトやら何やらのエラーが出てまともに使えなかった
PSObjectに変換して返したらエラーは出なくなったがこれ何だろう
怖すぎなんだが
631デフォルトの名無しさん
2022/12/21(水) 00:09:46.82ID:5pWmYDMC 参照型/値型とかその辺の理解は問題ない?
とエスパーしてみる
とエスパーしてみる
632デフォルトの名無しさん
2022/12/23(金) 17:58:06.26ID:F84mgbO0 紐付けてるオブジェクトやらは.NETの参照型ね
値型だったら恐らくこの問題は起きてないだろうし
PSCustomObjectのプロパティとhashtableの値への紐付けでオブジェクトの生存期間に差異があるようにしか見えないから
functionから戻る時に何か想定外な事が起きてるんだろうなあ
値型だったら恐らくこの問題は起きてないだろうし
PSCustomObjectのプロパティとhashtableの値への紐付けでオブジェクトの生存期間に差異があるようにしか見えないから
functionから戻る時に何か想定外な事が起きてるんだろうなあ
633デフォルトの名無しさん
2022/12/27(火) 14:24:53.22ID:r8IxISV7 コマンド・プロンプトも一切つかったことない状況から
powershellの勉強最近始めたけど難しいね
先ず参考書籍少なすぎ
何から手を付けたらいいのか全くわからん
先輩諸兄はどんな感じで習得していったの?
powershellの勉強最近始めたけど難しいね
先ず参考書籍少なすぎ
何から手を付けたらいいのか全くわからん
先輩諸兄はどんな感じで習得していったの?
634デフォルトの名無しさん
2022/12/27(火) 14:35:15.62ID:ZD0ehGa/ 必要に迫られて色々とネットで調べて解決策を探し回る
そのコードから理解できない部分や言語の基本を調べる(変数や表示の仕方とか色々と)
という泥縄式だな
そのコードから理解できない部分や言語の基本を調べる(変数や表示の仕方とか色々と)
という泥縄式だな
635デフォルトの名無しさん
2022/12/27(火) 15:00:48.14ID:r8IxISV7 ネットしかないのか、仕方ないな、、、
しばらくは苦しみながら覚えるしかないかぁ
しばらくは苦しみながら覚えるしかないかぁ
636デフォルトの名無しさん
2022/12/27(火) 15:45:26.24ID:/tVTIbQ7 Get-Help about_
で出てくるのを一通り読んどきゃ何も苦しむことなんてないだろ
で出てくるのを一通り読んどきゃ何も苦しむことなんてないだろ
637デフォルトの名無しさん
2022/12/27(火) 17:56:17.16ID:0E4juWNJ ある程度使えるようになってから書籍買って読んだら
「大体全部知ってるわ」ってなったから
ネットだけでもいけるだろ
「大体全部知ってるわ」ってなったから
ネットだけでもいけるだろ
638デフォルトの名無しさん
2022/12/27(火) 18:20:49.07ID:U6V4cNSL 他の言語と違って思い込みて書かれた間違った記事が多いから警戒すべし
639デフォルトの名無しさん
2022/12/27(火) 20:24:26.94ID:jYPDn/gh ほかの開発言語やシェルプログラミングにまったく疎い状況からPoweshellで入門してゴリゴリ使いこなしてやろうという路線は正直筋が悪いと思う
とはいえ勉強のためにPythonあたりの入門書をやれとも言いづらい
やはり泥縄式かな
とはいえ勉強のためにPythonあたりの入門書をやれとも言いづらい
やはり泥縄式かな
640デフォルトの名無しさん
2022/12/27(火) 21:27:46.01ID:T5RPj38W >>639
一応VBAとGASが多少できるなったから他の言語も余裕かな、っておもって
PowerShellに手を出したら苦戦してる感じ
一通り基礎を覚えたら実践的に色々と試してみたいけど
powershellは色々覚えることが多すぎてメンドイ、、、
一応VBAとGASが多少できるなったから他の言語も余裕かな、っておもって
PowerShellに手を出したら苦戦してる感じ
一通り基礎を覚えたら実践的に色々と試してみたいけど
powershellは色々覚えることが多すぎてメンドイ、、、
641デフォルトの名無しさん
2022/12/27(火) 21:53:19.53ID:fSsOcWwB 変数?配列?何それ状態から始めてる初心者だけど基本的な用語がわからないから検索にも苦労する
セオリーもわからないから無駄にあれこれやってあとはコメント書きまくってグチャグチャになってる
セオリーもわからないから無駄にあれこれやってあとはコメント書きまくってグチャグチャになってる
642デフォルトの名無しさん
2022/12/27(火) 22:04:55.23ID:vIW/uBHA PythonもJavaも全くコード書けないノンプログラマだけどPowerShellは分かり易い気がする
643デフォルトの名無しさん
2022/12/27(火) 22:58:59.38ID:B+wJL+Im 素人だけど、「PowerShell実践ガイドブック」っていう本は、素人には理解しにくい仕様とかを理解するのにとても役に立った
ただ、いろいろ冗長でちょっと読みづらい本ではある
ただ、いろいろ冗長でちょっと読みづらい本ではある
644デフォルトの名無しさん
2022/12/28(水) 01:26:32.00ID:++xg0WRh PowerShell上で cmd /C xxxx を使うのが最善という結論に到達する
こういうのでいいんだよ的な
こういうのでいいんだよ的な
645デフォルトの名無しさん
2022/12/28(水) 14:16:21.29ID:dmcJ6Qpo ヘルプが出来が良いので何も要らない気はするけど
ハック的なモノや中でどう動いてるとかはpowershellexplained、実用的な書法はPowerShellGetで人気のあるやつ読むとか
ハック的なモノや中でどう動いてるとかはpowershellexplained、実用的な書法はPowerShellGetで人気のあるやつ読むとか
646デフォルトの名無しさん
2022/12/28(水) 21:46:25.70ID:D+6cXnGF PowerShell は配列周りがトリッキーなのを除けば比較的まともな言語だと思う
647デフォルトの名無しさん
2022/12/29(木) 01:00:35.68ID:036NTvOT 覚え始めは Microsoft docs を探し、それでわからなければ個人の解説記事を探した
スクリプトを書くようになってからは about_ から知りたいことを追いかける事が増えた
上でも名前が上がった「PowerShell実践ガイドブック」は、ある程度できるようになってから読んだが
何もわからない状態で読むにも良いと思う
第2章までで基本的なことが身につく
スクリプトを書くようになってからは about_ から知りたいことを追いかける事が増えた
上でも名前が上がった「PowerShell実践ガイドブック」は、ある程度できるようになってから読んだが
何もわからない状態で読むにも良いと思う
第2章までで基本的なことが身につく
648デフォルトの名無しさん
2022/12/29(木) 15:03:24.27ID:867KtYrP パワーシェルの勉強始めたいんですが、学習に良いサイトありませんか?
649デフォルトの名無しさん
2022/12/29(木) 16:02:07.28ID:HWC94+Gl650デフォルトの名無しさん
2022/12/29(木) 16:06:45.35ID:HWC94+Gl あと間違った情報書く奴には必ず突っ込み入るから間違えたまま覚え事故も起き難くなる仕様だと個人的には思ってる
651デフォルトの名無しさん
2022/12/29(木) 16:17:56.35ID:HWC94+Gl powershell何某でぐぐって出てくる日本語の情報はなぜか間違ってたり思い込みで書かれた記事が放置されてて悲しい
情報源としてはstackoverflow辺りをまず探すのが安定
Microsoftの知りたかったことの全て系は役には立つけど知りたい事全てを補完できるわけではない
情報源としてはstackoverflow辺りをまず探すのが安定
Microsoftの知りたかったことの全て系は役には立つけど知りたい事全てを補完できるわけではない
652デフォルトの名無しさん
2023/01/01(日) 00:27:17.84ID:CeabMe2h やり方が多すぎて失敗しているものだからな
653デフォルトの名無しさん
2023/01/03(火) 15:47:50.12ID:naMqCIBL リリース当時は学生だったからPIAをむさぼり読んでたな、楽しい本だった
挙動で間違いやすいのは(スコープを除けば)基本パイプ周りだから、
パイプ使わないスクリプトを書いてけば初手で躓く要素は少ないと思う
挙動で間違いやすいのは(スコープを除けば)基本パイプ周りだから、
パイプ使わないスクリプトを書いてけば初手で躓く要素は少ないと思う
654デフォルトの名無しさん
2023/01/03(火) 21:14:49.48ID:AaMOQNR6 >>653
シェルスクリプトを知っているのが前提だと思っていたが?
シェルスクリプトを知っているのが前提だと思っていたが?
655デフォルトの名無しさん
2023/01/03(火) 21:46:27.47ID:cXTWG1PB パイプで間違う要素なんてあったっけ?
むしろ配列まわりの方が間違いやすい気がするが...
むしろ配列まわりの方が間違いやすい気がするが...
656デフォルトの名無しさん
2023/01/03(火) 22:10:05.90ID:naMqCIBL 前提は知らんけど、配列回りで間違えるのがパイプ使ってる時では?
657デフォルトの名無しさん
2023/01/03(火) 23:27:08.09ID:cXTWG1PB >>656
いやパイプ関係なく PowerShell の配列は色々トリッキー
例えば複数のオブジェクトを配列で返すコマンドレットが要素が1つだけだとオブジェクト自体を返したりするとか
https://qiita.com/hitsumabushi845/items/fe4219ba9daa34f541c2
switch文に配列与えたら各要素を順番に適用する(要は勝手にループする)とか
https://step-learn.com/article/powershell/076-switch-loop.html
いやパイプ関係なく PowerShell の配列は色々トリッキー
例えば複数のオブジェクトを配列で返すコマンドレットが要素が1つだけだとオブジェクト自体を返したりするとか
https://qiita.com/hitsumabushi845/items/fe4219ba9daa34f541c2
switch文に配列与えたら各要素を順番に適用する(要は勝手にループする)とか
https://step-learn.com/article/powershell/076-switch-loop.html
658デフォルトの名無しさん
2023/01/04(水) 00:46:17.26ID:v02S4T2G >>657
まさに前者をパイプ周り(のための)の仕様だって認識してる
カンマ演算子の使い方は知らないとできないけど、型指定しない変数に代入して原因がわからないってことはないでしょ
後者はforやforeach省略出来て便利ってだけで、トリッキーだとは思ったことないわ
まさに前者をパイプ周り(のための)の仕様だって認識してる
カンマ演算子の使い方は知らないとできないけど、型指定しない変数に代入して原因がわからないってことはないでしょ
後者はforやforeach省略出来て便利ってだけで、トリッキーだとは思ったことないわ
659デフォルトの名無しさん
2023/01/04(水) 03:45:39.75ID:jtN0WhrQ switchの評価式に配列をぶち込む発想は他の言語経験有りなら起きないから無害だけど
function戻りの配列の扱いは慣れてても混乱するから特殊な事情が無い限りPSObjectや別のコンテナに入れて返す(脳死)
function戻りの配列の扱いは慣れてても混乱するから特殊な事情が無い限りPSObjectや別のコンテナに入れて返す(脳死)
660デフォルトの名無しさん
2023/01/06(金) 23:20:27.35ID:kugWcEru どなたか助けてください。相談です。
一つのファイルに置換したい複数の数列(0.005→0.000、0.006→0.001、0.007→0.002、etc‥)が存在した場合、うまく自動で全て置換する方法はないでしょうか?
下の置換のコマンドを繰り返し使用してるのですが明らかに非効率で何かうまくできないか考えてます。
(Get-Content ファイル名) | foreach { $_ -replace "置換前","置換後" } | Set-Content ファイル名
一つのファイルに置換したい複数の数列(0.005→0.000、0.006→0.001、0.007→0.002、etc‥)が存在した場合、うまく自動で全て置換する方法はないでしょうか?
下の置換のコマンドを繰り返し使用してるのですが明らかに非効率で何かうまくできないか考えてます。
(Get-Content ファイル名) | foreach { $_ -replace "置換前","置換後" } | Set-Content ファイル名
661デフォルトの名無しさん
2023/01/07(土) 08:57:10.32ID:rjY6PjFx >>660
$hash = @{ 0.005 = 0.000; 0.006 = 0.001; 0.007 = 0.002 }
$hash[0.006]
とすると 0.001 が返るから、"置換後" にあたる部分を $hash["置換前"] とすればいい。
詳しくはハッシュとかハッシュテーブルでググれ
$hash = @{ 0.005 = 0.000; 0.006 = 0.001; 0.007 = 0.002 }
$hash[0.006]
とすると 0.001 が返るから、"置換後" にあたる部分を $hash["置換前"] とすればいい。
詳しくはハッシュとかハッシュテーブルでググれ
662デフォルトの名無しさん
2023/01/07(土) 14:47:12.03ID:tZDUx9Ho ver6.0以降だとスクリプトブロック使えるから、一応こんな感じで一度にできることはできる
"対象の数値" -replace "^[-+]?[0-9]+[.]?[0-9]*", { [decimal]$_.value - 差分の数値 }
数字の足し引きならCSVデータとかで読みこんで処理した方がいいとは思うけど
"対象の数値" -replace "^[-+]?[0-9]+[.]?[0-9]*", { [decimal]$_.value - 差分の数値 }
数字の足し引きならCSVデータとかで読みこんで処理した方がいいとは思うけど
663デフォルトの名無しさん
2023/01/07(土) 15:16:28.02ID:fgMMnpAg >>661,662
すげー。ありがとうございます。
すげー。ありがとうございます。
664デフォルトの名無しさん
2023/01/08(日) 03:23:42.25ID:nZw+zsKC 0.005を足した数値にしたいと書いてないのが不思議
質問者は聞き方がわかっていない
質問者は聞き方がわかっていない
665デフォルトの名無しさん
2023/01/08(日) 09:53:58.06ID:n7Qx+Bf+ ちなみに、v5でも[regex]::Replace()のMatchEvaluatorにスクリプトブロックを渡せるから
>>662より手軽さが劣るけど同様の事ができる。
>>662より手軽さが劣るけど同様の事ができる。
666デフォルトの名無しさん
2023/01/09(月) 14:33:22.12ID:2QUdKeZJ サブディレクトリ以下の全てのファイルに対し、ゾーン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;
}
各ファイルのゾーン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;
}
667デフォルトの名無しさん
2023/01/09(月) 15:34:37.62ID:2yNmR2Eh >>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の代わりにパイプでオブジェクトごと渡してもいいと思う
こういうこと?
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の代わりにパイプでオブジェクトごと渡してもいいと思う
668デフォルトの名無しさん
2023/01/09(月) 15:52:05.35ID:2QUdKeZJ669デフォルトの名無しさん
2023/01/10(火) 05:44:39.22ID:bjV4/8ri 例えば、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
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
670デフォルトの名無しさん
2023/01/23(月) 12:43:06.27ID:y+pH12Ov Tree /fとget-childitem select-object Full name,を組み合わせたデータがほしいのですが、ご存知の方、ご教示願います。
671デフォルトの名無しさん
2023/01/23(月) 18:21:06.24ID:g43oPRJS >>670
名前の通り再帰処理でフォルダのツリーデータ構造を作ってから出力する事になる。
powershellの関数呼び出しは100ぐらいのネストでスタックオーバーフローするので、
ある程度動作確認が出来たら再帰処理を配列とループに変換するか、
C#なりで書き直す必要があるかも。
名前の通り再帰処理でフォルダのツリーデータ構造を作ってから出力する事になる。
powershellの関数呼び出しは100ぐらいのネストでスタックオーバーフローするので、
ある程度動作確認が出来たら再帰処理を配列とループに変換するか、
C#なりで書き直す必要があるかも。
672デフォルトの名無しさん
2023/01/23(月) 23:52:13.30ID:Aq+myoAC >>670
https://www.powershellgallery.com/packages/Show-Tree/1.0.0
146行目を書き換え Write-Output ("{0}+---{1}" -f $start, ($PSDriveFullPath))
https://www.powershellgallery.com/packages/Show-Tree/1.0.0
146行目を書き換え Write-Output ("{0}+---{1}" -f $start, ($PSDriveFullPath))
673670
2023/01/24(火) 00:18:36.99ID:splC6Inp674デフォルトの名無しさん
2023/02/08(水) 20:31:25.08ID:s0xdk+qH @("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
"yyyy/MM/dd"っぽいと勝手に日付時間の形式に変換されるのですがされないようにできますか?
windows10 PSVersion 5.1.19041.2364
675デフォルトの名無しさん
2023/02/08(水) 21:02:50.26ID:s0xdk+qH @("`"2023/01/01`",`"123`"","`"2023/01/02`",`"abc`"","`"2023/01/03`",`"あいう`"") | `
convertfrom-string -delimiter "," | sort-object p1 -descending | foreach-object {"$($_.p1),$($_.p2)"}
こうすれば出来たっぽいけど何かめんどくさい
convertfrom-string -delimiter "," | sort-object p1 -descending | foreach-object {"$($_.p1),$($_.p2)"}
こうすれば出来たっぽいけど何かめんどくさい
676デフォルトの名無しさん
2023/02/08(水) 21:55:45.34ID:Igk1TEx9 >>674
日付でソートするならばConvertFrom-Stringによる日付処理のままDateTime型で扱うのが正しいのでは?
日付でソートするならばConvertFrom-Stringによる日付処理のままDateTime型で扱うのが正しいのでは?
677デフォルトの名無しさん
2023/02/08(水) 22:42:40.57ID:s0xdk+qH csv出力する際に "2023/01/01" が "2023/01/01 00:00:00" となるのを避けたいということです
ソート部分は別の処理をするかもしれないです
わかり難くてすいません
あとは tostring() で変換し直すかくらいでしょうか
ソート部分は別の処理をするかもしれないです
わかり難くてすいません
あとは tostring() で変換し直すかくらいでしょうか
678デフォルトの名無しさん
2023/02/08(水) 23:16:16.35ID:4iQ2gNuN >>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] } }
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] } }
679デフォルトの名無しさん
2023/02/08(水) 23:25:37.64ID:KpfZjU7w 自分も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 あいう
当初の質問通り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 あいう
680デフォルトの名無しさん
2023/02/08(水) 23:59:48.39ID:s0xdk+qH681674
2023/02/09(木) 22:15:00.08ID:Zgr5da8a PSCustomObject なんて便利なものがあるんですね
おかげで Convertfrom-String も使わないで済むようになり
日付の自動変換もされなくなりました、ありがとうございました
おかげで Convertfrom-String も使わないで済むようになり
日付の自動変換もされなくなりました、ありがとうございました
682デフォルトの名無しさん
2023/02/09(木) 23:20:46.77ID:wH9zoD6W 本来、肩こりを和らげるマッサージの福利厚生の充実よりも、肩こりしない環境にすることが重要なわけだが、
PowerShellやってる人は、肩こりを和らげるマッサージを喜ぶ傾向が顕著
PowerShellやってる人は、肩こりを和らげるマッサージを喜ぶ傾向が顕著
683デフォルトの名無しさん
2023/02/09(木) 23:53:02.68ID:KDi1Xk2q 秀逸な例えをしたと思ってそう
684デフォルトの名無しさん
2023/02/10(金) 10:20:51.76ID:UXgVE9re 肩こりしない環境ってなんだろ
コマンドプロンプト?
コマンドプロンプト?
685デフォルトの名無しさん
2023/02/10(金) 10:29:00.89ID:SZzF5oES 自分の慣れてる環境のことだろ
686デフォルトの名無しさん
2023/02/10(金) 10:36:58.88ID:SshlofV9 rubyってことかもな
これを言ったのがいつも突然出てくるruby野郎だったら間違いなくrubyだと言える
これを言ったのがいつも突然出てくるruby野郎だったら間違いなくrubyだと言える
687デフォルトの名無しさん
2023/02/10(金) 11:52:35.79ID:EJFy9nhI 肩こりにはCUIはダメ
ぐいぐいするのが効くでしょう(秀逸)
ぐいぐいするのが効くでしょう(秀逸)
688デフォルトの名無しさん
2023/02/10(金) 14:00:16.56ID:fdH5JkI3 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 あいう"]
最後の形式だけ、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 あいう"]
689688
2023/02/10(金) 14:01:04.70ID:fdH5JkI3 Ruby で仮に、2列のCSV テキストとみなした場合でも、
sort_by で任意の列のソート順で、行をソートできる
require 'csv'
input = <<"EOT"
2023/01/03 あいう
2023/01/01 123
2023/01/02 abc
EOT
options = { col_sep: " " } # 空白区切り
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,あいう
sort_by で任意の列のソート順で、行をソートできる
require 'csv'
input = <<"EOT"
2023/01/03 あいう
2023/01/01 123
2023/01/02 abc
EOT
options = { col_sep: " " } # 空白区切り
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,あいう
690688
2023/02/10(金) 17:56:45.48ID:A9tz9okE 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
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
691デフォルトの名無しさん
2023/02/10(金) 21:41:15.34ID:TDizb0jh 目的と手段があべこべになってるって意味だよ、察しろよ
692デフォルトの名無しさん
2023/02/12(日) 21:55:38.94ID:pO8qooq/ 確かにRubyを使うこと自体が目的になってる奴いるよな
693デフォルトの名無しさん
2023/02/18(土) 17:44:45.89ID:WNIjE3rx Excelを操作しようとしたら酷く遅い。
これは工夫が足りない感じ?
やりたいのは3000行、100列ぐらいに関数が詰まってて、その中でエラーとなってるセルを見つけること。
関数が別のブックを参照してて、その別ブックは日々自動生成されるからその生成されかたによってはどうしてもエラーになってしまう。
VBAでも出来るけど、他と併せて考えるとPowerShell向きの処理だから、これで始めたのに。
PowerShellからVBAのプロシージャ呼び出せば、この部分の処理は一瞬だけど、それは本末転倒だし。
これは工夫が足りない感じ?
やりたいのは3000行、100列ぐらいに関数が詰まってて、その中でエラーとなってるセルを見つけること。
関数が別のブックを参照してて、その別ブックは日々自動生成されるからその生成されかたによってはどうしてもエラーになってしまう。
VBAでも出来るけど、他と併せて考えるとPowerShell向きの処理だから、これで始めたのに。
PowerShellからVBAのプロシージャ呼び出せば、この部分の処理は一瞬だけど、それは本末転倒だし。
694デフォルトの名無しさん
2023/02/18(土) 18:06:52.69ID:nz9Z1NDi >>693
COMのIDispatch経由だからVBAと比較すれば当然遅くなるよ
一個一個のセルを見て回るのなんかは特に遅い
powershell自体も遅いから遅さはさらに加速する
ワークブックを開けてるならCOMからVBAコードを動的に流し込んで処理させた方が全然速いかもしれない
CodeModule.InsertLines辺りでぐぐれば出てくると思う
COMのIDispatch経由だからVBAと比較すれば当然遅くなるよ
一個一個のセルを見て回るのなんかは特に遅い
powershell自体も遅いから遅さはさらに加速する
ワークブックを開けてるならCOMからVBAコードを動的に流し込んで処理させた方が全然速いかもしれない
CodeModule.InsertLines辺りでぐぐれば出てくると思う
695デフォルトの名無しさん
2023/02/18(土) 21:45:54.83ID:RKENxwK/ 全セルまとめて取ればどんな言語でも早いんじゃない?
696デフォルトの名無しさん
2023/02/19(日) 01:42:49.14ID:15y14fHP 数式のチェックをするということならusedrange.formulaとかで二次元配列に入れてしまえば速いだろうね
697デフォルトの名無しさん
2023/02/19(日) 07:28:37.93ID:xSIr/CQB セルの値をチェックしたいのか数式をチェックしたいのかもわからんしそもそも既に作ってあるならその遅い部分のコード晒せばいいのに
としか思わん
としか思わん
698693
2023/02/21(火) 12:34:29.62ID:jIGEezda PowerShellでRangeに対してforeachを使ったら糞遅かったが、Range.Cellsに対して使ったら爆速でした。
VBAで.Cellsを付けないことは無いが、PowerShellだと書き方が変わるから気付かんかった。
ソースは仕事で晒せないが、記憶を頼りに再現したのを後で書くよ。
VBAで.Cellsを付けないことは無いが、PowerShellだと書き方が変わるから気付かんかった。
ソースは仕事で晒せないが、記憶を頼りに再現したのを後で書くよ。
699デフォルトの名無しさん
2023/02/21(火) 15:29:46.97ID:y0oxbjUQ やりたい内容によってはImportExcelとか使うといいかもしれない
700デフォルトの名無しさん
2023/02/21(火) 17:16:31.11ID:mQxVjbPG Excel操作は真面目にやるとCOMの参照の管理と解放が大変で避けちゃう。
完全に自分用なら雑でもいいんだけどさ。
VBScriptくらいに気楽にやらせて欲しい。
完全に自分用なら雑でもいいんだけどさ。
VBScriptくらいに気楽にやらせて欲しい。
701デフォルトの名無しさん
2023/02/21(火) 18:44:18.75ID:7Z23bFwT あららSnoverさん去年退職しちゃったのか、、、
言語的には成熟してるし問題はないんだろうけど、残念だな
言語的には成熟してるし問題はないんだろうけど、残念だな
702デフォルトの名無しさん
2023/02/21(火) 19:36:25.83ID:VTx8hARX >>698
素直にExcel VBAを書いた方が安全だよ。
素直にExcel VBAを書いた方が安全だよ。
703デフォルトの名無しさん
2023/02/24(金) 13:12:14.11ID:xAv3d2xt gci -recでレジストリ検索出来るの便利だなって一昨日思った
704デフォルトの名無しさん
2023/02/27(月) 21:04:03.19ID:5eoJ3K3o 大規模な 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 も利用可能でございます。
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 も利用可能でございます。
705デフォルトの名無しさん
2023/02/28(火) 21:55:58.18ID:NXRHGwBO vscodeのプラグインどうにかしてくれないかな
せめて参照関連はちゃんとして欲しい
せめて参照関連はちゃんとして欲しい
706デフォルトの名無しさん
2023/02/28(火) 23:08:46.00ID:XEMkLhh3 PowerShellの構文が分からなくなったときに今話題のChatGPTで質問してみたら
的確な回答返ってきてすげぇ助かったわ。もうパソコン教室は廃業だろこれ
的確な回答返ってきてすげぇ助かったわ。もうパソコン教室は廃業だろこれ
707デフォルトの名無しさん
2023/03/10(金) 20:16:52.26ID:qXeg3GIX ai のコード生成って結構すごいよね
コパイロット入れてるんだが、マジで打とうとしたコード先読みしてくる
インテリセンスみたいな数文字打って残りの補完じゃなくて、まるまる予測してきて更に当たってるっていう
コパイロット入れてるんだが、マジで打とうとしたコード先読みしてくる
インテリセンスみたいな数文字打って残りの補完じゃなくて、まるまる予測してきて更に当たってるっていう
708デフォルトの名無しさん
2023/03/15(水) 14:42:36.44ID:o8REigww ここでいいですか
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 にアクセスしてください
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 にアクセスしてください
709デフォルトの名無しさん
2023/03/15(水) 15:33:19.80ID:IBd2LSQO そこ見てダメなら諦めたら
特にメリットないし
特にメリットないし
710デフォルトの名無しさん
2023/03/15(水) 21:33:00.90ID:e2aqyp6Z711デフォルトの名無しさん
2023/03/17(金) 11:52:05.75ID:1OmGmSd0 >>707
コパイロットとやらはインタラクティブシェルでも使える?興味あり
gnureadlineうんこpsreadline最強と思ってたら思わぬ伏兵が…
bingのchatgptが話題になってるし、標準で付いてもおかしくないけど
コパイロットとやらはインタラクティブシェルでも使える?興味あり
gnureadlineうんこpsreadline最強と思ってたら思わぬ伏兵が…
bingのchatgptが話題になってるし、標準で付いてもおかしくないけど
712デフォルトの名無しさん
2023/03/17(金) 14:15:57.93ID:piFUHGnm インタラクティブ(履歴)/スクリプトでもヒューリスティックにコンテキストを読んでくれるのは新しいね、もはや補完ではない気がするが
ところで-UseFussyが超便利
ところで-UseFussyが超便利
713デフォルトの名無しさん
2023/03/19(日) 10:19:36.25ID:+AVX1Caz714デフォルトの名無しさん
2023/03/27(月) 09:23:21.18ID:qNF02T37 f1で直近コマンドの、Alt-hで直近パラメータのヘルプがコマンドラインを汚さずにチラ見出来るけど
常時表示しておきたい
常時表示しておきたい
715デフォルトの名無しさん
2023/03/28(火) 15:38:45.60ID:vZrgWFuJ >>714
https://learn.microsoft.com/en-us/powershell/scripting/learn/shell/dynamic-help?view=powershell-7.4
フックされてるShowCommandHelpあたりを改造してみては
https://learn.microsoft.com/en-us/powershell/scripting/learn/shell/dynamic-help?view=powershell-7.4
フックされてるShowCommandHelpあたりを改造してみては
716デフォルトの名無しさん
2023/03/31(金) 09:29:33.35ID:Hum0KYCd コマンドプロンプトのstartコマンドのように
新しいウィンドウを作成せず、使うプロセッサを指定して起動するにはどうすれば良いですか
新しいウィンドウを作成せず、使うプロセッサを指定して起動するにはどうすれば良いですか
717デフォルトの名無しさん
2023/03/31(金) 10:04:55.21ID:oEDBXBHf Add-Type によって、自作のクラスを使う処理を書いて、一応ちゃんと動くのですが
同じことを 何度もやろうとすると 二度目以降は「The type 〜 already exists.」と出て止まってしまいます.
そこで「既に そのタイプが存在しているかどうか」をチェックしたいのですが、これってどう書くんでしょうか
同じことを 何度もやろうとすると 二度目以降は「The type 〜 already exists.」と出て止まってしまいます.
そこで「既に そのタイプが存在しているかどうか」をチェックしたいのですが、これってどう書くんでしょうか
718デフォルトの名無しさん
2023/03/31(金) 22:12:52.48ID:yFMegc6R >>717
こんなん
Add-Type @'
public class MyClass {
public void test() {
}
}
'@
if ("MyClass" -as [type]) {
"MyClass is exist"
}
こんなん
Add-Type @'
public class MyClass {
public void test() {
}
}
'@
if ("MyClass" -as [type]) {
"MyClass is exist"
}
719デフォルトの名無しさん
2023/03/31(金) 22:21:06.75ID:bSGiEzAG >>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
(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
720デフォルトの名無しさん
2023/03/31(金) 22:35:53.19ID:yFMegc6R721716
2023/03/31(金) 22:58:55.98ID:Hum0KYCd722デフォルトの名無しさん
2023/03/31(金) 23:29:03.95ID:bSGiEzAG https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/start-process#-nonewwindow
-NoNewWindow
現在のコンソール ウィンドウで新しいプロセスを開始します。 Windows では、既定で PowerShell によって新しいウィンドウが開きます。
-NoNewWindow
現在のコンソール ウィンドウで新しいプロセスを開始します。 Windows では、既定で PowerShell によって新しいウィンドウが開きます。
723716
2023/03/31(金) 23:54:48.86ID:Hum0KYCd >>722
最初はそれでいいと思ったんですが、コンソールの取り合いになります
(Start-Process netsh.exe -NoNewWindow とかで試すとわかりますが、くれぐれもご注意を)
取り合いにならないように -Wait も指定して
(Start-Process netsh.exe -NoNewWindow -Wait -PassThuru).ProcessorAffinity = xxx
とすると、-Wait が効きすぎて ProcessorAffinity をセットできないという罠
最初はそれでいいと思ったんですが、コンソールの取り合いになります
(Start-Process netsh.exe -NoNewWindow とかで試すとわかりますが、くれぐれもご注意を)
取り合いにならないように -Wait も指定して
(Start-Process netsh.exe -NoNewWindow -Wait -PassThuru).ProcessorAffinity = xxx
とすると、-Wait が効きすぎて ProcessorAffinity をセットできないという罠
724デフォルトの名無しさん
2023/04/01(土) 00:12:16.16ID:rM0w1xSL つまり.NETのProcessorAffinityは存在するプロセスにしか適用できないから無理でいんじゃね
知らんけどWin32APIとかで別の方法を探った方がいいんじゃね
知らんけどWin32APIとかで別の方法を探った方がいいんじゃね
725デフォルトの名無しさん
2023/04/01(土) 00:25:58.89ID:rM0w1xSL たとえばWin32APIのCreateProcessにCREATE_SUSPENDEDというフラグがある
プロセスをサスペンド状態で作成してaffinity設定してからResumeThreadで開始
これでいけるんじゃね
プロセスをサスペンド状態で作成してaffinity設定してからResumeThreadで開始
これでいけるんじゃね
726デフォルトの名無しさん
2023/04/01(土) 03:49:24.51ID:tD9Ph5o/ Start-Jobの中で実行したら上手いこと裏でやってくれないだろうか
727デフォルトの名無しさん
2023/04/01(土) 09:42:35.62ID:nbrNF8T0 Start-Process -NoNewWindow cmd.exe "/c start /affinity xxx /b foo.exe"
これくらいしか思い浮かばなかった
これくらいしか思い浮かばなかった
728デフォルトの名無しさん
2023/04/01(土) 10:09:29.22ID:rM0w1xSL 定義が長くなったからこっちに貼り付けたよ
https://ideone.com/LOSuzD
使い方
bool [Win32API]::CreateProcessWithAffinity(appname, cmdline, affinity)
affinityはプロセスに直接設定するAPIが見つからなかったのでGet-ProcessをResumeThread前に呼び出して指定してる
サンプルはcmdを呼び出してpingをlocalhostに10回打ってる間にプロセス名とaffinity値を出してる
https://ideone.com/LOSuzD
使い方
bool [Win32API]::CreateProcessWithAffinity(appname, cmdline, affinity)
affinityはプロセスに直接設定するAPIが見つからなかったのでGet-ProcessをResumeThread前に呼び出して指定してる
サンプルはcmdを呼び出してpingをlocalhostに10回打ってる間にプロセス名とaffinity値を出してる
729727
2023/04/01(土) 10:22:16.44ID:nbrNF8T0 Start-Process -NoNewWindow -Wait cmd.exe "/c start /affinity xxx /b foo.exe"
こうだった
こうだった
730デフォルトの名無しさん
2023/04/01(土) 10:27:57.30ID:rM0w1xSL 寝ぼけてた。コールバックの部分下だけで良かったわ
System.Diagnostics.Process.GetProcessById(pInfo.dwProcessId).ProcessorAffinity = (IntPtr)affinity;
System.Diagnostics.Process.GetProcessById(pInfo.dwProcessId).ProcessorAffinity = (IntPtr)affinity;
731デフォルトの名無しさん
2023/04/01(土) 10:32:18.54ID:rM0w1xSL でもう一箇所、appnameに$nullを指定してもC#側型宣言で""に変換されてしまうので、CreateProcessの直前に下を追加しとくとcmdlineだけで動く
if (appname == "") { appname = null; }
if (appname == "") { appname = null; }
732デフォルトの名無しさん
2023/04/01(土) 10:52:36.56ID:NrUMzMDg これパイプすればいいんだよ
ポイントは () を使わないこと
(Start-Process).ProcessorAffinity = xxx は NG
Start-Process | ForEach-Object {} で OK
(Start-Process) | ForEach-Object {} は NG
& { Start-Process } | ForEach-Object {} でも OK
ポイントは () を使わないこと
(Start-Process).ProcessorAffinity = xxx は NG
Start-Process | ForEach-Object {} で OK
(Start-Process) | ForEach-Object {} は NG
& { Start-Process } | ForEach-Object {} でも OK
733デフォルトの名無しさん
2023/04/01(土) 11:09:34.29ID:rM0w1xSL734デフォルトの名無しさん
2023/04/01(土) 11:10:53.22ID:rM0w1xSL Start-Process cmd.exe -ArgumentList '/c echo hello world & ping 127.0.0.1 -n 10' -NoNewWindow -PassThru | %{ $_.ProcessorAffinity = 1; $_ | select Name, ProcessorAffinity }
735デフォルトの名無しさん
2023/04/01(土) 14:38:06.95ID:khXUWf7f 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 }
Start-Process cmd.exe -NoNewWindow -PassThru -Wait | % { $_.ProcessorAffinity = 1 } か
Start-Process cmd.exe -NoNewWindow -PassThru | % { $_.ProcessorAffinity = 1; Wait-Process -Id $_.Id }
736デフォルトの名無しさん
2023/04/01(土) 16:54:32.28ID:SzOWT/hN 717です. 反応してくださったかた ありがとうございました
>>718
if ("MyClass" -as [type]) → なるほど!…これでした!
>>721
私も,とりあえずは
try{ [MyClass] >$null } catch{ Add-Type -Path "〜.cs" >$null }
で 済ませていたのですが
例外に たよる書き方は,なんとなくカッコ悪い感じがして(笑)
>>718
if ("MyClass" -as [type]) → なるほど!…これでした!
>>721
私も,とりあえずは
try{ [MyClass] >$null } catch{ Add-Type -Path "〜.cs" >$null }
で 済ませていたのですが
例外に たよる書き方は,なんとなくカッコ悪い感じがして(笑)
737デフォルトの名無しさん
2023/04/01(土) 21:56:00.86ID:sdpm0Gxz >>716
(Start-Process -FilePath 〜〜〜 -ArgumentList 〜〜〜 -WindowStyle Hidden -PassThru).ProcessorAffinity = 1
(Start-Process -FilePath 〜〜〜 -ArgumentList 〜〜〜 -WindowStyle Hidden -PassThru).ProcessorAffinity = 1
738デフォルトの名無しさん
2023/04/01(土) 22:32:49.48ID:khXUWf7f それでは Start-Process を使わない場合と違って入力も出力もできない
739デフォルトの名無しさん
2023/04/01(土) 22:58:19.34ID:sdpm0Gxz あ〜、
> コマンドプロンプトのstartコマンドのように
> 新しいウィンドウを作成せず、使うプロセッサを指定して起動するにはどうすれば良いですか
というか
新しいウィンドウを作成せず、
コマンドプロンプトのstartコマンドのように使うプロセッサを指定して起動するにはどうすれば良いですか
という感じか。であればこれまでに出てた回答の方が正しいね。
ほぼ同じだけど自分なら
$proc = Start-Process -FilePath 〜 -NoNewWindow -PassThru; $proc.ProcessorAffinity = 1; $proc.WaitForExit();
みたいにするかなぁ。(でもStart-Processじゃなく小回りのきくProcessStartInfoを使うかな?)
> コマンドプロンプトのstartコマンドのように
> 新しいウィンドウを作成せず、使うプロセッサを指定して起動するにはどうすれば良いですか
というか
新しいウィンドウを作成せず、
コマンドプロンプトのstartコマンドのように使うプロセッサを指定して起動するにはどうすれば良いですか
という感じか。であればこれまでに出てた回答の方が正しいね。
ほぼ同じだけど自分なら
$proc = Start-Process -FilePath 〜 -NoNewWindow -PassThru; $proc.ProcessorAffinity = 1; $proc.WaitForExit();
みたいにするかなぁ。(でもStart-Processじゃなく小回りのきくProcessStartInfoを使うかな?)
740デフォルトの名無しさん
2023/04/02(日) 00:15:44.70ID:l9+T+h5c 質問です。
外部コマンドの標準出力やエラー出力を一緒に変数に入れたいのですが、
$result=外部コマンド.exe 2>&1
この式で一見動作はしてるようのですが、外部コマンドからエラー出力があった場合に赤い色が付き、powershell的なエラーメッセージも追加されてしまいます。
意図としては色とか追加メッセージとかは不要で、純粋に外部コマンドの標準出力やエラー出力を一緒に変数に取り込みたいだけなのですが、
そういう場合どう記述したら良いでしょうか。
外部コマンドの標準出力やエラー出力を一緒に変数に入れたいのですが、
$result=外部コマンド.exe 2>&1
この式で一見動作はしてるようのですが、外部コマンドからエラー出力があった場合に赤い色が付き、powershell的なエラーメッセージも追加されてしまいます。
意図としては色とか追加メッセージとかは不要で、純粋に外部コマンドの標準出力やエラー出力を一緒に変数に取り込みたいだけなのですが、
そういう場合どう記述したら良いでしょうか。
741デフォルトの名無しさん
2023/04/02(日) 00:47:59.12ID:h0WbN+8B 外部コマンドの引数が不要またはシンプルなら、
簡単で分かりやすいのはcmd上で標準出力にする方法
$result=cmd /c "外部コマンド.exe 2>&1"
簡単で分かりやすいのはcmd上で標準出力にする方法
$result=cmd /c "外部コマンド.exe 2>&1"
742デフォルトの名無しさん
2023/04/02(日) 01:46:53.77ID:l9+T+h5c >>741
cmd脱却を考えているので、できればpowershell流?の書き方があればお願いいたします
cmd脱却を考えているので、できればpowershell流?の書き方があればお願いいたします
743デフォルトの名無しさん
2023/04/02(日) 03:44:54.54ID:byiZ93ic >>742
Powershellでcmdを使いこなす技術を鍛えたほうが幸せになれると思うよ
Powershellでcmdを使いこなす技術を鍛えたほうが幸せになれると思うよ
744デフォルトの名無しさん
2023/04/02(日) 11:17:09.81ID:l9+T+h5c ためしにChatGPTに質問してみたら以下の回答でした
質問「powershell上から外部コマンドを実行し、その標準出力とエラー出力を、powershellによる出力の加工を抑止した状態で1つの変数に入れたい」
$output = & <コマンド> 2>&1 | Out-String
Out-Stringは盲点でした。一応文字列として取得できているのでこれでいいのかな
質問「powershell上から外部コマンドを実行し、その標準出力とエラー出力を、powershellによる出力の加工を抑止した状態で1つの変数に入れたい」
$output = & <コマンド> 2>&1 | Out-String
Out-Stringは盲点でした。一応文字列として取得できているのでこれでいいのかな
745デフォルトの名無しさん
2023/04/02(日) 11:29:33.76ID:yOzYb5by 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
これが失敗するなんて想像してなかった
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
これが失敗するなんて想像してなかった
746デフォルトの名無しさん
2023/04/02(日) 15:23:02.64ID:9IrG8+0n >>745
PowerShell5.1だと失敗しないな
7.3は駄目だった ターゲットのパスを絶対パスにすれば作れる
New-Item -ItemType Junction can't create relative link #18251
https://github.com/PowerShell/PowerShell/issues/18251
PowerShell5.1だと失敗しないな
7.3は駄目だった ターゲットのパスを絶対パスにすれば作れる
New-Item -ItemType Junction can't create relative link #18251
https://github.com/PowerShell/PowerShell/issues/18251
747デフォルトの名無しさん
2023/04/02(日) 16:46:18.09ID:yOzYb5by ジャンクションなら絶対パス必須でもいいけど
シンボリックリンクでは相対パスが使えないと不便
>>745 のテストをシンボリックリンクに変えてもやっぱりおかしい
ターゲットがディレクトリなのにファイルのシンボリックリンクになる
条件次第で逆にすることもできる
タイプ間違いだと補完や削除をするときに困るんだよな
だから最初からcmd.exeでmklinkしてる
シンボリックリンクでは相対パスが使えないと不便
>>745 のテストをシンボリックリンクに変えてもやっぱりおかしい
ターゲットがディレクトリなのにファイルのシンボリックリンクになる
条件次第で逆にすることもできる
タイプ間違いだと補完や削除をするときに困るんだよな
だから最初からcmd.exeでmklinkしてる
748デフォルトの名無しさん
2023/04/02(日) 21:47:00.28ID:9IrG8+0n Target type detection (file/directory) for relative symlinks is still broken, even on Windows #15235
https://github.com/PowerShell/PowerShell/issues/15235
これか?
2年前に立ったissueなのにまだ直ってないみたい
https://github.com/PowerShell/PowerShell/issues/15235
これか?
2年前に立ったissueなのにまだ直ってないみたい
749デフォルトの名無しさん
2023/04/03(月) 07:48:59.39ID:Jr4h81FG >>739
あの〜、コマンドプロンプトのstartだと1行の
start /B /AFFINITY 1 cmd.exe
のように「新しいウィンドウを作成せず、使うプロセッサを指定して起動する」には
小回りのきくProcessStartInfoを使うとどう書くの?
あの〜、コマンドプロンプトのstartだと1行の
start /B /AFFINITY 1 cmd.exe
のように「新しいウィンドウを作成せず、使うプロセッサを指定して起動する」には
小回りのきくProcessStartInfoを使うとどう書くの?
750デフォルトの名無しさん
2023/04/03(月) 08:48:40.85ID:hrmFy8ir .NETでの普通のやり方ならググるれば出てくるよ
751デフォルトの名無しさん
2023/04/03(月) 21:13:34.50ID:d+sLTFCG 例示ではプロセス起動・Process型オブジェクト取得にStart-Processを使ったけど
>>739は普段はProcessStartInfo使ってるってだけじゃないの。
私も引数あるときはStart-Process(-ArgumentList)避けてProcessクラス使う。
>>739は普段はProcessStartInfo使ってるってだけじゃないの。
私も引数あるときはStart-Process(-ArgumentList)避けてProcessクラス使う。
752デフォルトの名無しさん
2023/04/03(月) 21:20:59.87ID:9kyxsKiX PowerShellってWebスクレイピングには向いてないですか?
Pythonで作った方がいいですか?
PowerShellは職場用のスクリプトを何個か作ったりして少し分かるのですが、Pythonはまったく不慣れなので迷ってます
Pythonで作った方がいいですか?
PowerShellは職場用のスクリプトを何個か作ったりして少し分かるのですが、Pythonはまったく不慣れなので迷ってます
753デフォルトの名無しさん
2023/04/03(月) 21:35:29.28ID:NHigh4Tg Poweshellでちょっスクレイピング
http://sloppy-content.blog.jp/archives/12057529.html
【PowerShell】SeleniumモジュールでWebスクレイピングしたい
https://zenn.dev/hara_power/articles/815e3f3dc1e5655c4c22
http://sloppy-content.blog.jp/archives/12057529.html
【PowerShell】SeleniumモジュールでWebスクレイピングしたい
https://zenn.dev/hara_power/articles/815e3f3dc1e5655c4c22
754デフォルトの名無しさん
2023/04/03(月) 22:09:14.13ID:FTaZkaBO Windowsに限ればスクレイピング以外にもブラウザに直接細工する手段が充実してるからライブラリ頼みのpythonより向いてるとも言える
756デフォルトの名無しさん
2023/04/08(土) 22:48:22.89ID:wqsbQ+QM PowerShellでPersonal Communicationsを操作しようと思い
以下のサイトを参考にしようとしたのですが
https://www.tekizai.net/entry/2021/10/04/063000
64bit版のPowershellでは出来ないようです
64bit版でも動かせるように変更はできないでしょうか?
以下のサイトを参考にしようとしたのですが
https://www.tekizai.net/entry/2021/10/04/063000
64bit版のPowershellでは出来ないようです
64bit版でも動かせるように変更はできないでしょうか?
757デフォルトの名無しさん
2023/04/08(土) 23:26:55.43ID:ymsLMaB3 64bit環境用のPersonal CommunicationsのOCXやらが無い場合は32bitのpowershellからCreateObjectするしかないとは思うけど
そのサイトのVBA版では環境に関する言及がないね
32bit版Officeを使っているという前提で書いてるのかもしれないが試してみないと判らないね
そのサイトのVBA版では環境に関する言及がないね
32bit版Officeを使っているという前提で書いてるのかもしれないが試してみないと判らないね
758デフォルトの名無しさん
2023/04/10(月) 20:51:54.13ID:4PCv5Fk3 すいません、当方SEで技術的な質問です
administrator権限のユーザーでLinuxサーバーからパスワード認証でなく、秘密鍵と認証鍵の認証方式でwindowsサーバーにSSHを掛けたいのですが、administrator権限のユーザーですと、パスワードを聞かれてしまいます
他の権限のユーザーは問題無く認証されます
administrator権限では認証方式のSSHは使えないのでしょうか?
administrator権限のユーザーでLinuxサーバーからパスワード認証でなく、秘密鍵と認証鍵の認証方式でwindowsサーバーにSSHを掛けたいのですが、administrator権限のユーザーですと、パスワードを聞かれてしまいます
他の権限のユーザーは問題無く認証されます
administrator権限では認証方式のSSHは使えないのでしょうか?
759デフォルトの名無しさん
2023/04/10(月) 21:12:02.69ID:bM8RH+P4760デフォルトの名無しさん
2023/04/10(月) 21:31:04.64ID:4PCv5Fk3761デフォルトの名無しさん
2023/04/14(金) 21:40:03.65ID:qiPEiEw+ 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()
フォームの文字がぼやけるんだけど、なにか解決策はありますか?
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()
762デフォルトの名無しさん
2023/04/14(金) 21:40:32.33ID:qiPEiEw+ ちなみにOSはWindows11です
763デフォルトの名無しさん
2023/04/15(土) 13:51:30.62ID:iq3ZlEDB その辺て外人もあまり正解に辿り着いてない箇所だな
俺も辿り着いたとは言えんけど面倒だった
俺も辿り着いたとは言えんけど面倒だった
764デフォルトの名無しさん
2023/04/15(土) 14:12:07.08ID:ig+gwe+P C#を使うのが最適解
765デフォルトの名無しさん
2023/04/15(土) 15:02:15.83ID:cOO792TH powershellじゃなくてWindowsFormsの問題でしょ
「WindowsForms ぼやけ」で検索したらいくらでも出てきたけど
「WindowsForms ぼやけ」で検索したらいくらでも出てきたけど
766デフォルトの名無しさん
2023/04/15(土) 19:25:15.71ID:erslMsE0 WPFで作れば違うのか?
767デフォルトの名無しさん
2023/04/15(土) 20:21:51.02ID:iq3ZlEDB ちょっと意識して組めばできなくはないから環境を変える程でもないな
768デフォルトの名無しさん
2023/04/15(土) 22:14:25.62ID:raQFwlCG 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フォルダとは別にコピーされてしまいます。
同じフォルダ名があった場合サブフォルダの処理を飛ばしてフォルダ構造したままコピーする方法はないでしょうか。
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フォルダとは別にコピーされてしまいます。
同じフォルダ名があった場合サブフォルダの処理を飛ばしてフォルダ構造したままコピーする方法はないでしょうか。
769デフォルトの名無しさん
2023/04/15(土) 22:16:07.91ID:raQFwlCG フォルダ構造したまま→フォルダ構造を維持したまま
失礼しました。
失礼しました。
770デフォルトの名無しさん
2023/04/15(土) 23:22:30.72ID:iq3ZlEDB ・同じフォルダ名があった場合サブフォルダの処理を飛ばしたい
ってう制約を加えてchatGPTに聞いたらいいんじゃね
ってう制約を加えてchatGPTに聞いたらいいんじゃね
771768
2023/04/16(日) 01:08:07.22ID:i+x2SgN3 >>770
試してますがうまくいきませんね。aaaやbbbが例えであることをうまく理解してくれなくて、
全てのフォルダ名を手入力する必要があるコードしか作ってくれません。○や△みたいな記号に置き換えても同じ。
get-childitemで特定の深さ以下のフォルダ名を取得することができればうまく行きそうですが、
-depthは特定の深さ「まで」のフォルダを検索するオプションですよね?
特定の深さ以下のフォルダを検索する方法はありませんか?
試してますがうまくいきませんね。aaaやbbbが例えであることをうまく理解してくれなくて、
全てのフォルダ名を手入力する必要があるコードしか作ってくれません。○や△みたいな記号に置き換えても同じ。
get-childitemで特定の深さ以下のフォルダ名を取得することができればうまく行きそうですが、
-depthは特定の深さ「まで」のフォルダを検索するオプションですよね?
特定の深さ以下のフォルダを検索する方法はありませんか?
772デフォルトの名無しさん
2023/04/16(日) 11:56:14.63ID:QYDIaDii 一発でrecursiveでやるのを諦めて泥臭く2重なり3重なりの繰り返し処理にして
自分でフォルダを掘り下げていけばいいんじゃないの
自分でフォルダを掘り下げていけばいいんじゃないの
773デフォルトの名無しさん
2023/04/16(日) 11:57:11.68ID:QYDIaDii 深さが動的なら関数にして再帰呼び出し
774デフォルトの名無しさん
2023/04/16(日) 12:07:35.90ID:Gz6gIEIr >>771
「特定の深さ以下」ではなく「特定の深さ直下」を対象としたいんだよね?
「特定の深さ以下」ではなく「特定の深さ直下」を対象としたいんだよね?
775デフォルトの名無しさん
2023/04/16(日) 12:38:10.68ID:SPigkToS >>771
相対パスの概念がないのか?
相対パスの概念がないのか?
776デフォルトの名無しさん
2023/04/16(日) 12:47:20.03ID:SPigkToS >>768 はネタかもな
コピー先に何があるのかチェックしないという発想は、まったく理解できない。
初心者なら前提条件という概念がないのはわかる。
先にあったらこうする、そうでなかったらこうするなどの条件分岐がないなら、強引にやればいい。
そもそもROBOCOPYコマンドでできることをやろうとしているのは、これ学校の課題なのかなと思いました。
コピー先に何があるのかチェックしないという発想は、まったく理解できない。
初心者なら前提条件という概念がないのはわかる。
先にあったらこうする、そうでなかったらこうするなどの条件分岐がないなら、強引にやればいい。
そもそもROBOCOPYコマンドでできることをやろうとしているのは、これ学校の課題なのかなと思いました。
777デフォルトの名無しさん
2023/04/16(日) 15:01:28.21ID:EhcVUpdk 深さ3のディレクトリをそのままコピーすりゃいいだけじゃないの?
778768
2023/04/17(月) 01:51:03.87ID:GaP+UugE779デフォルトの名無しさん
2023/04/17(月) 02:46:16.45ID:dBG5z/eM 入出力をちゃんと定義できてないからおかしな事になる初心者あるあるだな
780デフォルトの名無しさん
2023/04/17(月) 11:31:05.75ID:udj2SRYX 特定の深度だけ処理してみた
※$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
}
}
※$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
}
}
781デフォルトの名無しさん
2023/04/19(水) 22:39:13.81ID:CpwHPFTk Start-ThreadJob や Register-EngineEvent のスクリプトブロックの中で
キャプチャされずにWrite-Output 相当の出力をする方法はないでしょうか
パイプラインに流したいので Write-Host ではなく Write-Output したいです
別のプロセスを経由する方法は思いついたのですが残念過ぎますし
ForEach-Object -Parallel のようにキャプチャされなければ良いのに
function hogepiyo {
begin { 処理本体はここで Start-ThreadJob しておく }
process { … }
end { … }
clean { … }
}
なんちゃら | hogepiyo | ぽげむた
のようにしたくて考えてます
要は入出力と処理を非同期にできれば他の方法でもありがたいです
キャプチャされずにWrite-Output 相当の出力をする方法はないでしょうか
パイプラインに流したいので Write-Host ではなく Write-Output したいです
別のプロセスを経由する方法は思いついたのですが残念過ぎますし
ForEach-Object -Parallel のようにキャプチャされなければ良いのに
function hogepiyo {
begin { 処理本体はここで Start-ThreadJob しておく }
process { … }
end { … }
clean { … }
}
なんちゃら | hogepiyo | ぽげむた
のようにしたくて考えてます
要は入出力と処理を非同期にできれば他の方法でもありがたいです
782デフォルトの名無しさん
2023/04/20(木) 22:12:24.17ID:dJqrvGvM キャプチャとか何言ってるのかわからない
783デフォルトの名無しさん
2023/04/20(木) 22:40:35.29ID:fUuxiSJs PowerShellでフォーム作るの割と苦痛なんだけど何かデザインモードとかないの?
784デフォルトの名無しさん
2023/04/21(金) 05:21:56.20ID:ZJfuu8vu Where-object多様するスクリプトに数万行のcsv食わせたら処理に1時間くらいかかる…
大量のデータ処理はWhere-object使うなってみかけたけど使わん方がいいのか
大量のデータ処理はWhere-object使うなってみかけたけど使わん方がいいのか
785デフォルトの名無しさん
2023/04/21(金) 07:34:50.39ID:TBBX4m6H 件数が少ないことが確実な時しか使わない。
スクリプトだとほとんど foreach(){} 使ってる。
パイプライン処理したい場合でも &{} や .{} や function の process{} あるいは filter。
スクリプトだとほとんど foreach(){} 使ってる。
パイプライン処理したい場合でも &{} や .{} や function の process{} あるいは filter。
786デフォルトの名無しさん
2023/04/21(金) 09:17:07.60ID:kA/+t8w0787デフォルトの名無しさん
2023/04/21(金) 11:30:54.75ID:c3fakvC2 >>784
PowerShell スクリプトのパフォーマンスに関する考慮事項
ttps://learn.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/performance/script-authoring-considerations?view=powershell-7.3
PowerShell スクリプトのパフォーマンスに関する考慮事項
ttps://learn.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/performance/script-authoring-considerations?view=powershell-7.3
788デフォルトの名無しさん
2023/04/21(金) 17:50:40.46ID:4gKwO2KA >>782
出力がコレクションにためられて Receive-Job が必要になるのを回避したい
Start-ThreadJob の -StreamingHost オプションの Write-Output 版な感じ
そんなオプションはないから回避方法を知りたい
Start-TheadJobだけでなくイベントハンドラから出力する場合も同じ
イベント飛ばせばいいかと思ったらハンドラがジョブ扱いされて頭抱えた
どうすれば Receive-Job を必要とせずに Write-Output 相当の出力ができるのだろう
出力がコレクションにためられて Receive-Job が必要になるのを回避したい
Start-ThreadJob の -StreamingHost オプションの Write-Output 版な感じ
そんなオプションはないから回避方法を知りたい
Start-TheadJobだけでなくイベントハンドラから出力する場合も同じ
イベント飛ばせばいいかと思ったらハンドラがジョブ扱いされて頭抱えた
どうすれば Receive-Job を必要とせずに Write-Output 相当の出力ができるのだろう
789デフォルトの名無しさん
2023/04/21(金) 18:06:57.94ID:xAAOLjx6790デフォルトの名無しさん
2023/04/21(金) 19:56:34.84ID:6pSKsEtx >>788
Jobである必要がないならRunspacePoolでできるんじゃね
Jobである必要がないならRunspacePoolでできるんじゃね
791デフォルトの名無しさん
2023/04/21(金) 21:03:30.48ID:Vzmd1cD+792デフォルトの名無しさん
2023/04/22(土) 10:34:00.20ID:iFkcYPBt 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 はどうすれば実現できますか
処理時間でずれていくのはもちろんかまいませんが
入力待ちにも出力を続ける具体例が知りたいです
・入力を読み続ける
・最後に読んだ入力を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 はどうすれば実現できますか
処理時間でずれていくのはもちろんかまいませんが
入力待ちにも出力を続ける具体例が知りたいです
793デフォルトの名無しさん
2023/04/22(土) 10:36:10.71ID:iFkcYPBt おっと間違い
(Get-Date) - $s でなく ((Get-Date) - $s) だ
(Get-Date) - $s でなく ((Get-Date) - $s) だ
794デフォルトの名無しさん
2023/04/22(土) 16:45:49.14ID:3JkCsMe2 >>792
「qなら終了」が何を示すかによるが、powershellのパイプは途中で打ち切る事は原則できないと考えた方が良い。
(endブロックが呼ばれない不完全なハックならググれば見つかる)
またパイプ処理の待機はpowershellのメインスレッドの待機という意味になるので、
そこに非同期イベントを介入させたい場合はそのイベント用の別スレッドを走らせておく必要がある。
「qなら終了」が何を示すかによるが、powershellのパイプは途中で打ち切る事は原則できないと考えた方が良い。
(endブロックが呼ばれない不完全なハックならググれば見つかる)
またパイプ処理の待機はpowershellのメインスレッドの待機という意味になるので、
そこに非同期イベントを介入させたい場合はそのイベント用の別スレッドを走らせておく必要がある。
795デフォルトの名無しさん
2023/04/22(土) 21:39:35.55ID:81urZ/Lj (New-Object -ComObject Shell.Application).NameSpace(10).MoveHere(ファイルパス)
上記の方法でファイルをごみ箱に移動する場合ファイルが1個なら問題ないんですが、
ファイルパスをを"z:\*"みたいにワイルドカードで指定するとなぜか
ごみ箱でなくC:\Users\ユーザー名にファイルが送られてしまいます。
どうすればごみ箱に送れましょうか?
上記の方法でファイルをごみ箱に移動する場合ファイルが1個なら問題ないんですが、
ファイルパスをを"z:\*"みたいにワイルドカードで指定するとなぜか
ごみ箱でなくC:\Users\ユーザー名にファイルが送られてしまいます。
どうすればごみ箱に送れましょうか?
796デフォルトの名無しさん
2023/04/23(日) 10:54:07.72ID:ElcI27v7 >>794
q は出力スレッドの停止マークで、入力の最後も意味するつもりだった (その後の入力はない)
という考えをくみ取って欲しくて例を付けたのだが伝わらなくて残念
パイプラインの中断にSelect-Object -First 1する話は知ってる
ていうか本題から話をそらそうとしてません?
知りたいのはメインスレッド以外からプライマリパイプラインに出力する方法
パイプラインの次段に送るにはどうすればいいか具体例が欲しい
q は出力スレッドの停止マークで、入力の最後も意味するつもりだった (その後の入力はない)
という考えをくみ取って欲しくて例を付けたのだが伝わらなくて残念
パイプラインの中断にSelect-Object -First 1する話は知ってる
ていうか本題から話をそらそうとしてません?
知りたいのはメインスレッド以外からプライマリパイプラインに出力する方法
パイプラインの次段に送るにはどうすればいいか具体例が欲しい
797デフォルトの名無しさん
2023/04/23(日) 15:49:22.67ID:fUzoPDLK シェルスクリプトやPowerShell が遅いのは、
毎行、何かのプロセスを起動するからじゃないの?
多くはプロセスの起動時間だろう
Ruby は、外部プロセスを起動しなければ、プロセスは1つのまま。
並行処理もあるけど
grep は、1GB を1秒!
毎行、何かのプロセスを起動するからじゃないの?
多くはプロセスの起動時間だろう
Ruby は、外部プロセスを起動しなければ、プロセスは1つのまま。
並行処理もあるけど
grep は、1GB を1秒!
798デフォルトの名無しさん
2023/04/23(日) 16:01:56.38ID:vCOHFjdN >>796
そもそもパイプは同期的にしか動かないので、次段でいくら細工しても上流が出力を起こしたタイミングに縛られる。
話を単純にするなら不規則な出力を受ける処理と一定間隔で出力する処理は分けるべきだろうね。
そもそもパイプは同期的にしか動かないので、次段でいくら細工しても上流が出力を起こしたタイミングに縛られる。
話を単純にするなら不規則な出力を受ける処理と一定間隔で出力する処理は分けるべきだろうね。
799デフォルトの名無しさん
2023/04/23(日) 16:05:07.36ID:fUzoPDLK >>795
移動なら、robocopy のmov/move を使えば?
移動なら、robocopy のmov/move を使えば?
800デフォルトの名無しさん
2023/04/23(日) 16:10:27.14ID:n0NMvdBV >>799
どうやればごみ箱に移動できましょうか?
どうやればごみ箱に移動できましょうか?
801デフォルトの名無しさん
2023/04/23(日) 16:33:01.94ID:aISPDv4l802デフォルトの名無しさん
2023/04/23(日) 17:57:33.46ID:ElcI27v7803デフォルトの名無しさん
2023/04/24(月) 17:53:43.44ID:cODz6Qqq >>801
どうもありがとうございます。そうします。
どうもありがとうございます。そうします。
804デフォルトの名無しさん
2023/04/25(火) 01:01:33.91ID:q0KJktEO 最近この言語で書くことあるけど関数の呼び出しを最初に書かないとエラー起こすなんて知らなくて問題解決に時間がかかった
多分ほとんどの人が関数はメインの後に書きたいと思うんだけどファイル分けて呼び出したりしてるの?
多分ほとんどの人が関数はメインの後に書きたいと思うんだけどファイル分けて呼び出したりしてるの?
805デフォルトの名無しさん
2023/04/25(火) 07:59:40.97ID:0OU27daL806デフォルトの名無しさん
2023/04/25(火) 08:14:10.57ID:Q567y34W >>805
定義を上書きできる言語なら呼び出し順序に意味があると思うけど、そうじゃないならただの手抜き仕様
定義を上書きできる言語なら呼び出し順序に意味があると思うけど、そうじゃないならただの手抜き仕様
807デフォルトの名無しさん
2023/04/25(火) 08:17:30.73ID:0OU27daL >>806
実行速度が速くなる、スコープが明確になる、などのメリットがあって敢えて採用されてるんだよ
JSとかも古くからあるfunction構文は順序関係ないが今推奨されてるアロー関数だと前に書かなきゃだめだ
実行速度が速くなる、スコープが明確になる、などのメリットがあって敢えて採用されてるんだよ
JSとかも古くからあるfunction構文は順序関係ないが今推奨されてるアロー関数だと前に書かなきゃだめだ
808デフォルトの名無しさん
2023/04/25(火) 08:19:33.10ID:0OU27daL あとスパゲティを防ぐ効果があるというメリットもあるな
C言語だとそれを目的にプロトタイプを書かない人もいる
C言語だとそれを目的にプロトタイプを書かない人もいる
809デフォルトの名無しさん
2023/04/25(火) 08:27:15.73ID:h+X7r+oZ 関数同士の依存関係が明確で前の関数が後の関数に依存しないなら初めてのコードを読みやすくなるというメリットもあるな
810デフォルトの名無しさん
2023/04/25(火) 08:33:08.87ID:TxIkuN+X ホイスティングってJS以外であるの?
811デフォルトの名無しさん
2023/04/25(火) 09:07:53.85ID:qRrW+mkA Java隆盛くらいの時代には関数はどこに書いても良いのが当たり前として定着したけど
関数型プログラミングでは関数宣言は変数や定数の宣言と同じようなものだからどうしても順序を意識せざるを得ない
順序の扱いを自動でやってくれる仕組みがホイスティングなんだけど、そのルールの分かりにくさやいやらしさが開発者に嫌われてJavaScriptのvarがletとconstに取って代わられた歴史がある
関数型プログラミングでは関数宣言は変数や定数の宣言と同じようなものだからどうしても順序を意識せざるを得ない
順序の扱いを自動でやってくれる仕組みがホイスティングなんだけど、そのルールの分かりにくさやいやらしさが開発者に嫌われてJavaScriptのvarがletとconstに取って代わられた歴史がある
812デフォルトの名無しさん
2023/04/25(火) 11:26:54.33ID://VjHWfL >>804
メインの部分をメイン関数として書いて実行時にメイン関数を呼び出すようにすればよいのでは?PowerShellはシェルとしても動くので実行時に先に関数が定義されていないといけないのは自然な動作のような気もする。
メインの部分をメイン関数として書いて実行時にメイン関数を呼び出すようにすればよいのでは?PowerShellはシェルとしても動くので実行時に先に関数が定義されていないといけないのは自然な動作のような気もする。
813デフォルトの名無しさん
2023/04/25(火) 11:29:40.93ID:Y1VsObgt vbsは関数後書きでもokだよ
よしvbs使おう
よしvbs使おう
814デフォルトの名無しさん
2023/04/25(火) 11:43:20.51ID:Xlw1eETD >>812
begin process endブロック使いたいときに発狂しそうだな
begin process endブロック使いたいときに発狂しそうだな
815デフォルトの名無しさん
2023/04/25(火) 21:27:41.00ID:RtJhGNCC powershellでもclass内なら順序関係なくなるよ
816デフォルトの名無しさん
2023/05/04(木) 17:38:09.61ID:spWJYsDj 自分のコード見たら別に後から宣言してても実行できてるんだが
コマンドレットの定義だとホイスティングされるとかある?
コマンドレットの定義だとホイスティングされるとかある?
817デフォルトの名無しさん
2023/05/04(木) 17:56:23.79ID:P088Z0u/ >>816
どういうコード書いてんのよ
どういうコード書いてんのよ
818デフォルトの名無しさん
2023/05/04(木) 21:18:57.29ID:FdNSNO1e >>816
古臭いと言われても、前に書いた方が無駄な混乱をさけられる。
古臭いと言われても、前に書いた方が無駄な混乱をさけられる。
819デフォルトの名無しさん
2023/05/05(金) 18:03:31.01ID:gmBJZ0Nw 動的言語は第一級関数のクロージャが多いから、
関数外で宣言したローカル変数が、関数内へ持ち込まれるので、
スコープが広くて、ヤバイ
さらに、JS はホイスティングされるから、超ヤバイ
ただし、Ruby の関数だけは第一級関数のクロージャではなく、
関数外で宣言したローカル変数は、関数内へ持ち込まれない
だから他の言語よりも、圧倒的にバグらないので、初心者向き
関数外で宣言したローカル変数が、関数内へ持ち込まれるので、
スコープが広くて、ヤバイ
さらに、JS はホイスティングされるから、超ヤバイ
ただし、Ruby の関数だけは第一級関数のクロージャではなく、
関数外で宣言したローカル変数は、関数内へ持ち込まれない
だから他の言語よりも、圧倒的にバグらないので、初心者向き
820デフォルトの名無しさん
2023/06/29(木) 13:26:04.42ID:GLUt9X10 get-childitem select-object Full name,でownerを追加する方法はありますか?ご存知の方、ご教示願います。
821デフォルトの名無しさん
2023/06/29(木) 17:48:28.46ID:xt/PffdC >820
Get-ChildItemだけではowner情報は取れない、Get-Aclで情報取得する必要がある
組み合わせで良ければ以下の様にSelect-Objectでプロパティ追加すれば出来る
Get-ChildItem|Select-Object FullName,@{n="Owner";e={Get-Acl $_.fullname|% {$_.Owner}}}
Get-ChildItemだけではowner情報は取れない、Get-Aclで情報取得する必要がある
組み合わせで良ければ以下の様にSelect-Objectでプロパティ追加すれば出来る
Get-ChildItem|Select-Object FullName,@{n="Owner";e={Get-Acl $_.fullname|% {$_.Owner}}}
822デフォルトの名無しさん
2023/07/07(金) 19:48:22.82ID:5l+s6JZK Outlook を起動してメールを送りたいのですが
本文のメールのフォントサイズや色の指定が一切無視されます。
Outlook 側の設定なのか、コードが悪いのかもよくわからず。。。
スレ違いならすいません
===================
$outlook = New-Object -comObject Outlook.Application
$mail = $outlook.CreateItem(0)
$mail.Subject = "件名テスト"
$mail.HTMLBody = "<html><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になるし下線は黒色になります。
なにとぞご教示お願いします
本文のメールのフォントサイズや色の指定が一切無視されます。
Outlook 側の設定なのか、コードが悪いのかもよくわからず。。。
スレ違いならすいません
===================
$outlook = New-Object -comObject Outlook.Application
$mail = $outlook.CreateItem(0)
$mail.Subject = "件名テスト"
$mail.HTMLBody = "<html><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になるし下線は黒色になります。
なにとぞご教示お願いします
823デフォルトの名無しさん
2023/07/10(月) 00:01:29.03ID:pvSg+WfU font-sizeの値に単位が無いから無視されてんじゃね
824デフォルトの名無しさん
2023/07/10(月) 03:13:05.95ID:ixw20e1S >>823
試したはず・・・と思いつつも確認したら普通に変更されました!!!
11px で確認したのかもしれません。11pt と書いたら普通に反映されました
ありがとうございます
ただ下線は相変わらず赤色にならず、黒色のままです。
#FF0000 も試したけど変わらず・・・
どうやら text-decoration-color がそもそも使えないようでした。
さささ<span style='text-decoration:underline; color:red;'>ししし</span>すすす<br>
とやったら文字も赤くなりましたが下線も赤くなりました。
Outlook に使える html の仕様との戦いな気がしてきた
これはどこで尋ねたら・・・
試したはず・・・と思いつつも確認したら普通に変更されました!!!
11px で確認したのかもしれません。11pt と書いたら普通に反映されました
ありがとうございます
ただ下線は相変わらず赤色にならず、黒色のままです。
#FF0000 も試したけど変わらず・・・
どうやら text-decoration-color がそもそも使えないようでした。
さささ<span style='text-decoration:underline; color:red;'>ししし</span>すすす<br>
とやったら文字も赤くなりましたが下線も赤くなりました。
Outlook に使える html の仕様との戦いな気がしてきた
これはどこで尋ねたら・・・
825デフォルトの名無しさん
2023/07/10(月) 10:11:13.02ID:CzqO5vr+ 後はstyle属性をシングルクォーテーションで括ってるのが気になった
全体の括りをシングルにして属性値をダブルに変更で動くと思うよ
全体の括りをシングルにして属性値をダブルに変更で動くと思うよ
826デフォルトの名無しさん
2023/07/10(月) 10:51:54.81ID:ixw20e1S シングルとダブルは変わりませんでした…
実際はPowerShellでメール本文内に変数を当てこむので
シングルのままでいこうと思います
あと下線だけ赤色は私の勘違いでした
赤下線の時は文字も赤くして問題なかったのでとりあえず解決しました
お手数おかけしました
ご助言くださった方ありがとうございました
実際はPowerShellでメール本文内に変数を当てこむので
シングルのままでいこうと思います
あと下線だけ赤色は私の勘違いでした
赤下線の時は文字も赤くして問題なかったのでとりあえず解決しました
お手数おかけしました
ご助言くださった方ありがとうございました
827デフォルトの名無しさん
2023/07/13(木) 11:56:03.10ID:cnmTEsiX 二週間ほど前に自分で調べて書いたのに、どうやって書いて動かしたのか全く思い出せなくて困ってます
自分で自分が信じられないんですが、教えてください。
やりたいこと:Read-Hostで指定したフォルダに存在するフォルダを取得し、各フォルダに指定したファイルをコピーする
引っかかっている点:
1)$input = Read-Host "コピー先フォルダを指定"
たとえばここでcopyと入力。規定のフォルダがC:\作業とする。
入力の結果、c:\作業\copyとして、ここにあるサブフォルダを取得したいので
$inputをc:\作業\copyにしたい。
2)Get-ChildItem でディレクトリ名のみ取得するには?
それでforeachでやってたと思うんですが・・・。
自分で自分が信じられないんですが、教えてください。
やりたいこと:Read-Hostで指定したフォルダに存在するフォルダを取得し、各フォルダに指定したファイルをコピーする
引っかかっている点:
1)$input = Read-Host "コピー先フォルダを指定"
たとえばここでcopyと入力。規定のフォルダがC:\作業とする。
入力の結果、c:\作業\copyとして、ここにあるサブフォルダを取得したいので
$inputをc:\作業\copyにしたい。
2)Get-ChildItem でディレクトリ名のみ取得するには?
それでforeachでやってたと思うんですが・・・。
828デフォルトの名無しさん
2023/07/13(木) 13:50:42.52ID:K8IsBXo8 Get-ChildItem -LiteralPath ([IO.Path]::Combine("C:\作業", (Read-Host "コピー先フォルダを指定"))) -Directory -Name
829デフォルトの名無しさん
2023/07/13(木) 17:51:09.66ID:cnmTEsiX830デフォルトの名無しさん
2023/07/14(金) 04:02:22.77ID:vOCFwCnb 多分いままで書いてたコードはこれ
# 規定のフォルダのパスを作成
$parent = join-path 'c:\作業' $input
# 上記パスのサブフォルダ作成
$names = ls -pspath $parent -di | % name
下記はエイリアス(関数の別名)
ls := get-childitem
% := foreach-object
# 規定のフォルダのパスを作成
$parent = join-path 'c:\作業' $input
# 上記パスのサブフォルダ作成
$names = ls -pspath $parent -di | % name
下記はエイリアス(関数の別名)
ls := get-childitem
% := foreach-object
831デフォルトの名無しさん
2023/07/14(金) 04:02:59.81ID:vOCFwCnb # 上記パスのサブフォルダ作成
↓
# 上記パスのサブフォルダ名を取得
↓
# 上記パスのサブフォルダ名を取得
832820
2023/07/18(火) 17:12:35.63ID:jBHsPJa3 >>821
遅くなりました。
set-location -pathで場所を指定したら、指定したフォルダのownerを取得できました。ありがとうございます。
get-Childitem -recruse -file ┃select-Object directoryName ,name ,extension ,Length Creationtime, lastACCESStime ,lastwriteTime, fullname ┃Export‐csv ‐Encodeing default xxx.csv
と一緒にできなかったのが悔やまれます。
遅くなりました。
set-location -pathで場所を指定したら、指定したフォルダのownerを取得できました。ありがとうございます。
get-Childitem -recruse -file ┃select-Object directoryName ,name ,extension ,Length Creationtime, lastACCESStime ,lastwriteTime, fullname ┃Export‐csv ‐Encodeing default xxx.csv
と一緒にできなかったのが悔やまれます。
833デフォルトの名無しさん
2023/07/18(火) 18:02:52.05ID:uMqw2ex7 そういう時はadd-memberするんだよ
834デフォルトの名無しさん
2023/07/18(火) 20:02:12.51ID:x3+Ehzia >>821の何がだめで、あるいは何が分からなくて、そのコマンドに組み込めなかったのか分からんな。
起点ディレクトリ自体の情報もCSVに含めたい、って事なのかな。
起点ディレクトリ自体の情報もCSVに含めたい、って事なのかな。
835デフォルトの名無しさん
2023/07/18(火) 22:45:48.56ID:BpIlHiPB powershellの学習曲線は険しい
本人が納得したならもうそれでいいだろう
本人が納得したならもうそれでいいだろう
837デフォルトの名無しさん
2023/07/19(水) 15:47:04.50ID:mqKqy4GV ならこんな感じで。
$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はいらない。
$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はいらない。
838820
2023/07/24(月) 18:16:28.42ID:yY3fBN5A >>837
ありがとうございますm(_ _)m
とりあえずownerを取得できました。列の入れ替えはPowerQueryで対処します。
neme,Extensio,owner,...したかったのですが。
ありがとうございますm(_ _)m
とりあえずownerを取得できました。列の入れ替えはPowerQueryで対処します。
neme,Extensio,owner,...したかったのですが。
839デフォルトの名無しさん
2023/08/02(水) 23:31:49.70ID:8Lc0dkYb Pythonでやったら楽なのに…と思う処理も他のメンバーに配る可能性を考えると泣く泣くpowershellでやることになる
嫌いな言語ではないけど凝った処理を書こうとすると見た目の癖が強いソースコードになりがち
嫌いな言語ではないけど凝った処理を書こうとすると見た目の癖が強いソースコードになりがち
840デフォルトの名無しさん
2023/08/05(土) 08:55:12.86ID:4wFerhHK Pythonは見た目の癖が強くないとでも?
841デフォルトの名無しさん
2023/08/05(土) 09:35:04.11ID:wvUeqD5z 泣く泣くpowershellに草
842デフォルトの名無しさん
2023/08/06(日) 22:29:47.72ID:5CExyS7F 質問なのですがパイプラインの結果を関数に渡して先頭から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' になる
やりたいことはパイプラインの結果を検証する処理をサブルーチン化したい(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' になる
843デフォルトの名無しさん
2023/08/06(日) 22:31:40.76ID:5CExyS7F 先頭3行抜かしましたorz
$result = reg query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v 'RegisteredOwner'
$cnt = 0
$result | ForEach-Object{ "TEST[$cnt}:" + $_; $cnt++ }
この次に>>842のコード。
$result = reg query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v 'RegisteredOwner'
$cnt = 0
$result | ForEach-Object{ "TEST[$cnt}:" + $_; $cnt++ }
この次に>>842のコード。
844デフォルトの名無しさん
2023/08/06(日) 22:48:34.72ID:5CExyS7F んまーなんかこれだとうまく行ったけんども思ってたのと違う……
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)
実はパイプラインの結果(オブジェクトの配列)は関数引数に渡せなかったりするので?
つなみにfunctionの引数部分で [array]$reg_query_result としてみてもうまく行かなかった。
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)
実はパイプラインの結果(オブジェクトの配列)は関数引数に渡せなかったりするので?
つなみにfunctionの引数部分で [array]$reg_query_result としてみてもうまく行かなかった。
845デフォルトの名無しさん
2023/08/07(月) 03:16:48.48ID:SSXgsNNw 文法が違う。
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'
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'
846デフォルトの名無しさん
2023/08/07(月) 06:50:14.57ID:L1yQ0BJe >>845
レス㌧クス
$Input利用(>>844)とBegin { } Process { }利用の違いはわかりた
$resultが数億オブジェクトだったりしたら後者の方がパイプラインがスムーズに流れてよさげ(未検証
一方、
>実はパイプラインの結果(オブジェクトの配列)は関数引数に渡せなかったりするので?(>>844)
については関数の呼び出し箇所が
$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?
レス㌧クス
$Input利用(>>844)とBegin { } Process { }利用の違いはわかりた
$resultが数億オブジェクトだったりしたら後者の方がパイプラインがスムーズに流れてよさげ(未検証
一方、
>実はパイプラインの結果(オブジェクトの配列)は関数引数に渡せなかったりするので?(>>844)
については関数の呼び出し箇所が
$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?
847デフォルトの名無しさん
2023/08/07(月) 06:54:08.66ID:FZVMVghc Select-ObjectのSkipとFirst使えばできるのでは?
848デフォルトの名無しさん
2023/08/07(月) 06:56:57.16ID:FZVMVghc 関数でやりたいという要件を見落としていた
849デフォルトの名無しさん
2023/08/07(月) 07:04:28.71ID:FZVMVghc >>842
> $result2 = Test-RegEnt($result, 'REG_SZ', 'Admin')
$result2 = Test-RegEnt $result 'REG_SZ' 'Admin'
でやりたいことはできるのではないでしょうか
> $result2 = Test-RegEnt($result, 'REG_SZ', 'Admin')
$result2 = Test-RegEnt $result 'REG_SZ' 'Admin'
でやりたいことはできるのではないでしょうか
850デフォルトの名無しさん
2023/08/07(月) 22:40:57.49ID:SSXgsNNw パイプラインと引数のどちらでも動くようにしたいなら
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と全く同じ挙動とか期待しないように。
※作りこむならパイプが繋がってるのかチェックして分岐の処理書いたりする。
なお、大量のデータをパイプラインに流すのはお勧めできない。
パイプラインは途中での打ち切りとか難しいし、
結局は普通にループ処理書いた方が速いし制御しやすいし分かりやすい事が多い気がする。
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と全く同じ挙動とか期待しないように。
※作りこむならパイプが繋がってるのかチェックして分岐の処理書いたりする。
なお、大量のデータをパイプラインに流すのはお勧めできない。
パイプラインは途中での打ち切りとか難しいし、
結局は普通にループ処理書いた方が速いし制御しやすいし分かりやすい事が多い気がする。
851デフォルトの名無しさん
2023/08/10(木) 07:01:52.35ID:3iQsMBl9 レス㌧クス、しかしながら大量データを引数で関数に渡すのはメモリ消費量、応答速度ともに悪くなることがわかったからやめるわサーセン;;;
どういうことかというと、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」以降のカウントが始まる
どういうことかというと、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」以降のカウントが始まる
852デフォルトの名無しさん
2023/08/10(木) 07:07:45.76ID:3iQsMBl9 つなみに
>$resultが数億オブジェクトだったりしたら後者の方がパイプラインがスムーズに流れてよさげ(>>846)
も検証すた、
>>846のレスポンスが即時のコードと似通っているが関数内で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」が表示される前に永劫の時間待たされる、、、
というわけで、パイプライン(の後段まで)に大量のデータを無駄に流すなというのは真やが
生じてしまった大量のデータはむしろパイプラインにしか流さないのが正義……
>$resultが数億オブジェクトだったりしたら後者の方がパイプラインがスムーズに流れてよさげ(>>846)
も検証すた、
>>846のレスポンスが即時のコードと似通っているが関数内で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」が表示される前に永劫の時間待たされる、、、
というわけで、パイプライン(の後段まで)に大量のデータを無駄に流すなというのは真やが
生じてしまった大量のデータはむしろパイプラインにしか流さないのが正義……
853デフォルトの名無しさん
2023/08/10(木) 07:10:57.08ID:3iQsMBl9 >>851の肝心のところに誤記が合ったスマンヌorz
*即座に*「cnt= 1」以降のカウントが始まるコードは正しくはこれ↓
function Test-FileContent() { BEGIN { $cnt = 0 } PROCESS { $cnt++; Write-Host "cnt=" $cnt } }
Get-Content .\bigfile.txt | Test-FileContent
*即座に*「cnt= 1」以降のカウントが始まるコードは正しくはこれ↓
function Test-FileContent() { BEGIN { $cnt = 0 } PROCESS { $cnt++; Write-Host "cnt=" $cnt } }
Get-Content .\bigfile.txt | Test-FileContent
854デフォルトの名無しさん
2023/08/11(金) 18:46:06.42ID:I7dwFhkG パイプの利点は個数を意識しなくて済むことだけど中断が一切できないしデメリットの方が多い
よっぽどの事情でもない限りコマンドレット自作しても遅いだけで良い事なんて1つもない
公式のselect -firstなんかはパイプの流儀に従ってないから似た事をしようとしてもあれ?って自らの間違いに気付くんだよ
powershellの深遠を覗くとそのいい加減さにガッカリするだけ
よっぽどの事情でもない限りコマンドレット自作しても遅いだけで良い事なんて1つもない
公式のselect -firstなんかはパイプの流儀に従ってないから似た事をしようとしてもあれ?って自らの間違いに気付くんだよ
powershellの深遠を覗くとそのいい加減さにガッカリするだけ
855デフォルトの名無しさん
2023/08/11(金) 19:17:06.70ID:SL3m3m5F 一番の利点はメモリの節約です
856デフォルトの名無しさん
2023/08/11(金) 19:30:40.13ID:I7dwFhkG メモリなんて遅さで相殺される
powershell + 大量データ = 遅くて不採用
powershell + 大量データ = 遅くて不採用
857デフォルトの名無しさん
2023/08/11(金) 19:42:42.98ID:bAYgNtyZ >>856
使いどころを履き違えるとそうなる
使いどころを履き違えるとそうなる
858デフォルトの名無しさん
2023/08/11(金) 19:56:15.04ID:I7dwFhkG859デフォルトの名無しさん
2023/08/11(金) 20:07:52.72ID:PQblbJTG 一番良いのは、Windowsを使わない
これにかぎる
こんなクソなOSを世界中から捨てるべき
これにかぎる
こんなクソなOSを世界中から捨てるべき
860デフォルトの名無しさん
2023/08/11(金) 20:09:59.59ID:SL3m3m5F Windowsは汎用事務処理端末としては競合なしだ
861デフォルトの名無しさん
2023/08/11(金) 20:27:11.32ID:SL3m3m5F メモリ効率とスループットは交換できるようなものではない
手軽さが不要ならPythonでも使っておけばいい
手軽さが不要ならPythonでも使っておけばいい
862デフォルトの名無しさん
2023/08/11(金) 21:36:23.24ID:55Ub7uv5 いまだにPowerShellがWindows専用だと思ってるアホを真っ先に捨てるべき
863デフォルトの名無しさん
2023/08/11(金) 23:05:41.72ID:FP8PIUGD で>>842の質問に戻るのですだが、動かなかったのは単純だが根本的な誤解してたのが原因……
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' が関数の出力となってた、というしくみ
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' が関数の出力となってた、というしくみ
864デフォルトの名無しさん
2023/08/11(金) 23:07:08.58ID:FP8PIUGD 正しくは>>845式に
>Test-RegEnt -reg_query_result $result -exp_type 'REG_SZ' -exp_value 'Admin'
またはその省略表記としては
>Test-RegEnt $result 'REG_SZ' 'Admin' # カンマ区切りではなくてスペース区切り
にせねばならなかった
ことがわかったorz
止むにやまれない事情で昨日一日で1500行書いてデバッグしたらその過程でわかった|||。n_
>Test-RegEnt -reg_query_result $result -exp_type 'REG_SZ' -exp_value 'Admin'
またはその省略表記としては
>Test-RegEnt $result 'REG_SZ' 'Admin' # カンマ区切りではなくてスペース区切り
にせねばならなかった
ことがわかったorz
止むにやまれない事情で昨日一日で1500行書いてデバッグしたらその過程でわかった|||。n_
865デフォルトの名無しさん
2023/08/11(金) 23:11:54.59ID:FP8PIUGD あと他のスクリプトをincludeするときの欠き方が気づかないとわかりにくい……
util.ps1 を同じフォルダにある someapp.ps1 からインクルードする場合は
'.\util.ps1'
ではダメで、
.'.\util.ps1'
にしないとutil.ps1で定義した何物も呼び出せないorz
ここで先頭の「.」はutil.ps1のスクリプトスコープを呼び出し元のスコープと同じにするという意味やがちょう紛らわしい……
util.ps1 を同じフォルダにある someapp.ps1 からインクルードする場合は
'.\util.ps1'
ではダメで、
.'.\util.ps1'
にしないとutil.ps1で定義した何物も呼び出せないorz
ここで先頭の「.」はutil.ps1のスクリプトスコープを呼び出し元のスコープと同じにするという意味やがちょう紛らわしい……
866デフォルトの名無しさん
2023/08/11(金) 23:20:54.21ID:FP8PIUGD あと関数内においては代入文、[void]にキャストした文、if文とかの条件式 を除く全ての文が出力を持つ、
という仕様のせいで危うく恐ろしいバグを作り込むところやった;;;
function Show-ErrDlg($msg) {
$wsobj = new-object -comobject wscript.shell
$wsobj.popup($msg, 0, 'エラー', 0 -bor 16)
}
function Test-Equipment1() {
$result = (何かのテスト)
if (!$result) { Show-ErrDlg('何かのテスト failed.') }
return $result
}
でとするとテストが失敗したときも
という仕様のせいで危うく恐ろしいバグを作り込むところやった;;;
function Show-ErrDlg($msg) {
$wsobj = new-object -comobject wscript.shell
$wsobj.popup($msg, 0, 'エラー', 0 -bor 16)
}
function Test-Equipment1() {
$result = (何かのテスト)
if (!$result) { Show-ErrDlg('何かのテスト failed.') }
return $result
}
でとするとテストが失敗したときも
867デフォルトの名無しさん
2023/08/11(金) 23:25:27.54ID:FP8PIUGD if (!(Test-Equipment1) { exit 1 }
(テスト正常終了の表示処理)
でテスト正常終了の表示が出るorz
これは何でかというと$wsobj.popup($msg, 0, 'エラー', 0 -bor 16) 」がクリックされたボタンの番号を出力する結果、$resultがまたしても配列
@( (「なんかのテスト」の結果), ($wsobj.popup()でクリックされたボタンの番号) )
となりこれが Test-Equipment1() の戻り値となり、それをif文で評価したら最後の要素
(テスト正常終了の表示処理)
でテスト正常終了の表示が出るorz
これは何でかというと$wsobj.popup($msg, 0, 'エラー', 0 -bor 16) 」がクリックされたボタンの番号を出力する結果、$resultがまたしても配列
@( (「なんかのテスト」の結果), ($wsobj.popup()でクリックされたボタンの番号) )
となりこれが Test-Equipment1() の戻り値となり、それをif文で評価したら最後の要素
868デフォルトの名無しさん
2023/08/11(金) 23:27:54.43ID:FP8PIUGD (OKボタンのコード6)と評価されるため、!6なので常に偽になるというしくみ、、、、
こう修正すたら直った
function Show-ErrDlg($msg) {
$wsobj = new-object -comobject wscript.shell
[void] $wsobj.popup($msg, 0, 'エラー', 0 -bor 16) # [void]付ける
}
わかるかこんなもん……
および原理的にlint的な機械的チェックもできない……
こう修正すたら直った
function Show-ErrDlg($msg) {
$wsobj = new-object -comobject wscript.shell
[void] $wsobj.popup($msg, 0, 'エラー', 0 -bor 16) # [void]付ける
}
わかるかこんなもん……
および原理的にlint的な機械的チェックもできない……
869デフォルトの名無しさん
2023/08/11(金) 23:35:32.35ID:FP8PIUGD これはデフォルトで出力無しとして、
なんかの接頭辞を付けた文だけが結果がパイプに出力されるるようにする仕様であるべきだった希ガス
(出力が無いというミスはすぐ気づける
てかWrite-Outputを省略可能としているのがそもその誤り……
※ 個人の感想です
いっぱい連投したがTeamsのつもりでShift+Enterしたら投稿されてしまったせいやスマンヌorz
いじょ
なんかの接頭辞を付けた文だけが結果がパイプに出力されるるようにする仕様であるべきだった希ガス
(出力が無いというミスはすぐ気づける
てかWrite-Outputを省略可能としているのがそもその誤り……
※ 個人の感想です
いっぱい連投したがTeamsのつもりでShift+Enterしたら投稿されてしまったせいやスマンヌorz
いじょ
2023/08/12(土) 00:58:59.52ID:H+b+A9qi
============================
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 」で表示を抑制したら楽になるかも
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 」で表示を抑制したら楽になるかも
871デフォルトの名無しさん
2023/08/12(土) 01:19:17.04ID:DbL0Mu2X >>842に言える事はパイプで何番目とかいう考えは捨てた方がいい
パイプは途中で処理を打ち切る機能が欠落してるから何番目だけに用があろうが全ストリームを読み終わるまで終わらない
パイプは途中で処理を打ち切る機能が欠落してるから何番目だけに用があろうが全ストリームを読み終わるまで終わらない
872デフォルトの名無しさん
2023/08/12(土) 08:19:31.33ID:IRt4i0hm ほぼ誤差だが |Out-Null より $null= で処理した方がパフォーマンスがよく、可読性も高い
873デフォルトの名無しさん
2023/08/12(土) 08:23:13.14ID:ueiwXwrP PowerShell スクリプトのパフォーマンスに関する考慮事項
https://learn.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/performance/script-authoring-considerations
https://learn.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/performance/script-authoring-considerations
874デフォルトの名無しさん
2023/08/12(土) 22:00:12.59ID:pISu+im0 >>871
わかりた
パイプラインの打ち切りは、実現方法はあるが円満な解決方法はなさげ(どれもこれもなんかしらのミソがつく
パイプで$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
わかりた
パイプラインの打ち切りは、実現方法はあるが円満な解決方法はなさげ(どれもこれもなんかしらのミソがつく
パイプで$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
875デフォルトの名無しさん
2023/08/12(土) 22:23:22.94ID:pISu+im0876デフォルトの名無しさん
2023/08/12(土) 22:55:15.75ID:zGmVrirz 関数の出力が意図せず(うっかり)複数個所から行われ分かりにくい点は
バッチとかシェルスクリプトの挙動に合わせすぎた為だろうね。
例えばping.exeを対象2か所に実行するバッチ(.bat)をパイプで繋げたら、
バッチ1つの実行で、ping2回の20行程度がパイプに流れる。
PowerShellスクリプトや関数もこれと同じだと考えればそんな違和感ないはずなんだけど、
元々他の言語なんかで「関数の戻り値は1つ(明示的な1つor関数末尾の1つ)」とか
「明示的に変数格納や出力などしなければ、メソッドや関数の戻り値は捨てられる」
って事に慣れてるし、PowerShellも同じ文法だから同じ挙動を期待しちゃう。
上でも出てるけど、標準ではパイプに流さない仕様とした方が
敬遠される点が減ったと思う。
バッチとかシェルスクリプトの挙動に合わせすぎた為だろうね。
例えばping.exeを対象2か所に実行するバッチ(.bat)をパイプで繋げたら、
バッチ1つの実行で、ping2回の20行程度がパイプに流れる。
PowerShellスクリプトや関数もこれと同じだと考えればそんな違和感ないはずなんだけど、
元々他の言語なんかで「関数の戻り値は1つ(明示的な1つor関数末尾の1つ)」とか
「明示的に変数格納や出力などしなければ、メソッドや関数の戻り値は捨てられる」
って事に慣れてるし、PowerShellも同じ文法だから同じ挙動を期待しちゃう。
上でも出てるけど、標準ではパイプに流さない仕様とした方が
敬遠される点が減ったと思う。
877デフォルトの名無しさん
2023/08/14(月) 13:31:51.80ID:4NX3l0Vm パイプはスレ違いのバッチスレでドヤ顔ワンライナーするぐらいしか能が無いと言っても過言
878デフォルトの名無しさん
2023/08/14(月) 21:15:06.40ID:5teSXOgl 1GiB程度のファイルを処理するときにはパイプは重宝するよ
879デフォルトの名無しさん
2023/08/15(火) 05:53:15.07ID:WIzBRZyi バッチファイルのパイプはメカニズムが違う
あれは実質一時ファイルを作って次段に渡しているだけなので遅い、と言おうと思ったが
"*<CR><LF>" を2^23個書き並べたbigfile.txtに対してコマンドプロンプトで
type bigfile.txt | find /C "*"
とやったら「瞬時に」
4194304
と返って来るのに、PowerShellで
Get-Content .\bigfile.txt | find.exe /C "*"
とやったら永劫の時間待たされた後
FIND: パラメーターの書式が違います
と言われた後Ctrl+Cにも応答しなくなた……どうなってるのこれ……
あれは実質一時ファイルを作って次段に渡しているだけなので遅い、と言おうと思ったが
"*<CR><LF>" を2^23個書き並べたbigfile.txtに対してコマンドプロンプトで
type bigfile.txt | find /C "*"
とやったら「瞬時に」
4194304
と返って来るのに、PowerShellで
Get-Content .\bigfile.txt | find.exe /C "*"
とやったら永劫の時間待たされた後
FIND: パラメーターの書式が違います
と言われた後Ctrl+Cにも応答しなくなた……どうなってるのこれ……
880デフォルトの名無しさん
2023/08/15(火) 14:11:57.72ID:e55ZiwZ3 そりゃパイプで外部コマンドに送ったら1行ずつfind.exe実行して終了するだろうから
おかしなことにもなるだろうよ
おかしなことにもなるだろうよ
881デフォルトの名無しさん
2023/08/15(火) 15:18:16.71ID:qi/dYdNU > あれは実質一時ファイルを作って次段に渡しているだけなので遅い
それはシングルタスクだったDOS時代の話だろ
NTのcmd.exeには当てはまらない
それはシングルタスクだったDOS時代の話だろ
NTのcmd.exeには当てはまらない
882デフォルトの名無しさん
2023/08/15(火) 15:39:41.88ID:LS4gbGEC cmd.exeはパイプやfor /Fのコマンドとかワーカースレッドを生成して
別タスク(子環境)としてデータの送り手や受け手を作ってるかな
別タスク(子環境)としてデータの送り手や受け手を作ってるかな
883デフォルトの名無しさん
2023/08/24(木) 22:36:16.57ID:W+JHQ2GG Get-WinEventでSystem.evtxだかのファイルを処理させるとコマンドレットが終了しても一定時間プロセスがファイル掴みっぱなしになるのどうにかしてくれ
わざわざ別プロセスでGet-WinEvent用のpowershell起動させる間抜けなコードになったぞ
わざわざ別プロセスでGet-WinEvent用のpowershell起動させる間抜けなコードになったぞ
884デフォルトの名無しさん
2023/08/25(金) 11:28:27.28ID:WAOpDjEy 処理速度都合なのかな〜って思ってるけど閉じる手段は提供して欲しい。
自分は.NETのクラス使って処理書いちゃった。
自分は.NETのクラス使って処理書いちゃった。
885デフォルトの名無しさん
2023/09/04(月) 19:42:45.42ID:hSX1x29k エクスプローラでファイル選択してコピーして
(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
まぁ…
なんか不必要に使いづらい気がするのは自分だけかな。
(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
まぁ…
なんか不必要に使いづらい気がするのは自分だけかな。
886デフォルトの名無しさん
2023/09/06(水) 19:07:34.39ID:1kNnDW8h $(Get-ClipBoard -Format FileDropList) | %{$_.GetType().ToString()}
→ System.IO.FileInfo
バッドノウハウの領域だなー
→ System.IO.FileInfo
バッドノウハウの領域だなー
887デフォルトの名無しさん
2023/09/12(火) 10:37:58.96ID:EIIMdpOe 隠し属性が設定されたファイルが排他されてるとかで読めない状況のときに
-ForceついたGet-Contentで読もうとすると隠し属性解除されるのは理由あるんだろうか
-ForceついたGet-Contentで読もうとすると隠し属性解除されるのは理由あるんだろうか
888デフォルトの名無しさん
2023/09/12(火) 13:50:19.66ID:KE5ufRbn 質問で申し訳ない
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)
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)
889デフォルトの名無しさん
2023/09/12(火) 16:40:21.35ID:OgaNelN6 CSVでエクスポートしなよ
890デフォルトの名無しさん
2023/09/12(火) 17:47:39.83ID:EIIMdpOe とりあえずこうすると回避できた。
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)
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)
891デフォルトの名無しさん
2023/09/12(火) 18:53:31.49ID:uneKtCE6 >>890
あざす!めっちゃ参考になるます
あざす!めっちゃ参考になるます
2023/09/13(水) 02:20:54.13ID:E0UN4wqY
$param = @([Type]::Missing) * 15
は
$param = @([Type]::Missing) * 0xFF
のほうが人にやさしい気がする
は
$param = @([Type]::Missing) * 0xFF
のほうが人にやさしい気がする
893デフォルトの名無しさん
2023/09/13(水) 07:53:07.83ID:mwnND43t は?
894デフォルトの名無しさん
2023/09/13(水) 09:33:15.43ID:ozJmt5GG ひ?
895デフォルトの名無しさん
2023/09/13(水) 23:41:10.61ID:tgD8Mqqk >>892の後者は配列に255を掛けてるように見えるのだが
人にやさしい部分てどこ?
人にやさしい部分てどこ?
896デフォルトの名無しさん
2023/09/14(木) 03:25:22.93ID:37z8xtDS マスクしてるのかと思ったわ
ちゃんとソース見てなかった
すまんこ
ちゃんとソース見てなかった
すまんこ
897デフォルトの名無しさん
2023/09/16(土) 23:53:08.17ID:DkE7QlfD 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()
【適当にフォーム作って表示】
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()
【適当にフォーム作って表示】
898デフォルトの名無しさん
2023/09/17(日) 01:59:03.31ID:ENG0J7cr >$Aの数字が毎回リセットされるんで
それ$Aを更新しようとする度に毎回スクリプトブロックで別の$Aが生成されるからやね
([ref]$A).Value = $false
と書けば元の$Aを探しにいくから更新できると思う
Powershellのはまりポイントの1つやね
それ$Aを更新しようとする度に毎回スクリプトブロックで別の$Aが生成されるからやね
([ref]$A).Value = $false
と書けば元の$Aを探しにいくから更新できると思う
Powershellのはまりポイントの1つやね
899デフォルトの名無しさん
2023/09/17(日) 03:18:20.18ID:LjIc1dUH powershellでGUIって、c#使えない宗教的理由でもあるの?
900デフォルトの名無しさん
2023/09/17(日) 05:45:06.34ID:5It5oWIy901デフォルトの名無しさん
2023/09/17(日) 09:35:27.80ID:LYUgOkBe PowerShellでGUI作れるんか!
知らんかった これは興味ある
知らんかった これは興味ある
902デフォルトの名無しさん
2023/09/17(日) 09:48:58.34ID:oJeCWV6s >>901
システム管理のサンプル スクリプト
https://learn.microsoft.com/ja-jp/powershell/scripting/samples/sample-scripts-for-administration
公式ドキュメントならここの「UI 要素の作成」って所を見てみるといい
システム管理のサンプル スクリプト
https://learn.microsoft.com/ja-jp/powershell/scripting/samples/sample-scripts-for-administration
公式ドキュメントならここの「UI 要素の作成」って所を見てみるといい
903デフォルトの名無しさん
2023/09/17(日) 13:31:47.95ID:LJFSWd1b GUI作れるとかマジか
ワザワザHTMLソース内部に仕込んでWEBベースでやりとりしてた俺は一体・・・
ワザワザHTMLソース内部に仕込んでWEBベースでやりとりしてた俺は一体・・・
904デフォルトの名無しさん
2023/09/17(日) 14:04:19.59ID:ENG0J7cr 一応.NET言語の1つではあるからGUIは普通に作れるが
俺はC#コード埋め込んでFuncやAction経由で必要時にpowershellと連携する感じの使い方だな
Powershellのコードだけで作るの自体が割と面倒なのや型チェックが働かない辺りとかかあんまメリットを感じない
俺はC#コード埋め込んでFuncやAction経由で必要時にpowershellと連携する感じの使い方だな
Powershellのコードだけで作るの自体が割と面倒なのや型チェックが働かない辺りとかかあんまメリットを感じない
905デフォルトの名無しさん
2023/09/26(火) 21:32:36.63ID:cR6Dxv5m htaの代わりとしてforms呼び出して組んでたけどcssが便利すぎて最近は使ってないな...
wpfはどうなんだろうか...
wpfはどうなんだろうか...
906デフォルトの名無しさん
2023/09/29(金) 04:49:25.46ID:wxGTflxT まじでかいな
907デフォルトの名無しさん
2023/10/06(金) 21:47:54.00ID:ESX4xHYZ 日付を元に指定範囲内の一意の数字を出すってできる?
200ぐらいある今日の一言的なものを毎日ランダムで出したいんだがアプリケーションを再起動すると変数リセットされて別の単語出てしまうのを抑止したい。
200ぐらいある今日の一言的なものを毎日ランダムで出したいんだがアプリケーションを再起動すると変数リセットされて別の単語出てしまうのを抑止したい。
908デフォルトの名無しさん
2023/10/06(金) 22:00:29.66ID:7j+1PDTD その日の初回の結果をファイルに出力して
2回目以降はそのファイルを読み込みに行けば良いのでは
2回目以降はそのファイルを読み込みに行けば良いのでは
909デフォルトの名無しさん
2023/10/06(金) 22:04:29.98ID:ESX4xHYZ910デフォルトの名無しさん
2023/10/06(金) 22:35:50.48ID:ESX4xHYZ >>908
できそうだからファイル出力の方向でやってみるありがとう。
できそうだからファイル出力の方向でやってみるありがとう。
911デフォルトの名無しさん
2023/10/06(金) 22:36:00.82ID:ESX4xHYZ >>908
できそうだからファイル出力の方向でやってみるありがとう。
できそうだからファイル出力の方向でやってみるありがとう。
912デフォルトの名無しさん
2023/10/06(金) 23:26:20.49ID:WmRjQTiM その条件なら日付をシード値とみなせるんだから
別の単語が出てくる方がおかしいんじゃないのか
基礎的な論理思考力が欠けているね
別の単語が出てくる方がおかしいんじゃないのか
基礎的な論理思考力が欠けているね
913デフォルトの名無しさん
2023/10/06(金) 23:44:27.78ID:7j+1PDTD あ、-SetSeedって完全固定の疑似乱数なのか。
再起動したら変わると思ってた。
再起動したら変わると思ってた。
914デフォルトの名無しさん
2023/10/07(土) 04:01:41.30ID:lBZtWf6D Get-Random -SetSeed $(Get-Date -Format "yyyymmdd") -Maximum 200
915デフォルトの名無しさん
2023/10/07(土) 06:18:44.31ID:xTEoYklV916デフォルトの名無しさん
2023/10/07(土) 15:47:42.69ID:lBZtWf6D 912 と 913 をワンライナーで視覚化しただけやぞ
917デフォルトの名無しさん
2023/10/08(日) 20:27:09.33ID:bO8eXdHU >>905
wpfも普通にいけるけど、vsのデザイナーがないと厳しいから、じゃあc#でいいかとなりがち
htaの代替としたらwpfかwinformで枠だけ作ってwebview2埋め込むのがおすすめ
qiitaでも記事があったはず
wpfも普通にいけるけど、vsのデザイナーがないと厳しいから、じゃあc#でいいかとなりがち
htaの代替としたらwpfかwinformで枠だけ作ってwebview2埋め込むのがおすすめ
qiitaでも記事があったはず
918デフォルトの名無しさん
2023/10/08(日) 22:07:55.52ID:SlOLtELZ webview2ランタイム自体の埋め込み手段がなあ
919デフォルトの名無しさん
2023/10/20(金) 16:26:02.69ID:3co0KDj6 こんにちは
フォルダの配下のすべてのテキストファイルを結合した文字列を出力したいです
フォルダ直下のファイルだけなら
Get-Content *.txt
でできました
該当するファイルの一覧は
Get-ChildItem -Recurse -Filter "*.txt" -Name
でできましたが
Get-ChildItem -Recurse -Filter "*.txt" -Name | Get-Content
としてもエラーになります
フォルダの配下のすべてのテキストファイルを結合した文字列を出力したいです
フォルダ直下のファイルだけなら
Get-Content *.txt
でできました
該当するファイルの一覧は
Get-ChildItem -Recurse -Filter "*.txt" -Name
でできましたが
Get-ChildItem -Recurse -Filter "*.txt" -Name | Get-Content
としてもエラーになります
920デフォルトの名無しさん
2023/10/20(金) 19:30:02.44ID:qU4/oN+w 「 -Name」が不要。
921デフォルトの名無しさん
2023/10/20(金) 20:49:00.72ID:3co0KDj6 できました!
922デフォルトの名無しさん
2023/10/31(火) 16:01:28.45ID:Vjqv9VpS PSNativeCommandPreserveBytePipe が楽しみすぎる
923デフォルトの名無しさん
2023/10/31(火) 16:01:33.19ID:Vjqv9VpS PSNativeCommandPreserveBytePipe が楽しみすぎる
924デフォルトの名無しさん
2023/10/31(火) 16:59:01.62ID:sGPoKgPO この言語って3次元以上の配列って出来ないって認識であってる?
二次元は
$array[0,0]で良いんだよね?
三次元というかジャグ配列?はとりあえず使えるから
$array[0][0,0]
でやってるんだけど中の2,3次元目とか中の要素数カウントが出来なくて結構困ってる
二次元は
$array[0,0]で良いんだよね?
三次元というかジャグ配列?はとりあえず使えるから
$array[0][0,0]
でやってるんだけど中の2,3次元目とか中の要素数カウントが出来なくて結構困ってる
925デフォルトの名無しさん
2023/10/31(火) 18:05:21.98ID:BgNWqm6B ジャグ配列で良いんだったら$array[0][0][0]…といくらでも入れ子にすれば良かろうに
926デフォルトの名無しさん
2023/10/31(火) 19:44:43.60ID:CQ6pveQE 多次元配列はこうじゃない?
$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)」の方が安全かも。
$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)」の方が安全かも。
927デフォルトの名無しさん
2023/10/31(火) 19:47:15.76ID:CQ6pveQE 要素数は
$array.GetLength(0) # 4
$array.GetLength(1) # 5
$array.GetLength(2) # 6
$array.GetLength(0) # 4
$array.GetLength(1) # 5
$array.GetLength(2) # 6
928デフォルトの名無しさん
2023/10/31(火) 19:54:44.51ID:sGPoKgPO あぁそっか普通に出来るのか初期化の仕方が悪かったみたい
普通の初期化でも3次元出来るんだね
調べたらジャグ配列のが処理早いそうなので結局そっち採用すると思う
レスしてくれた方有難う
普通の初期化でも3次元出来るんだね
調べたらジャグ配列のが処理早いそうなので結局そっち採用すると思う
レスしてくれた方有難う
929デフォルトの名無しさん
2023/11/10(金) 20:49:31.69ID:qelae/OI 7.4のGAはいつごろになりそう?
930デフォルトの名無しさん
2023/11/11(土) 09:09:55.24ID:JcjqK/bB 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
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
931デフォルトの名無しさん
2023/11/11(土) 09:43:40.20ID:FLa2E6qS Ideally に進んで今月中の GA に期待
ところで [console]::OutputEncoding って shift_jis と utf-8 のどっちにしてます?
ところで [console]::OutputEncoding って shift_jis と utf-8 のどっちにしてます?
932デフォルトの名無しさん
2023/11/11(土) 16:23:53.35ID:CPZqzXvF 7入れて何かいい事あんの?
それ、OS標準の5.1でできますよね?
もしかして、デベロッパーのオナニーに付き合わされていませんか?
それ、OS標準の5.1でできますよね?
もしかして、デベロッパーのオナニーに付き合わされていませんか?
933デフォルトの名無しさん
2023/11/12(日) 04:03:18.80ID:jdIWedpQ powershellでデフォルトの環境に手を加えないとできないことは他のPG言語に任せるべきだと思う
934デフォルトの名無しさん
2023/11/12(日) 12:28:59.88ID:mJhoQ9VQ 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入れてるよ
ttps://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.3
入れる入れないは個人の自由
5と7は共存できるし別にデメリットないから7入れてるよ
935デフォルトの名無しさん
2023/11/12(日) 16:32:02.61ID:K6g/AyoW スクリプト言語としてならどっちでもいいけど
インタラクティブなコマンドラインシェルとしてなら7が圧倒的に便利
sjis出力コマンドとutf-8出力コマンドの混在環境なら7.4でさらに便利
インタラクティブなコマンドラインシェルとしてなら7が圧倒的に便利
sjis出力コマンドとutf-8出力コマンドの混在環境なら7.4でさらに便利
936デフォルトの名無しさん
2023/11/12(日) 21:46:23.90ID:q3mytz3V >>935
シェルとしてどんな点が改善されているのですか?
シェルとしてどんな点が改善されているのですか?
937デフォルトの名無しさん
2023/11/15(水) 00:20:29.90ID:oV9ZzUgm 半角英数のファイルにUTF-16を追加する事故が起きないのは助かる
938デフォルトの名無しさん
2023/11/15(水) 23:34:51.35ID:Ik7Afwvr 最近始めたんですが
939デフォルトの名無しさん
2023/11/15(水) 23:40:29.80ID:Ik7Afwvr aに1代入したいんですがどうすればいいですか?
function hoge(){
[int]$a;
function moge(){
$this.a = 1;
}
moge;
return $a;
}
hoge #
function hoge(){
[int]$a;
function moge(){
$this.a = 1;
}
moge;
return $a;
}
hoge #
940デフォルトの名無しさん
2023/11/16(木) 09:22:30.17ID:HndTNurg ・classのメソッドとして書く(何か知らんがレキシカルスコープになる)
・javascriptを使う
・javascriptを使う
941デフォルトの名無しさん
2023/11/16(木) 10:09:03.23ID:vDdnsPkv942デフォルトの名無しさん
2023/11/16(木) 12:06:19.94ID:HndTNurg ref[]はpowerahellにおいてCポインタ程度には重要知識なのに
界隈で然程語られる事もなく知られていない
知られてはいけないとでも言うのだろうか…
界隈で然程語られる事もなく知られていない
知られてはいけないとでも言うのだろうか…
943デフォルトの名無しさん
2023/11/16(木) 13:08:37.33ID:evZ76lXK 何言ってんだか
944デフォルトの名無しさん
2023/11/16(木) 13:38:46.26ID:WvJyjQhC >>940
とあるオブジェクトの初期設定にこんな感じで書いてたんですが無理そうですか
了解しました
class hoge:object{
[object]$o_a;
[object]$o_b;
hoge (){
[int] $cnt;
function object_a_init(){
$this.cnt = 1;
}
object_a_init;
}
}
とあるオブジェクトの初期設定にこんな感じで書いてたんですが無理そうですか
了解しました
class hoge:object{
[object]$o_a;
[object]$o_b;
hoge (){
[int] $cnt;
function object_a_init(){
$this.cnt = 1;
}
object_a_init;
}
}
945デフォルトの名無しさん
2023/11/16(木) 15:17:07.39ID:FRf+5dUd 親スコープにある変数の値を変えたいなら
Set-Variable -Name a -Value 1 -Scope 1
Set-Variable -Name a -Value 1 -Scope 1
946デフォルトの名無しさん
2023/11/16(木) 17:00:58.20ID:HndTNurg947デフォルトの名無しさん
2023/11/16(木) 17:15:32.66ID:JFk7nC9m 横からすいません
なんでこれはエラーになるんでしょうか
pwsh -nop -c "[System.Text.Encoding]::GetEncoding(932)"
-c を使わずに pwsh -nop と起動して
[System.Text.Encoding]::GetEncoding(932)
を入れると動くのもわからない・・・
なんでこれはエラーになるんでしょうか
pwsh -nop -c "[System.Text.Encoding]::GetEncoding(932)"
-c を使わずに pwsh -nop と起動して
[System.Text.Encoding]::GetEncoding(932)
を入れると動くのもわからない・・・
948デフォルトの名無しさん
2023/11/16(木) 18:13:00.55ID:vDdnsPkv エラーって何のエラーなの
949デフォルトの名無しさん
2023/11/16(木) 20:12:17.64ID:JFk7nC9m 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."
だそうです
だそうです
950デフォルトの名無しさん
2023/11/16(木) 20:17:57.10ID:JFk7nC9m Encoding.RegisterProvider でぐぐったら解決しました
951デフォルトの名無しさん
2023/11/16(木) 22:05:45.00ID:wYK3pDi3 >>939を動くように直したげたよ
function hoge(){
[int]$a = "1" # $aを値で初期化しつつ型を強制。型宣言というよりキャストに相当。[int]に強制されるので値が文字列でも$aにはSystem.Int32に変換された値が入る
$a.GetType() | Write-Host # $aの値の型をコンソールに出力 System.Int32
function moge(){
([ref]$a).Value = 1 # >>941-942の言うブロックで変数を生成せず既存の変数を参照して値を代入する記法
}
moge
$a # 関数の打ち切りの意図を除きreturnキーワード不要。powershellのfuncitonは最後に限らず値を返す式は全部返そうとする
}
hoge
function hoge(){
[int]$a = "1" # $aを値で初期化しつつ型を強制。型宣言というよりキャストに相当。[int]に強制されるので値が文字列でも$aにはSystem.Int32に変換された値が入る
$a.GetType() | Write-Host # $aの値の型をコンソールに出力 System.Int32
function moge(){
([ref]$a).Value = 1 # >>941-942の言うブロックで変数を生成せず既存の変数を参照して値を代入する記法
}
moge
$a # 関数の打ち切りの意図を除きreturnキーワード不要。powershellのfuncitonは最後に限らず値を返す式は全部返そうとする
}
hoge
952デフォルトの名無しさん
2023/11/17(金) 11:55:26.61ID:i3gkpHOP >>939
参照渡しでやってみれば?
--------
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
参照渡しでやってみれば?
--------
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
953デフォルトの名無しさん
2023/11/17(金) 14:37:28.42ID:05VltA/O PowerShell 7.4 General Availability
https://devblogs.microsoft.com/powershell/powershell-7-4-general-availability/
PSNativeCommandPreserveBytePipe 待ってた!
https://devblogs.microsoft.com/powershell/powershell-7-4-general-availability/
PSNativeCommandPreserveBytePipe 待ってた!
954デフォルトの名無しさん
2023/11/17(金) 20:30:46.86ID:Wtzmq/3L リンク先読んでないけど、.exeにパイプしたときに早くなる(普通になる)のかな
955デフォルトの名無しさん
2023/11/20(月) 14:11:07.62ID:HI5+Omcp 文字列を8文字ごとに分割して配列に格納したいのですが
文字列が8文字以下だと1文字ずつ分割されてしまいます。
$nums = @()
$nums = $num -split '(.{1,8})' | Where-Object{$_}
上記を実行すると、
$num = 12345678 のとき、$num[0] は 1が格納されるのですが、
12345678が格納されるようにするには、どうすればよいでしょうか。
文字列が8文字以下だと1文字ずつ分割されてしまいます。
$nums = @()
$nums = $num -split '(.{1,8})' | Where-Object{$_}
上記を実行すると、
$num = 12345678 のとき、$num[0] は 1が格納されるのですが、
12345678が格納されるようにするには、どうすればよいでしょうか。
956デフォルトの名無しさん
2023/11/20(月) 14:50:35.31ID:HI5+Omcp957デフォルトの名無しさん
2023/11/20(月) 15:52:48.41ID:fHSnLnjq $numsには文字列の"12345678"が代入されてるから
$nums[0]だと"12345678"の1文字目の1が返る
1行目を [string[]]$nums = @() とするか
2行目を $nums = @(12345678 -split '(.{1,8})' | Where-Object{$_}) とすればOK
$nums[0]だと"12345678"の1文字目の1が返る
1行目を [string[]]$nums = @() とするか
2行目を $nums = @(12345678 -split '(.{1,8})' | Where-Object{$_}) とすればOK
958デフォルトの名無しさん
2023/11/20(月) 17:23:25.47ID:HI5+Omcp >>0957
ありがとうございます!
できました。
ありがとうございます!
できました。
959デフォルトの名無しさん
2023/11/21(火) 21:09:20.96ID:qJoihvDX 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 にすると同じみたいだけど
具体的にどうなってるのか今更だけど知っておきたい
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 にすると同じみたいだけど
具体的にどうなってるのか今更だけど知っておきたい
960デフォルトの名無しさん
2023/11/21(火) 21:20:45.10ID:CeBFd4j1961デフォルトの名無しさん
2023/11/21(火) 22:46:00.10ID:qJoihvDX 対処法が知りたいんじゃなくてどう解析されたかが知りたい
962デフォルトの名無しさん
2023/11/21(火) 22:57:00.47ID:wGZJ97Pn コマンドラインのパース内容をデバッグできるコマンドレットがあって
inactionで紹介されてた気がするけど何か思い出せない
inactionで紹介されてた気がするけど何か思い出せない
963デフォルトの名無しさん
2023/11/22(水) 00:52:11.84ID:z2bY/yQG $PSVersionTable
PSVersion 5.1
Ruby の1-liner では、%Q 記法があるから大丈夫
ruby -e 'print %Q(\\)'
\
ruby -e 'print %Q(あaい)'
あaい
PSVersion 5.1
Ruby の1-liner では、%Q 記法があるから大丈夫
ruby -e 'print %Q(\\)'
\
ruby -e 'print %Q(あaい)'
あaい
964デフォルトの名無しさん
2023/11/22(水) 04:23:14.63ID:nZzIGDLb >>962
Get-Command | sls "breakpoint|callstack"
デバッガーについて - PowerShell | Microsoft Learn
ttps://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_debuggers?view=powershell-5.1
Get-Command | sls "breakpoint|callstack"
デバッガーについて - PowerShell | Microsoft Learn
ttps://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_debuggers?view=powershell-5.1
965デフォルトの名無しさん
2023/11/22(水) 10:26:54.20ID:Yh77KGhz966デフォルトの名無しさん
2023/11/22(水) 10:52:24.03ID:Yh77KGhz 他に、形態素解析みたいに分解・解析できる機能もあった気がするが忘れた
967デフォルトの名無しさん
2023/11/22(水) 14:18:25.39ID:W8vcuvaF PowerShell 7.4 だと python -c 'print("\\")' ですむことを
Windows PowerShell 5.1 だとどう書けばいいんだ
--% を使っても使わなくても分からん
Windows PowerShell 5.1 だとどう書けばいいんだ
--% を使っても使わなくても分からん
968デフォルトの名無しさん
2023/11/22(水) 15:05:51.75ID:fKGlzN6D パラメータの干渉受けたくないなら普通にStart-Processでいいでしょ
969デフォルトの名無しさん
2023/11/22(水) 15:26:30.66ID:W8vcuvaF 対話シェルでStart-Processするのはつらい
970デフォルトの名無しさん
2023/11/22(水) 15:34:55.56ID:W8vcuvaF つらいのは我慢するとしてStart-Processを使ってどう書けばいいの
971デフォルトの名無しさん
2023/11/22(水) 20:54:48.61ID:5rDf7evN pythonの引用符はシングルもダブルもエスケープシーケンス展開されるからおかしな解釈になってるだけだな
pythonの仕様を呪うがいい
pythonの仕様を呪うがいい
972デフォルトの名無しさん
2023/11/22(水) 22:06:38.07ID:W8vcuvaF pythonは例として使っただけだしどうでもいいよ
あくまで興味の対象はPowerShellのコマンドラインのパース
やっぱ 7.4 すげぇで終わってもいいんだけど
なんか 7.4 の --% が腐ってる気がする
5.1 の想定通りの --% と違って勝手に引用符加えてぶっ壊してる感じ
はやいとこ直して欲しい
あくまで興味の対象はPowerShellのコマンドラインのパース
やっぱ 7.4 すげぇで終わってもいいんだけど
なんか 7.4 の --% が腐ってる気がする
5.1 の想定通りの --% と違って勝手に引用符加えてぶっ壊してる感じ
はやいとこ直して欲しい
973デフォルトの名無しさん
2023/11/22(水) 22:37:16.49ID:5rDf7evN うーんどうでもいい変なの相手しちゃった
974デフォルトの名無しさん
2023/11/23(木) 17:39:38.00ID:Rimm12ii いやわかんないなら別にいいけど一応書いとくわ
もちろん 7.4 を Windows で使う話
stop-parsing token (--%) は以後のパースをしないはずなのに
引用符無視して空白で引数を分割してコマンド起動してるっぽい
CreateProcessまでに引用符が変に補完されるから意図通り動かない
--% が出てきたら引数の分割はネイティブコマンドに任せないとあかん
$PSNativeCommandArgumentPassing が Legacy の時と同じ処理な
そういうわけで Legacy 扱いされる .cmd とかでは問題ない
おかしいのは Standard 扱いされる .exe なんかの場合だけ
PSNativeCommandArgumentPassing の説明
>この実験的な機能が有効になっていると、PowerShell は、ネイティブの実行可能
>ファイルを呼び出すときに、文字列を再構築する現在の機構ではなく、
>StartProcessInfo オブジェクトの ArgumentList プロパティを使用します。
にある、文字列を再構築するのが Legacy、Argumentlist を使うのが Standard
という違いがわかれば理解できる話なんだが期待はしてない
もちろん 7.4 を Windows で使う話
stop-parsing token (--%) は以後のパースをしないはずなのに
引用符無視して空白で引数を分割してコマンド起動してるっぽい
CreateProcessまでに引用符が変に補完されるから意図通り動かない
--% が出てきたら引数の分割はネイティブコマンドに任せないとあかん
$PSNativeCommandArgumentPassing が Legacy の時と同じ処理な
そういうわけで Legacy 扱いされる .cmd とかでは問題ない
おかしいのは Standard 扱いされる .exe なんかの場合だけ
PSNativeCommandArgumentPassing の説明
>この実験的な機能が有効になっていると、PowerShell は、ネイティブの実行可能
>ファイルを呼び出すときに、文字列を再構築する現在の機構ではなく、
>StartProcessInfo オブジェクトの ArgumentList プロパティを使用します。
にある、文字列を再構築するのが Legacy、Argumentlist を使うのが Standard
という違いがわかれば理解できる話なんだが期待はしてない
975デフォルトの名無しさん
2023/11/23(木) 22:03:41.74ID:KHOftQWe Powershellを体系的に学ぶにあたっておすすめの本ってありますか?
やりたいことをググってコードをコピペして使用してる状態で、コードの理解度が深まらないと思ったので体系的に学びたいと思いました。
自分のPowershellの用途は、日常的な作業の自動化(テキストファイルの読み書き、ファイルの起動やタスキル、アクティブウィンドウの切り替え、robocopyでのバックアップなど)で使っています。
やりたいことをググってコードをコピペして使用してる状態で、コードの理解度が深まらないと思ったので体系的に学びたいと思いました。
自分のPowershellの用途は、日常的な作業の自動化(テキストファイルの読み書き、ファイルの起動やタスキル、アクティブウィンドウの切り替え、robocopyでのバックアップなど)で使っています。
976デフォルトの名無しさん
2023/11/23(木) 22:45:32.85ID:38VIgpCL 馬鹿には無理
977デフォルトの名無しさん
2023/11/23(木) 23:00:45.15ID:09UkZirn 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に置き換え可能だから
https://sd.blackball.lv/library/Windows_PowerShell_in_Action_3rd_Edition_(2017).pdf
ただしこの本は6年前の情報。英語PDFだけど今は色々と翻訳手段もあるから読めると思う
powershellならWindows上の事であれば大抵の事はできるけど
本当に便利に使うならC#や.NETの前提知識があった方がいいだろうね
C#関連で可能な事ならほぼpowershellに置き換え可能だから
978デフォルトの名無しさん
2023/11/24(金) 00:12:01.77ID:kL+9jaCp Powershell で複雑なものは書けないから結局、Ruby になる。
WSL2, Linux側からなら、Windows側をいじれるし
WSL2, Linux側からなら、Windows側をいじれるし
979デフォルトの名無しさん
2023/11/24(金) 03:38:21.50ID:k2LHl+dn rubyガイジなんだろうけどそこでrubyになるのは贔屓目に見てもおかしいだろ
980デフォルトの名無しさん
2023/11/24(金) 05:42:11.56ID:IciYTcVm >>975
コードをコピーしてchatGPTかPerplexityで「PowerShellで"〜〜〜"はどういう意味?」を聞けばいい
コードをコピーしてchatGPTかPerplexityで「PowerShellで"〜〜〜"はどういう意味?」を聞けばいい
981デフォルトの名無しさん
2023/11/24(金) 13:14:03.37ID:4NGqTzL9982デフォルトの名無しさん
2023/11/25(土) 12:02:22.73ID:pLnatqec 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
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
983デフォルトの名無しさん
2023/11/25(土) 18:06:48.53ID:wD6fmxci MSの自動翻訳は5分と読んでられない
984デフォルトの名無しさん
2023/11/25(土) 18:41:01.39ID:444pwTGg 英語ページでOK
985デフォルトの名無しさん
2023/11/25(土) 18:53:18.66ID:Q+kYJTm7 975です。おすすめのドキュメント教えてくれた方ありがとうございます。
一つ気になったのですが、学習の順番としてはC#もしくは.NETから入ったほうが効率的ですか?
自分がPowershell始めたきっかけがグローバルホットキーをうまく使いたいというのが始まりで、
後述URLのコードをベースに継ぎ足しで書き加えている状態です。
PowerShellとC#でグローバルホットキーを登録する
https://qiita.com/minr/items/72b02d673727f9eb4c37
※自分のC#のレベルはHelloWorld出したぐらいまで、.NETについても知識としてほぼ白紙です。
一つ気になったのですが、学習の順番としてはC#もしくは.NETから入ったほうが効率的ですか?
自分がPowershell始めたきっかけがグローバルホットキーをうまく使いたいというのが始まりで、
後述URLのコードをベースに継ぎ足しで書き加えている状態です。
PowerShellとC#でグローバルホットキーを登録する
https://qiita.com/minr/items/72b02d673727f9eb4c37
※自分のC#のレベルはHelloWorld出したぐらいまで、.NETについても知識としてほぼ白紙です。
986デフォルトの名無しさん
2023/11/25(土) 19:23:35.12ID:c65Q6uO9 ダボゥクリッコゥで実行出来ない面倒臭いものを誰が使うんですか?
987デフォルトの名無しさん
2023/11/25(土) 21:21:00.31ID:2+5b9joX ダブルクリックで実行できたWSHはLOVELETTERワームやら何やらでセキュリティが低いとみなされて非推奨になりましたとさ
めでたしめでたし
めでたしめでたし
988デフォルトの名無しさん
2023/11/26(日) 00:07:05.46ID:tHVdGucZ 例えば、デスクトップにショートカットを作って、リンク先を以下のようにすると、
ダブルクリックでPowershell を起動して、Ruby でスクリプトを実行する
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe "ruby C:/Users/Owner/Documents/Ruby/a.rb"
初心者はRuby で始めるべき。
C# はRubyの10倍、時間が掛かるし難しい
ダブルクリックでPowershell を起動して、Ruby でスクリプトを実行する
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe "ruby C:/Users/Owner/Documents/Ruby/a.rb"
初心者はRuby で始めるべき。
C# はRubyの10倍、時間が掛かるし難しい
989デフォルトの名無しさん
2023/11/26(日) 04:20:48.27ID:xBck3nSS こんなんに粘着されちゃmatzが気の毒だわな
990デフォルトの名無しさん
2023/11/26(日) 07:10:42.58ID:forkl5ep 同じ民族同士、分断せずに仲良くしろよ
DevBlogs - Microsoft Developer Blogs
ttps://devblogs.microsoft.com/
DevBlogs - Microsoft Developer Blogs
ttps://devblogs.microsoft.com/
991デフォルトの名無しさん
2023/11/26(日) 10:47:01.19ID:d/KzVdDP MatzはWindowsやC++に興味無いから
よほどエゴサでもしないかぎり気の毒なことにはならないわ
知らぬが仏
よほどエゴサでもしないかぎり気の毒なことにはならないわ
知らぬが仏
992デフォルトの名無しさん
2023/11/26(日) 15:25:10.25ID:06WEnIxy う
993デフォルトの名無しさん
2023/11/26(日) 15:25:17.90ID:06WEnIxy め
994デフォルトの名無しさん
2023/11/26(日) 15:37:23.40ID:tLrTLV3h というか、Windowsの日本語localizationのデフォルトが未だにクゾだから、
「☑ベータ: ワールドワイド言語サポートを Unicode UTF-8 を使用」
を最初から標準にしていないかぎり、Windowsを日本語で使うこと自体、クソということになる
「☑ベータ: ワールドワイド言語サポートを Unicode UTF-8 を使用」
を最初から標準にしていないかぎり、Windowsを日本語で使うこと自体、クソということになる
995デフォルトの名無しさん
2023/11/29(水) 13:21:53.02ID:FINewHXp 外部コマンドを実行するときに外部コマンド自体は正常な戻り値を返してるのにpowershellで動かすとNativeCommandErrorって例外が出るんだけどなんでだかわかる人おる?
996デフォルトの名無しさん
2023/11/29(水) 15:06:21.22ID:UMPQWy8o そういうのはまず再現できるコードを貼ってね
997デフォルトの名無しさん
2023/11/29(水) 16:09:41.88ID:0g8RZ7sB ISE上で実行した場合に標準エラー出力があると
戻り値に関係なくNativeCommandErrorになるけど、このこと?
そうでなければ>>996にプラスしてバージョンなどの環境も示してね。
あと次スレ
https://mevius.5ch.net/test/read.cgi/tech/1701241669/
戻り値に関係なくNativeCommandErrorになるけど、このこと?
そうでなければ>>996にプラスしてバージョンなどの環境も示してね。
あと次スレ
https://mevius.5ch.net/test/read.cgi/tech/1701241669/
998デフォルトの名無しさん
2023/11/29(水) 17:02:28.41ID:FINewHXp >>997
多分それですありがとうございます
多分それですありがとうございます
999デフォルトの名無しさん
2023/11/29(水) 18:41:30.81ID:Emfdd1vJ 質問いいですか
1000デフォルトの名無しさん
2023/11/29(水) 19:21:40.65ID:0g8RZ7sB だめです
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 654日 0時間 45分 29秒
新しいスレッドを立ててください。
life time: 654日 0時間 45分 29秒
10021002
Over 1000Thread 5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 永野芽郁の不倫報道火消しへ 永野の自宅マンションには「母親がいた」 永野、田中、キムの所属事務所発表 [ネギうどん★]
- ダウンタウンが芸能活動再開へ、今夏ネット配信サービス開始★3 [jinjin★]
- 中居正広、水面下で反撃の準備か 第三者委員会の報告書での“性暴力者”認定に強い抵抗感、自らの口で真相を明らかにする考えも ★2 [Ailuropoda melanoleuca★]
- 「コメの関税を下げたら自民党は吹っ飛ぶ」 農業団体首脳が断言 農林族のドンも危機感あらわ…コメ輸入拡大で試される石破政権★2 [夜のけいちゃん★]
- 自転車交通違反「青切符」来年4月スタート「逆走、歩道を走る」「スマホ・イヤホン等のながら運転」★7 [七波羅探題★]
- 「自衛隊は人殺しの訓練」発言の共産党滋賀県議、本会議で謝罪「申し訳ありませんでした」 [少考さん★]
- 【トランプ関税】日経平均株価、暴騰、1ドル144円逝きそう [943688309]
- __自民比例に人気ダンサー 参院選 中田敦彦の弟 [おっさん友の会★] [827565401]
- 声優の石見舞菜香のソックリさん、彼氏との写真が流出 [159091185]
- お🏡とかいう意味不明なレスを続ける障害者軍団
- ウクライナが5000億円の借金の支払いを拒否 来月にも日本が税金で補填へ [709039863]
- 【悲報】チャリモメン、逝く。罰則強化で信号無視6000円、傘さし5000円、歩道走り6000円 [476167917]