PowerShell -Part 7 (459レス)
1-

1: 2023/11/29(水)16:07 ID:0g8RZ7sB(1) AAS
前スレ
PowerShell -Part 6
2chスレ:tech

次スレは>>980が立ててね!!
360: 2024/12/16(月)12:33 ID:BlyRMH2R(1) AAS
複数のフォルダをD&Dしてとあるから
大量のフォルダ・ファイルを渡すんだろうな
これは言語の制限じゃなくてエクスプローラかcmdかのシェルの制限だろう
361
(1): 2024/12/17(火)00:26 ID:qauPzx29(1) AAS
powershellのIDEってやっぱvscode一択?
362: 2024/12/18(水)15:12 ID:vtNCD/9a(1) AAS
>>361
Windowsのスタートメニューを見たことがないのか?

PowerShell ISEは無視、Visual Studioも無視するなら、あなたの希望通りにVSCodeになるな。
363: 2024/12/18(水)22:53 ID:r/ciUEmV(1) AAS
いや普通にVSCode一択だよ
ISEは開発停止がアナウンスされてMicrosoft自身がVSCodeを推奨してる
364: 2024/12/18(水)23:49 ID:qUh0YP4m(1) AAS
powershellの開発環境としてvisual studioが挙がることってあるか…?
365: 2024/12/19(木)00:10 ID:MPXM+zkD(1) AAS
VScodeなら分かる
366
(1): 2024/12/21(土)16:45 ID:3/R2Wu0q(1/2) AAS
.ps1のスクリプトを右クリックから実行しようとすると
最初に[実行ポリシーを変更しますか?…]というのが出て、キーボード操作が必要になるんだけど
これは出ないようにできないのかな?
367
(1): 2024/12/21(土)17:27 ID:HkxgIAjH(1) AAS
うろ覚えだけど
右クリからやるやつはポリシーがhogeだったらbypassにするみたいなif文が入ってた気がする
レジストリで変えれたはずだけど出先だから細かくは分かんないや
適当にググったら出てくるんじゃないかな

それかif文にかからないようにポリシーの方を変える
368
(2): 2024/12/21(土)17:47 ID:3/R2Wu0q(2/2) AAS
>>367
できました!
ありがとうございます
369: 2024/12/21(土)19:56 ID:IOryZJAZ(1/2) AAS
>>368
間違って実行してしまわないよう、わざわざそういう仕様になっていることを忘れないように
370: 2024/12/21(土)19:57 ID:IOryZJAZ(2/2) AAS
>>368
バッチファイルというものを知った方がいい
371
(1): 2024/12/21(土)20:34 ID:kQ229ZTv(1) AAS
的外れなレス付いてんなw
372: 2024/12/23(月)10:35 ID:8lbwsaDk(1) AAS
バッチこい
373
(1): 2024/12/24(火)22:41 ID:S4CkJ4V1(1) AAS
>>371
そもそもGUIで人間の操作で実行というのが変

何のための自動化なのかわからない
374
(1): 2024/12/24(火)23:14 ID:ALyk/+99(1) AAS
どこからGUIの話が出てきたんだ…?
375: 2024/12/25(水)17:59 ID:YmcCoB80(1) AAS
>>374
「右クリック」と書いてある
376: 2024/12/25(水)21:34 ID:G9TljzDw(1) AAS
ps1で思考停止するような子を見てるとそう
もっと頭を使う訓練を教育機関で受けさせとかないとやばいのではと総務省に問い質したくなるね
377: 2024/12/26(木)00:31 ID:3BPBxHkr(1) AAS
総務省…?
378
(1): 2024/12/27(金)11:14 ID:nSbaFnN8(1) AAS
>>373
ps1ファイルを右クリでpwshコンソールが起動してスクリプトが実行される
て普通にあることだと思うが
379: 2024/12/27(金)12:09 ID:+TT5rJ9I(1) AAS
もう既に解決して終わってるし、>>366に書いてることをもう一度書く必要はない
380: 01/02(木)12:24 ID:XSssqHtC(1) AAS
$s = "昔し羅馬にこう云う話しがある。後学のため聞いておけと云うんです"
Write-Host -ForegroundColor Red -BackgroundColor Black "$($s[12]) $($s[24]) $($s[23]) $($s[19])"
381: 01/07(火)17:30 ID:150rExn4(1/2) AAS
>>378
それはGUIの操作
382: 01/07(火)17:33 ID:150rExn4(2/2) AAS
実行形式のファイルを実行するときにしつこく確認する仕組みに変化した歴史も知らないんだろ。
383: 01/08(水)01:30 ID:T5jAWt2M(1) AAS
的外れ過ぎる
384: 01/08(水)09:05 ID:DiodmN71(1) AAS
>実行形式のファイルを実行するときにしつこく確認する仕組み

