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 が立ててね!!
754 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 00:47:59.12 ID:h0WbN+8B.net] 外部コマンドの引数が不要またはシンプルなら、 簡単で分かりやすいのはcmd上で標準出力にする方法 $result=cmd /c "外部コマンド.exe 2>&1"
755 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 01:46:53.77 ID:l9+T+h5c.net] >>741 cmd脱却を考えているので、できればpowershell流?の書き方があればお願いいたします
756 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 03:44:54.54 ID:byiZ93ic.net] >>742 Powershellでcmdを使いこなす技術を鍛えたほうが幸せになれると思うよ
757 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 11:17:09.81 ID:l9+T+h5c.net] ためしにChatGPTに質問してみたら以下の回答でした 質問「powershell上から外部コマンドを実行し、その標準出力とエラー出力を、powershellによる出力の加工を抑止した状態で1つの変数に入れたい」 $output = & <コマンド> 2>&1 | Out-String Out-Stringは盲点でした。一応文字列として取得できているのでこれでいいのかな
758 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 11:29:33.76 ID:yOzYb5by.net] PowerShellはあてにならないからcmdに頼ることも多いよな Write-Host Test 1 New-Item -Path target1 -ItemType Directory New-Item -Path junction1 -ItemType Junction -Value target1 Write-Host Test 2 New-Item -Path test2 -ItemType Directory Push-Location -Path test2 New-Item -Path target2 -ItemType Directory New-Item -Path junction2 -ItemType Junction -Value target2 これが失敗するなんて想像してなかった
759 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 15:23:02.64 ID:9IrG8+0n.net] >>745 PowerShell5.1だと失敗しないな 7.3は駄目だった ターゲットのパスを絶対パスにすれば作れる New-Item -ItemType Junction can't create relative link #18251 https://github.com/PowerShell/PowerShell/issues/18251
760 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 16:46:18.09 ID:yOzYb5by.net] ジャンクションなら絶対パス必須でもいいけど シンボリックリンクでは相対パスが使えないと不便 >>745 のテストをシンボリックリンクに変えてもやっぱりおかしい ターゲットがディレクトリなのにファイルのシンボリックリンクになる 条件次第で逆にすることもできる タイプ間違いだと補完や削除をするときに困るんだよな だから最初からcmd.exeでmklinkしてる
761 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 21:47:00.28 ID:9IrG8+0n.net] Target type detection (file/directory) for relative symlinks is still broken, even on Windows #15235 https://github.com/PowerShell/PowerShell/issues/15235 これか? 2年前に立ったissueなのにまだ直ってないみたい
762 名前:デフォルトの名無しさん mailto:sage [2023/04/03(月) 07:48:59.39 ID:Jr4h81FG.net] >>739 あの〜、コマンドプロンプトのstartだと1行の start /B /AFFINITY 1 cmd.exe のように「新しいウィンドウを作成せず、使うプロセッサを指定して起動する」には 小回りのきくProcessStartInfoを使うとどう書くの?
763 名前:デフォルトの名無しさん mailto:sage [2023/04/03(月) 08:48:40.85 ID:hrmFy8ir.net] .NETでの普通のやり方ならググるれば出てくるよ
764 名前:デフォルトの名無しさん mailto:sage [2023/04/03(月) 21:13:34.50 ID:d+sLTFCG.net] 例示ではプロセス起動・Process型オブジェクト取得にStart-Processを使ったけど >>739 は普段はProcessStartInfo使ってるってだけじゃないの。 私も引数あるときはStart-Process(-ArgumentList)避けてProcessクラス使う。
765 名前:デフォルトの名無しさん mailto:sage [2023/04/03(月) 21:20:59.87 ID:9kyxsKiX.net] PowerShellってWebスクレイピングには向いてないですか? Pythonで作った方がいいですか? PowerShellは職場用のスクリプトを何個か作ったりして少し分かるのですが、Pythonはまったく不慣れなので迷ってます
766 名前:デフォルトの名無しさん mailto:sage [2023/04/03(月) 21:35:29.28 ID:NHigh4Tg.net] Poweshellでちょっスクレイピング sloppy-content.blog.jp/archives/12057529.html 【PowerShell】SeleniumモジュールでWebスクレイピングしたい https://zenn.dev/hara_power/articles/815e3f3dc1e5655c4c22
767 名前:デフォルトの名無しさん mailto:sage [2023/04/03(月) 22:09:14.13 ID:FTaZkaBO.net] Windowsに限ればスクレイピング以外にもブラウザに直接細工する手段が充実してるからライブラリ頼みのpythonより向いてるとも言える
768 名前:752 mailto:sage [2023/04/04(火) 10:40:01.35 ID:4xPC11r9.net] >>753 >>754 ありがとうございます PowerShellでやってみようと思います
769 名前:デフォルトの名無しさん mailto:sage [2023/04/08(土) 22:48:22.89 ID:wqsbQ+QM.net] PowerShellでPersonal Communicationsを操作しようと思い 以下のサイトを参考にしようとしたのですが https://www.tekizai.net/entry/2021/10/04/063000 64bit版のPowershellでは出来ないようです 64bit版でも動かせるように変更はできないでしょうか?
770 名前:デフォルトの名無しさん mailto:sage [2023/04/08(土) 23:26:55.43 ID:ymsLMaB3.net] 64bit環境用のPersonal CommunicationsのOCXやらが無い場合は32bitのpowershellからCreateObjectするしかないとは思うけど そのサイトのVBA版では環境に関する言及がないね 32bit版Officeを使っているという前提で書いてるのかもしれないが試してみないと判らないね
771 名前:デフォルトの名無しさん [2023/04/10(月) 20:51:54.13 ID:4PCv5Fk3.net] すいません、当方SEで技術的な質問です administrator権限のユーザーでLinuxサーバーからパスワード認証でなく、秘密鍵と認証鍵の認証方式でwindowsサーバーにSSHを掛けたいのですが、administrator権限のユーザーですと、パスワードを聞かれてしまいます 他の権限のユーザーは問題無く認証されます administrator権限では認証方式のSSHは使えないのでしょうか?
772 名前:デフォルトの名無しさん mailto:sage [2023/04/10(月) 21:12:02.69 ID:bM8RH+P4.net] >>758 superuser.com/questions/1407020/ddg#1407042
773 名前:デフォルトの名無しさん [2023/04/10(月) 21:31:04.64 ID:4PCv5Fk3.net] >>759 ありがとうございます 明日、業務で試してみます
774 名前:デフォルトの名無しさん mailto:sage [2023/04/14(金) 21:40:03.65 ID:qiPEiEw+.net] Windowsのディスプレイ設定で拡大率を100%以外にしてると フォームの文字がぼやけるんだけど、なにか解決策はありますか? Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing $form = New-Object System.Windows.Forms.Form $form.text= "タイトルはぼやけない" $label = New-Object System.Windows.Forms.Label $label.Size = New-Object System.Drawing.Size(300,20) $label.Text = "ディスプレイ拡大率が100%以外だと文字がぼやける" $form.Controls.Add($label) $form.ShowDialog()
775 名前:デフォルトの名無しさん mailto:sage [2023/04/14(金) 21:40:32.33 ID:qiPEiEw+.net] ちなみにOSはWindows11です
776 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 13:51:30.62 ID:iq3ZlEDB.net] その辺て外人もあまり正解に辿り着いてない箇所だな 俺も辿り着いたとは言えんけど面倒だった
777 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 14:12:07.08 ID:ig+gwe+P.net] C#を使うのが最適解
778 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 15:02:15.83 ID:cOO792TH.net] powershellじゃなくてWindowsFormsの問題でしょ 「WindowsForms ぼやけ」で検索したらいくらでも出てきたけど
779 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 19:25:15.71 ID:erslMsE0.net] WPFで作れば違うのか?
780 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 20:21:51.02 ID:iq3ZlEDB.net] ちょっと意識して組めばできなくはないから環境を変える程でもないな
781 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 22:14:25.62 ID:raQFwlCG.net] c:\aaa\bbb\ccc\hhh c:\aaa\ddd\eee c:\aaa\fff\ggg(以下続く) というフォルダ構造があった場合、ccc(サブフォルダhhhも含む)、eee、gggのフォルダを別のフォルダにコピーしたいんですがうまくいきません。 chatGPTに聞いたところ ($rootFolder=c:\aaa、$targetFolderはコピー先) $targetFolders = Get-ChildItem $rootFolder -Recurse -Directory | Where-Object { $_.FullName -like "$rootFolder\*\*\[ceg]" } となり、少し変更して $targetFolders = Get-ChildItem $rootFolder -Recurse -Directory | Where-Object { $_.FullName -like "$rootFolder\*\*" } としてみたんですが、これだとcccフォルダがコピー先に存在していた場合hhhフォルダがcccフォルダとは別にコピーされてしまいます。 同じフォルダ名があった場合サブフォルダの処理を飛ばしてフォルダ構造したままコピーする方法はないでしょうか。
782 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 22:16:07.91 ID:raQFwlCG.net] フォルダ構造したまま→フォルダ構造を維持したまま 失礼しました。
783 名前:デフォルトの名無しさん mailto:sage [2023/04/15(土) 23:22:30.72 ID:iq3ZlEDB.net] ・同じフォルダ名があった場合サブフォルダの処理を飛ばしたい ってう制約を加えてchatGPTに聞いたらいいんじゃね
784 名前:768 mailto:sage [2023/04/16(日) 01:08:07.22 ID:i+x2SgN3.net] >>770 試してますがうまくいきませんね。aaaやbbbが例えであることをうまく理解してくれなくて、 全てのフォルダ名を手入力する必要があるコードしか作ってくれません。○や△みたいな記号に置き換えても同じ。 get-childitemで特定の深さ以下のフォルダ名を取得することができればうまく行きそうですが、 -depthは特定の深さ「まで」のフォルダを検索するオプションですよね? 特定の深さ以下のフォルダを検索する方法はありませんか?
785 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 11:56:14.63 ID:QYDIaDii.net] 一発でrecursiveでやるのを諦めて泥臭く2重なり3重なりの繰り返し処理にして 自分でフォルダを掘り下げていけばいいんじゃないの
786 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 11:57:11.68 ID:QYDIaDii.net] 深さが動的なら関数にして再帰呼び出し
787 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 12:07:35.90 ID:Gz6gIEIr.net] >>771 「特定の深さ以下」ではなく「特定の深さ直下」を対象としたいんだよね?
788 名前:デフォルトの名無しさん [2023/04/16(日) 12:38:10.68 ID:SPigkToS.net] >>771 相対パスの概念がないのか?
789 名前:デフォルトの名無しさん [2023/04/16(日) 12:47:20.03 ID:SPigkToS.net] >>768 はネタかもな コピー先に何があるのかチェックしないという発想は、まったく理解できない。 初心者なら前提条件という概念がないのはわかる。 先にあったらこうする、そうでなかったらこうするなどの条件分岐がないなら、強引にやればいい。 そもそもROBOCOPYコマンドでできることをやろうとしているのは、これ学校の課題なのかなと思いました。
790 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 15:01:28.21 ID:EhcVUpdk.net] 深さ3のディレクトリをそのままコピーすりゃいいだけじゃないの?
791 名前:768 mailto:sage [2023/04/17(月) 01:51:03.87 ID:GaP+UugE.net] >>774 そうなんですが、>>768 だとd:\コピー先\ccc\hhhとしたいのにcccフォルダがすでにあると d:\コピー先\ccc d:\コピー先\hhhになっちゃうんですよね。 >>772 の方法か、もしくは>>776 robocopyとforeachで何とかできるか? とりあえず自分であがいてみます。
792 名前:デフォルトの名無しさん mailto:sage [2023/04/17(月) 02:46:16.45 ID:dBG5z/eM.net] 入出力をちゃんと定義できてないからおかしな事になる初心者あるあるだな
793 名前:デフォルトの名無しさん mailto:sage [2023/04/17(月) 11:31:05.75 ID:udj2SRYX.net] 特定の深度だけ処理してみた ※$Sourceはフルパス指定であること param( [string] $Source, # $Sourceからの相対深度 [int] $RelativityDepth ) # パスを\と/で区切って配列化 $SourceDirSplit = $Source.Split([System.IO.Path]::DirectorySeparatorChar).Split([System.IO.Path]::AltDirectorySeparatorChar) foreach ($TargetDir in @(Get-ChildItem -LiteralPath $Source -Recurse -Directory)) { # パスを\と/で区切って配列化 $TargetDirSplit = $TargetDir.FullName.Split([System.IO.Path]::DirectorySeparatorChar).Split([System.IO.Path]::AltDirectorySeparatorChar) # 指定深度にあるDirを処理 if ($TargetDirSplit.Count -eq ($SourceDirSplit.Count + $RelativityDepth)) { # 一致したディレクトリを返す $TargetDir } }
794 名前:デフォルトの名無しさん mailto:sage [2023/04/19(水) 22:39:13.81 ID:CpwHPFTk.net] Start-ThreadJob や Register-EngineEvent のスクリプトブロックの中で キャプチャされずにWrite-Output 相当の出力をする方法はないでしょうか パイプラインに流したいので Write-Host ではなく Write-Output したいです 別のプロセスを経由する方法は思いついたのですが残念過ぎますし ForEach-Object -Parallel のようにキャプチャされなければ良いのに function hogepiyo { begin { 処理本体はここで Start-ThreadJob しておく } process { … } end { … } clean { … } } なんちゃら | hogepiyo | ぽげむた のようにしたくて考えてます 要は入出力と処理を非同期にできれば他の方法でもありがたいです
795 名前:デフォルトの名無しさん mailto:sage [2023/04/20(木) 22:12:24.17 ID:dJqrvGvM.net] キャプチャとか何言ってるのかわからない
796 名前:デフォルトの名無しさん mailto:sage [2023/04/20(木) 22:40:35.29 ID:fUuxiSJs.net] PowerShellでフォーム作るの割と苦痛なんだけど何かデザインモードとかないの?
797 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 05:21:56.20 ID:ZJfuu8vu.net] Where-object多様するスクリプトに数万行のcsv食わせたら処理に1時間くらいかかる… 大量のデータ処理はWhere-object使うなってみかけたけど使わん方がいいのか
798 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 07:34:50.39 ID:TBBX4m6H.net] 件数が少ないことが確実な時しか使わない。 スクリプトだとほとんど foreach(){} 使ってる。 パイプライン処理したい場合でも &{} や .{} や function の process{} あるいは filter。
799 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 09:17:07.60 ID:kA/+t8w0.net] >>783 PowerShell Pro Tools https://ironmansoftware.com/powershell-pro-tools
800 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 11:30:54.75 ID:c3fakvC2.net] >>784 PowerShell スクリプトのパフォーマンスに関する考慮事項 ttps://learn.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/performance/script-authoring-considerations?view=powershell-7.3
801 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 17:50:40.46 ID:4gKwO2KA.net] >>782 出力がコレクションにためられて Receive-Job が必要になるのを回避したい Start-ThreadJob の -StreamingHost オプションの Write-Output 版な感じ そんなオプションはないから回避方法を知りたい Start-TheadJobだけでなくイベントハンドラから出力する場合も同じ イベント飛ばせばいいかと思ったらハンドラがジョブ扱いされて頭抱えた どうすれば Receive-Job を必要とせずに Write-Output 相当の出力ができるのだろう
802 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 18:06:57.94 ID:xAAOLjx6.net] >>785 >>787 40万行処理するのに3時間かかったから作りなおすわ…
803 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 19:56:34.84 ID:6pSKsEtx.net] >>788 Jobである必要がないならRunspacePoolでできるんじゃね
804 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 21:03:30.48 ID:Vzmd1cD+.net] >>786 おお、あるのか来週会社で使ってみる ありがとう
805 名前:デフォルトの名無しさん mailto:sage [2023/04/22(土) 10:34:00.20 ID:iFkcYPBt.net] function target ・入力を読み続ける ・最後に読んだ入力を1秒間隔で出力し続ける ・入力が q なら終了 処理遅延を無視した理想的な使用例が . { $s = Get-Date; 1; sleep 3; 2; sleep 3; 'q' } | target | % { '{0} {1}' -f (Get-Date) - $s, $_ } 0:00:00.0000000 1 0:00:01.0000000 1 0:00:02.0000000 1 0:00:03.0000000 2 0:00:04.0000000 2 0:00:05.0000000 2 となるような function target はどうすれば実現できますか 処理時間でずれていくのはもちろんかまいませんが 入力待ちにも出力を続ける具体例が知りたいです
806 名前:デフォルトの名無しさん mailto:sage [2023/04/22(土) 10:36:10.71 ID:iFkcYPBt.net] おっと間違い (Get-Date) - $s でなく ((Get-Date) - $s) だ
807 名前:デフォルトの名無しさん mailto:sage [2023/04/22(土) 16:45:49.14 ID:3JkCsMe2.net] >>792 「qなら終了」が何を示すかによるが、powershellのパイプは途中で打ち切る事は原則できないと考えた方が良い。 (endブロックが呼ばれない不完全なハックならググれば見つかる) またパイプ処理の待機はpowershellのメインスレッドの待機という意味になるので、 そこに非同期イベントを介入させたい場合はそのイベント用の別スレッドを走らせておく必要がある。
808 名前:デフォルトの名無しさん [2023/04/22(土) 21:39:35.55 ID:81urZ/Lj.net] (New-Object -ComObject Shell.Application).NameSpace(10).MoveHere(ファイルパス) 上記の方法でファイルをごみ箱に移動する場合ファイルが1個なら問題ないんですが、 ファイルパスをを"z:\*"みたいにワイルドカードで指定するとなぜか ごみ箱でなくC:\Users\ユーザー名にファイルが送られてしまいます。 どうすればごみ箱に送れましょうか?
809 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 10:54:07.72 ID:ElcI27v7.net] >>794 q は出力スレッドの停止マークで、入力の最後も意味するつもりだった (その後の入力はない) という考えをくみ取って欲しくて例を付けたのだが伝わらなくて残念 パイプラインの中断にSelect-Object -First 1する話は知ってる ていうか本題から話をそらそうとしてません? 知りたいのはメインスレッド以外からプライマリパイプラインに出力する方法 パイプラインの次段に送るにはどうすればいいか具体例が欲しい
810 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 15:49:22.67 ID:fUzoPDLK.net] シェルスクリプトやPowerShell が遅いのは、 毎行、何かのプロセスを起動するからじゃないの? 多くはプロセスの起動時間だろう Ruby は、外部プロセスを起動しなければ、プロセスは1つのまま。 並行処理もあるけど grep は、1GB を1秒!
811 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 16:01:56.38 ID:vCOHFjdN.net] >>796 そもそもパイプは同期的にしか動かないので、次段でいくら細工しても上流が出力を起こしたタイミングに縛られる。 話を単純にするなら不規則な出力を受ける処理と一定間隔で出力する処理は分けるべきだろうね。
812 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 16:05:07.36 ID:fUzoPDLK.net] >>795 移動なら、robocopy のmov/move を使えば?
813 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 16:10:27.14 ID:n0NMvdBV.net] >>799 どうやればごみ箱に移動できましょうか?
814 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 16:33:01.94 ID:aISPDv4l.net] >>795 シェル名前空間はバグだか仕様だか判らない所があるから真面目に考えても無駄 もうそういう仕様と考えてファイルは1個1個送れば? ワイルドカードはgciで展開できるんだし
815 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 17:57:33.46 ID:ElcI27v7.net] >>798 サブスレッドがパイプラインに書き込めば次段が動くんじゃないの?
816 名前:言い換えると >>792 のfunction targetは実現不可能ということ? [] [ここ壊れてます]
817 名前:デフォルトの名無しさん mailto:sage [2023/04/24(月) 17:53:43.44 ID:cODz6Qqq.net] >>801 どうもありがとうございます。そうします。
818 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 01:01:33.91 ID:q0KJktEO.net] 最近この言語で書くことあるけど関数の呼び出しを最初に書かないとエラー起こすなんて知らなくて問題解決に時間がかかった 多分ほとんどの人が関数はメインの後に書きたいと思うんだけどファイル分けて呼び出したりしてるの?
819 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 07:59:40.97 ID:0OU27daL.net] >>804 > 多分ほとんどの人が関数はメインの後に書きたいと思うんだけど んなことはない 呼び出される方を前に書かなきゃいけないのは他の言語でも多いぞ
820 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 08:14:10.57 ID:Q567y34W.net] >>805 定義を上書きできる言語なら呼び出し順序に意味があると思うけど、そうじゃないならただの手抜き仕様
821 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 08:17:30.73 ID:0OU27daL.net] >>806 実行速度が速くなる、スコープが明確になる、などのメリットがあって敢えて採用されてるんだよ JSとかも古くからあるfunction構文は順序関係ないが今推奨されてるアロー関数だと前に書かなきゃだめだ
822 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 08:19:33.10 ID:0OU27daL.net] あとスパゲティを防ぐ効果があるというメリットもあるな C言語だとそれを目的にプロトタイプを書かない人もいる
823 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 08:27:15.73 ID:h+X7r+oZ.net] 関数同士の依存関係が明確で前の関数が後の関数に依存しないなら初めてのコードを読みやすくなるというメリットもあるな
824 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 08:33:08.87 ID:TxIkuN+X.net] ホイスティングってJS以外であるの?
825 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 09:07:53.85 ID:qRrW+mkA.net] Java隆盛くらいの時代には関数はどこに書いても良いのが当たり前として定着したけど 関数型プログラミングでは関数宣言は変数や定数の宣言と同じようなものだからどうしても順序を意識せざるを得ない 順序の扱いを自動でやってくれる仕組みがホイスティングなんだけど、そのルールの分かりにくさやいやらしさが開発者に嫌われてJavaScriptのvarがletとconstに取って代わられた歴史がある
826 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 11:26:54.33 ID://VjHWfL.net] >>804 メインの部分をメイン関数として書いて実行時にメイン関数を呼び出すようにすればよいのでは?PowerShellはシェルとしても動くので実行時に先に関数が定義されていないといけないのは自然な動作のような気もする。
827 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 11:29:40.93 ID:Y1VsObgt.net] vbsは関数後書きでもokだよ よしvbs使おう
828 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 11:43:20.51 ID:Xlw1eETD.net] >>812 begin process endブロック使いたいときに発狂しそうだな
829 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 21:27:41.00 ID:RtJhGNCC.net] powershellでもclass内なら順序関係なくなるよ
830 名前:デフォルトの名無しさん mailto:sage [2023/05/04(木) 17:38:09.61 ID:spWJYsDj.net] 自分のコード見たら別に後から宣言してても実行できてるんだが コマンドレットの定義だとホイスティングされるとかある?
831 名前:デフォルトの名無しさん mailto:sage [2023/05/04(木) 17:56:23.79 ID:P088Z0u/.net] >>816 どういうコード書いてんのよ
832 名前:デフォルトの名無しさん [2023/05/04(木) 21:18:57.29 ID:FdNSNO1e.net] >>816 古臭いと言われても、前に書いた方が無駄な混乱をさけられる。
833 名前:デフォルトの名無しさん mailto:sage [2023/05/05(金) 18:03:31.01 ID:gmBJZ0Nw.net] 動的言語は第一級関数のクロージャが多いから、 関数外で宣言したローカル変数が、関数内へ持ち込まれるので、 スコープが広くて、ヤバイ さらに、JS はホイスティングされるから、超ヤバイ ただし、Ruby の関数だけは第一級関数のクロージャではなく、 関数外で宣言したローカル変数は、関数内へ持ち込まれない だから他の言語よりも、圧倒的にバグらないので、初心者向き
834 名前:デフォルトの名無しさん [2023/07/08(土) 13:16:16.25 ID:UoEVlKLQl] 他人の権利を強奪して私腹を肥やす強盗殺人政治やってる論理もクソもないロクに勉強してない議員た゛らけ無能外道集団公明党と違って維新 は最低限の知的能力を有してる奴が多いのは橋下徹の意向で容赦なく知的能カの足切りやってる成果なんた゛ろうけど、いい年して玉遊ひ゛とか してる無能を讃えてみたり,日本に原爆落とした世界最惡のならす゛者國家の覇権主義に利用されてるウクラヰナ状態になるリスクを無視して 軍拡推進してみたり,危險極まりない原發推進すれは゛電気料金は下がるた゛のほさ゛きか゛ら鉄道のЗ〇倍以上もの非効率クソ航空機によって莫大 な石油無駄に燃やしてヱネ価格暴騰させて温室効果カ゛ス倍増させて氣侯変動させて災害連發させて貿易赤字に.そんなバカの象徴萬博を誇っ てみたり.騒音によって知的産業に威力業務妨害して壞滅させて原發とか笑わせるレヘ゛儿にまで曰本の技術カ低下させて.勉強妨害して犯罪 惹起しながら動物虐待は罰則強化しろ、子の虐待には金くれてやれた゛の,いつの間にか憲法の下の平等に反しないヘ゛一シックインカムも言わ なくなって社会分断惹起して治安惡化とか,頭は回るか゛古い教育制度による時代遅れの固定観念による思慮のなさは直情的な橋下徹由来かな 創価学會員は.何百万人も殺傷して損害を与えて私腹を肥やし続けて逮捕者まで出てる世界最悪の殺人腐敗組織公明党を 池田センセ─が口をきけて容認するとか本気で思ってるとしたら侮辱にもほどか゛あるそ゛! https://i.imgur.com/hnli1ga.jpeg
835 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 13:26:04.42 ID:GLUt9X10.net] get-childitem select-object Full name,でownerを追加する方法はありますか?ご存知の方、ご教示願います。
836 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 17:48:28.46 ID:xt/PffdC.net] >821 Get-ChildItemだけではowner情報は取れない、Get-Aclで情報取得する必要がある 組み合わせで良ければ以下の様にSelect-Objectでプロパティ追加すれば出来る Get-ChildItem|Select-Object FullName,@{n="Owner";e={Get-Acl $_.fullname|% {$_.Owner}}}
837 名前:デフォルトの名無しさん mailto:sage [2023/07/07(金) 19:48:22.82 ID:5l+s6JZK.net] Outlook を起動してメールを送りたいのですが 本文のメールのフォントサイズや色の指定が一切無視されます。 Outlook 側の設定なのか、コードが悪いのかもよくわからず。。。 スレ違いならすいません =================== $outlook = New-Object -comObject Outlook.Application $mail = $outlook.CreateItem(0) $mail.Subject = "件名テスト" $mail.HTMLBody = "<html>&
838 名前:lt;head><style type='text/css'> body {font-size:11; font-family:Meiryo UI;} </style></head><body> ああああ<span style='text-decoration:underline; text-decoration-color:red;'>いいいい</span>ううう<br> </body></html>" $inspector = $mail.GetInspector $inspector.Display() #$mail.Send() =================== 上記のコードだとメイリオは設定されますが、フォントサイズは8.5になるし下線は黒色になります。 なにとぞご教示お願いします [] [ここ壊れてます]
839 名前:デフォルトの名無しさん mailto:sage [2023/07/10(月) 00:01:29.03 ID:pvSg+WfU.net] font-sizeの値に単位が無いから無視されてんじゃね
840 名前:デフォルトの名無しさん mailto:sage [2023/07/10(月) 03:13:05.95 ID:ixw20e1S.net] >>824 試したはず・・・と思いつつも確認したら普通に変更されました!!! 11px で確認したのかもしれません。11pt と書いたら普通に反映されました ありがとうございます ただ下線は相変わらず赤色にならず、黒色のままです。 #FF0000 も試したけど変わらず・・・ どうやら text-decoration-color がそもそも使えないようでした。 さささ<span style='text-decoration:underline; color:red;'>ししし</span>すすす<br> とやったら文字も赤くなりましたが下線も赤くなりました。 Outlook に使える html の仕様との戦いな気がしてきた これはどこで尋ねたら・・・
841 名前:デフォルトの名無しさん mailto:sage [2023/07/10(月) 10:11:13.02 ID:CzqO5vr+.net] 後はstyle属性をシングルクォーテーションで括ってるのが気になった 全体の括りをシングルにして属性値をダブルに変更で動くと思うよ
842 名前:デフォルトの名無しさん mailto:sage [2023/07/10(月) 10:51:54.81 ID:ixw20e1S.net] シングルとダブルは変わりませんでした… 実際はPowerShellでメール本文内に変数を当てこむので シングルのままでいこうと思います あと下線だけ赤色は私の勘違いでした 赤下線の時は文字も赤くして問題なかったのでとりあえず解決しました お手数おかけしました ご助言くださった方ありがとうございました
843 名前:デフォルトの名無しさん mailto:sage [2023/07/13(木) 11:56:03.10 ID:cnmTEsiX.net] 二週間ほど前に自分で調べて書いたのに、どうやって書いて動かしたのか全く思い出せなくて困ってます 自分で自分が信じられないんですが、教えてください。 やりたいこと:Read-Hostで指定したフォルダに存在するフォルダを取得し、各フォルダに指定したファイルをコピーする 引っかかっている点: 1)$input = Read-Host "コピー先フォルダを指定" たとえばここでcopyと入力。規定のフォルダがC:\作業とする。 入力の結果、c:\作業\copyとして、ここにあるサブフォルダを取得したいので $inputをc:\作業\copyにしたい。 2)Get-ChildItem でディレクトリ名のみ取得するには? それでforeachでやってたと思うんですが・・・。
844 名前:デフォルトの名無しさん mailto:sage [2023/07/13(木) 13:50:42.52 ID:K8IsBXo8.net] Get-ChildItem -LiteralPath ([IO.Path]::Combine("C:\作業", (Read-Host "コピー先フォルダを指定"))) -Directory -Name
845 名前:デフォルトの名無しさん mailto:sage [2023/07/13(木) 17:51:09.66 ID:cnmTEsiX.net] >>829 わー初見のコード でもおかげでなんとかできました。ありがとう。
846 名前:デフォルトの名無しさん mailto:sage [2023/07/14(金) 04:02:22.77 ID:vOCFwCnb.net] 多分いままで書いてたコードはこれ # 規定のフォルダのパスを作成 $parent = join-path 'c:\作業' $input # 上記パスのサブフォルダ作成 $names = ls -pspath $parent -di | % name 下記はエイリアス(関数の別名) ls := get-childitem % := foreach-object
847 名前:デフォルトの名無しさん mailto:sage [2023/07/14(金) 04:02:59.81 ID:vOCFwCnb.net] # 上記パスのサブフォルダ作成 ↓ # 上記パスのサブフォルダ名を取得
848 名前:820 mailto:sage [2023/07/18(火) 17:12:35.63 ID:jBHsPJa3.net] >>822 遅くなりました。 set-location -pathで場所を指定したら、指定したフォルダのownerを取得できました。ありがとうございます。 get-Childitem -recruse -file ┃select-Object directoryName ,name ,extension ,Length Creationtime, lastACCESStime ,lastwriteTime, fullname ┃Export‐csv ‐Encodeing default xxx.csv と一緒にできなかったのが悔やまれます。
849 名前:デフォルトの名無しさん mailto:sage [2023/07/18(火) 18:02:52.05 ID:uMqw2ex7.net] そういう時はadd-memberするんだよ
850 名前:デフォルトの名無しさん mailto:sage [2023/07/18(火) 20:02:12.51 ID:x3+Ehzia.net] >>822 の何がだめで、あるいは何が分からなくて、そのコマンドに組み込めなかったのか分からんな。 起点ディレクトリ自体の情報もCSVに含めたい、って事なのかな。
851 名前:デフォルトの名無しさん mailto:sage [2023/07/18(火) 22:45:48.56 ID:BpIlHiPB.net] powershellの学習曲線は険しい 本人が納得したならもうそれでいいだろう
852 名前:820 mailto:sage [2023/07/19(水) 08:31:15.42 ID:wWAjwZqt.net] >>835 そうです。
853 名前:デフォルトの名無しさん mailto:sage [2023/07/19(水) 15:47:04.50 ID:mqKqy4GV.net] ならこんな感じで。 $dirPath = "起点ディレクトリのフルパス" [IO.FileInfo]::new($dirPath) | %{$_; $_ | Get-ChildItem -Recurse -File} | Select-Object DirectoryName, Name, Extension, Length, CreationTime, LastAccessTime, LastWriteTime, FullName, @{N="Owner";E={($_ | Get-Acl).Owner};} | Export-Csv -Encoding Default xxx.csv CSVの出力先がフルパスなら、Set-Locationはいらない。
854 名前:820 mailto:sage [2023/07/24(月) 18:16:28.42 ID:yY3fBN5A.net] >>838 ありがとうございますm(_ _)m とりあえずownerを取得できました。列の入れ替えはPowerQueryで対処します。 neme,Extensio,owner,...したかったのですが。
855 名前:デフォルトの名無しさん mailto:sage [2023/08/02(水) 23:31:49.70 ID:8Lc0dkYb.net] Pythonでやったら楽なのに…と思う処理も他のメンバーに配る可能性を考えると泣く泣くpowershellでやることになる 嫌いな言語ではないけど凝った処理を書こうとすると見た目の癖が強いソースコードになりがち
856 名前:デフォルトの名無しさん mailto:sage [2023/08/05(土) 08:55:12.86 ID:4wFerhHK.net] Pythonは見た目の癖が強くないとでも?
857 名前:デフォルトの名無しさん mailto:sage [2023/08/05(土) 09:35:04.11 ID:wvUeqD5z.net] 泣く泣くpowershellに草
858 名前:デフォルトの名無しさん mailto:sage [2023/08/06(日) 22:29:47.72 ID:5CExyS7F.net] 質問なのですがパイプラインの結果を関数に渡して先頭からk番目を取り出すには一体どうすればorz やりたいことはパイプラインの結果を検証する処理をサブルーチン化したい(k番目を取り出すのはその第一歩) とりあえず書いたがうまく行ってないやつ: function Test-RegEnt($reg_query_result, $exp_type, $exp_value) { $reg_query_result | Select-Object -Index 2 } Write-Output ("Test_A1:" + ($result | Select-Object -Index 2)) # 2行目が意図通りselectされる(" RegisteredOwner REG_SZ Admin") $result2 = Test-RegEnt($result, 'REG_SZ', 'Admin') Write-Output ("Test_A2:" + $result2) # A1と同じ結果になるかと思いきや、'Admin' になる
859 名前:デフォルトの名無しさん mailto:sage [2023/08/06(日) 22:31:40.76 ID:5CExyS7F.net] 先頭3行抜かしましたorz $result = reg query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v 'RegisteredOwner' $cnt = 0 $result | ForEach-Object{ "TEST[$cnt}:" + $_; $cnt++ } この次に>>843 のコード。
860 名前:デフォルトの名無しさん mailto:sage [2023/08/06(日) 22:48:34.72 ID:5CExyS7F.net] んまーなんかこれだとうまく行ったけんども思ってたのと違う…… function Test-RegEnt($exp_type, $exp_value) { $Input | Select-Object -Index 2 } $result = reg query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v 'RegisteredOwner' $cnt = 0 $result | ForEach-Object{ "TEST[$cnt}:" + $_; $cnt++ } Write-Output ("Test_A1:" + ($result | Select-Object -Index 2)) $result2 = ($result | Test-RegEnt('REG_SZ', 'Admin')) # パイプラインの結果を引数ではなくパイプで渡す Write-Output ("Test_A2:" + $result2) 実はパイプラインの結果(オブジェクトの配列)は関数引数に渡せなかったりするので
861 名前:? つなみにfunctionの引数部分で [array]$reg_query_result としてみてもうまく行かなかった。 [] [ここ壊れてます]
862 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 03:16:48.48 ID:SSXgsNNw.net] 文法が違う。 Test-RegEnt -reg_query_result $result -exp_type 'REG_SZ' -exp_value 'Admin' とか Test-RegEnt $result 'REG_SZ' 'Admin' とか。 または function Test-RegEnt { Param ( [Parameter(ValueFromPipeline=$true)] [string] $reg_query_result, [string] $exp_type, [string] $exp_value ) Begin { $cnt = 0 } Process { $cnt++ $idx = $cnt - 1 if ($idx -eq 2) { $reg_query_result return } } } $result | Test-RegEnt -exp_type 'REG_SZ' -exp_value 'Admin'
863 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 06:50:14.57 ID:L1yQ0BJe.net] >>846 レス㌧クス $Input利用(>>845 )とBegin { } Process { }利用の違いはわかりた $resultが数億オブジェクトだったりしたら後者の方がパイプラインがスムーズに流れてよさげ(未検証 一方、 >実はパイプラインの結果(オブジェクトの配列)は関数引数に渡せなかったりするので?(>>845 ) については関数の呼び出し箇所が $result | Test-RegEnt -exp_type 'REG_SZ' -exp_value 'Admin' # (1) OK Test-RegEnt -reg_query_result $result -exp_type 'REG_SZ' -exp_value 'Admin' # (2) NG (エラー) やったから、これは「パイプラインの結果は関数引数には渡せない」((1)のように書くしかない)ということでFA?
864 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 06:54:08.66 ID:FZVMVghc.net] Select-ObjectのSkipとFirst使えばできるのでは?
865 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 06:56:57.16 ID:FZVMVghc.net] 関数でやりたいという要件を見落としていた
866 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 07:04:28.71 ID:FZVMVghc.net] >>843 > $result2 = Test-RegEnt($result, 'REG_SZ', 'Admin') $result2 = Test-RegEnt $result 'REG_SZ' 'Admin' でやりたいことはできるのではないでしょうか
867 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 22:40:57.49 ID:SSXgsNNw.net] パイプラインと引数のどちらでも動くようにしたいなら function Test-RegEnt { Param ( [Parameter(ValueFromPipeline=$true)] [string[]] $reg_query_result, [string] $exp_type, [string] $exp_value ) Begin { $cnt = 0 } Process { foreach ($item in $reg_query_result) { $cnt++ $idx = $cnt - 1 if ($idx -eq 2) { $item break } } } } あくまでシンプルめのサンプルなんでSelect-Object -Index 2と全く同じ挙動とか期待しないように。 ※作りこむならパイプが繋がってるのかチェックして分岐の処理書いたりする。 なお、大量のデータをパイプラインに流すのはお勧めできない。 パイプラインは途中での打ち切りとか難しいし、 結局は普通にループ処理書いた方が速いし制御しやすいし分かりやすい事が多い気がする。
868 名前:デフォルトの名無しさん mailto:sage [2023/08/10(木) 07:01:52.35 ID:3iQsMBl9.net] レス㌧クス、しかしながら大量データを引数で関数に渡すのはメモリ消費量、応答速度ともに悪くなることがわかったからやめるわサーセン;;; どういうことかというと、bigfile.txtが(1行何か書いたいた後 Ctrl+A Ctrl+V Ctrl+V を22回反復とかで作った) 4194305行の巨大なテキストファイルだったとして、 function Test-FileContent([string[]] $lines) { $cnt = 0; foreach ($line in $lines) { $cnt++; Write-Host "cnt=" $cnt } } $lines = Get-Content .\bigfile.txt # (1) Test-FileContent($lines) # Get-Content完了後の結果を引数で渡す とするとお、「cnt= 1」が表示される前に(1)で永劫の時間待たされるますが、 function Test-FileContent() { $cnt = 0; foreach ($line in $Input) { $cnt++; Write-Host "cnt=" $cnt } } Get-Content .\bigfile.txt | Test-FileContent # Get-Contentが読んだら即パイプで渡す とすると*即座に*「cnt= 1」以降のカウントが始まる
869 名前:デフォルトの名無しさん mailto:sage [2023/08/10(木) 07:07:45.76 ID:3iQsMBl9.net] つなみに >$resultが数億オブジェクトだったりしたら後者の方がパイプラインがスムーズに流れてよさげ(>>847 ) も検証すた、 >>847 のレスポンスが即時のコードと似通っているが関数内でBEGIN { } PROCESS { }でなく$Inputをforeachループで回した場合、 すわなち function Test-FileContent() { $cnt = 0; foreach ($line in $Input) { $cnt++; Write-Host "cnt=" $cnt } } Get-Content .\bigfile.txt | Test-FileContent とすると、、「cnt= 1」が表示される前に永劫の時間待たされる、、、 というわけで、パイプライン(の後段まで)に大量のデータを無駄に流すなというのは真やが 生じてしまった大量のデータはむしろパイプラインにしか流さないのが正義……
870 名前:デフォルトの名無しさん mailto:sage [2023/08/10(木) 07:10:57.08 ID:3iQsMBl9.net] >>852 の肝心のところに誤記が合ったスマンヌorz *即座に*「cnt= 1」以降のカウントが始まるコードは正しくはこれ↓ function Test-FileContent() { BEGIN { $cnt = 0 } PROCESS { $cnt++; Write-Host "cnt=" $cnt } } Get-Content .\bigfile.txt | Test-FileContent
871 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 18:46:06.42 ID:I7dwFhkG.net] パイプの利点は個数を意識しなくて済むことだけど中断が一切できないしデメリットの方が多い よっぽどの事情でもない限りコマンドレット自作しても遅いだけで良い事なんて1つもない 公式のselect -firstなんかはパイプの流儀に従ってないから似た事をしようとしてもあれ?って自らの間違いに気付くんだよ powershellの深遠を覗くとそのいい加減さにガッカリするだけ
872 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 19:17:06.70 ID:SL3m3m5F.net] 一番の利点はメモリの節約です
873 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 19:30:40.13 ID:I7dwFhkG.net] メモリなんて遅さで相殺される powershell + 大量データ = 遅くて不採用
874 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 19:42:42.98 ID:bAYgNtyZ.net] >>857 使いどころを履き違えるとそうなる
875 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 19:56:15.04 ID:I7dwFhkG.net] >>858 パイプに希望を見てるのかな その認識では近く失望させられるだろう
876 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 20:07:52.72 ID:PQblbJTG.net] 一番良いのは、Windowsを使わない これにかぎる こんなクソなOSを世界中から捨てるべき
877 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 20:09:59.59 ID:SL3m3m5F.net] Windowsは汎用事務処理端末としては競合なしだ
878 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 20:27:11.32 ID:SL3m3m5F.net] メモリ効率とスループットは交換できるようなものではない 手軽さが不要ならPythonでも使っておけばいい
879 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 21:36:23.24 ID:55Ub7uv5.net] いまだにPowerShellがWindows専用だと思ってるアホを真っ先に捨てるべき
880 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:05:41.72 ID:FP8PIUGD.net] で>>843 の質問に戻るのですだが、動かなかったのは単純だが根本的な誤解してたのが原因…… C/C++と同じだろうというつもりで >$result2 = Test-RegEnt($result, 'REG_SZ', 'Admin') という呼び出し方に書いたが、これだと「Test-RegEntの第一引数$reg_query_resultに「配列」@($result, 'REG_SZ', 'Admin')を渡す」という意味になる ので、関数内で >$reg_query_result | Select-Object -Index 2 とやったら当然そのindex=2の要素 'Admin' が関数の出力となってた、というしくみ
881 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:07:08.58 ID:FP8PIUGD.net] 正しくは>>846 式に >Test-RegEnt -reg_query_result $result -exp_type 'REG_SZ' -exp_value 'Admin' またはその省略表記としては >Test-RegEnt $result 'REG_SZ' 'Admin' # カンマ区切りではなくてスペース区切り にせねばならなかった ことがわかったorz 止むにやまれない事情で昨日一日で1500行書いてデバッグしたらその過程でわかった|||。n_
882 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:11:54.59 ID:FP8PIUGD.net] あと他のスクリプトをincludeするときの欠き方が気づかないとわかりにくい…… util.ps1 を同じフォルダにある someapp.ps1 からインクルードする場合は '.\util.ps1' ではダメで、 .'.\util.ps1' にしないとutil.ps1で定義した何物も呼び出せないorz ここで先頭の「.」はutil.ps1のスクリプトスコープを呼び出し元のスコープと同じにするという意味やがちょう紛らわしい……
883 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:20:54.21 ID:FP8PIUGD.net] あと関数内においては代入文、[void]にキャストした文、if文とかの条件式 を除く全ての文が出力を持つ、 という仕様のせいで危うく恐ろしいバグを作り込むところやった;;; function Show-ErrDlg($msg) { $wsobj = new-object -comobject wscript.shell $wsobj.popup($msg, 0, 'エラー', 0 -bor 16) }
884 名前:function Test-Equipment1() { $result = (何かのテスト) if (!$result) { Show-ErrDlg('何かのテスト failed.') } return $result } でとするとテストが失敗したときも [] [ここ壊れてます]
885 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:25:27.54 ID:FP8PIUGD.net] if (!(Test-Equipment1) { exit 1 } (テスト正常終了の表示処理) でテスト正常終了の表示が出るorz これは何でかというと$wsobj.popup($msg, 0, 'エラー', 0 -bor 16) 」がクリックされたボタンの番号を出力する結果、$resultがまたしても配列 @( (「なんかのテスト」の結果), ($wsobj.popup()でクリックされたボタンの番号) ) となりこれが Test-Equipment1() の戻り値となり、それをif文で評価したら最後の要素
886 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:27:54.43 ID:FP8PIUGD.net] (OKボタンのコード6)と評価されるため、!6なので常に偽になるというしくみ、、、、 こう修正すたら直った function Show-ErrDlg($msg) { $wsobj = new-object -comobject wscript.shell [void] $wsobj.popup($msg, 0, 'エラー', 0 -bor 16) # [void]付ける } わかるかこんなもん…… および原理的にlint的な機械的チェックもできない……
887 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 23:35:32.35 ID:FP8PIUGD.net] これはデフォルトで出力無しとして、 なんかの接頭辞を付けた文だけが結果がパイプに出力されるるようにする仕様であるべきだった希ガス (出力が無いというミスはすぐ気づける てかWrite-Outputを省略可能としているのがそもその誤り…… ※ 個人の感想です いっぱい連投したがTeamsのつもりでShift+Enterしたら投稿されてしまったせいやスマンヌorz いじょ
888 名前:デフォルトの名無しさん 転載ダメ mailto:sagete [2023/08/12(土) 00:58:59.52 ID:H+b+A9qi.net] ============================ function Hoge([int]$num) { echo "Debug" return ($num + 1) } $a = Hoge(1) echo $a ============================ こうすると $a には Debug と 2 の2つが入る ============================ function Hoge([int]$num) { .{ echo "Debug" } | Out-Null return ($num + 1) } $a = Hoge(1) echo $a ============================ こうすると $a には 2 の1つしか入らない 不要なところは 「 .{ ~~~ } | Out-Null 」で表示を抑制したら楽になるかも
889 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 01:19:17.04 ID:DbL0Mu2X.net] >>843 に言える事はパイプで何番目とかいう考えは捨てた方がいい パイプは途中で処理を打ち切る機能が欠落してるから何番目だけに用があろうが全ストリームを読み終わるまで終わらない
890 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 08:19:31.33 ID:IRt4i0hm.net] ほぼ誤差だが |Out-Null より $null= で処理した方がパフォーマンスがよく、可読性も高い
891 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 08:23:13.14 ID:ueiwXwrP.net] PowerShell スクリプトのパフォーマンスに関する考慮事項 https://learn.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/performance/script-authoring-considerations
892 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 22:00:12.59 ID:pISu+im0.net] >>872 わかりた パイプラインの打ち切りは、実現方法はあるが円満な解決方法はなさげ(どれもこれもなんかしらのミソがつく パイプで$n番目、というだけならSelect-Objectしたらv3以降ならn+1番目以降を打ち切ってくれる $n = 2 Get-Content .\bigfile.txt | Select-Object -Index $n | Foreach-Object { Write-Output "cnt=${n}: $_" } # bigfile.txtが1億行あっても瞬時に戻って来る が、これは「Select-Object -Index ~」部分を関数化したら元の木阿弥になる function Select-Nth($n) { $Input | Select-Object -Index $n | Foreach-Object { Write-Output "cnt=${n}: $_" } } Get-Content .\bigfile.txt | Select-Nth(2) # bigfile.txtを1億行全部読み込んでからおもむろに出力する 構文的に$_を使った関数やフィルタとしては書けない データを見て条件が成立したら打ち切り、というのになるともっとマンドクセ…… https://winscript.jp/powershell/308
893 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 22:23:22.94 ID:pISu+im0.net] >>871 それな! ワカル ㌧クス、 >>873 わかりた function Hoge([int]$num) { [void].{ echo "Debug" } return ($num + 1) } $a = Hoge(1) echo $a でも逝けた
894 名前:デフォルトの名無しさん mailto:sage [2023/08/12(土) 22:55:15.75 ID:zGmVrirz.net] 関数の出力が意図せず(うっかり)複数個所から行われ分かりにくい点は バッチとかシェルスクリプトの挙動に合わせすぎた為だろうね。 例えばping.exeを対象2か所に実行するバッチ(.bat)をパイプで繋げたら、 バッチ1つの実行で、ping2回の20行程度がパイプに流れる。 PowerShellスクリプトや関数もこれと同じだと考えればそんな違和感ないはずなんだけど、 元々他の言語なんかで「関数の戻り値は1つ(明示的な1つor関数末尾の1つ)」とか 「明示的に変数格納や出力などしなければ、メソッドや関数の戻り値は捨てられる」 って事に慣れてるし、PowerShellも同じ文法だから同じ挙動を期待しちゃう。 上でも出てるけど、標準ではパイプに流さない仕様とした方が 敬遠される点が減ったと思う。
895 名前:デフォルトの名無しさん mailto:sage [2023/08/14(月) 13:31:51.80 ID:4NX3l0Vm.net] パイプはスレ違いのバッチスレでドヤ顔ワンライナーするぐらいしか能が無いと言っても過言
896 名前:デフォルトの名無しさん mailto:sage [2023/08/14(月) 21:15:06.40 ID:5teSXOgl.net] 1GiB程度のファイルを処理するときにはパイプは重宝するよ
897 名前:デフォルトの名無しさん mailto:sage [2023/08/15(火) 05:53:15.07 ID:WIzBRZyi.net] バッチファイルのパイプはメカニズムが違う あれは実質一時ファイルを作って次段に渡しているだけなので遅い、と言おうと思ったが "*<CR><LF>" を2^23個書き並べたbigfile.txtに対してコマンドプロンプトで type bigfile.txt | find /C "*" とやったら「瞬時に」 4194304 と返って来るのに、PowerShellで Get-Content .\bigfile.txt | find.exe /C "*" とやったら永劫の時間待たされた後 FIND: パラメーターの書式が違います と言われた後Ctrl+Cにも応答しなくなた……どうなってるのこれ……
898 名前:デフォルトの名無しさん mailto:sage [2023/08/15(火) 14:11:57.72 ID:e55ZiwZ3.net] そりゃパイプで外部コマンドに送ったら1行ずつfind.exe実行して終了するだろうから おかしなことにもなるだろうよ
899 名前:デフォルトの名無しさん mailto:sage [2023/08/15(火) 15:18:16.71 ID:qi/dYdNU.net] > あれは実質一時ファイルを作って次段に渡しているだけなので遅い それはシングルタスクだったDOS時代の話だろ NTのcmd.exeには当てはまらない
900 名前:デフォルトの名無しさん mailto:sage [2023/08/15(火) 15:39:41.88 ID:LS4gbGEC.net] cmd.exeはパイプやfor /Fのコマンドとかワーカースレッドを生成して 別タスク(子環境)としてデータの送り手や受け手を作ってるかな
901 名前:デフォルトの名無しさん mailto:sage [2023/08/24(木) 22:36:16.57 ID:W+JHQ2GG.net] Get-WinEventでSystem.evtxだかのファイルを処理させるとコマンドレットが終了しても一定時間プロセスがファイル掴みっぱなしになるのどうにかしてくれ わざわざ別プロセスでGet-WinEvent用のpowershell起動させる間抜けなコードになったぞ
902 名前:デフォルトの名無しさん mailto:sage [2023/08/25(金) 11:28:27.28 ID:WAOpDjEy.net] 処理速度都合なのかな〜って思ってるけど閉じる手段は提供して欲しい。 自分は.NETのクラス使って処理書いちゃった。
903 名前:デフォルトの名無しさん mailto:sage [2023/09/04(月) 19:42:45.42 ID:hSX1x29k.net] エクスプローラでファイル選択してコピーして (Get-ClipBoard -Format FileDropList).GetType().ToString() → System.Collections.Generic.List`1[System.Management.Automation.PSObject] うん。 Get-ClipBoard -Format FileDropList | %{$_.GetType().ToString()} → System.Collections.Generic.List`1[System.Management.Automation.PSObject] うn? foreach( $info in Get-ClipBoard -Format FileDropList ){ $info.GetType().ToString() } → System.Collections.Generic.List`1[System.Management.Automation.PSObject] えぇ… Get-ClipBoard -Format FileDropList | %{$_} | %{$_.GetType().ToString()} → System.IO.FileInfo … [System.IO.FileInfo[]](Get-ClipBoard -Format FileDropList) | %{$_.GetType().ToString()} → System.IO.FileInfo うーん… $list = Get-ClipBoard -Format FileDropList $list | %{$_.GetType().ToString()} → System.IO.FileInfo まぁ… なんか不必要に使いづらい気がするのは自分だけかな。
904 名前:デフォルトの名無しさん mailto:sage [2023/09/06(水) 19:07:34.39 ID:1kNnDW8h.net] $(Get-ClipBoard -Format FileDropList) | %{$_.GetType().ToString()} → System.IO.FileInfo バッドノウハウの領域だなー
905 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 10:37:58.96 ID:EIIMdpOe.net] 隠し属性が設定されたファイルが排他されてるとかで読めない状況のときに -ForceついたGet-Contentで読もうとすると隠し属性解除されるのは理由あるんだろうか
906 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 13:50:19.66 ID:KE5ufRbn.net] 質問で申し訳ない AccessでエクスポートしたxlsxをPowershellでComObjectを作成してOpenしたいんだけど 破損している云々で発行元を信用しますか?ってダイアログのせいでOpen出来ない https://learn.microsoft.com/ja-jp/office/vba/api/excel.workbooks.open ここによると15個目の引数で1を指定(xlRepairFile)すれば良さそうなんだけど Powershellで実行するとOpenプロパティが無いよって怒られる。 実際のコードはこう $excel = New-Object -ComObject Excel.Application $excel.Visible = $True $fileName = (Get-ChildItem "test.xlsx").FullName $book = $excel.Workbooks.Open($fileName, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, [System.Type]::Missing, 1)
907 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 16:40:21.35 ID:OgaNelN6.net] CSVでエクスポートしなよ
908 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 17:47:39.83 ID:EIIMdpOe.net] とりあえずこうすると回避できた。 using namespace Microsoft.Office.Interop.Excel $excel = New-Object -ComObject Excel.Application $excel.Visible = $True $fileName = (Get-ChildItem "test.xlsx").FullName $param = @([Type]::Missing) * 15 $param[0] = $fileName $param[14] = [XlCorruptLoad]::xlRepairFile $workbooks = $excel.Workbooks $book = $workbooks.Open.Invoke($param)
909 名前:デフォルトの名無しさん mailto:sage [2023/09/12(火) 18:53:31.49 ID:uneKtCE6.net] >>891 あざす!めっちゃ参考になるます
910 名前:デフォルトの名無しさん 転載ダメ mailto:sagete [2023/09/13(水) 02:20:54.13 ID:E0UN4wqY.net] $param = @([Type]::Missing) * 15 は $param = @([Type]::Missing) * 0xFF のほうが人にやさしい気がする
911 名前:デフォルトの名無しさん mailto:sage [2023/09/13(水) 07:53:07.83 ID:mwnND43t.net] は?
912 名前:デフォルトの名無しさん mailto:sage [2023/09/13(水) 09:33:15.43 ID:ozJmt5GG.net] ひ?
913 名前:デフォルトの名無しさん mailto:sage [2023/09/13(水) 23:41:10.61 ID:tgD8Mqqk.net] >>893 の後者は配列に255を掛けてるように見えるのだが 人にやさしい部分てどこ?
914 名前:デフォルトの名無しさん mailto:sage [2023/09/14(木) 03:25:22.93 ID:37z8xtDS.net] マスクしてるのかと思ったわ ちゃんとソース見てなかった すまんこ
915 名前:デフォルトの名無しさん [2023/09/16(土) 23:53:08.17 ID:DkE7QlfD.net] PowershellのGUI使って簡単な時報を作りたい。 System.Windows.Forms.Timerを使って作ったんだが今何時判定で$Aの数字が毎回リセットされるんでIntervalの回数だけ別ウィンドウが開きまくる。 使い方間違ってるか?教えてくれさい。 $timerTestTick { 【適当に現在時表示】 if(【指定した時間になったら】-and【$Aがtrueなら】){ start-prosess 【音楽ファイルを別ウィンドウで再生して処理継続】 $A = false } } $timerTest.Add_Tick($timerTestTick) $timerTest.Interval = 200 $timerTest.Enabled = $TRUE $timerTest.Start() 【適当にフォーム作って表示】
916 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 01:59:03.31 ID:ENG0J7cr.net] >$Aの数字が毎回リセットされるんで それ$Aを更新しようとする度に毎回スクリプトブロックで別の$Aが生成されるからやね ([ref]$A).Value = $false と書けば元の$Aを探しにいくから更新できると思う Powershellのはまりポイントの1つやね
917 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 03:18:20.18 ID:LjIc1dUH.net] powershellでGUIって、c#使えない宗教的理由でもあるの?
918 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 05:45:06.34 ID:5It5oWIy.net] >>899 スクリプトブロックていうのが働いてるのか。とりあえず試してみるありがとう。 >>900 宗教的理由というより書けないから出来ることで色々やってみてた。 というかPowerShell単体でC#つかえるの?
919 名前:デフォルトの名無しさん [2023/09/17(日) 09:35:27.80 ID:LYUgOkBe.net] PowerShellでGUI作れるんか! 知らんかった これは興味ある
920 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 09:48:58.34 ID:oJeCWV6s.net] >>902 システム管理のサンプル スクリプト https://learn.microsoft.com/ja-jp/powershell/scripting/samples/sample-scripts-for-administration 公式ドキュメントならここの「UI 要素の作成」って所を見てみるといい
921 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 13:31:47.95 ID:LJFSWd1b.net] GUI作れるとかマジか ワザワザHTMLソース内部に仕込んでWEBベースでやりとりしてた俺は一体・・・
922 名前:デフォルトの名無しさん mailto:sage [2023/09/17(日) 14:04:19.59 ID:ENG0J7cr.net] 一応.NET言語の1つではあるからGUIは普通に作れるが 俺はC#コード埋め込んでFuncやAction経由で必要時にpowershellと連携する感じの使い方だな Powershellのコードだけで作るの自体が割と面倒なのや型チェックが働かない辺りとかかあんまメリットを感じない
923 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:32:36.63 ID:cR6Dxv5m.net] htaの代わりとしてforms呼び出して組んでたけどcssが便利すぎて最近は使ってないな... wpfはどうなんだろうか...
924 名前:デフォルトの名無しさん mailto:sage [2023/09/29(金) 04:49:25.46 ID:wxGTflxT.net] まじでかいな
925 名前:デフォルトの名無しさん [2023/10/01(日) 14:37:52.98 ID:nRV7BOcHv] 防災訓練とか災害ボランティアって工ラヰなーとかスコ゛ヰなーとか思われるとでも思っちゃってるのかな 都心まで数珠つなぎて゛騒音に温室効果ガスにコロナにとまき散らさせて気候変動させて海水温上昇させて地球破壊して 日本どころか世界中で土砂崩れに洪水、暴風、熱中症、森林火災にと災害連發させて JALだのАΝΑだのクソアイヌドゥだの酒飲んで業務してるクサイマークだのゴキブリフライヤ−だの殺人テ囗リストに 天下り賄賂癒着してる世界最悪の殺人腐敗テロ組織公明党斉藤鉄夫ら国土破壊省をスル一しながら何寝ぼけたことやってんだかな こういう安易な自己満足が気候変動テロを肯定してさらなる多くの人々を死に追いやってることを自覚しろや力ス 憲法カ゛ン無視で人権に財産権にと侵害して威力業務妨害して私腹を肥やしてる諸悪の根源を殲滅して 災害の連発を食い止めることこそ本質だといい加減、気づけやオナニーバカ (羽田)ttps://www.call4.jp/info.php?Type=itеms&id=I0000062 , ttΡs://haneda-Рroject.jimdofreе.com/ (成田)ttps://n-souonhigaisosyoudan.amebaownd.com/ (テロ組織)тtps://i.imgur.com/hnli1ga.jpеg
926 名前:デフォルトの名無しさん [2023/10/06(金) 21:47:54.00 ID:ESX4xHYZ.net] 日付を元に指定範囲内の一意の数字を出すってできる? 200ぐらいある今日の一言的なものを毎日ランダムで出したいんだがアプリケーションを再起動すると変数リセットされて別の単語出てしまうのを抑止したい。
927 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 22:00:29.66 ID:7j+1PDTD.net] その日の初回の結果をファイルに出力して 2回目以降はそのファイルを読み込みに行けば良いのでは
928 名前:デフォルトの名無しさん [2023/10/06(金) 22:04:29.98 ID:ESX4xHYZ.net] >>910 それしかないかなぁ ファイル出力を避けたかったんだが
929 名前:デフォルトの名無しさん [2023/10/06(金) 22:35:50.48 ID:ESX4xHYZ.net] >>910 できそうだからファイル出力の方向でやってみるありがとう。
930 名前:デフォルトの名無しさん [2023/10/06(金) 22:36:00.82 ID:ESX4xHYZ.net] >>910 できそうだからファイル出力の方向でやってみるありがとう。
931 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 23:26:20.49 ID:WmRjQTiM.net] その条件なら日付をシード値とみなせるんだから 別の単語が出てくる方がおかしいんじゃないのか 基礎的な論理思考力が欠けているね
932 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 23:44:27.78 ID:7j+1PDTD.net] あ、-SetSeedって完全固定の疑似乱数なのか。 再起動したら変わると思ってた。
933 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 04:01:41.30 ID:lBZtWf6D.net] Get-Random -SetSeed $(Get-Date -Format "yyyymmdd") -Maximum 200
934 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 06:18:44.31 ID:xTEoYklV.net] >>916 seedなんてもんがあったのか! ありがとう!
935 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 15:47:42.69 ID:lBZtWf6D.net] 912 と 913 をワンライナーで視覚化しただけやぞ
936 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 20:27:09.33 ID:bO8eXdHU.net] >>906 wpfも普通にいけるけど、vsのデザイナーがないと厳しいから、じゃあc#でいいかとなりがち htaの代替としたらwpfかwinformで枠だけ作ってwebview2埋め込むのがおすすめ qiitaでも記事があったはず
937 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 22:07:55.52 ID:SlOLtELZ.net] webview2ランタイム自体の埋め込み手段がなあ
938 名前:デフォルトの名無しさん [2023/10/20(金) 16:26:02.69 ID:3co0KDj6.net] こんにちは フォルダの配下のすべてのテキストファイルを結合した文字列を出力したいです フォルダ直下のファイルだけなら Get-Content *.txt でできました 該当するファイルの一覧は Get-ChildItem -Recurse -Filter "*.txt" -Name でできましたが Get-ChildItem -Recurse -Filter "*.txt" -Name | Get-Content としてもエラーになります
939 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 19:30:02.44 ID:qU4/oN+w.net] 「 -Name」が不要。
940 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 20:49:00.72 ID:3co0KDj6.net] できました!
941 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 16:01:28.45 ID:Vjqv9VpS.net] PSNativeCommandPreserveBytePipe が楽しみすぎる
942 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 16:01:33.19 ID:Vjqv9VpS.net] PSNativeCommandPreserveBytePipe が楽しみすぎる
943 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 16:59:01.62 ID:sGPoKgPO.net] この言語って3次元以上の配列って出来ないって認識であってる? 二次元は $array[0,0]で良いんだよね? 三次元というかジャグ配列?はとりあえず使えるから $array[0][0,0] でやってるんだけど中の2,3次元目とか中の要素数カウントが出来なくて結構困ってる
944 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 18:05:21.98 ID:BgNWqm6B.net] ジャグ配列で良いんだったら$array[0][0][0]…といくらでも入れ子にすれば良かろうに
945 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 19:44:43.60 ID:CQ6pveQE.net] 多次元配列はこうじゃない? $array = [Object[,,]]::new(4,5,6) # 3次元、4×5×6 $array[0,0,0] = "(0, 0, 0)" $array[0,0,1] = "(0, 0, 1)" # 参照は「$arraya[0,0,0]」だと配列スライスと間違えそうだから「$array.Get(0,0,0)」の方が安全かも。
946 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 19:47:15.76 ID:CQ6pveQE.net] 要素数は $array.GetLength(0) # 4 $array.GetLength(1) # 5 $array.GetLength(2) # 6
947 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 19:54:44.51 ID:sGPoKgPO.net] あぁそっか普通に出来るのか初期化の仕方が悪かったみたい 普通の初期化でも3次元出来るんだね 調べたらジャグ配列のが処理早いそうなので結局そっち採用すると思う レスしてくれた方有難う
948 名前:デフォルトの名無しさん mailto:sage [2023/11/10(金) 20:49:31.69 ID:qelae/OI.net] 7.4のGAはいつごろになりそう?
949 名前:デフォルトの名無しさん mailto:sage [2023/11/11(土) 09:09:55.24 ID:JcjqK/bB.net] PowerShell Community Call - October 19 2023 https://github.com/PowerShell/PowerShell-RFC/blob/master/CommunityCall/notes/20231019_Notes.md Ideally a GA Nov, may have 7.5 preview in December, not guaranteed
950 名前:デフォルトの名無しさん mailto:sage [2023/11/11(土) 09:43:40.20 ID:FLa2E6qS.net] Ideally に進んで今月中の GA に期待 ところで [console]::OutputEncoding って shift_jis と utf-8 のどっちにしてます?
951 名前:デフォルトの名無しさん mailto:sage [2023/11/11(土) 16:23:53.35 ID:CPZqzXvF.net] 7入れて何かいい事あんの? それ、OS標準の5.1でできますよね? もしかして、デベロッパーのオナニーに付き合わされていませんか?
952 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 04:03:18.80 ID:jdIWedpQ.net] powershellでデフォルトの環境に手を加えないとできないことは他のPG言語に任せるべきだと思う
953 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 12:28:59.88 ID:mJhoQ9VQ.net] Windows PowerShell 5.1 と PowerShell 7.x の相違点 ttps://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.3 入れる入れないは個人の自由 5と7は共存できるし別にデメリットないから7入れてるよ
954 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 16:32:02.61 ID:K6g/AyoW.net] スクリプト言語としてならどっちでもいいけど インタラクティブなコマンドラインシェルとしてなら7が圧倒的に便利 sjis出力コマンドとutf-8出力コマンドの混在環境なら7.4でさらに便利
955 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 21:46:23.90 ID:q3mytz3V.net] >>937 シェルとしてどんな点が改善されているのですか?
956 名前:デフォルトの名無しさん mailto:sage [2023/11/15(水) 00:20:29.90 ID:oV9ZzUgm.net] 半角英数のファイルにUTF-16を追加する事故が起きないのは助かる
957 名前:デフォルトの名無しさん mailto:sage [2023/11/15(水) 23:34:51.35 ID:Ik7Afwvr.net] 最近始めたんですが
958 名前:デフォルトの名無しさん mailto:sage [2023/11/15(水) 23:40:29.80 ID:Ik7Afwvr.net] aに1代入したいんですがどうすればいいですか? function hoge(){ [int]$a; function moge(){ $this.a = 1; } moge; return $a; } hoge #
959 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 09:22:30.17 ID:HndTNurg.net] ・classのメソッドとして書く(何か知らんがレキシカルスコープになる) ・javascriptを使う
960 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 10:09:03.23 ID:vDdnsPkv.net] Get-Variable とか >>475 ,899 とか $script:a とか。 なお「[int]$a」では宣言できてない。
961 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 12:06:19.94 ID:HndTNurg.net] ref[]はpowerahellにおいてCポインタ程度には重要知識なのに 界隈で然程語られる事もなく知られていない 知られてはいけないとでも言うのだろうか…
962 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 13:08:37.33 ID:evZ76lXK.net] 何言ってんだか
963 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 13:38:46.26 ID:WvJyjQhC.net] >>942 とあるオブジェクトの初期設定にこんな感じで書いてたんですが無理そうですか 了解しました class hoge:object{ [object]$o_a; [object]$o_b; hoge (){ [int] $cnt; function object_a_init(){ $this.cnt = 1; } object_a_init; } }
964 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 15:17:07.39 ID:FRf+5dUd.net] 親スコープにある変数の値を変えたいなら Set-Variable -Name a -Value 1 -Scope 1
965 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 17:00:58.20 ID:HndTNurg.net] >>946 >>943 をよく読んだ方がいいよ 昔の俺のレスの引用だけどね 変数の型指定は値で初期化する必要があるよ
966 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 17:15:32.66 ID:JFk7nC9m.net] 横からすいません なんでこれはエラーになるんでしょうか pwsh -nop -c "[System.Text.Encoding]::GetEncoding(932)" -c を使わずに pwsh -nop と起動して [System.Text.Encoding]::GetEncoding(932) を入れると動くのもわからない・・・
967 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 18:13:00.55 ID:vDdnsPkv.net] エラーって何のエラーなの
968 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 20:12:17.64 ID:JFk7nC9m.net] MethodInvocationException: Exception calling "GetEncoding" with "1" argument(s): "No data is available for encoding 932. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method." だそうです
969 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 20:17:57.10 ID:JFk7nC9m.net] Encoding.RegisterProvider でぐぐったら解決しました
970 名前:デフォルトの名無しさん mailto:sage [2023/11/16(木) 22:05:45.00 ID:wYK3pDi3.net] >>941 を動くように直したげたよ function hoge(){ [int]$a = "1" # $aを値で初期化しつつ型を強制。型宣言というよりキャストに相当。[int]に強制されるので値が文字列でも$aにはSystem.Int32に変換された値が入る $a.GetType() | Write-Host # $aの値の型をコンソールに出力 System.Int32 function moge(){ ([ref]$a).Value = 1 # >>943-944 の言うブロックで変数を生成せず既存の変数を参照して値を代入する記法 } moge $a # 関数の打ち切りの意図を除きreturnキーワード不要。powershellのfuncitonは最後に限らず値を返す式は全部返そうとする } hoge
971 名前:デフォルトの名無しさん mailto:sage [2023/11/17(金) 11:55:26.61 ID:i3gkpHOP.net] >>941 参照渡しでやってみれば? -------- function hoge { [int] $a = 1234 function moge { param ( [ref] $b ) $b.Value = 5678 } moge -b ([ref] $a) return $a } hoge -------- about_Ref https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_ref?view=powershell-7.3
972 名前:デフォルトの名無しさん mailto:sage [2023/11/17(金) 14:37:28.42 ID:05VltA/O.net] PowerShell 7.4 General Availability https://devblogs.microsoft.com/powershell/powershell-7-4-general-availability/ PSNativeCommandPreserveBytePipe 待ってた!
973 名前:デフォルトの名無しさん mailto:sage [2023/11/17(金) 20:30:46.86 ID:Wtzmq/3L.net] リンク先読んでないけど、.exeにパイプしたときに早くなる(普通になる)のかな
974 名前:デフォルトの名無しさん [2023/11/20(月) 14:11:07.62 ID:HI5+Omcp.net] 文字列を8文字ごとに分割して配列に格納したいのですが 文字列が8文字以下だと1文字ずつ分割されてしまいます。 $nums = @() $nums = $num -split '(.{1,8})' | Where-Object{$_} 上記を実行すると、 $num = 12345678 のとき、$num[0] は 1が格納されるのですが、 12345678が格納されるようにするには、どうすればよいでしょうか。
975 名前:デフォルトの名無しさん mailto:sage [2023/11/20(月) 14:50:35.31 ID:HI5+Omcp.net] >>957 すみません。誤字です。 誤: $num[0] は 1が格納されるのですが、 正: $nums[0] は 1が格納されるのですが、
976 名前:デフォルトの名無しさん mailto:sage [2023/11/20(月) 15:52:48.41 ID:fHSnLnjq.net] $numsには文字列の"12345678"が代入されてるから $nums[0]だと"12345678"の1文字目の1が返る 1行目を [string[]]$nums = @() とするか 2行目を $nums = @(12345678 -split '(.{1,8})' | Where-Object{$_}) とすればOK
977 名前:デフォルトの名無しさん [2023/11/20(月) 17:23:25.47 ID:HI5+Omcp.net] >>0957 ありがとうございます! できました。
978 名前:デフォルトの名無しさん mailto:sage [2023/11/21(火) 21:09:20.96 ID:qJoihvDX.net] PowerShell 7.4 だと PS> python -c 'print("\\")' \ と期待通りになるけど Windows PowerShell 5.1 だと PS> python -c 'print("\\")' File "<string>", line 1 print(\) ^ SyntaxError: unexpected character after line continuation character となるのは何が起きてるの? 7.4 でも $PSNativeCommandArgumentPassing を Legacy にすると同じみたいだけど 具体的にどうなってるのか今更だけど知っておきたい
979 名前:デフォルトの名無しさん mailto:sage [2023/11/21(火) 21:20:45.10 ID:CeBFd4j1.net] >>961 解析の停止:--% https://learn.microsoft.com/ja-jp/previous-versions/windows/powershell-scripting/hh847892%28v=wps.640%29#%E8%A7%A3%E6%9E%90%E3%81%AE%E5%81%9C%E6%AD%A2--
980 名前:デフォルトの名無しさん mailto:sage [2023/11/21(火) 22:46:00.10 ID:qJoihvDX.net] 対処法が知りたいんじゃなくてどう解析されたかが知りたい
981 名前:デフォルトの名無しさん mailto:sage [2023/11/21(火) 22:57:00.47 ID:wGZJ97Pn.net] コマンドラインのパース内容をデバッグできるコマンドレットがあって inactionで紹介されてた気がするけど何か思い出せない
982 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 00:52:11.84 ID:z2bY/yQG.net] $PSVersionTable PSVersion 5.1 Ruby の1-liner では、%Q 記法があるから大丈夫 ruby -e 'print %Q(\\)' \ ruby -e 'print %Q(あaい)' あaい
983 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 04:23:14.63 ID:nZzIGDLb.net] >>964 Get-Command | sls "breakpoint|callstack" デバッガーについて - PowerShell | Microsoft Learn ttps://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_debuggers
984 名前:?view=powershell-5.1 [] [ここ壊れてます]
985 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 10:26:54.20 ID:Yh77KGhz.net] >>966 回答ありがとう、でも思い出せないのは>>961 の流れからの「コマンドラインのパース」自体の事だったんだ。 in Action引っ張り出して確認したが↓の事で、これで違いが分かるかも。(v7.4で確認してない。) Trace-Command -Option All NativeCommandParameterBinder -PSHost {python -c 'print("\\")'}
986 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 10:52:24.03 ID:Yh77KGhz.net] 他に、形態素解析みたいに分解・解析できる機能もあった気がするが忘れた
987 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 14:18:25.39 ID:W8vcuvaF.net] PowerShell 7.4 だと python -c 'print("\\")' ですむことを Windows PowerShell 5.1 だとどう書けばいいんだ --% を使っても使わなくても分からん
988 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 15:05:51.75 ID:fKGlzN6D.net] パラメータの干渉受けたくないなら普通にStart-Processでいいでしょ
989 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 15:26:30.66 ID:W8vcuvaF.net] 対話シェルでStart-Processするのはつらい
990 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 15:34:55.56 ID:W8vcuvaF.net] つらいのは我慢するとしてStart-Processを使ってどう書けばいいの
991 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 20:54:48.61 ID:5rDf7evN.net] pythonの引用符はシングルもダブルもエスケープシーケンス展開されるからおかしな解釈になってるだけだな pythonの仕様を呪うがいい
992 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 22:06:38.07 ID:W8vcuvaF.net] pythonは例として使っただけだしどうでもいいよ あくまで興味の対象はPowerShellのコマンドラインのパース やっぱ 7.4 すげぇで終わってもいいんだけど なんか 7.4 の --% が腐ってる気がする 5.1 の想定通りの --% と違って勝手に引用符加えてぶっ壊してる感じ はやいとこ直して欲しい
993 名前:デフォルトの名無しさん mailto:sage [2023/11/22(水) 22:37:16.49 ID:5rDf7evN.net] うーんどうでもいい変なの相手しちゃった
994 名前:デフォルトの名無しさん mailto:sage [2023/11/23(木) 17:39:38.00 ID:Rimm12ii.net] いやわかんないなら別にいいけど一応書いとくわ もちろん 7.4 を Windows で使う話 stop-parsing token (--%) は以後のパースをしないはずなのに 引用符無視して空白で引数を分割してコマンド起動してるっぽい CreateProcessまでに引用符が変に補完されるから意図通り動かない --% が出てきたら引数の分割はネイティブコマンドに任せないとあかん $PSNativeCommandArgumentPassing が Legacy の時と同じ処理な そういうわけで Legacy 扱いされる .cmd とかでは問題ない おかしいのは Standard 扱いされる .exe なんかの場合だけ PSNativeCommandArgumentPassing の説明 >この実験的な機能が有効になっていると、PowerShell は、ネイティブの実行可能 >ファイルを呼び出すときに、文字列を再構築する現在の機構ではなく、 >StartProcessInfo オブジェクトの ArgumentList プロパティを使用します。 にある、文字列を再構築するのが Legacy、Argumentlist を使うのが Standard という違いがわかれば理解できる話なんだが期待はしてない
995 名前:デフォルトの名無しさん [2023/11/23(木) 22:03:41.74 ID:KHOftQWe.net] Powershellを体系的に学ぶにあたっておすすめの本ってありますか? やりたいことをググってコードをコピペして使用してる状態で、コードの理解度が深まらないと思ったので体系的に学びたいと思いました。 自分のPowershellの用途は、日常的な作業の自動化(テキストファイルの読み書き、ファイルの起動やタスキル、アクティブウィンドウの切り替え、robocopyでのバックアップなど)で使っています。
996 名前:デフォルトの名無しさん mailto:sage [2023/11/23(木) 22:45:32.85 ID:38VIgpCL.net] 馬鹿には無理
997 名前:デフォルトの名無しさん mailto:sage [2023/11/23(木) 23:00:45.15 ID:09UkZirn.net] Windows PowerShell in Action Third Editionは読んだかね https://sd.blackball.lv/library/Windows_PowerShell_in_Action_3rd_Edition_(2017).pdf ただしこの本は6年前の情報。英語PDFだけど今は色々と翻訳手段もあるから読めると思う powershellならWindows上の事であれば大抵の事はできるけど 本当に便利に使うならC#や.NETの前提知識があった方がいいだろうね C#関連で可能な事ならほぼpowershellに置き換え可能だから
998 名前:デフォルトの名無しさん mailto:sage [2023/11/24(金) 00:12:01.77 ID:kL+9jaCp.net] Powershell で複雑なものは書けないから結局、Ruby になる。 WSL2, Linux側からなら、Windows側をいじれるし
999 名前:デフォルトの名無しさん mailto:sage [2023/11/24(金) 03:38:21.50 ID:k2LHl+dn.net] rubyガイジなんだろうけどそこでrubyになるのは贔屓目に見てもおかしいだろ
1000 名前:デフォルトの名無しさん [2023/11/24(金) 05:42:11.56 ID:IciYTcVm.net] >>977 コードをコピーしてchatGPTかPerplexityで「PowerShellで"〜〜〜"はどういう意味?」を聞けばいい
1001 名前:デフォルトの名無しさん [2023/11/24(金) 13:14:03.37 ID:4NGqTzL9.net] >>977 「PowerShell実践ガイドブック」は、PowerShellの動作の仕組みが詳しく解説されていてよかった 謎に思える挙動についても説明がある ちょっと古いが(5年半前に出版)
1002 名前:デフォルトの名無しさん mailto:sage [2023/11/25(土) 12:02:22.73 ID:pLnatqec.net] microsoft learn じゃダメなの? ttps://learn.microsoft.com/ja-jp/powershell/scripting/how-to-use-docs?view=powershell-7.4 ttps://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about?view=powershell-7.4
1003 名前:デフォルトの名無しさん mailto:sage [2023/11/25(土) 18:06:48.53 ID:wD6fmxci.net] MSの自動翻訳は5分と読んでられない
1004 名前:デフォルトの名無しさん mailto:sage [2023/11/25(土) 18:41:01.39 ID:444pwTGg.net] 英語ページでOK
1005 名前:デフォルトの名無しさん mailto:sage [2023/11/25(土) 18:53:18.66 ID:Q+kYJTm7.net] 975です。おすすめのドキュメント教えてくれた方ありがとうございます。 一つ気になったのですが、学習の順番としてはC#もしくは.NETから入ったほうが効率的ですか? 自分がPowershell始めたきっかけがグローバルホットキーをうまく使いたいというのが始まりで、 後述URLのコードをベースに継ぎ足しで書き加えている状態です。 PowerShellとC#でグローバルホットキーを登録する https://qiita.com/minr/items/72b02d673727f9eb4c37 ※自分のC#のレベルはHelloWorld出したぐらいまで、.NETについても知識としてほぼ白紙です。
1006 名前:デフォルトの名無しさん mailto:sage [2023/11/25(土) 19:23:35.12 ID:c65Q6uO9.net] ダボゥクリッコゥで実行出来ない面倒臭いものを誰が使うんですか?
1007 名前:デフォルトの名無しさん mailto:sage [2023/11/25(土) 21:21:00.31 ID:2+5b9joX.net] ダブルクリックで実行できたWSHはLOVELETTERワームやら何やらでセキュリティが低いとみなされて非推奨になりましたとさ めでたしめでたし
1008 名前:デフォルトの名無しさん mailto:sage [2023/11/26(日) 00:07:05.46 ID:tHVdGucZ.net] 例えば、デスクトップにショートカットを作って、リンク先を以下のようにすると、 ダブルクリックでPowershell を起動して、Ruby でスクリプトを実行する %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe "ruby C:/Users/Owner/Documents/Ruby/a.rb" 初心者はRuby で始めるべき。 C# はRubyの10倍、時間が掛かるし難しい
1009 名前:デフォルトの名無しさん mailto:sage [2023/11/26(日) 04:20:48.27 ID:xBck3nSS.net] こんなんに粘着されちゃmatzが気の毒だわな
1010 名前:デフォルトの名無しさん [2023/11/26(日) 07:10:42.58 ID:forkl5ep.net] 同じ民族同士、分断せずに仲良くしろよ DevBlogs - Microsoft Developer Blogs ttps://devblogs.microsoft.com/
1011 名前:デフォルトの名無しさん [2023/11/26(日) 10:47:01.19 ID:d/KzVdDP.net] MatzはWindowsやC++に興味無いから よほどエゴサでもしないかぎり気の毒なことにはならないわ 知らぬが仏
1012 名前:デフォルトの名無しさん mailto:sage [2023/11/26(日) 15:25:10.25 ID:06WEnIxy.net] う
1013 名前:デフォルトの名無しさん mailto:sage [2023/11/26(日) 15:25:17.90 ID:06WEnIxy.net] め
1014 名前:デフォルトの名無しさん mailto:sage [2023/11/26(日) 15:37:23.40 ID:tLrTLV3h.net] というか、Windowsの日本語localizationのデフォルトが未だにクゾだから、 「☑ベータ: ワールドワイド言語サポートを Unicode UTF-8 を使用」 を最初から標準にしていないかぎり、Windowsを日本語で使うこと自体、クソということになる
1015 名前:デフォルトの名無しさん [2023/11/29(水) 13:21:53.02 ID:FINewHXp.net] 外部コマンドを実行するときに外部コマンド自体は正常な戻り値を返してるのにpowershellで動かすとNativeCommandErrorって例外が出るんだけどなんでだかわかる人おる?
1016 名前:デフォルトの名無しさん mailto:sage [2023/11/29(水) 15:06:21.22 ID:UMPQWy8o.net] そういうのはまず再現できるコードを貼ってね
1017 名前:デフォルトの名無しさん mailto:sage [2023/11/29(水) 16:09:41.88 ID:0g8RZ7sB.net] ISE上で実行した場合に標準エラー出力があると 戻り値に関係なくNativeCommandErrorになるけど、このこと? そうでなければ>>998 にプラスしてバージョンなどの環境も示してね。 あと次スレ https://mevius.5ch.net/test/read.cgi/tech/1701241669/
1018 名前:デフォルトの名無しさん [2023/11/29(水) 17:02:28.41 ID:FINewHXp.net] >>999 多分それですありがとうございます
1019 名前:デフォルトの名無しさん mailto:sage [2023/11/29(水) 18:41:30.81 ID:Emfdd1vJ.net] 質問いいですか
1020 名前:デフォルトの名無しさん mailto:sage [2023/11/29(水) 19:21:40.65 ID:0g8RZ7sB.net] だめです
1021 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 654日 0時間 45分 29秒
1022 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています