1 名前:デフォルトの名無しさん [2023/11/29(水) 16:07:49.46 ID:0g8RZ7sB.net] 前スレ PowerShell -Part 6 https://mevius.5ch.net/test/read.cgi/tech/1644744972/ 次スレは>>980 が立ててね!!
338 名前:デフォルトの名無しさん mailto:sage [2024/10/31(木) 21:50:30.83 ID:uhxgBp24.net] UNIXシェルはもっと言語としてはゴミなんだよなぁ
339 名前:デフォルトの名無しさん mailto:sage [2024/10/31(木) 23:02:56.00 ID:va++Flqd.net] 普段そういうゴミしか作者の周りになくて間違えて拾ってきちゃったんやな
340 名前:デフォルトの名無しさん [2024/11/01(金) 02:03:26.53 ID:EQMsSXTB.net] >>338 シェルはUIだぞ?
341 名前:デフォルトの名無しさん mailto:sage [2024/11/01(金) 04:01:30.22 ID:+lXxXu7p.net] >>328 gal見てたらcurlだけでなくwgetもiwrだった
342 名前:デフォルトの名無しさん mailto:sage [2024/11/01(金) 04:58:32.80 ID:4H4fm5Ic.net] エイリアスといえばパラメータのエイリアスにも多分いろいろundocumentedなのあるよな? -ArgmentListが-argsで通ったりとか規則的な略じゃないやつ、これは短くて分かりやすいからいいが -argなら曖昧さのない限り頭から略せるという規則通りなんだけど こういう個別のまとめた文書ってある? 一部は https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_commonparameters にあるのは知ってる
343 名前:デフォルトの名無しさん mailto:sage [2024/11/01(金) 09:06:40.20 ID:vIWZBp6A.net] Get-Help -Fullの、パラメータのエイリアス
344 名前:デフォルトの名無しさん mailto:sage [2024/11/17(日) 09:49:45.91 ID:LBdK5SU3.net] Windows Server 2025 以降で削除された機能または開発されなくなった機能 https://learn.microsoft.com/ja-jp/windows-server/get-started/removed-deprecated-features-windows-server-2025 Windows PowerShell 2.0 エンジンは削除されました。アプリケーションとコンポーネントはPowerShell 5.0 以降に移行する必要があります。
345 名前:デフォルトの名無しさん [2024/11/20(水) 17:28:43.06 ID:jLoC/a6V.net] AD一覧をcsv出力すると区切りが半角スペースになってExcelで取り込めない。 ググっても同じ症状の人が出て来ない
346 名前:デフォルトの名無しさん mailto:sage [2024/11/20(水) 17:56:33.65 ID:itZFOqj8.net] とりあえず-Delimiterで指定すれば?
347 名前:デフォルトの名無しさん [2024/11/20(水) 18:05:31.34 ID:jLoC/a6V.net] OutfileってDelimiterできないよね? Exportだと文字コードをdefaut、utf-8にしても数列で出力されちゃう
348 名前:デフォルトの名無しさん mailto:sage [2024/11/20(水) 19:09:02.72 ID:b8mbz+Om.net] Out-File? ならその前にConvertTo-Csvで変換してるんじゃないの?
349 名前:デフォルトの名無しさん mailto:sage [2024/11/20(水) 21:42:00.83 ID:KXgtJp1v.net] powershellのなんちゃってCsvコマンドレットはExcelで扱えるCSVと特に親和性があるわけでもなく、俺俺CSV止まりだからあんま使う価値ないかも
350 名前:デフォルトの名無しさん mailto:sage [2024/11/20(水) 22:02:13.56 ID:KXgtJp1v.net] ではCSV扱うなら何がいいかと言えばCsvHelperが定番なんだけど、C#や.NETの知識が要るね AD一覧程度なら自力でフィールドをカンマで区切ったっていいよ
351 名前:デフォルトの名無しさん mailto:sage [2024/11/20(水) 22:56:49.84 ID:+ywVzG00.net] Announcing the Public Preview of AI Shell https://devblogs.microsoft.com/powershell/announcing-the-public-preview-of-ai-shell/
352 名前:デフォルトの名無しさん mailto:sage [2024/11/21(木) 09:11:03.40 ID:uYan55MO.net] CSV変換標準コマンドレットはデータ前後のスペース文字が消えるので 一切データ欠落しちゃいけない場合は注意
353 名前:デフォルトの名無しさん mailto:sage [2024/11/27(水) 23:16:05.27 ID:aNQZM+B9.net] Export-Csvって自力でクォーテーション外してた時代あるし地味に改良してるけどな
354 名前:デフォルトの名無しさん mailto:sage [2024/11/30(土) 22:11:49.94 ID:LJbTxW4W.net] Should PowerShell 7.x ship inbox in Windows? https://github.com/PowerShell/PowerShell/discussions/24340
355 名前:デフォルトの名無しさん mailto:sage [2024/12/01(日) 13:20:57.08 ID:8Yw35ga9.net] >>354 PowerShell7.xは通常利用されないpwshシェルとして実装されても良いと思うよね 標準シェルをpowershell.exeにしておけば互換性問題無いし ただ7.xが5.1の互換とか言ってるのはかなり微妙
356 名前:デフォルトの名無しさん [2024/12/11(水) 10:15:30.38 ID:Bk1Et5xQ.net] 引数の文字数上限って回避方法ってありますか? 複数のフォルダをドラッグ&ドロップして使いたいけどいい方法が思いつきません
357 名前:デフォルトの名無しさん mailto:sage [2024/12/11(水) 22:01:27.57 ID:J5p4fYKY.net] WSHやjavascript限定ではあるけどファイラーのTablacus Explorer使えば会費できたと思う
358 名前:デフォルトの名無しさん [2024/12/15(日) 21:59:46.99 ID:D9xraIFr.net] >>356 ネタだよな? Windowsはパス文字列の長さの上限がかなり低いので長いパスはWindowsでは扱えない
359 名前:デフォルトの名無しさん mailto:sage [2024/12/16(月) 11:35:41.45 ID:EDggbpJc.net] 引数の文字数上限なんて気にしたこともないわ 一体どんなスクリプト組んでるんだ?
360 名前:デフォルトの名無しさん mailto:sage [2024/12/16(月) 12:33:48.42 ID:BlyRMH2R.net] 複数のフォルダをD&Dしてとあるから 大量のフォルダ・ファイルを渡すんだろうな これは言語の制限じゃなくてエクスプローラかcmdかのシェルの制限だろう
361 名前:デフォルトの名無しさん mailto:sage [2024/12/17(火) 00:26:16.95 ID:qauPzx29.net] powershellのIDEってやっぱvscode一択?
362 名前:デフォルトの名無しさん [2024/12/18(水) 15:12:46.26 ID:vtNCD/9a.net] >>361 Windowsのスタートメニューを見たことがないのか? PowerShell ISEは無視、Visual Studioも無視するなら、あなたの希望通りにVSCodeになるな。
363 名前:デフォルトの名無しさん mailto:sage [2024/12/18(水) 22:53:36.03 ID:r/ciUEmV.net] いや普通にVSCode一択だよ ISEは開発停止がアナウンスされてMicrosoft自身がVSCodeを推奨してる
364 名前:デフォルトの名無しさん mailto:sage [2024/12/18(水) 23:49:49.43 ID:qUh0YP4m.net] powershellの開発環境としてvisual studioが挙がることってあるか…?
365 名前:デフォルトの名無しさん mailto:sage [2024/12/19(木) 00:10:06.38 ID:MPXM+zkD.net] VScodeなら分かる
366 名前:デフォルトの名無しさん mailto:sage [2024/12/21(土) 16:45:21.87 ID:3/R2Wu0q.net] .ps1のスクリプトを右クリックから実行しようとすると 最初に[実行ポリシーを変更しますか?…]というのが出て、キーボード操作が必要になるんだけど これは出ないようにできないのかな?
367 名前:デフォルトの名無しさん mailto:sage [2024/12/21(土) 17:27:08.04 ID:HkxgIAjH.net] うろ覚えだけど 右クリからやるやつはポリシーがhogeだったらbypassにするみたいなif文が入ってた気がする レジストリで変えれたはずだけど出先だから細かくは分かんないや 適当にググったら出てくるんじゃないかな それかif文にかからないようにポリシーの方を変える
368 名前:デフォルトの名無しさん mailto:sage [2024/12/21(土) 17:47:50.11 ID:3/R2Wu0q.net] >>367 できました! ありがとうございます
369 名前:デフォルトの名無しさん [2024/12/21(土) 19:56:38.76 ID:IOryZJAZ.net] >>368 間違って実行してしまわないよう、わざわざそういう仕様になっていることを忘れないように
370 名前:デフォルトの名無しさん [2024/12/21(土) 19:57:11.83 ID:IOryZJAZ.net] >>368 バッチファイルというものを知った方がいい
371 名前:デフォルトの名無しさん [2024/12/21(土) 20:34:08.41 ID:kQ229ZTv.net] 的外れなレス付いてんなw
372 名前:デフォルトの名無しさん mailto:sage [2024/12/23(月) 10:35:42.88 ID:8lbwsaDk.net] バッチこい
373 名前:デフォルトの名無しさん [2024/12/24(火) 22:41:53.48 ID:S4CkJ4V1.net] >>371 そもそもGUIで人間の操作で実行というのが変 何のための自動化なのかわからない
374 名前:デフォルトの名無しさん mailto:sage [2024/12/24(火) 23:14:00.94 ID:ALyk/+99.net] どこからGUIの話が出てきたんだ…?
375 名前:デフォルトの名無しさん [2024/12/25(水) 17:59:30.20 ID:YmcCoB80.net] >>374 「右クリック」と書いてある
376 名前:デフォルトの名無しさん mailto:sage [2024/12/25(水) 21:34:02.80 ID:G9TljzDw.net] ps1で思考停止するような子を見てるとそう もっと頭を使う訓練を教育機関で受けさせとかないとやばいのではと総務省に問い質したくなるね
377 名前:デフォルトの名無しさん mailto:sage [2024/12/26(木) 00:31:28.78 ID:3BPBxHkr.net] 総務省…?
378 名前:デフォルトの名無しさん mailto:sage [2024/12/27(金) 11:14:09.84 ID:nSbaFnN8.net] >>373 ps1ファイルを右クリでpwshコンソールが起動してスクリプトが実行される て普通にあることだと思うが
379 名前:デフォルトの名無しさん mailto:sage [2024/12/27(金) 12:09:30.67 ID:+TT5rJ9I.net] もう既に解決して終わってるし、>>366 に書いてることをもう一度書く必要はない
380 名前:デフォルトの名無しさん mailto:sage [2025/01/02(木) 12:24:43.46 ID:XSssqHtC.net] $s = "昔し羅馬にこう云う話しがある。後学のため聞いておけと云うんです" Write-Host -ForegroundColor Red -BackgroundColor Black "$($s[12]) $($s[24]) $($s[23]) $($s[19])"
381 名前:デフォルトの名無しさん [2025/01/07(火) 17:30:11.98 ID:150rExn4.net] >>378 それはGUIの操作
382 名前:デフォルトの名無しさん [2025/01/07(火) 17:33:24.53 ID:150rExn4.net] 実行形式のファイルを実行するときにしつこく確認する仕組みに変化した歴史も知らないんだろ。
383 名前:デフォルトの名無しさん mailto:sage [2025/01/08(水) 01:30:32.18 ID:T5jAWt2M.net] 的外れ過ぎる
384 名前:デフォルトの名無しさん mailto:sage [2025/01/08(水) 09:05:49.08 ID:DiodmN71.net] >実行形式のファイルを実行するときにしつこく確認する仕組み 何それ
385 名前:デフォルトの名無しさん mailto:sage [2025/01/12(日) 01:09:34.15 ID:7sMi3UMV.net] gci C:\Windows -include *.log,*.dat は要素が一つも出なくて gci C:\Windows\*.* -include *.log,*.dat gci C:\Windows -recurse -include *.log,*.dat はOKってどういう理屈なの? できれば一番上の書きかたしたい…
386 名前:デフォルトの名無しさん mailto:sage [2025/01/12(日) 10:26:34.53 ID:+COVob5t.net] >>385 仕様。 https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-5.1#4-include 理屈は知らん。過去ログになんかあったような、ちょっと違ったような。(-Filterの話だったような)
387 名前:デフォルトの名無しさん mailto:sage [2025/01/12(日) 14:27:17.12 ID:+gCgMQG7.net] 初期リリースで適当に用意されたコマンドレットの仕様が残ってるだけだから理屈なんて無いだろうよ gciのオプションは普通の人の感覚と違うからWhere-Objectにパイプで渡してフィルタする方がおかしな事にならないよ
388 名前:デフォルトの名無しさん mailto:sage [2025/01/14(火) 14:43:26.79 ID:It61Xpnn.net] 末尾のスラッシュの有無でフォルダ自体を指すのかその配下を指すのかを区別するのはUNIXでは割と珍しくないだろう Windowsだとファイルパスを文字列というより何らかのエンティティを参照するものと考える傾向があるから馴染みにくいわな
389 名前:デフォルトの名無しさん mailto:sage [2025/01/14(火) 19:43:42.33 ID:yWOGeGxK.net] この話は末尾がスラッシュかどうかは関係ないよ Include, Excludeを使うときはワイルドカードを含めないとPathで指定した項目自身しかヒットしなくなるというこのコマンドレット固有ルールの話
390 名前:デフォルトの名無しさん [2025/01/27(月) 01:42:20.03 ID:hFrLE9a7.net] V7.47 https://github.com/PowerShell/PowerShell/releases/tag/v7.4.7 V7.5 https://github.com/PowerShell/PowerShell/releases/tag/v7.5.0 が出ました
391 名前:デフォルトの名無しさん [2025/01/27(月) 01:43:08.84 ID:hFrLE9a7.net] 今回から.exeがある。
392 名前:デフォルトの名無しさん mailto:sage [2025/01/27(月) 21:48:58.99 ID:sL8l+nw9.net] .exe版と.msi版の違いが分からん .msiだと問題が起きる環境でもあるのか
393 名前:デフォルトの名無しさん mailto:sage [2025/01/27(月) 22:00:26.88 ID:PdZna4r2.net] MDMで配れない
394 名前:デフォルトの名無しさん mailto:sage [2025/02/05(水) 01:17:36.51 ID:lMdV6DH3.net] powershellの実行権限デフォルトで縛ってるのなんでなの batは縛ってないのに
395 名前:デフォルトの名無しさん mailto:sage [2025/02/05(水) 09:34:59.87 ID:RMyxJ4z6.net] batが作られた時代はセキュリティという概念がほとんどなかった いまや甘いと社会的影響も甚大で徹底的に叩かれる時代 何もわからない初心者がメールに添付されたスクリプトを実行できなくて困惑するくらいで丁度いい batという穴が残っているといってもいまは過渡期 移行する選択肢がありたとえば組織のルールで禁止してメールフィルタで弾けばいい
396 名前:デフォルトの名無しさん mailto:sage [2025/02/05(水) 11:32:38.10 ID:Mu7T1O7D.net] 情弱は我慢して使えってこと
397 名前:デフォルトの名無しさん [2025/02/07(金) 21:28:42.53 ID:lNWVt+S0.net] >>394 誰でも間違って重大ミスをする方がいいのか?
398 名前:デフォルトの名無しさん mailto:sage [2025/02/08(土) 08:16:37.94 ID:cxNGtJGK.net] https://learn.microsoft.com/ja-jp/powershell/scripting/security/security-features > 実行ポリシーは、Windows プラットフォームにのみ適用されます。 https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_execution_policies > Windows 以外のコンピューターでは、既定の実行ポリシーは Unrestricted され、変更できません。 Set-ExecutionPolicy コマンドレットは使用可能ですが、PowerShell はサポートされていないというコンソール メッセージが表示されます。 Windows 以外のプラットフォームでは Get-ExecutionPolicy は Unrestricted を返しますが、これらのプラットフォームは Windows セキュリティ ゾーンを実装していないため、実際の動作は Bypass と一致します。 なんだこの差は
399 名前:デフォルトの名無しさん mailto:sage [2025/02/08(土) 08:24:47.70 ID:26aAk0ye.net] 草
400 名前:デフォルトの名無しさん mailto:sage [2025/02/08(土) 08:47:04.49 ID:Tj0Icuu5.net] マルチプラットフォームで社外の全システムに対応するのもめんどくさそうだしある程度はええやろ UNIXならパーミッションを適切に設定する文化が馴染んでるしな 100点満点じゃないと人様に叩かれる文化は新しいものが生み出せずに萎縮する
401 名前:デフォルトの名無しさん mailto:sage [2025/02/08(土) 13:21:14.91 ID:1vi9xXrm.net] バッチファイルでも実行権限を持たせる事はできるんだから powershell独自のやつは余計なんだよ
402 名前:デフォルトの名無しさん mailto:sage [2025/02/08(土) 15:13:57.11 ID:k/NTaFUS.net] .ps1はエディタに紐付け
403 名前:デフォルトの名無しさん mailto:sage [2025/02/08(土) 15:51:11.00 ID:6WBbu+9W.net] メモ帳に紐付けてます
404 名前:デフォルトの名無しさん mailto:sage [2025/02/13(木) 09:12:08.62 ID:/wbXAgvm.net] PowerShell 7.5 GA is now available https://devblogs.microsoft.com/powershell/announcing-powershell-7-5-ga/
405 名前:デフォルトの名無しさん [2025/02/18(火) 06:18:26.96 ID:YFjssuad.net] Selectボタンでファイルを選択した後にOKボタンを押下しても、$filePathにファイル名が代入されていません。何が原因でしょうか? ttps://pastebin.com/a3EwP1Lw
406 名前:デフォルトの名無しさん mailto:sage [2025/02/18(火) 07:51:32.12 ID:WQjhH71Q.net] >>405 テキストボックスには選択したファイルのパスが表示されてるのに、ってこと?
407 名前:デフォルトの名無しさん mailto:sage [2025/02/18(火) 07:53:13.44 ID:hC2ChTFa.net] scope的に$filePath揮発してたりしない?
408 名前:デフォルトの名無しさん mailto:sage [2025/02/18(火) 08:02:55.62 ID:WQjhH71Q.net] 関数内で外のスコープの変数に代入する場合はスコープ指定(script: や global:)が必要だったかも
409 名前:デフォルトの名無しさん [2025/02/18(火) 19:01:09.96 ID:cVYWxauq.net] >>406 はい、そうです。 >>407 多分$filePathが揮発しているのだと思うのですが、何故そうなるのかが正直分かっておりません。 >>408 $global:filePath = $null $script:filePath = $null に書き換えても結果は同じでした。orz
410 名前:デフォルトの名無しさん mailto:sage [2025/02/18(火) 21:38:36.15 ID:Zhun0sKt.net] >>409 408の内容理解してないだろ
411 名前:デフォルトの名無しさん mailto:sage [2025/02/18(火) 21:45:12.87 ID:X9R6h3Dz.net] $button_Select.Add_Clickの中の $filePath = $dialog_fileSelection.FileName を $script:filePath に変える そもそもイベントハンドラの書き方おかしくない? Add_Click{} じゃなくて Add_Click({}) でしょ
412 名前:デフォルトの名無しさん mailto:sage [2025/02/18(火) 21:45:47.23 ID:pnZByoKT.net] >>409 惜しいw スコープ指定が必要なのは関数内の代入文側であって、外にある変数定義側ではないよ
413 名前:デフォルトの名無しさん [2025/02/19(水) 05:46:44.36 ID:95a5Qlah.net] >>411 ありがとうございます! $filePathにファイルパスが代入されるようになりました。 >>412 ありがとうございます。 そうだったんですね。勉強になりました。
414 名前:デフォルトの名無しさん [2025/03/01(土) 22:23:09.05 ID:yrcKQQ99.net] ttps://pastebin.com/THGpvEsL ファイルを何も選択していない状態でOKボタンを押下すると、メッセージダイアログボックス「"Please select a file."」が表示され、そのダイアログボックスのOKボタンを押下すると、処理?が終了してしまいます。 OKボタンを押下した際に、そのメッセージダイアログボックス「"Please select a file."」だけ消すにはどうしたらいいでしょうか?
415 名前:デフォルトの名無しさん mailto:sage [2025/03/02(日) 03:09:52.22 ID:9brWkkbH.net] >>414 当たり前だけど、下記を削除するしかない $button_OK.DialogResult = "OK"
416 名前:デフォルトの名無しさん [2025/03/02(日) 07:10:25.55 ID:yaeCdLgC.net] >>415 ありがとうございます!
417 名前:デフォルトの名無しさん mailto:sage [2025/03/04(火) 14:43:31.10 ID:p/g0UiTR.net] Microsoft Update changes for PowerShell 7 https://devblogs.microsoft.com/powershell/microsoft-update-changes-for-powershell-7/ 「Microsoft Update」を用いた「PowerShell 7」のアップデート計画が変更 まだ「PowerShell 7.2」を利用している場合、米国時間3月14日より7.4へ更新開始 https://forest.watch.impress.co.jp/docs/news/1667304.html
418 名前:デフォルトの名無しさん [2025/03/07(金) 19:36:07.86 ID:zJfq1/au.net] Input Folder用のボタンを押下して対象のフォルダを選択した後、OKボタンを押下すると選択した対象のInputフォルダのパスが取得されていません。 変数スコープまたは"function setSelectButton"におけるswitchが機能していないのおもうのですが、何が原因でしょうか? Copilotに聞いてもダメでした。ボタンなどの部品は関数化しないほうがいいのでしょうか? ttps://pastebin.com/ULTy9dM8
419 名前:デフォルトの名無しさん mailto:sage [2025/03/07(金) 23:19:13.53 ID:6K+ignj1.net] Add_Clickに渡したスクリプトブロックが実行されるのはボタンクリック時。 その時にはもうsetSelectButtonを抜けてるから、setSelectButton実行時に渡した$folderTypeはもう見えない。 最後の手段的なglobalスコープの使用を避けて手っ取り早く解決するなら、 {〜〜〜}.GetNewClosure()でsetSelectButton実行中の変数スコープを記憶(?)したうえで 自前のクラスとかハッシュテーブル等で入出力しちゃう。とか。適当実装だとこんな。 function setSelectButton($def){ $conf = New-Object System.Windows.Forms.Button $conf.Location = New-Object System.Drawing.Point($def.xAxis,$def.yAxis) $conf.Size = New-Object System.Drawing.Size($def.xSize, $def.ySize) $conf.Text = "Select" $conf.Add_Click({ $dialog_FolderSelection = New-Object Windows.Forms.FolderBrowserDialog if($dialog_FolderSelection.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK){ $def.textBox.Text = $dialog_FolderSelection.SelectedPath } }.GetNewClosure()) return $conf } (略) $inputDef = [Ordered] @{xAxis = 370; yAxis = 50; xSize = 70; ySize = 20; textBox = $textBox_inputFolder;} $outputDef = [Ordered] @{xAxis = 370; yAxis = 70; xSize = 70; ySize = 20; textBox = $textBox_outputFolder;} # create Select button $button_Select_inputFolder = setSelectButton $inputDef $button_Select_outputFolder = setSelectButton $outputDef (略) if([String]::IsNullOrEmpty($inputDef.textBox.Text)){ # show a message dialog if no file is selected ※これで入力欄にフォルダパスをコピペする人(=私)も安心
420 名前:デフォルトの名無しさん [2025/03/08(土) 23:41:12.69 ID:zOJ1gnEL.net] 画面用のコードがひどすぎるのがPowerShell
421 名前:デフォルトの名無しさん [2025/03/09(日) 07:42:20.13 ID:RXTu5Tqn.net] >>419 ありがとうございます! setSelectButton実行時に渡した$folderTypeはもう見えないんですね。
422 名前:デフォルトの名無しさん mailto:sage [2025/03/11(火) 21:13:50.84 ID:LUWD7xFy.net] Windows 11 バージョン 24H2 で netsh.exe の出力を PowerShell の変数に代入すると、非 ASCII 文字が文字化けする事象について https://jpwinsup.github.io/blog/2025/03/11/Networking/TCPIP/NetshEncodingChange24h2/
423 名前:デフォルトの名無しさん [2025/04/26(土) 01:37:45.27 ID:1l1C1hqe.net] ttps://pastebin.com/0HrXEMvc のHTMLソースから特定のDIVクラス「KW」とそのクラスないを削除する方法はありましでしょうか? 以下ではきえませんでした # HTML読み込み $targetDir = "D:\Download\test\sample.html" $html = Get-Content "D:\Download\test\sample.html" -Raw # KWクラスdivを正規表現で削除 $pattern = '<div\s+class="KW">[\s\S]*?<\/div>' $modifiedContent = $htmlContent -replace $pattern, '' # 結果出力 $processedHtml | Out-File "D:\Download\test\pit.html" -Encoding UTF8
424 名前:デフォルトの名無しさん mailto:sage [2025/04/26(土) 21:00:04.39 ID:arwW7ZGW.net] >>423 なんで変数の対応がめちゃくちゃなの? 正規表現で力技でやるとこんなところだが xmlとして読み込めばnode削除でいけそうな気がする Add-Type -AssemblyName Microsoft.VisualBasic $html = Get-Content "D:\Download\test\sample.html" -Raw # KWクラスdivを正規表現で削除 $pattern = [regex]"^((?:(?'open'<div[^>]*?>[\r\n]*))|(?'close-open'</div>)|(?:(?!</?div[^>]*>)[\s\S])+?)*(?(open)(?!))" $processedHtml=$pattern.replace($html,{ $r=$args.value $e=0 $args.groups['3'].captures| sort index| ?{$_.index+$_.length -gt $e -and $_.value -cmatch '<div.*class="KW"'}| %{$e=$_.index+$_.length; $r=[Microsoft.VisualBasic.Strings]::replace($r,$_.value,"",1,1)} $r }) $processedHtml | Out-File "D:\Download\test\pit.html" -Encoding UTF8
425 名前:デフォルトの名無しさん [2025/04/26(土) 23:51:52.55 ID:p1PcxSuO.net] ttps://pastebin.com/0M9pbEJt みたいなHTMLから特定のDIVクラス(kw)で定義されている要素を全部削除したいのですが、何かいい方法ありますでしょうか?
426 名前:デフォルトの名無しさん [2025/04/27(日) 15:25:40.97 ID:/1DxBHsK.net] >>425 (>>423 と同一人物だよね) >>424 に礼を言ったうえで、どの点が自身の質問意図に合ってなかったか説明して、 それからもっと具体的に追加質問した方がいいと思うよ。 ところで「xmlとして読み込めばnode削除でいけそう」は試してから言ってるの?何が合わなかったの?
427 名前:デフォルトの名無しさん mailto:sage [2025/04/27(日) 16:50:54.99 ID:ce45ltSU.net] 滝川クリトリスです
428 名前:デフォルトの名無しさん mailto:sage [2025/04/27(日) 20:14:14.77 ID:/O0GUF2P.net] 楽しようとして初回マッチ部分のみのreplace使ったけど やっぱり別のが消えちゃうという一抹の不安があるのでreplaceを使うのはやめた 最終行に改行がないままにしたいのかな? $html = Get-Content "D:\Download\test\sample.html" -Encoding UTF8 -Raw # KWクラスdivを正規表現で削除 $pattern = [regex]"^((?:(?'open'<div[^>]*?>[\r\n]*))|(?'close-open'</div>)|(?:(?!</?div[^>]*>)[\s\S])+?)*(?(open)(?!))" $processedHtml=$pattern.replace($html,{ $r=$args.value $text='' $e=0 $args.groups['3'].captures| sort index| ?{$_.index+$_.length -gt $e -and $_.value -cmatch '<div[^>]*?class="KW"'}| %{ $text = $text + $html.substring($e, $_.index-$e-1); $e = $_.index + $_.length - 1 } if($r.length -gt $e) {$text = $text + $r.substring($e, $r.length-$e)} $text }) [Text.Encoding]::GetEncoding("UTF-8").GetBytes($processedHtml) | Set-Content -Path "D:\Download\test\pit.html" -Encoding Byte
429 名前:デフォルトの名無しさん mailto:sage [2025/04/27(日) 20:24:25.83 ID:/O0GUF2P.net] >>426 試してませんでした HTMLやxmlを扱うことはほぼ無いのであんまり知識が無い で、>>423 の場合では[xml]で読み込めてnode削除でうまくいくんだが 入れ子になってる場合 <div class="KW"> <span> <div class="KW"> </div> </span> </div> とかにはどうやったら簡単に対応できるのかと思ってるところ
430 名前:デフォルトの名無しさん [2025/04/27(日) 22:05:35.62 ID:aGrpQ/Rq.net] 中身全部消すのであれば内側のKWは無視していいのでは
431 名前:デフォルトの名無しさん mailto:sage [2025/04/27(日) 22:11:37.95 ID:/1DxBHsK.net] 簡単には $text = DOCTYPE宣言を除いた<html>〜</html>とかXMLとして読み込めるテキストデータ $xml = [xml] $text while($node=$xml.SelectSingleNode("//div[@class='KW']")){ $null = $node.ParentNode.RemoveChild($node) } $xml.OuterXml | Out-File 〜〜〜 ## class="aaa KW bbb"の存在とか、インデント等を完璧に維持したい、とかは考慮外。
432 名前:デフォルトの名無しさん mailto:sage [2025/04/27(日) 22:22:47.91 ID:/O0GUF2P.net] >>431 なるほど こんな感じにしてたんだよ $list=@() $doc.GetElementsByTagName('div')|?{$_.class -eq "KW"}|%{$list+=$_} $list|%{[void]$_.ParentNode.RemoveChild($_)}
433 名前:デフォルトの名無しさん mailto:sage [2025/04/27(日) 22:48:33.11 ID:/O0GUF2P.net] 悩んでたのは 既に削除しちゃてて存在しない場合にエラー無視はやりたくないなあってところ
434 名前:デフォルトの名無しさん mailto:sage [2025/05/02(金) 21:45:21.05 ID:TuuGRLh6.net] powershellって日本語に厳しい? 日本語名のフォルダに入れた時だけエラー吐く 英語名フォルダは動く UTF-8BOMで保存してるのに文字化けエラーが治らない
435 名前:デフォルトの名無しさん [2025/05/02(金) 22:24:03.09 ID:OrgxTXnx.net] いわゆる「マルチバイト文字」のことを「日本語」と呼ぶのはジジイ
436 名前:デフォルトの名無しさん [2025/05/03(土) 07:39:35.24 ID:ERFTsxnY.net] UTF-8にBOMは不要
437 名前:デフォルトの名無しさん [2025/05/03(土) 17:59:32.71 ID:0tHkB26n.net] 文字コードが混在するシステムではBOMがあると便利です
438 名前:デフォルトの名無しさん mailto:sage [2025/05/03(土) 18:08:41.88 ID:qBega2UP.net] それが更に文字コードのバリエーションを増やし失敗を生むのだから本末転倒です