何それ
385
(1): 01/12(日)01:09 ID:7sMi3UMV(1) AAS
gci C:\Windows -include *.log,*.dat
は要素が一つも出なくて
gci C:\Windows\*.* -include *.log,*.dat
gci C:\Windows -recurse -include *.log,*.dat
はOKってどういう理屈なの?
できれば一番上の書きかたしたい…
386: 01/12(日)10:26 ID:+COVob5t(1) AAS
>>385
仕様。
外部リンク[1]:learn.microsoft.com

理屈は知らん。過去ログになんかあったような、ちょっと違ったような。(-Filterの話だったような)
387: 01/12(日)14:27 ID:+gCgMQG7(1) AAS
初期リリースで適当に用意されたコマンドレットの仕様が残ってるだけだから理屈なんて無いだろうよ
gciのオプションは普通の人の感覚と違うからWhere-Objectにパイプで渡してフィルタする方がおかしな事にならないよ
388: 01/14(火)14:43 ID:It61Xpnn(1) AAS
末尾のスラッシュの有無でフォルダ自体を指すのかその配下を指すのかを区別するのはUNIXでは割と珍しくないだろう
Windowsだとファイルパスを文字列というより何らかのエンティティを参照するものと考える傾向があるから馴染みにくいわな
389: 01/14(火)19:43 ID:yWOGeGxK(1) AAS
この話は末尾がスラッシュかどうかは関係ないよ
Include, Excludeを使うときはワイルドカードを含めないとPathで指定した項目自身しかヒットしなくなるというこのコマンドレット固有ルールの話
390: 01/27(月)01:42 ID:hFrLE9a7(1/2) AAS
V7.47
外部リンク[7]:github.com
V7.5
外部リンク:github.com
が出ました
391: 01/27(月)01:43 ID:hFrLE9a7(2/2) AAS
今回から.exeがある。
392: 01/27(月)21:48 ID:sL8l+nw9(1) AAS
.exe版と.msi版の違いが分からん
.msiだと問題が起きる環境でもあるのか
393: 01/27(月)22:00 ID:PdZna4r2(1) AAS
MDMで配れない
394
(1): 02/05(水)01:17 ID:lMdV6DH3(1) AAS
powershellの実行権限デフォルトで縛ってるのなんでなの
batは縛ってないのに
395: 02/05(水)09:34 ID:RMyxJ4z6(1) AAS
batが作られた時代はセキュリティという概念がほとんどなかった
いまや甘いと社会的影響も甚大で徹底的に叩かれる時代
何もわからない初心者がメールに添付されたスクリプトを実行できなくて困惑するくらいで丁度いい
batという穴が残っているといってもいまは過渡期
移行する選択肢がありたとえば組織のルールで禁止してメールフィルタで弾けばいい
396: 02/05(水)11:32 ID:Mu7T1O7D(1) AAS
情弱は我慢して使えってこと
397: 02/07(金)21:28 ID:lNWVt+S0(1) AAS
>>394
誰でも間違って重大ミスをする方がいいのか?
398: 02/08(土)08:16 ID:cxNGtJGK(1) AAS
外部リンク:learn.microsoft.com
> 実行ポリシーは、Windows プラットフォームにのみ適用されます。

外部リンク:learn.microsoft.com
> Windows 以外のコンピューターでは、既定の実行ポリシーは Unrestricted され、変更できません。 Set-ExecutionPolicy コマンドレットは使用可能ですが、PowerShell はサポートされていないというコンソール メッセージが表示されます。 Windows 以外のプラットフォームでは Get-ExecutionPolicy は Unrestricted を返しますが、これらのプラットフォームは Windows セキュリティ ゾーンを実装していないため、実際の動作は Bypass と一致します。

なんだこの差は
399: 02/08(土)08:24 ID:26aAk0ye(1) AAS

400: 02/08(土)08:47 ID:Tj0Icuu5(1) AAS
マルチプラットフォームで社外の全システムに対応するのもめんどくさそうだしある程度はええやろ
UNIXならパーミッションを適切に設定する文化が馴染んでるしな
100点満点じゃないと人様に叩かれる文化は新しいものが生み出せずに萎縮する
401: 02/08(土)13:21 ID:1vi9xXrm(1) AAS
バッチファイルでも実行権限を持たせる事はできるんだから
powershell独自のやつは余計なんだよ
402: 02/08(土)15:13 ID:k/NTaFUS(1) AAS
.ps1はエディタに紐付け
403: 02/08(土)15:51 ID:6WBbu+9W(1) AAS
メモ帳に紐付けてます
404: 02/13(木)09:12 ID:/wbXAgvm(1) AAS
PowerShell 7.5 GA is now available
外部リンク:devblogs.microsoft.com
405
(1): 02/18(火)06:18 ID:YFjssuad(1) AAS
Selectボタンでファイルを選択した後にOKボタンを押下しても、$filePathにファイル名が代入されていません。何が原因でしょうか?
外部リンク:pastebin.com
406
(1): 02/18(火)07:51 ID:WQjhH71Q(1/2) AAS
>>405
テキストボックスには選択したファイルのパスが表示されてるのに、ってこと?
407
(1): 02/18(火)07:53 ID:hC2ChTFa(1) AAS
scope的に$filePath揮発してたりしない?
408
(1): 02/18(火)08:02 ID:WQjhH71Q(2/2) AAS
関数内で外のスコープの変数に代入する場合はスコープ指定(script: や global:)が必要だったかも
409
(2): 02/18(火)19:01 ID:cVYWxauq(1) AAS
>>406
はい、そうです。

>>407
多分$filePathが揮発しているのだと思うのですが、何故そうなるのかが正直分かっておりません。

>>408
$global:filePath = $null
$script:filePath = $null
に書き換えても結果は同じでした。orz
410: 02/18(火)21:38 ID:Zhun0sKt(1) AAS
>>409
408の内容理解してないだろ
411
(1): 02/18(火)21:45 ID:X9R6h3Dz(1) AAS
$button_Select.Add_Clickの中の $filePath = $dialog_fileSelection.FileName を $script:filePath に変える

そもそもイベントハンドラの書き方おかしくない?
Add_Click{} じゃなくて Add_Click({}) でしょ
412
(1): 02/18(火)21:45 ID:pnZByoKT(1) AAS
>>409
惜しいw

スコープ指定が必要なのは関数内の代入文側であって、外にある変数定義側ではないよ
413: 02/19(水)05:46 ID:95a5Qlah(1) AAS
>>411
ありがとうございます!
$filePathにファイルパスが代入されるようになりました。

>>412
ありがとうございます。
そうだったんですね。勉強になりました。
414
(1): 03/01(土)22:23 ID:yrcKQQ99(1) AAS
外部リンク:pastebin.com

ファイルを何も選択していない状態でOKボタンを押下すると、メッセージダイアログボックス「"Please select a file."」が表示され、そのダイアログボックスのOKボタンを押下すると、処理?が終了してしまいます。
OKボタンを押下した際に、そのメッセージダイアログボックス「"Please select a file."」だけ消すにはどうしたらいいでしょうか?
415
(1): 03/02(日)03:09 ID:9brWkkbH(1) AAS
>>414
当たり前だけど、下記を削除するしかない

$button_OK.DialogResult = "OK"
416: 03/02(日)07:10 ID:yaeCdLgC(1) AAS
>>415
ありがとうございます!
417: 03/04(火)14:43 ID:p/g0UiTR(1) AAS
Microsoft Update changes for PowerShell 7
外部リンク:devblogs.microsoft.com
「Microsoft Update」を用いた「PowerShell 7」のアップデート計画が変更
まだ「PowerShell 7.2」を利用している場合、米国時間3月14日より7.4へ更新開始
外部リンク[html]:forest.watch.impress.co.jp
418: 03/07(金)19:36 ID:zJfq1/au(1) AAS
Input Folder用のボタンを押下して対象のフォルダを選択した後、OKボタンを押下すると選択した対象のInputフォルダのパスが取得されていません。
変数スコープまたは"function setSelectButton"におけるswitchが機能していないのおもうのですが、何が原因でしょうか?
Copilotに聞いてもダメでした。ボタンなどの部品は関数化しないほうがいいのでしょうか?

外部リンク:pastebin.com
419
(1): 03/07(金)23:19 ID:6K+ignj1(1) AAS
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"
省17
420: 03/08(土)23:41 ID:zOJ1gnEL(1) AAS
画面用のコードがひどすぎるのがPowerShell
421: 03/09(日)07:42 ID:RXTu5Tqn(1) AAS
>>419
ありがとうございます!
setSelectButton実行時に渡した$folderTypeはもう見えないんですね。
422: 03/11(火)21:13 ID:LUWD7xFy(1) AAS
Windows 11 バージョン 24H2 で netsh.exe の出力を PowerShell の変数に代入すると、非 ASCII 文字が文字化けする事象について
外部リンク:jpwinsup.github.io
423
(3): 04/26(土)01:37 ID:1l1C1hqe(1) AAS
外部リンク:pastebin.com
の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, ''

# 結果出力
省1
424
(1): 04/26(土)21:00 ID:arwW7ZGW(1) AAS
>>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
省8
425
(1): 04/26(土)23:51 ID:p1PcxSuO(1) AAS
外部リンク:pastebin.com
みたいなHTMLから特定のDIVクラス(kw)で定義されている要素を全部削除したいのですが、何かいい方法ありますでしょうか?
426
(1): 04/27(日)15:25 ID:/1DxBHsK(1/2) AAS
>>425 (>>423と同一人物だよね)
>>424に礼を言ったうえで、どの点が自身の質問意図に合ってなかったか説明して、
それからもっと具体的に追加質問した方がいいと思うよ。
ところで「xmlとして読み込めばnode削除でいけそう」は試してから言ってるの?何が合わなかったの?
427: 04/27(日)16:50 ID:ce45ltSU(1) AAS
滝川クリトリスです
428: 04/27(日)20:14 ID:/O0GUF2P(1/4) AAS
楽しようとして初回マッチ部分のみの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
省11
429: 04/27(日)20:24 ID:/O0GUF2P(2/4) AAS
>>426
試してませんでした
HTMLやxmlを扱うことはほぼ無いのであんまり知識が無い
で、>>423の場合では[xml]で読み込めてnode削除でうまくいくんだが
入れ子になってる場合
<div class="KW">
<span>
<div class="KW">
</div>
</span>
省2
430: 04/27(日)22:05 ID:aGrpQ/Rq(1) AAS
中身全部消すのであれば内側のKWは無視していいのでは
431
(1): 04/27(日)22:11 ID:/1DxBHsK(2/2) AAS
簡単には
$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: 04/27(日)22:22 ID:/O0GUF2P(3/4) AAS
>>431
なるほど
こんな感じにしてたんだよ
$list=@()
$doc.GetElementsByTagName('div')|?{$_.class -eq "KW"}|%{$list+=$_}
$list|%{[void]$_.ParentNode.RemoveChild($_)}
433: 04/27(日)22:48 ID:/O0GUF2P(4/4) AAS
悩んでたのは
既に削除しちゃてて存在しない場合にエラー無視はやりたくないなあってところ
434
(2): 05/02(金)21:45 ID:TuuGRLh6(1) AAS
powershellって日本語に厳しい?
日本語名のフォルダに入れた時だけエラー吐く
英語名フォルダは動く
UTF-8BOMで保存してるのに文字化けエラーが治らない
435: 05/02(金)22:24 ID:OrgxTXnx(1) AAS
いわゆる「マルチバイト文字」のことを「日本語」と呼ぶのはジジイ
436: 05/03(土)07:39 ID:ERFTsxnY(1) AAS
UTF-8にBOMは不要
437: 05/03(土)17:59 ID:0tHkB26n(1) AAS
文字コードが混在するシステムではBOMがあると便利です
438: 05/03(土)18:08 ID:qBega2UP(1) AAS
それが更に文字コードのバリエーションを増やし失敗を生むのだから本末転倒です
439: 05/03(土)18:08 ID:PV3Uf1QS(1) AAS
PowerShellスクリプトは「UTF-8 with BOM」が前提

