1 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 18:36:12.07 ID:LaQ04ZoE.net] 前スレ PowerShell -Part 5 https://mevius.5ch.net/test/read.cgi/tech/1615994992/ 次スレは>>980 が立ててね!!
876 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 20:07:52.72 ID:PQblbJTG.net] 一番良いのは、Windowsを使わない これにかぎる こんなクソなOSを世界中から捨てるべき
877 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 20:09:59.59 ID:SL3m3m5F.net] Windowsは汎用事務処理端末としては競合なしだ
878 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 20:27:11.32 ID:SL3m3m5F.net] メモリ効率とスループットは交換できるようなものではない 手軽さが不要ならPythonでも使っておけばいい
879 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 21:36:23.24 ID:55Ub7uv5.net] いまだにPowerShellがWindows専用だと思ってるアホを真っ先に捨てるべき
880 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:05:41.72 ID:FP8PIUGD.net] で>>843 の質問に戻るのですだが、動かなかったのは単純だが根本的な誤解してたのが原因…… C/C++と同じだろうというつもりで >$result2 = Test-RegEnt($result, 'REG_SZ', 'Admin') という呼び出し方に書いたが、これだと「Test-RegEntの第一引数$reg_query_resultに「配列」@($result, 'REG_SZ', 'Admin')を渡す」という意味になる ので、関数内で >$reg_query_result | Select-Object -Index 2 とやったら当然そのindex=2の要素 'Admin' が関数の出力となってた、というしくみ
881 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:07:08.58 ID:FP8PIUGD.net] 正しくは>>846 式に >Test-RegEnt -reg_query_result $result -exp_type 'REG_SZ' -exp_value 'Admin' またはその省略表記としては >Test-RegEnt $result 'REG_SZ' 'Admin' # カンマ区切りではなくてスペース区切り にせねばならなかった ことがわかったorz 止むにやまれない事情で昨日一日で1500行書いてデバッグしたらその過程でわかった|||。n_
882 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:11:54.59 ID:FP8PIUGD.net] あと他のスクリプトをincludeするときの欠き方が気づかないとわかりにくい…… util.ps1 を同じフォルダにある someapp.ps1 からインクルードする場合は '.\util.ps1' ではダメで、 .'.\util.ps1' にしないとutil.ps1で定義した何物も呼び出せないorz ここで先頭の「.」はutil.ps1のスクリプトスコープを呼び出し元のスコープと同じにするという意味やがちょう紛らわしい……
883 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:20:54.21 ID:FP8PIUGD.net] あと関数内においては代入文、[void]にキャストした文、if文とかの条件式 を除く全ての文が出力を持つ、 という仕様のせいで危うく恐ろしいバグを作り込むところやった;;; function Show-ErrDlg($msg) { $wsobj = new-object -comobject wscript.shell $wsobj.popup($msg, 0, 'エラー', 0 -bor 16) }
884 名前:function Test-Equipment1() { $result = (何かのテスト) if (!$result) { Show-ErrDlg('何かのテスト failed.') } return $result } でとするとテストが失敗したときも [] [ここ壊れてます]
885 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:25:27.54 ID:FP8PIUGD.net] if (!(Test-Equipment1) { exit 1 } (テスト正常終了の表示処理) でテスト正常終了の表示が出るorz これは何でかというと$wsobj.popup($msg, 0, 'エラー', 0 -bor 16) 」がクリックされたボタンの番号を出力する結果、$resultがまたしても配列 @( (「なんかのテスト」の結果), ($wsobj.popup()でクリックされたボタンの番号) ) となりこれが Test-Equipment1() の戻り値となり、それをif文で評価したら最後の要素
886 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:27:54.43 ID:FP8PIUGD.net] (OKボタンのコード6)と評価されるため、!6なので常に偽になるというしくみ、、、、 こう修正すたら直った function Show-ErrDlg($msg) { $wsobj = new-object -comobject wscript.shell [void] $wsobj.popup($msg, 0, 'エラー', 0 -bor 16) # [void]付ける } わかるかこんなもん…… および原理的にlint的な機械的チェックもできない……
887 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:35:32.35 ID:FP8PIUGD.net] これはデフォルトで出力無しとして、 なんかの接頭辞を付けた文だけが結果がパイプに出力されるるようにする仕様であるべきだった希ガス (出力が無いというミスはすぐ気づける てかWrite-Outputを省略可能としているのがそもその誤り…… ※ 個人の感想です いっぱい連投したがTeamsのつもりでShift+Enterしたら投稿されてしまったせいやスマンヌorz いじょ
888 名前:デフォルトの名無しさん 転載ダメ mailto:sagete [2023/08/12(土) 00:58:59.52 ID:H+b+A9qi.net] ============================ function Hoge([int]$num) { echo "Debug" return ($num + 1) } $a = Hoge(1) echo $a ============================ こうすると $a には Debug と 2 の2つが入る ============================ function Hoge([int]$num) { .{ echo "Debug" } | Out-Null return ($num + 1) } $a = Hoge(1) echo $a ============================ こうすると $a には 2 の1つしか入らない 不要なところは 「 .{ ~~~ } | Out-Null 」で表示を抑制したら楽になるかも
889 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 01:19:17.04 ID:DbL0Mu2X.net] >>843 に言える事はパイプで何番目とかいう考えは捨てた方がいい パイプは途中で処理を打ち切る機能が欠落してるから何番目だけに用があろうが全ストリームを読み終わるまで終わらない
890 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 08:19:31.33 ID:IRt4i0hm.net] ほぼ誤差だが |Out-Null より $null= で処理した方がパフォーマンスがよく、可読性も高い
891 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 08:23:13.14 ID:ueiwXwrP.net] PowerShell スクリプトのパフォーマンスに関する考慮事項 https://learn.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/performance/script-authoring-considerations
892 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 22:00:12.59 ID:pISu+im0.net] >>872 わかりた パイプラインの打ち切りは、実現方法はあるが円満な解決方法はなさげ(どれもこれもなんかしらのミソがつく パイプで$n番目、というだけならSelect-Objectしたらv3以降ならn+1番目以降を打ち切ってくれる $n = 2 Get-Content .\bigfile.txt | Select-Object -Index $n | Foreach-Object { Write-Output "cnt=${n}: $_" } # bigfile.txtが1億行あっても瞬時に戻って来る が、これは「Select-Object -Index ~」部分を関数化したら元の木阿弥になる function Select-Nth($n) { $Input | Select-Object -Index $n | Foreach-Object { Write-Output "cnt=${n}: $_" } } Get-Content .\bigfile.txt | Select-Nth(2) # bigfile.txtを1億行全部読み込んでからおもむろに出力する 構文的に$_を使った関数やフィルタとしては書けない データを見て条件が成立したら打ち切り、というのになるともっとマンドクセ…… https://winscript.jp/powershell/308
893 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 22:23:22.94 ID:pISu+im0.net] >>871 それな! ワカル ㌧クス、 >>873 わかりた function Hoge([int]$num) { [void].{ echo "Debug" } return ($num + 1) } $a = Hoge(1) echo $a でも逝けた
894 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 22:55:15.75 ID:zGmVrirz.net] 関数の出力が意図せず(うっかり)複数個所から行われ分かりにくい点は バッチとかシェルスクリプトの挙動に合わせすぎた為だろうね。 例えばping.exeを対象2か所に実行するバッチ(.bat)をパイプで繋げたら、 バッチ1つの実行で、ping2回の20行程度がパイプに流れる。 PowerShellスクリプトや関数もこれと同じだと考えればそんな違和感ないはずなんだけど、 元々他の言語なんかで「関数の戻り値は1つ(明示的な1つor関数末尾の1つ)」とか 「明示的に変数格納や出力などしなければ、メソッドや関数の戻り値は捨てられる」 って事に慣れてるし、PowerShellも同じ文法だから同じ挙動を期待しちゃう。 上でも出てるけど、標準ではパイプに流さない仕様とした方が 敬遠される点が減ったと思う。
895 名前:デフォルトの名無しさん mailto:sage [2023/08/14(月) 13:31:51.80 ID:4NX3l0Vm.net] パイプはスレ違いのバッチスレでドヤ顔ワンライナーするぐらいしか能が無いと言っても過言
896 名前:デフォルトの名無しさん mailto:sage [2023/08/14(月) 21:15:06.40 ID:5teSXOgl.net] 1GiB程度のファイルを処理するときにはパイプは重宝するよ
897 名前:デフォルトの名無しさん mailto:sage [2023/08/15(火) 05:53:15.07 ID:WIzBRZyi.net] バッチファイルのパイプはメカニズムが違う あれは実質一時ファイルを作って次段に渡しているだけなので遅い、と言おうと思ったが "*<CR><LF>" を2^23個書き並べたbigfile.txtに対してコマンドプロンプトで type bigfile.txt | find /C "*" とやったら「瞬時に」 4194304 と返って来るのに、PowerShellで Get-Content .\bigfile.txt | find.exe /C "*" とやったら永劫の時間待たされた後 FIND: パラメーターの書式が違います と言われた後Ctrl+Cにも応答しなくなた……どうなってるのこれ……
898 名前:デフォルトの名無しさん mailto:sage [2023/08/15(火) 14:11:57.72 ID:e55ZiwZ3.net] そりゃパイプで外部コマンドに送ったら1行ずつfind.exe実行して終了するだろうから おかしなことにもなるだろうよ
899 名前:デフォルトの名無しさん mailto:sage [2023/08/15(火) 15:18:16.71 ID:qi/dYdNU.net] > あれは実質一時ファイルを作って次段に渡しているだけなので遅い それはシングルタスクだったDOS時代の話だろ NTのcmd.exeには当てはまらない
900 名前:デフォルトの名無しさん mailto:sage [2023/08/15(火) 15:39:41.88 ID:LS4gbGEC.net] cmd.exeはパイプやfor /Fのコマンドとかワーカースレッドを生成して 別タスク(子環境)としてデータの送り手や受け手を作ってるかな
901 名前:デフォルトの名無しさん mailto:sage [2023/08/24(木) 22:36:16.57 ID:W+JHQ2GG.net] Get-WinEventでSystem.evtxだかのファイルを処理させるとコマンドレットが終了しても一定時間プロセスがファイル掴みっぱなしになるのどうにかしてくれ わざわざ別プロセスでGet-WinEvent用のpowershell起動させる間抜けなコードになったぞ
902 名前:デフォルトの名無しさん mailto:sage [2023/08/25(金) 11:28:27.28 ID:WAOpDjEy.net] 処理速度都合なのかな〜って思ってるけど閉じる手段は提供して欲しい。 自分は.NETのクラス使って処理書いちゃった。
903 名前:デフォルトの名無しさん mailto:sage [2023/09/04(月) 19:42:45.42 ID:hSX1x29k.net] エクスプローラでファイル選択してコピーして (Get-ClipBoard -Format FileDropList).GetType().ToString() → System.Collections.Generic.List`1[System.Management.Automation.PSObject] うん。 Get-ClipBoard -Format FileDropList | %{$_.GetType().ToString()} → System.Collections.Generic.List`1[System.Management.Automation.PSObject] うn? foreach( $info in Get-ClipBoard -Format FileDropList ){ $info.GetType().ToString() } → System.Collections.Generic.List`1[System.Management.Automation.PSObject] えぇ… Get-ClipBoard -Format FileDropList | %{$_} | %{$_.GetType().ToString()} → System.IO.FileInfo … [System.IO.FileInfo[]](Get-ClipBoard -Format FileDropList) | %{$_.GetType().ToString()} → System.IO.FileInfo うーん… $list = Get-ClipBoard -Format FileDropList $list | %{$_.GetType().ToString()} → System.IO.FileInfo まぁ… なんか不必要に使いづらい気がするのは自分だけかな。
904 名前:デフォルトの名無しさん mailto:sage [2023/09/06(水) 19:07:34.39 ID:1kNnDW8h.net] $(Get-ClipBoard -Format FileDropList) | %{$_.GetType().ToString()} → System.IO.FileInfo バッドノウハウの領域だなー
905 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 10:37:58.96 ID:EIIMdpOe.net] 隠し属性が設定されたファイルが排他されてるとかで読めない状況のときに -ForceついたGet-Contentで読もうとすると隠し属性解除されるのは理由あるんだろうか
906 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 13:50:19.66 ID:KE5ufRbn.net] 質問で申し訳ない AccessでエクスポートしたxlsxをPowershellでComObjectを作成してOpenしたいんだけど 破損している云々で発行元を信用しますか?ってダイアログのせいでOpen出来ない https://learn.microsoft.com/ja-jp/office/vba/api/excel.workbooks.open ここによると15個目の引数で1を指定(xlRepairFile)すれば良さそうなんだけど Powershellで実行するとOpenプロパティが無いよって怒られる。 実際のコードはこう $excel = New-Object -ComObject Excel.Application $excel.Visible = $True $fileName = (Get-ChildItem "test.xlsx").FullName $book = $excel.Workbooks.Open($fileName, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, 1)
907 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 16:40:21.35 ID:OgaNelN6.net] CSVでエクスポートしなよ
908 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 17:47:39.83 ID:EIIMdpOe.net] とりあえずこうすると回避できた。 using namespace Microsoft.Office.Interop.Excel $excel = New-Object -ComObject Excel.Application $excel.Visible = $True $fileName = (Get-ChildItem "test.xlsx").FullName $param = @([Type]::Missing) * 15 $param[0] = $fileName $param[14] = [XlCorruptLoad]::xlRepairFile $workbooks = $excel.Workbooks $book = $workbooks.Open.Invoke($param)
909 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 18:53:31.49 ID:uneKtCE6.net] >>891 あざす!めっちゃ参考になるます
910 名前:デフォルトの名無しさん 転載ダメ mailto:sagete [2023/09/13(水) 02:20:54.13 ID:E0UN4wqY.net] $param = @([Type]::Missing) * 15 は $param = @([Type]::Missing) * 0xFF のほうが人にやさしい気がする
911 名前:デフォルトの名無しさん mailto:sage [2023/09/13(水) 07:53:07.83 ID:mwnND43t.net] は?
912 名前:デフォルトの名無しさん mailto:sage [2023/09/13(水) 09:33:15.43 ID:ozJmt5GG.net] ひ?
913 名前:デフォルトの名無しさん mailto:sage [2023/09/13(水) 23:41:10.61 ID:tgD8Mqqk.net] >>893 の後者は配列に255を掛けてるように見えるのだが 人にやさしい部分てどこ?
914 名前:デフォルトの名無しさん mailto:sage [2023/09/14(木) 03:25:22.93 ID:37z8xtDS.net] マスクしてるのかと思ったわ ちゃんとソース見てなかった すまんこ
915 名前:デフォルトの名無しさん [2023/09/16(土) 23:53:08.17 ID:DkE7QlfD.net] PowershellのGUI使って簡単な時報を作りたい。 System.Windows.Forms.Timerを使って作ったんだが今何時判定で$Aの数字が毎回リセットされるんでIntervalの回数だけ別ウィンドウが開きまくる。 使い方間違ってるか?教えてくれさい。 $timerTestTick { 【適当に現在時表示】 if(【指定した時間になったら】-and【$Aがtrueなら】){ start-prosess 【音楽ファイルを別ウィンドウで再生して処理継続】 $A = false } } $timerTest.Add_Tick($timerTestTick) $timerTest.Interval = 200 $timerTest.Enabled = $TRUE $timerTest.Start() 【適当にフォーム作って表示】
916 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 01:59:03.31 ID:ENG0J7cr.net] >$Aの数字が毎回リセットされるんで それ$Aを更新しようとする度に毎回スクリプトブロックで別の$Aが生成されるからやね ([ref]$A).Value = $false と書けば元の$Aを探しにいくから更新できると思う Powershellのはまりポイントの1つやね
917 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 03:18:20.18 ID:LjIc1dUH.net] powershellでGUIって、c#使えない宗教的理由でもあるの?
918 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 05:45:06.34 ID:5It5oWIy.net] >>899 スクリプトブロックていうのが働いてるのか。とりあえず試してみるありがとう。 >>900 宗教的理由というより書けないから出来ることで色々やってみてた。 というかPowerShell単体でC#つかえるの?
919 名前:デフォルトの名無しさん [2023/09/17(日) 09:35:27.80 ID:LYUgOkBe.net] PowerShellでGUI作れるんか! 知らんかった これは興味ある
920 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 09:48:58.34 ID:oJeCWV6s.net] >>902 システム管理のサンプル スクリプト https://learn.microsoft.com/ja-jp/powershell/scripting/samples/sample-scripts-for-administration 公式ドキュメントならここの「UI 要素の作成」って所を見てみるといい
921 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 13:31:47.95 ID:LJFSWd1b.net] GUI作れるとかマジか ワザワザHTMLソース内部に仕込んでWEBベースでやりとりしてた俺は一体・・・
922 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 14:04:19.59 ID:ENG0J7cr.net] 一応.NET言語の1つではあるからGUIは普通に作れるが 俺はC#コード埋め込んでFuncやAction経由で必要時にpowershellと連携する感じの使い方だな Powershellのコードだけで作るの自体が割と面倒なのや型チェックが働かない辺りとかかあんまメリットを感じない
923 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:32:36.63 ID:cR6Dxv5m.net] htaの代わりとしてforms呼び出して組んでたけどcssが便利すぎて最近は使ってないな... wpfはどうなんだろうか...
924 名前:デフォルトの名無しさん mailto:sage [2023/09/29(金) 04:49:25.46 ID:wxGTflxT.net] まじでかいな
925 名前:デフォルトの名無しさん [2023/10/01(日) 14:37:52.98 ID:nRV7BOcHv] 防災訓練とか災害ボランティアって工ラヰなーとかスコ゛ヰなーとか思われるとでも思っちゃってるのかな 都心まで数珠つなぎて゛騒音に温室効果ガスにコロナにとまき散らさせて気候変動させて海水温上昇させて地球破壊して 日本どころか世界中で土砂崩れに洪水、暴風、熱中症、森林火災にと災害連發させて JALだのАΝΑだのクソアイヌドゥだの酒飲んで業務してるクサイマークだのゴキブリフライヤ−だの殺人テ囗リストに 天下り賄賂癒着してる世界最悪の殺人腐敗テロ組織公明党斉藤鉄夫ら国土破壊省をスル一しながら何寝ぼけたことやってんだかな こういう安易な自己満足が気候変動テロを肯定してさらなる多くの人々を死に追いやってることを自覚しろや力ス 憲法カ゛ン無視で人権に財産権にと侵害して威力業務妨害して私腹を肥やしてる諸悪の根源を殲滅して 災害の連発を食い止めることこそ本質だといい加減、気づけやオナニーバカ (羽田)ttps://www.call4.jp/info.php?Type=itеms&id=I0000062 , ttΡs://haneda-Рroject.jimdofreе.com/ (成田)ttps://n-souonhigaisosyoudan.amebaownd.com/ (テロ組織)тtps://i.imgur.com/hnli1ga.jpеg
926 名前:デフォルトの名無しさん [2023/10/06(金) 21:47:54.00 ID:ESX4xHYZ.net] 日付を元に指定範囲内の一意の数字を出すってできる? 200ぐらいある今日の一言的なものを毎日ランダムで出したいんだがアプリケーションを再起動すると変数リセットされて別の単語出てしまうのを抑止したい。
927 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 22:00:29.66 ID:7j+1PDTD.net] その日の初回の結果をファイルに出力して 2回目以降はそのファイルを読み込みに行けば良いのでは
928 名前:デフォルトの名無しさん [2023/10/06(金) 22:04:29.98 ID:ESX4xHYZ.net] >>910 それしかないかなぁ ファイル出力を避けたかったんだが
929 名前:デフォルトの名無しさん [2023/10/06(金) 22:35:50.48 ID:ESX4xHYZ.net] >>910 できそうだからファイル出力の方向でやってみるありがとう。
930 名前:デフォルトの名無しさん [2023/10/06(金) 22:36:00.82 ID:ESX4xHYZ.net] >>910 できそうだからファイル出力の方向でやってみるありがとう。
931 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 23:26:20.49 ID:WmRjQTiM.net] その条件なら日付をシード値とみなせるんだから 別の単語が出てくる方がおかしいんじゃないのか 基礎的な論理思考力が欠けているね
932 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 23:44:27.78 ID:7j+1PDTD.net] あ、-SetSeedって完全固定の疑似乱数なのか。 再起動したら変わると思ってた。
933 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 04:01:41.30 ID:lBZtWf6D.net] Get-Random -SetSeed $(Get-Date -Format "yyyymmdd") -Maximum 200
934 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 06:18:44.31 ID:xTEoYklV.net] >>916 seedなんてもんがあったのか! ありがとう!
935 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 15:47:42.69 ID:lBZtWf6D.net] 912 と 913 をワンライナーで視覚化しただけやぞ
936 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 20:27:09.33 ID:bO8eXdHU.net] >>906 wpfも普通にいけるけど、vsのデザイナーがないと厳しいから、じゃあc#でいいかとなりがち htaの代替としたらwpfかwinformで枠だけ作ってwebview2埋め込むのがおすすめ qiitaでも記事があったはず
937 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 22:07:55.52 ID:SlOLtELZ.net] webview2ランタイム自体の埋め込み手段がなあ
938 名前:デフォルトの名無しさん [2023/10/20(金) 16:26:02.69 ID:3co0KDj6.net] こんにちは フォルダの配下のすべてのテキストファイルを結合した文字列を出力したいです フォルダ直下のファイルだけなら Get-Content *.txt でできました 該当するファイルの一覧は Get-ChildItem -Recurse -Filter "*.txt" -Name でできましたが Get-ChildItem -Recurse -Filter "*.txt" -Name | Get-Content としてもエラーになります
939 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 19:30:02.44 ID:qU4/oN+w.net] 「 -Name」が不要。
940 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 20:49:00.72 ID:3co0KDj6.net] できました!
941 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 16:01:28.45 ID:Vjqv9VpS.net] PSNativeCommandPreserveBytePipe が楽しみすぎる
942 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 16:01:33.19 ID:Vjqv9VpS.net] PSNativeCommandPreserveBytePipe が楽しみすぎる
943 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 16:59:01.62 ID:sGPoKgPO.net] この言語って3次元以上の配列って出来ないって認識であってる? 二次元は $array[0,0]で良いんだよね? 三次元というかジャグ配列?はとりあえず使えるから $array[0][0,0] でやってるんだけど中の2,3次元目とか中の要素数カウントが出来なくて結構困ってる
944 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 18:05:21.98 ID:BgNWqm6B.net] ジャグ配列で良いんだったら$array[0][0][0]…といくらでも入れ子にすれば良かろうに
945 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 19:44:43.60 ID:CQ6pveQE.net] 多次元配列はこうじゃない? $array = [Object[,,]]::new(4,5,6) # 3次元、4×5×6 $array[0,0,0] = "(0, 0, 0)" $array[0,0,1] = "(0, 0, 1)" # 参照は「$arraya[0,0,0]」だと配列スライスと間違えそうだから「$array.Get(0,0,0)」の方が安全かも。
946 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 19:47:15.76 ID:CQ6pveQE.net] 要素数は $array.GetLength(0) # 4 $array.GetLength(1) # 5 $array.GetLength(2) # 6
947 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 19:54:44.51 ID:sGPoKgPO.net] あぁそっか普通に出来るのか初期化の仕方が悪かったみたい 普通の初期化でも3次元出来るんだね 調べたらジャグ配列のが処理早いそうなので結局そっち採用すると思う レスしてくれた方有難う
948 名前:デフォルトの名無しさん mailto:sage [2023/11/10(金) 20:49:31.69 ID:qelae/OI.net] 7.4のGAはいつごろになりそう?
949 名前:デフォルトの名無しさん mailto:sage [2023/11/11(土) 09:09:55.24 ID:JcjqK/bB.net] PowerShell Community Call - October 19 2023 https://github.com/PowerShell/PowerShell-RFC/blob/master/CommunityCall/notes/20231019_Notes.md Ideally a GA Nov, may have 7.5 preview in December, not guaranteed
950 名前:デフォルトの名無しさん mailto:sage [2023/11/11(土) 09:43:40.20 ID:FLa2E6qS.net] Ideally に進んで今月中の GA に期待 ところで [console]::OutputEncoding って shift_jis と utf-8 のどっちにしてます?
951 名前:デフォルトの名無しさん mailto:sage [2023/11/11(土) 16:23:53.35 ID:CPZqzXvF.net] 7入れて何かいい事あんの? それ、OS標準の5.1でできますよね? もしかして、デベロッパーのオナニーに付き合わされていませんか?
952 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 04:03:18.80 ID:jdIWedpQ.net] powershellでデフォルトの環境に手を加えないとできないことは他のPG言語に任せるべきだと思う
953 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 12:28:59.88 ID:mJhoQ9VQ.net] Windows PowerShell 5.1 と PowerShell 7.x の相違点 ttps://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.3 入れる入れないは個人の自由 5と7は共存できるし別にデメリットないから7入れてるよ
954 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 16:32:02.61 ID:K6g/AyoW.net] スクリプト言語としてならどっちでもいいけど インタラクティブなコマンドラインシェルとしてなら7が圧倒的に便利 sjis出力コマンドとutf-8出力コマンドの混在環境なら7.4でさらに便利
955 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 21:46:23.90 ID:q3mytz3V.net] >>937 シェルとしてどんな点が改善されているのですか?
956 名前:デフォルトの名無しさん mailto:sage [2023/11/15(水) 00:20:29.90 ID:oV9ZzUgm.net] 半角英数のファイルにUTF-16を追加する事故が起きないのは助かる
957 名前:デフォルトの名無しさん mailto:sage [2023/11/15(水) 23:34:51.35 ID:Ik7Afwvr.net] 最近始めたんですが
958 名前:デフォルトの名無しさん mailto:sage [2023/11/15(水) 23:40:29.80 ID:Ik7Afwvr.net] aに1代入したいんですがどうすればいいですか? function hoge(){ [int]$a; function moge(){ $this.a = 1; } moge; return $a; } hoge #
959 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 09:22:30.17 ID:HndTNurg.net] ・classのメソッドとして書く(何か知らんがレキシカルスコープになる) ・javascriptを使う
960 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 10:09:03.23 ID:vDdnsPkv.net] Get-Variable とか >>475 ,899 とか $script:a とか。 なお「[int]$a」では宣言できてない。
961 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 12:06:19.94 ID:HndTNurg.net] ref[]はpowerahellにおいてCポインタ程度には重要知識なのに 界隈で然程語られる事もなく知られていない 知られてはいけないとでも言うのだろうか…
962 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 13:08:37.33 ID:evZ76lXK.net] 何言ってんだか
963 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 13:38:46.26 ID:WvJyjQhC.net] >>942 とあるオブジェクトの初期設定にこんな感じで書いてたんですが無理そうですか 了解しました class hoge:object{ [object]$o_a; [object]$o_b; hoge (){ [int] $cnt; function object_a_init(){ $this.cnt = 1; } object_a_init; } }
964 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 15:17:07.39 ID:FRf+5dUd.net] 親スコープにある変数の値を変えたいなら Set-Variable -Name a -Value 1 -Scope 1
965 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 17:00:58.20 ID:HndTNurg.net] >>946 >>943 をよく読んだ方がいいよ 昔の俺のレスの引用だけどね 変数の型指定は値で初期化する必要があるよ
966 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 17:15:32.66 ID:JFk7nC9m.net] 横からすいません なんでこれはエラーになるんでしょうか pwsh -nop -c "[System.Text.Encoding]::GetEncoding(932)" -c を使わずに pwsh -nop と起動して [System.Text.Encoding]::GetEncoding(932) を入れると動くのもわからない・・・
967 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 18:13:00.55 ID:vDdnsPkv.net] エラーって何のエラーなの
968 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 20:12:17.64 ID:JFk7nC9m.net] MethodInvocationException: Exception calling "GetEncoding" with "1" argument(s): "No data is available for encoding 932. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method." だそうです
969 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 20:17:57.10 ID:JFk7nC9m.net] Encoding.RegisterProvider でぐぐったら解決しました
970 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 22:05:45.00 ID:wYK3pDi3.net] >>941 を動くように直したげたよ function hoge(){ [int]$a = "1" # $aを値で初期化しつつ型を強制。型宣言というよりキャストに相当。[int]に強制されるので値が文字列でも$aにはSystem.Int32に変換された値が入る $a.GetType() | Write-Host # $aの値の型をコンソールに出力 System.Int32 function moge(){ ([ref]$a).Value = 1 # >>943-944 の言うブロックで変数を生成せず既存の変数を参照して値を代入する記法 } moge $a # 関数の打ち切りの意図を除きreturnキーワード不要。powershellのfuncitonは最後に限らず値を返す式は全部返そうとする } hoge
971 名前:デフォルトの名無しさん mailto:sage [2023/11/17(金) 11:55:26.61 ID:i3gkpHOP.net] >>941 参照渡しでやってみれば? -------- function hoge { [int] $a = 1234 function moge { param ( [ref] $b ) $b.Value = 5678 } moge -b ([ref] $a) return $a } hoge -------- about_Ref https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_ref?view=powershell-7.3
972 名前:デフォルトの名無しさん mailto:sage [2023/11/17(金) 14:37:28.42 ID:05VltA/O.net] PowerShell 7.4 General Availability https://devblogs.microsoft.com/powershell/powershell-7-4-general-availability/ PSNativeCommandPreserveBytePipe 待ってた!
973 名前:デフォルトの名無しさん mailto:sage [2023/11/17(金) 20:30:46.86 ID:Wtzmq/3L.net] リンク先読んでないけど、.exeにパイプしたときに早くなる(普通になる)のかな
974 名前:デフォルトの名無しさん [2023/11/20(月) 14:11:07.62 ID:HI5+Omcp.net] 文字列を8文字ごとに分割して配列に格納したいのですが 文字列が8文字以下だと1文字ずつ分割されてしまいます。 $nums = @() $nums = $num -split '(.{1,8})' | Where-Object{$_} 上記を実行すると、 $num = 12345678 のとき、$num[0] は 1が格納されるのですが、 12345678が格納されるようにするには、どうすればよいでしょうか。
975 名前:デフォルトの名無しさん mailto:sage [2023/11/20(月) 14:50:35.31 ID:HI5+Omcp.net] >>957 すみません。誤字です。 誤: $num[0] は 1が格納されるのですが、 正: $nums[0] は 1が格納されるのですが、
976 名前:デフォルトの名無しさん mailto:sage [2023/11/20(月) 15:52:48.41 ID:fHSnLnjq.net] $numsには文字列の"12345678"が代入されてるから $nums[0]だと"12345678"の1文字目の1が返る 1行目を [string[]]$nums = @() とするか 2行目を $nums = @(12345678 -split '(.{1,8})' | Where-Object{$_}) とすればOK