>>434
実行時(コンソール)のコードページを確認してみては?
440: 05/04(日)07:07 ID:kiovYued(1) AAS
shift-jisにすればいいんじゃないの?
441: 05/04(日)08:23 ID:GZLENS5k(1) AAS
適切なエンコードの選択
外部リンク:learn.microsoft.com
442: 05/04(日)11:02 ID:Bff2jlZm(1) AAS
文字化け対策は
 [Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
こういうのをpowershellのプロファイルに書き込んで
powershell起動時に文字エンコードが適切な値になるようにしておく
そしてコンソールのタイトルバーを右クリして設定で適切なフォントが使用されてるか確認
443
(1): 05/09(金)16:18 ID:LImQScat(1) AAS
>>434 とは別人だが、レジストリ弄ったら文字化けしなくなったわ
初心者泣かせのクソ仕様だな
444
(1): 05/10(土)10:47 ID:ARU6YZDD(1) AAS
>>443
powershellをアップデートしたらリセットされそうな予感
445: 05/10(土)15:03 ID:L74jL6NI(1) AAS
>>444
文字化けするようになったのはプロパティでコンソール画面の調整を行ってから
デフォルトの状態では文字化けしていなかったのでたぶん大丈夫…と思う
446: 05/18(日)16:44 ID:w/29XAyn(1) AAS
$a = powercfg.exe -lastwake
$aは文字列かと思ったら文字列の配列だった…

コマンドの出力に改行が無ければ文字列、含む場合は配列とかいうヘンテコ仕様は何なんだ
447: 05/18(日)19:51 ID:xRSUEbTb(1) AAS
この振る舞いを知らないと、$a.Lengthが時により文字列長だったり配列長だったりして、例外やバグになる。
さらには標準出力が何もないと文字列型である空文字ではなくNULL(AutomationNull)になるし。
外部プログラムの標準出力を受け手が改行ごとに分割して解釈するのはgrep等でよくあるからヘンテコ仕様とは思わないけど、
沢山あるpowershellの落とし穴の1つだと思ってる。
448: 05/19(月)10:22 ID:Z1VKFLAg(1) AAS
$a = @(powercfg.exe -lastwake)
こんなふうにして必ず配列で返るようにするといいです
449: 05/19(月)21:43 ID:qL6NUCv5(1) AAS
キモい記法だな
450: 05/19(月)23:54 ID:2rbfAZ+2(1) AAS
このキモい記法ってコレクション返す関数書くと使わざるを得ないんだよな…
関数とかスクリプト最後のreturnにコレクションを渡すと勝手にバラす謎仕様

最初知らなくてDataTableのつもりがDataRowの配列で返ってきたときはびっくりした
451: 05/20(火)01:53 ID:yO05o0Kw(1) AAS
[string[]]$aで受け取る
452
(1): 05/20(火)12:57 ID:NKLxZTlt(1/3) AAS
時刻データ(ISO 8601)が入った JSON を invoke-RestMethod で受け取る
あるいは ConvertFrom-JSON すると時刻が powershell 形式になる
データの内容を見て勝手に変換してるんか…
453
(1): 05/20(火)14:18 ID:Xl2+DDPz(1) AAS
>>452
勝手にDateTime型でだしてくるってこと?
454: 05/20(火)15:30 ID:NKLxZTlt(2/3) AAS
>>453
こうなる

(ConvertFrom-Json('{"data":"2025-05-19T16:35:42.000Z"}')).data

2025年5月19日 16:35:42
455: 05/20(火)15:52 ID:NKLxZTlt(3/3) AAS
括弧いらなかった(どうでもいい)
(ConvertFrom-Json '{"data":"2025-05-19T16:35:42.000Z"}').data
456: 05/21(水)09:54 ID:rXr/G70T(1) AAS
ならんが(Win10, Win11, PSv5.1 -nop)

PS C:\Users\User5> (ConvertFrom-Json '{"data":"2025-05-19T16:35:42.000Z"}').data
2025-05-19T16:35:42.000Z
PS C:\Users\User5> (ConvertFrom-Json '{"data":"2025-05-19T16:35:42.000Z"}').data.GetType().FullName
System.String
457: 05/21(水)09:59 ID:2NJ41Wyd(1) AAS
powershell5とpowershell7で動作が違うね
powershell7だと変換される
458: 05/21(水)17:10 ID:NEzFfeHM(1) AAS
大半が5.1しか使わないから7の方が合わせろよって事
459: 05/21(水)18:50 ID:UAEUk5lE(1) AAS
外部リンク[5]:learn.microsoft.com

PowerShell 6 以降、 ConvertTo-Json はタイムスタンプとして書式設定された文字列を DateTime 値に変換しようとします。

PowerShell 7.5 では、DateKind パラメーターが追加されました。これにより、タイムスタンプ文字列の変換方法を制御できます。 このパラメーターは、次の値を受け入れます。
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.038s*