前スレ
PowerShell -Part 5
https://mevius.5ch.net/test/read.cgi/tech/1615994992/
次スレは>>980が立ててね!!
PowerShell -Part 6
■ このスレッドは過去ログ倉庫に格納されています
2022/02/13(日) 18:36:12.07ID:LaQ04ZoE
761デフォルトの名無しさん
2023/04/14(金) 21:40:03.65ID:qiPEiEw+ Windowsのディスプレイ設定で拡大率を100%以外にしてると
フォームの文字がぼやけるんだけど、なにか解決策はありますか?
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.text= "タイトルはぼやけない"
$label = New-Object System.Windows.Forms.Label
$label.Size = New-Object System.Drawing.Size(300,20)
$label.Text = "ディスプレイ拡大率が100%以外だと文字がぼやける"
$form.Controls.Add($label)
$form.ShowDialog()
フォームの文字がぼやけるんだけど、なにか解決策はありますか?
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.text= "タイトルはぼやけない"
$label = New-Object System.Windows.Forms.Label
$label.Size = New-Object System.Drawing.Size(300,20)
$label.Text = "ディスプレイ拡大率が100%以外だと文字がぼやける"
$form.Controls.Add($label)
$form.ShowDialog()
762デフォルトの名無しさん
2023/04/14(金) 21:40:32.33ID:qiPEiEw+ ちなみにOSはWindows11です
763デフォルトの名無しさん
2023/04/15(土) 13:51:30.62ID:iq3ZlEDB その辺て外人もあまり正解に辿り着いてない箇所だな
俺も辿り着いたとは言えんけど面倒だった
俺も辿り着いたとは言えんけど面倒だった
764デフォルトの名無しさん
2023/04/15(土) 14:12:07.08ID:ig+gwe+P C#を使うのが最適解
765デフォルトの名無しさん
2023/04/15(土) 15:02:15.83ID:cOO792TH powershellじゃなくてWindowsFormsの問題でしょ
「WindowsForms ぼやけ」で検索したらいくらでも出てきたけど
「WindowsForms ぼやけ」で検索したらいくらでも出てきたけど
766デフォルトの名無しさん
2023/04/15(土) 19:25:15.71ID:erslMsE0 WPFで作れば違うのか?
767デフォルトの名無しさん
2023/04/15(土) 20:21:51.02ID:iq3ZlEDB ちょっと意識して組めばできなくはないから環境を変える程でもないな
768デフォルトの名無しさん
2023/04/15(土) 22:14:25.62ID:raQFwlCG c:\aaa\bbb\ccc\hhh
c:\aaa\ddd\eee
c:\aaa\fff\ggg(以下続く)
というフォルダ構造があった場合、ccc(サブフォルダhhhも含む)、eee、gggのフォルダを別のフォルダにコピーしたいんですがうまくいきません。
chatGPTに聞いたところ ($rootFolder=c:\aaa、$targetFolderはコピー先)
$targetFolders = Get-ChildItem $rootFolder -Recurse -Directory | Where-Object { $_.FullName -like "$rootFolder\*\*\[ceg]" }
となり、少し変更して
$targetFolders = Get-ChildItem $rootFolder -Recurse -Directory | Where-Object { $_.FullName -like "$rootFolder\*\*" }
としてみたんですが、これだとcccフォルダがコピー先に存在していた場合hhhフォルダがcccフォルダとは別にコピーされてしまいます。
同じフォルダ名があった場合サブフォルダの処理を飛ばしてフォルダ構造したままコピーする方法はないでしょうか。
c:\aaa\ddd\eee
c:\aaa\fff\ggg(以下続く)
というフォルダ構造があった場合、ccc(サブフォルダhhhも含む)、eee、gggのフォルダを別のフォルダにコピーしたいんですがうまくいきません。
chatGPTに聞いたところ ($rootFolder=c:\aaa、$targetFolderはコピー先)
$targetFolders = Get-ChildItem $rootFolder -Recurse -Directory | Where-Object { $_.FullName -like "$rootFolder\*\*\[ceg]" }
となり、少し変更して
$targetFolders = Get-ChildItem $rootFolder -Recurse -Directory | Where-Object { $_.FullName -like "$rootFolder\*\*" }
としてみたんですが、これだとcccフォルダがコピー先に存在していた場合hhhフォルダがcccフォルダとは別にコピーされてしまいます。
同じフォルダ名があった場合サブフォルダの処理を飛ばしてフォルダ構造したままコピーする方法はないでしょうか。
769デフォルトの名無しさん
2023/04/15(土) 22:16:07.91ID:raQFwlCG フォルダ構造したまま→フォルダ構造を維持したまま
失礼しました。
失礼しました。
770デフォルトの名無しさん
2023/04/15(土) 23:22:30.72ID:iq3ZlEDB ・同じフォルダ名があった場合サブフォルダの処理を飛ばしたい
ってう制約を加えてchatGPTに聞いたらいいんじゃね
ってう制約を加えてchatGPTに聞いたらいいんじゃね
771768
2023/04/16(日) 01:08:07.22ID:i+x2SgN3 >>770
試してますがうまくいきませんね。aaaやbbbが例えであることをうまく理解してくれなくて、
全てのフォルダ名を手入力する必要があるコードしか作ってくれません。○や△みたいな記号に置き換えても同じ。
get-childitemで特定の深さ以下のフォルダ名を取得することができればうまく行きそうですが、
-depthは特定の深さ「まで」のフォルダを検索するオプションですよね?
特定の深さ以下のフォルダを検索する方法はありませんか?
試してますがうまくいきませんね。aaaやbbbが例えであることをうまく理解してくれなくて、
全てのフォルダ名を手入力する必要があるコードしか作ってくれません。○や△みたいな記号に置き換えても同じ。
get-childitemで特定の深さ以下のフォルダ名を取得することができればうまく行きそうですが、
-depthは特定の深さ「まで」のフォルダを検索するオプションですよね?
特定の深さ以下のフォルダを検索する方法はありませんか?
772デフォルトの名無しさん
2023/04/16(日) 11:56:14.63ID:QYDIaDii 一発でrecursiveでやるのを諦めて泥臭く2重なり3重なりの繰り返し処理にして
自分でフォルダを掘り下げていけばいいんじゃないの
自分でフォルダを掘り下げていけばいいんじゃないの
773デフォルトの名無しさん
2023/04/16(日) 11:57:11.68ID:QYDIaDii 深さが動的なら関数にして再帰呼び出し
774デフォルトの名無しさん
2023/04/16(日) 12:07:35.90ID:Gz6gIEIr >>771
「特定の深さ以下」ではなく「特定の深さ直下」を対象としたいんだよね?
「特定の深さ以下」ではなく「特定の深さ直下」を対象としたいんだよね?
775デフォルトの名無しさん
2023/04/16(日) 12:38:10.68ID:SPigkToS >>771
相対パスの概念がないのか?
相対パスの概念がないのか?
776デフォルトの名無しさん
2023/04/16(日) 12:47:20.03ID:SPigkToS >>768 はネタかもな
コピー先に何があるのかチェックしないという発想は、まったく理解できない。
初心者なら前提条件という概念がないのはわかる。
先にあったらこうする、そうでなかったらこうするなどの条件分岐がないなら、強引にやればいい。
そもそもROBOCOPYコマンドでできることをやろうとしているのは、これ学校の課題なのかなと思いました。
コピー先に何があるのかチェックしないという発想は、まったく理解できない。
初心者なら前提条件という概念がないのはわかる。
先にあったらこうする、そうでなかったらこうするなどの条件分岐がないなら、強引にやればいい。
そもそもROBOCOPYコマンドでできることをやろうとしているのは、これ学校の課題なのかなと思いました。
777デフォルトの名無しさん
2023/04/16(日) 15:01:28.21ID:EhcVUpdk 深さ3のディレクトリをそのままコピーすりゃいいだけじゃないの?
778768
2023/04/17(月) 01:51:03.87ID:GaP+UugE779デフォルトの名無しさん
2023/04/17(月) 02:46:16.45ID:dBG5z/eM 入出力をちゃんと定義できてないからおかしな事になる初心者あるあるだな
780デフォルトの名無しさん
2023/04/17(月) 11:31:05.75ID:udj2SRYX 特定の深度だけ処理してみた
※$Sourceはフルパス指定であること
param(
[string]
$Source,
# $Sourceからの相対深度
[int]
$RelativityDepth
)
# パスを\と/で区切って配列化
$SourceDirSplit = $Source.Split([System.IO.Path]::DirectorySeparatorChar).Split([System.IO.Path]::AltDirectorySeparatorChar)
foreach ($TargetDir in @(Get-ChildItem -LiteralPath $Source -Recurse -Directory))
{
# パスを\と/で区切って配列化
$TargetDirSplit = $TargetDir.FullName.Split([System.IO.Path]::DirectorySeparatorChar).Split([System.IO.Path]::AltDirectorySeparatorChar)
# 指定深度にあるDirを処理
if ($TargetDirSplit.Count -eq ($SourceDirSplit.Count + $RelativityDepth))
{
# 一致したディレクトリを返す
$TargetDir
}
}
※$Sourceはフルパス指定であること
param(
[string]
$Source,
# $Sourceからの相対深度
[int]
$RelativityDepth
)
# パスを\と/で区切って配列化
$SourceDirSplit = $Source.Split([System.IO.Path]::DirectorySeparatorChar).Split([System.IO.Path]::AltDirectorySeparatorChar)
foreach ($TargetDir in @(Get-ChildItem -LiteralPath $Source -Recurse -Directory))
{
# パスを\と/で区切って配列化
$TargetDirSplit = $TargetDir.FullName.Split([System.IO.Path]::DirectorySeparatorChar).Split([System.IO.Path]::AltDirectorySeparatorChar)
# 指定深度にあるDirを処理
if ($TargetDirSplit.Count -eq ($SourceDirSplit.Count + $RelativityDepth))
{
# 一致したディレクトリを返す
$TargetDir
}
}
781デフォルトの名無しさん
2023/04/19(水) 22:39:13.81ID:CpwHPFTk Start-ThreadJob や Register-EngineEvent のスクリプトブロックの中で
キャプチャされずにWrite-Output 相当の出力をする方法はないでしょうか
パイプラインに流したいので Write-Host ではなく Write-Output したいです
別のプロセスを経由する方法は思いついたのですが残念過ぎますし
ForEach-Object -Parallel のようにキャプチャされなければ良いのに
function hogepiyo {
begin { 処理本体はここで Start-ThreadJob しておく }
process { … }
end { … }
clean { … }
}
なんちゃら | hogepiyo | ぽげむた
のようにしたくて考えてます
要は入出力と処理を非同期にできれば他の方法でもありがたいです
キャプチャされずにWrite-Output 相当の出力をする方法はないでしょうか
パイプラインに流したいので Write-Host ではなく Write-Output したいです
別のプロセスを経由する方法は思いついたのですが残念過ぎますし
ForEach-Object -Parallel のようにキャプチャされなければ良いのに
function hogepiyo {
begin { 処理本体はここで Start-ThreadJob しておく }
process { … }
end { … }
clean { … }
}
なんちゃら | hogepiyo | ぽげむた
のようにしたくて考えてます
要は入出力と処理を非同期にできれば他の方法でもありがたいです
782デフォルトの名無しさん
2023/04/20(木) 22:12:24.17ID:dJqrvGvM キャプチャとか何言ってるのかわからない
783デフォルトの名無しさん
2023/04/20(木) 22:40:35.29ID:fUuxiSJs PowerShellでフォーム作るの割と苦痛なんだけど何かデザインモードとかないの?
784デフォルトの名無しさん
2023/04/21(金) 05:21:56.20ID:ZJfuu8vu Where-object多様するスクリプトに数万行のcsv食わせたら処理に1時間くらいかかる…
大量のデータ処理はWhere-object使うなってみかけたけど使わん方がいいのか
大量のデータ処理はWhere-object使うなってみかけたけど使わん方がいいのか
785デフォルトの名無しさん
2023/04/21(金) 07:34:50.39ID:TBBX4m6H 件数が少ないことが確実な時しか使わない。
スクリプトだとほとんど foreach(){} 使ってる。
パイプライン処理したい場合でも &{} や .{} や function の process{} あるいは filter。
スクリプトだとほとんど foreach(){} 使ってる。
パイプライン処理したい場合でも &{} や .{} や function の process{} あるいは filter。
786デフォルトの名無しさん
2023/04/21(金) 09:17:07.60ID:kA/+t8w0787デフォルトの名無しさん
2023/04/21(金) 11:30:54.75ID:c3fakvC2 >>784
PowerShell スクリプトのパフォーマンスに関する考慮事項
ttps://learn.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/performance/script-authoring-considerations?view=powershell-7.3
PowerShell スクリプトのパフォーマンスに関する考慮事項
ttps://learn.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/performance/script-authoring-considerations?view=powershell-7.3
788デフォルトの名無しさん
2023/04/21(金) 17:50:40.46ID:4gKwO2KA >>782
出力がコレクションにためられて Receive-Job が必要になるのを回避したい
Start-ThreadJob の -StreamingHost オプションの Write-Output 版な感じ
そんなオプションはないから回避方法を知りたい
Start-TheadJobだけでなくイベントハンドラから出力する場合も同じ
イベント飛ばせばいいかと思ったらハンドラがジョブ扱いされて頭抱えた
どうすれば Receive-Job を必要とせずに Write-Output 相当の出力ができるのだろう
出力がコレクションにためられて Receive-Job が必要になるのを回避したい
Start-ThreadJob の -StreamingHost オプションの Write-Output 版な感じ
そんなオプションはないから回避方法を知りたい
Start-TheadJobだけでなくイベントハンドラから出力する場合も同じ
イベント飛ばせばいいかと思ったらハンドラがジョブ扱いされて頭抱えた
どうすれば Receive-Job を必要とせずに Write-Output 相当の出力ができるのだろう
789デフォルトの名無しさん
2023/04/21(金) 18:06:57.94ID:xAAOLjx6790デフォルトの名無しさん
2023/04/21(金) 19:56:34.84ID:6pSKsEtx >>788
Jobである必要がないならRunspacePoolでできるんじゃね
Jobである必要がないならRunspacePoolでできるんじゃね
791デフォルトの名無しさん
2023/04/21(金) 21:03:30.48ID:Vzmd1cD+792デフォルトの名無しさん
2023/04/22(土) 10:34:00.20ID:iFkcYPBt function target
・入力を読み続ける
・最後に読んだ入力を1秒間隔で出力し続ける
・入力が q なら終了
処理遅延を無視した理想的な使用例が
. { $s = Get-Date; 1; sleep 3; 2; sleep 3; 'q' } | target | % { '{0} {1}' -f (Get-Date) - $s, $_ }
0:00:00.0000000 1
0:00:01.0000000 1
0:00:02.0000000 1
0:00:03.0000000 2
0:00:04.0000000 2
0:00:05.0000000 2
となるような function target はどうすれば実現できますか
処理時間でずれていくのはもちろんかまいませんが
入力待ちにも出力を続ける具体例が知りたいです
・入力を読み続ける
・最後に読んだ入力を1秒間隔で出力し続ける
・入力が q なら終了
処理遅延を無視した理想的な使用例が
. { $s = Get-Date; 1; sleep 3; 2; sleep 3; 'q' } | target | % { '{0} {1}' -f (Get-Date) - $s, $_ }
0:00:00.0000000 1
0:00:01.0000000 1
0:00:02.0000000 1
0:00:03.0000000 2
0:00:04.0000000 2
0:00:05.0000000 2
となるような function target はどうすれば実現できますか
処理時間でずれていくのはもちろんかまいませんが
入力待ちにも出力を続ける具体例が知りたいです
793デフォルトの名無しさん
2023/04/22(土) 10:36:10.71ID:iFkcYPBt おっと間違い
(Get-Date) - $s でなく ((Get-Date) - $s) だ
(Get-Date) - $s でなく ((Get-Date) - $s) だ
794デフォルトの名無しさん
2023/04/22(土) 16:45:49.14ID:3JkCsMe2 >>792
「qなら終了」が何を示すかによるが、powershellのパイプは途中で打ち切る事は原則できないと考えた方が良い。
(endブロックが呼ばれない不完全なハックならググれば見つかる)
またパイプ処理の待機はpowershellのメインスレッドの待機という意味になるので、
そこに非同期イベントを介入させたい場合はそのイベント用の別スレッドを走らせておく必要がある。
「qなら終了」が何を示すかによるが、powershellのパイプは途中で打ち切る事は原則できないと考えた方が良い。
(endブロックが呼ばれない不完全なハックならググれば見つかる)
またパイプ処理の待機はpowershellのメインスレッドの待機という意味になるので、
そこに非同期イベントを介入させたい場合はそのイベント用の別スレッドを走らせておく必要がある。
795デフォルトの名無しさん
2023/04/22(土) 21:39:35.55ID:81urZ/Lj (New-Object -ComObject Shell.Application).NameSpace(10).MoveHere(ファイルパス)
上記の方法でファイルをごみ箱に移動する場合ファイルが1個なら問題ないんですが、
ファイルパスをを"z:\*"みたいにワイルドカードで指定するとなぜか
ごみ箱でなくC:\Users\ユーザー名にファイルが送られてしまいます。
どうすればごみ箱に送れましょうか?
上記の方法でファイルをごみ箱に移動する場合ファイルが1個なら問題ないんですが、
ファイルパスをを"z:\*"みたいにワイルドカードで指定するとなぜか
ごみ箱でなくC:\Users\ユーザー名にファイルが送られてしまいます。
どうすればごみ箱に送れましょうか?
796デフォルトの名無しさん
2023/04/23(日) 10:54:07.72ID:ElcI27v7 >>794
q は出力スレッドの停止マークで、入力の最後も意味するつもりだった (その後の入力はない)
という考えをくみ取って欲しくて例を付けたのだが伝わらなくて残念
パイプラインの中断にSelect-Object -First 1する話は知ってる
ていうか本題から話をそらそうとしてません?
知りたいのはメインスレッド以外からプライマリパイプラインに出力する方法
パイプラインの次段に送るにはどうすればいいか具体例が欲しい
q は出力スレッドの停止マークで、入力の最後も意味するつもりだった (その後の入力はない)
という考えをくみ取って欲しくて例を付けたのだが伝わらなくて残念
パイプラインの中断にSelect-Object -First 1する話は知ってる
ていうか本題から話をそらそうとしてません?
知りたいのはメインスレッド以外からプライマリパイプラインに出力する方法
パイプラインの次段に送るにはどうすればいいか具体例が欲しい
797デフォルトの名無しさん
2023/04/23(日) 15:49:22.67ID:fUzoPDLK シェルスクリプトやPowerShell が遅いのは、
毎行、何かのプロセスを起動するからじゃないの?
多くはプロセスの起動時間だろう
Ruby は、外部プロセスを起動しなければ、プロセスは1つのまま。
並行処理もあるけど
grep は、1GB を1秒!
毎行、何かのプロセスを起動するからじゃないの?
多くはプロセスの起動時間だろう
Ruby は、外部プロセスを起動しなければ、プロセスは1つのまま。
並行処理もあるけど
grep は、1GB を1秒!
798デフォルトの名無しさん
2023/04/23(日) 16:01:56.38ID:vCOHFjdN >>796
そもそもパイプは同期的にしか動かないので、次段でいくら細工しても上流が出力を起こしたタイミングに縛られる。
話を単純にするなら不規則な出力を受ける処理と一定間隔で出力する処理は分けるべきだろうね。
そもそもパイプは同期的にしか動かないので、次段でいくら細工しても上流が出力を起こしたタイミングに縛られる。
話を単純にするなら不規則な出力を受ける処理と一定間隔で出力する処理は分けるべきだろうね。
799デフォルトの名無しさん
2023/04/23(日) 16:05:07.36ID:fUzoPDLK >>795
移動なら、robocopy のmov/move を使えば?
移動なら、robocopy のmov/move を使えば?
800デフォルトの名無しさん
2023/04/23(日) 16:10:27.14ID:n0NMvdBV >>799
どうやればごみ箱に移動できましょうか?
どうやればごみ箱に移動できましょうか?
801デフォルトの名無しさん
2023/04/23(日) 16:33:01.94ID:aISPDv4l802デフォルトの名無しさん
2023/04/23(日) 17:57:33.46ID:ElcI27v7803デフォルトの名無しさん
2023/04/24(月) 17:53:43.44ID:cODz6Qqq >>801
どうもありがとうございます。そうします。
どうもありがとうございます。そうします。
804デフォルトの名無しさん
2023/04/25(火) 01:01:33.91ID:q0KJktEO 最近この言語で書くことあるけど関数の呼び出しを最初に書かないとエラー起こすなんて知らなくて問題解決に時間がかかった
多分ほとんどの人が関数はメインの後に書きたいと思うんだけどファイル分けて呼び出したりしてるの?
多分ほとんどの人が関数はメインの後に書きたいと思うんだけどファイル分けて呼び出したりしてるの?
805デフォルトの名無しさん
2023/04/25(火) 07:59:40.97ID:0OU27daL806デフォルトの名無しさん
2023/04/25(火) 08:14:10.57ID:Q567y34W >>805
定義を上書きできる言語なら呼び出し順序に意味があると思うけど、そうじゃないならただの手抜き仕様
定義を上書きできる言語なら呼び出し順序に意味があると思うけど、そうじゃないならただの手抜き仕様
807デフォルトの名無しさん
2023/04/25(火) 08:17:30.73ID:0OU27daL >>806
実行速度が速くなる、スコープが明確になる、などのメリットがあって敢えて採用されてるんだよ
JSとかも古くからあるfunction構文は順序関係ないが今推奨されてるアロー関数だと前に書かなきゃだめだ
実行速度が速くなる、スコープが明確になる、などのメリットがあって敢えて採用されてるんだよ
JSとかも古くからあるfunction構文は順序関係ないが今推奨されてるアロー関数だと前に書かなきゃだめだ
808デフォルトの名無しさん
2023/04/25(火) 08:19:33.10ID:0OU27daL あとスパゲティを防ぐ効果があるというメリットもあるな
C言語だとそれを目的にプロトタイプを書かない人もいる
C言語だとそれを目的にプロトタイプを書かない人もいる
809デフォルトの名無しさん
2023/04/25(火) 08:27:15.73ID:h+X7r+oZ 関数同士の依存関係が明確で前の関数が後の関数に依存しないなら初めてのコードを読みやすくなるというメリットもあるな
810デフォルトの名無しさん
2023/04/25(火) 08:33:08.87ID:TxIkuN+X ホイスティングってJS以外であるの?
811デフォルトの名無しさん
2023/04/25(火) 09:07:53.85ID:qRrW+mkA Java隆盛くらいの時代には関数はどこに書いても良いのが当たり前として定着したけど
関数型プログラミングでは関数宣言は変数や定数の宣言と同じようなものだからどうしても順序を意識せざるを得ない
順序の扱いを自動でやってくれる仕組みがホイスティングなんだけど、そのルールの分かりにくさやいやらしさが開発者に嫌われてJavaScriptのvarがletとconstに取って代わられた歴史がある
関数型プログラミングでは関数宣言は変数や定数の宣言と同じようなものだからどうしても順序を意識せざるを得ない
順序の扱いを自動でやってくれる仕組みがホイスティングなんだけど、そのルールの分かりにくさやいやらしさが開発者に嫌われてJavaScriptのvarがletとconstに取って代わられた歴史がある
812デフォルトの名無しさん
2023/04/25(火) 11:26:54.33ID://VjHWfL >>804
メインの部分をメイン関数として書いて実行時にメイン関数を呼び出すようにすればよいのでは?PowerShellはシェルとしても動くので実行時に先に関数が定義されていないといけないのは自然な動作のような気もする。
メインの部分をメイン関数として書いて実行時にメイン関数を呼び出すようにすればよいのでは?PowerShellはシェルとしても動くので実行時に先に関数が定義されていないといけないのは自然な動作のような気もする。
813デフォルトの名無しさん
2023/04/25(火) 11:29:40.93ID:Y1VsObgt vbsは関数後書きでもokだよ
よしvbs使おう
よしvbs使おう
814デフォルトの名無しさん
2023/04/25(火) 11:43:20.51ID:Xlw1eETD >>812
begin process endブロック使いたいときに発狂しそうだな
begin process endブロック使いたいときに発狂しそうだな
815デフォルトの名無しさん
2023/04/25(火) 21:27:41.00ID:RtJhGNCC powershellでもclass内なら順序関係なくなるよ
816デフォルトの名無しさん
2023/05/04(木) 17:38:09.61ID:spWJYsDj 自分のコード見たら別に後から宣言してても実行できてるんだが
コマンドレットの定義だとホイスティングされるとかある?
コマンドレットの定義だとホイスティングされるとかある?
817デフォルトの名無しさん
2023/05/04(木) 17:56:23.79ID:P088Z0u/ >>816
どういうコード書いてんのよ
どういうコード書いてんのよ
818デフォルトの名無しさん
2023/05/04(木) 21:18:57.29ID:FdNSNO1e >>816
古臭いと言われても、前に書いた方が無駄な混乱をさけられる。
古臭いと言われても、前に書いた方が無駄な混乱をさけられる。
819デフォルトの名無しさん
2023/05/05(金) 18:03:31.01ID:gmBJZ0Nw 動的言語は第一級関数のクロージャが多いから、
関数外で宣言したローカル変数が、関数内へ持ち込まれるので、
スコープが広くて、ヤバイ
さらに、JS はホイスティングされるから、超ヤバイ
ただし、Ruby の関数だけは第一級関数のクロージャではなく、
関数外で宣言したローカル変数は、関数内へ持ち込まれない
だから他の言語よりも、圧倒的にバグらないので、初心者向き
関数外で宣言したローカル変数が、関数内へ持ち込まれるので、
スコープが広くて、ヤバイ
さらに、JS はホイスティングされるから、超ヤバイ
ただし、Ruby の関数だけは第一級関数のクロージャではなく、
関数外で宣言したローカル変数は、関数内へ持ち込まれない
だから他の言語よりも、圧倒的にバグらないので、初心者向き
820デフォルトの名無しさん
2023/06/29(木) 13:26:04.42ID:GLUt9X10 get-childitem select-object Full name,でownerを追加する方法はありますか?ご存知の方、ご教示願います。
821デフォルトの名無しさん
2023/06/29(木) 17:48:28.46ID:xt/PffdC >820
Get-ChildItemだけではowner情報は取れない、Get-Aclで情報取得する必要がある
組み合わせで良ければ以下の様にSelect-Objectでプロパティ追加すれば出来る
Get-ChildItem|Select-Object FullName,@{n="Owner";e={Get-Acl $_.fullname|% {$_.Owner}}}
Get-ChildItemだけではowner情報は取れない、Get-Aclで情報取得する必要がある
組み合わせで良ければ以下の様にSelect-Objectでプロパティ追加すれば出来る
Get-ChildItem|Select-Object FullName,@{n="Owner";e={Get-Acl $_.fullname|% {$_.Owner}}}
822デフォルトの名無しさん
2023/07/07(金) 19:48:22.82ID:5l+s6JZK Outlook を起動してメールを送りたいのですが
本文のメールのフォントサイズや色の指定が一切無視されます。
Outlook 側の設定なのか、コードが悪いのかもよくわからず。。。
スレ違いならすいません
===================
$outlook = New-Object -comObject Outlook.Application
$mail = $outlook.CreateItem(0)
$mail.Subject = "件名テスト"
$mail.HTMLBody = "<html><head><style type='text/css'>
body {font-size:11; font-family:Meiryo UI;}
</style></head><body>
ああああ<span style='text-decoration:underline; text-decoration-color:red;'>いいいい</span>ううう<br>
</body></html>"
$inspector = $mail.GetInspector
$inspector.Display()
#$mail.Send()
===================
上記のコードだとメイリオは設定されますが、フォントサイズは8.5になるし下線は黒色になります。
なにとぞご教示お願いします
本文のメールのフォントサイズや色の指定が一切無視されます。
Outlook 側の設定なのか、コードが悪いのかもよくわからず。。。
スレ違いならすいません
===================
$outlook = New-Object -comObject Outlook.Application
$mail = $outlook.CreateItem(0)
$mail.Subject = "件名テスト"
$mail.HTMLBody = "<html><head><style type='text/css'>
body {font-size:11; font-family:Meiryo UI;}
</style></head><body>
ああああ<span style='text-decoration:underline; text-decoration-color:red;'>いいいい</span>ううう<br>
</body></html>"
$inspector = $mail.GetInspector
$inspector.Display()
#$mail.Send()
===================
上記のコードだとメイリオは設定されますが、フォントサイズは8.5になるし下線は黒色になります。
なにとぞご教示お願いします
823デフォルトの名無しさん
2023/07/10(月) 00:01:29.03ID:pvSg+WfU font-sizeの値に単位が無いから無視されてんじゃね
824デフォルトの名無しさん
2023/07/10(月) 03:13:05.95ID:ixw20e1S >>823
試したはず・・・と思いつつも確認したら普通に変更されました!!!
11px で確認したのかもしれません。11pt と書いたら普通に反映されました
ありがとうございます
ただ下線は相変わらず赤色にならず、黒色のままです。
#FF0000 も試したけど変わらず・・・
どうやら text-decoration-color がそもそも使えないようでした。
さささ<span style='text-decoration:underline; color:red;'>ししし</span>すすす<br>
とやったら文字も赤くなりましたが下線も赤くなりました。
Outlook に使える html の仕様との戦いな気がしてきた
これはどこで尋ねたら・・・
試したはず・・・と思いつつも確認したら普通に変更されました!!!
11px で確認したのかもしれません。11pt と書いたら普通に反映されました
ありがとうございます
ただ下線は相変わらず赤色にならず、黒色のままです。
#FF0000 も試したけど変わらず・・・
どうやら text-decoration-color がそもそも使えないようでした。
さささ<span style='text-decoration:underline; color:red;'>ししし</span>すすす<br>
とやったら文字も赤くなりましたが下線も赤くなりました。
Outlook に使える html の仕様との戦いな気がしてきた
これはどこで尋ねたら・・・
825デフォルトの名無しさん
2023/07/10(月) 10:11:13.02ID:CzqO5vr+ 後はstyle属性をシングルクォーテーションで括ってるのが気になった
全体の括りをシングルにして属性値をダブルに変更で動くと思うよ
全体の括りをシングルにして属性値をダブルに変更で動くと思うよ
826デフォルトの名無しさん
2023/07/10(月) 10:51:54.81ID:ixw20e1S シングルとダブルは変わりませんでした…
実際はPowerShellでメール本文内に変数を当てこむので
シングルのままでいこうと思います
あと下線だけ赤色は私の勘違いでした
赤下線の時は文字も赤くして問題なかったのでとりあえず解決しました
お手数おかけしました
ご助言くださった方ありがとうございました
実際はPowerShellでメール本文内に変数を当てこむので
シングルのままでいこうと思います
あと下線だけ赤色は私の勘違いでした
赤下線の時は文字も赤くして問題なかったのでとりあえず解決しました
お手数おかけしました
ご助言くださった方ありがとうございました
827デフォルトの名無しさん
2023/07/13(木) 11:56:03.10ID:cnmTEsiX 二週間ほど前に自分で調べて書いたのに、どうやって書いて動かしたのか全く思い出せなくて困ってます
自分で自分が信じられないんですが、教えてください。
やりたいこと:Read-Hostで指定したフォルダに存在するフォルダを取得し、各フォルダに指定したファイルをコピーする
引っかかっている点:
1)$input = Read-Host "コピー先フォルダを指定"
たとえばここでcopyと入力。規定のフォルダがC:\作業とする。
入力の結果、c:\作業\copyとして、ここにあるサブフォルダを取得したいので
$inputをc:\作業\copyにしたい。
2)Get-ChildItem でディレクトリ名のみ取得するには?
それでforeachでやってたと思うんですが・・・。
自分で自分が信じられないんですが、教えてください。
やりたいこと:Read-Hostで指定したフォルダに存在するフォルダを取得し、各フォルダに指定したファイルをコピーする
引っかかっている点:
1)$input = Read-Host "コピー先フォルダを指定"
たとえばここでcopyと入力。規定のフォルダがC:\作業とする。
入力の結果、c:\作業\copyとして、ここにあるサブフォルダを取得したいので
$inputをc:\作業\copyにしたい。
2)Get-ChildItem でディレクトリ名のみ取得するには?
それでforeachでやってたと思うんですが・・・。
828デフォルトの名無しさん
2023/07/13(木) 13:50:42.52ID:K8IsBXo8 Get-ChildItem -LiteralPath ([IO.Path]::Combine("C:\作業", (Read-Host "コピー先フォルダを指定"))) -Directory -Name
829デフォルトの名無しさん
2023/07/13(木) 17:51:09.66ID:cnmTEsiX830デフォルトの名無しさん
2023/07/14(金) 04:02:22.77ID:vOCFwCnb 多分いままで書いてたコードはこれ
# 規定のフォルダのパスを作成
$parent = join-path 'c:\作業' $input
# 上記パスのサブフォルダ作成
$names = ls -pspath $parent -di | % name
下記はエイリアス(関数の別名)
ls := get-childitem
% := foreach-object
# 規定のフォルダのパスを作成
$parent = join-path 'c:\作業' $input
# 上記パスのサブフォルダ作成
$names = ls -pspath $parent -di | % name
下記はエイリアス(関数の別名)
ls := get-childitem
% := foreach-object
831デフォルトの名無しさん
2023/07/14(金) 04:02:59.81ID:vOCFwCnb # 上記パスのサブフォルダ作成
↓
# 上記パスのサブフォルダ名を取得
↓
# 上記パスのサブフォルダ名を取得
832820
2023/07/18(火) 17:12:35.63ID:jBHsPJa3 >>821
遅くなりました。
set-location -pathで場所を指定したら、指定したフォルダのownerを取得できました。ありがとうございます。
get-Childitem -recruse -file ┃select-Object directoryName ,name ,extension ,Length Creationtime, lastACCESStime ,lastwriteTime, fullname ┃Export‐csv ‐Encodeing default xxx.csv
と一緒にできなかったのが悔やまれます。
遅くなりました。
set-location -pathで場所を指定したら、指定したフォルダのownerを取得できました。ありがとうございます。
get-Childitem -recruse -file ┃select-Object directoryName ,name ,extension ,Length Creationtime, lastACCESStime ,lastwriteTime, fullname ┃Export‐csv ‐Encodeing default xxx.csv
と一緒にできなかったのが悔やまれます。
833デフォルトの名無しさん
2023/07/18(火) 18:02:52.05ID:uMqw2ex7 そういう時はadd-memberするんだよ
834デフォルトの名無しさん
2023/07/18(火) 20:02:12.51ID:x3+Ehzia >>821の何がだめで、あるいは何が分からなくて、そのコマンドに組み込めなかったのか分からんな。
起点ディレクトリ自体の情報もCSVに含めたい、って事なのかな。
起点ディレクトリ自体の情報もCSVに含めたい、って事なのかな。
835デフォルトの名無しさん
2023/07/18(火) 22:45:48.56ID:BpIlHiPB powershellの学習曲線は険しい
本人が納得したならもうそれでいいだろう
本人が納得したならもうそれでいいだろう
837デフォルトの名無しさん
2023/07/19(水) 15:47:04.50ID:mqKqy4GV ならこんな感じで。
$dirPath = "起点ディレクトリのフルパス"
[IO.FileInfo]::new($dirPath) | %{$_; $_ | Get-ChildItem -Recurse -File} | Select-Object DirectoryName, Name, Extension, Length, CreationTime, LastAccessTime, LastWriteTime, FullName, @{N="Owner";E={($_ | Get-Acl).Owner};} | Export-Csv -Encoding Default xxx.csv
CSVの出力先がフルパスなら、Set-Locationはいらない。
$dirPath = "起点ディレクトリのフルパス"
[IO.FileInfo]::new($dirPath) | %{$_; $_ | Get-ChildItem -Recurse -File} | Select-Object DirectoryName, Name, Extension, Length, CreationTime, LastAccessTime, LastWriteTime, FullName, @{N="Owner";E={($_ | Get-Acl).Owner};} | Export-Csv -Encoding Default xxx.csv
CSVの出力先がフルパスなら、Set-Locationはいらない。
838820
2023/07/24(月) 18:16:28.42ID:yY3fBN5A >>837
ありがとうございますm(_ _)m
とりあえずownerを取得できました。列の入れ替えはPowerQueryで対処します。
neme,Extensio,owner,...したかったのですが。
ありがとうございますm(_ _)m
とりあえずownerを取得できました。列の入れ替えはPowerQueryで対処します。
neme,Extensio,owner,...したかったのですが。
839デフォルトの名無しさん
2023/08/02(水) 23:31:49.70ID:8Lc0dkYb Pythonでやったら楽なのに…と思う処理も他のメンバーに配る可能性を考えると泣く泣くpowershellでやることになる
嫌いな言語ではないけど凝った処理を書こうとすると見た目の癖が強いソースコードになりがち
嫌いな言語ではないけど凝った処理を書こうとすると見た目の癖が強いソースコードになりがち
840デフォルトの名無しさん
2023/08/05(土) 08:55:12.86ID:4wFerhHK Pythonは見た目の癖が強くないとでも?
841デフォルトの名無しさん
2023/08/05(土) 09:35:04.11ID:wvUeqD5z 泣く泣くpowershellに草
842デフォルトの名無しさん
2023/08/06(日) 22:29:47.72ID:5CExyS7F 質問なのですがパイプラインの結果を関数に渡して先頭からk番目を取り出すには一体どうすればorz
やりたいことはパイプラインの結果を検証する処理をサブルーチン化したい(k番目を取り出すのはその第一歩)
とりあえず書いたがうまく行ってないやつ:
function Test-RegEnt($reg_query_result, $exp_type, $exp_value) {
$reg_query_result | Select-Object -Index 2
}
Write-Output ("Test_A1:" + ($result | Select-Object -Index 2)) # 2行目が意図通りselectされる(" RegisteredOwner REG_SZ Admin")
$result2 = Test-RegEnt($result, 'REG_SZ', 'Admin')
Write-Output ("Test_A2:" + $result2) # A1と同じ結果になるかと思いきや、'Admin' になる
やりたいことはパイプラインの結果を検証する処理をサブルーチン化したい(k番目を取り出すのはその第一歩)
とりあえず書いたがうまく行ってないやつ:
function Test-RegEnt($reg_query_result, $exp_type, $exp_value) {
$reg_query_result | Select-Object -Index 2
}
Write-Output ("Test_A1:" + ($result | Select-Object -Index 2)) # 2行目が意図通りselectされる(" RegisteredOwner REG_SZ Admin")
$result2 = Test-RegEnt($result, 'REG_SZ', 'Admin')
Write-Output ("Test_A2:" + $result2) # A1と同じ結果になるかと思いきや、'Admin' になる
843デフォルトの名無しさん
2023/08/06(日) 22:31:40.76ID:5CExyS7F 先頭3行抜かしましたorz
$result = reg query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v 'RegisteredOwner'
$cnt = 0
$result | ForEach-Object{ "TEST[$cnt}:" + $_; $cnt++ }
この次に>>842のコード。
$result = reg query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v 'RegisteredOwner'
$cnt = 0
$result | ForEach-Object{ "TEST[$cnt}:" + $_; $cnt++ }
この次に>>842のコード。
844デフォルトの名無しさん
2023/08/06(日) 22:48:34.72ID:5CExyS7F んまーなんかこれだとうまく行ったけんども思ってたのと違う……
function Test-RegEnt($exp_type, $exp_value) {
$Input | Select-Object -Index 2
}
$result = reg query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v 'RegisteredOwner'
$cnt = 0
$result | ForEach-Object{ "TEST[$cnt}:" + $_; $cnt++ }
Write-Output ("Test_A1:" + ($result | Select-Object -Index 2))
$result2 = ($result | Test-RegEnt('REG_SZ', 'Admin')) # パイプラインの結果を引数ではなくパイプで渡す
Write-Output ("Test_A2:" + $result2)
実はパイプラインの結果(オブジェクトの配列)は関数引数に渡せなかったりするので?
つなみにfunctionの引数部分で [array]$reg_query_result としてみてもうまく行かなかった。
function Test-RegEnt($exp_type, $exp_value) {
$Input | Select-Object -Index 2
}
$result = reg query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v 'RegisteredOwner'
$cnt = 0
$result | ForEach-Object{ "TEST[$cnt}:" + $_; $cnt++ }
Write-Output ("Test_A1:" + ($result | Select-Object -Index 2))
$result2 = ($result | Test-RegEnt('REG_SZ', 'Admin')) # パイプラインの結果を引数ではなくパイプで渡す
Write-Output ("Test_A2:" + $result2)
実はパイプラインの結果(オブジェクトの配列)は関数引数に渡せなかったりするので?
つなみにfunctionの引数部分で [array]$reg_query_result としてみてもうまく行かなかった。
845デフォルトの名無しさん
2023/08/07(月) 03:16:48.48ID:SSXgsNNw 文法が違う。
Test-RegEnt -reg_query_result $result -exp_type 'REG_SZ' -exp_value 'Admin'
とか
Test-RegEnt $result 'REG_SZ' 'Admin'
とか。
または
function Test-RegEnt {
Param (
[Parameter(ValueFromPipeline=$true)]
[string] $reg_query_result,
[string] $exp_type,
[string] $exp_value
)
Begin {
$cnt = 0
}
Process {
$cnt++
$idx = $cnt - 1
if ($idx -eq 2) {
$reg_query_result
return
}
}
}
$result | Test-RegEnt -exp_type 'REG_SZ' -exp_value 'Admin'
Test-RegEnt -reg_query_result $result -exp_type 'REG_SZ' -exp_value 'Admin'
とか
Test-RegEnt $result 'REG_SZ' 'Admin'
とか。
または
function Test-RegEnt {
Param (
[Parameter(ValueFromPipeline=$true)]
[string] $reg_query_result,
[string] $exp_type,
[string] $exp_value
)
Begin {
$cnt = 0
}
Process {
$cnt++
$idx = $cnt - 1
if ($idx -eq 2) {
$reg_query_result
return
}
}
}
$result | Test-RegEnt -exp_type 'REG_SZ' -exp_value 'Admin'
846デフォルトの名無しさん
2023/08/07(月) 06:50:14.57ID:L1yQ0BJe >>845
レス㌧クス
$Input利用(>>844)とBegin { } Process { }利用の違いはわかりた
$resultが数億オブジェクトだったりしたら後者の方がパイプラインがスムーズに流れてよさげ(未検証
一方、
>実はパイプラインの結果(オブジェクトの配列)は関数引数に渡せなかったりするので?(>>844)
については関数の呼び出し箇所が
$result | Test-RegEnt -exp_type 'REG_SZ' -exp_value 'Admin' # (1) OK
Test-RegEnt -reg_query_result $result -exp_type 'REG_SZ' -exp_value 'Admin' # (2) NG (エラー)
やったから、これは「パイプラインの結果は関数引数には渡せない」((1)のように書くしかない)ということでFA?
レス㌧クス
$Input利用(>>844)とBegin { } Process { }利用の違いはわかりた
$resultが数億オブジェクトだったりしたら後者の方がパイプラインがスムーズに流れてよさげ(未検証
一方、
>実はパイプラインの結果(オブジェクトの配列)は関数引数に渡せなかったりするので?(>>844)
については関数の呼び出し箇所が
$result | Test-RegEnt -exp_type 'REG_SZ' -exp_value 'Admin' # (1) OK
Test-RegEnt -reg_query_result $result -exp_type 'REG_SZ' -exp_value 'Admin' # (2) NG (エラー)
やったから、これは「パイプラインの結果は関数引数には渡せない」((1)のように書くしかない)ということでFA?
847デフォルトの名無しさん
2023/08/07(月) 06:54:08.66ID:FZVMVghc Select-ObjectのSkipとFirst使えばできるのでは?
848デフォルトの名無しさん
2023/08/07(月) 06:56:57.16ID:FZVMVghc 関数でやりたいという要件を見落としていた
849デフォルトの名無しさん
2023/08/07(月) 07:04:28.71ID:FZVMVghc >>842
> $result2 = Test-RegEnt($result, 'REG_SZ', 'Admin')
$result2 = Test-RegEnt $result 'REG_SZ' 'Admin'
でやりたいことはできるのではないでしょうか
> $result2 = Test-RegEnt($result, 'REG_SZ', 'Admin')
$result2 = Test-RegEnt $result 'REG_SZ' 'Admin'
でやりたいことはできるのではないでしょうか
850デフォルトの名無しさん
2023/08/07(月) 22:40:57.49ID:SSXgsNNw パイプラインと引数のどちらでも動くようにしたいなら
function Test-RegEnt {
Param (
[Parameter(ValueFromPipeline=$true)]
[string[]] $reg_query_result,
[string] $exp_type,
[string] $exp_value
)
Begin {
$cnt = 0
}
Process {
foreach ($item in $reg_query_result) {
$cnt++
$idx = $cnt - 1
if ($idx -eq 2) {
$item
break
}
}
}
}
あくまでシンプルめのサンプルなんでSelect-Object -Index 2と全く同じ挙動とか期待しないように。
※作りこむならパイプが繋がってるのかチェックして分岐の処理書いたりする。
なお、大量のデータをパイプラインに流すのはお勧めできない。
パイプラインは途中での打ち切りとか難しいし、
結局は普通にループ処理書いた方が速いし制御しやすいし分かりやすい事が多い気がする。
function Test-RegEnt {
Param (
[Parameter(ValueFromPipeline=$true)]
[string[]] $reg_query_result,
[string] $exp_type,
[string] $exp_value
)
Begin {
$cnt = 0
}
Process {
foreach ($item in $reg_query_result) {
$cnt++
$idx = $cnt - 1
if ($idx -eq 2) {
$item
break
}
}
}
}
あくまでシンプルめのサンプルなんでSelect-Object -Index 2と全く同じ挙動とか期待しないように。
※作りこむならパイプが繋がってるのかチェックして分岐の処理書いたりする。
なお、大量のデータをパイプラインに流すのはお勧めできない。
パイプラインは途中での打ち切りとか難しいし、
結局は普通にループ処理書いた方が速いし制御しやすいし分かりやすい事が多い気がする。
851デフォルトの名無しさん
2023/08/10(木) 07:01:52.35ID:3iQsMBl9 レス㌧クス、しかしながら大量データを引数で関数に渡すのはメモリ消費量、応答速度ともに悪くなることがわかったからやめるわサーセン;;;
どういうことかというと、bigfile.txtが(1行何か書いたいた後 Ctrl+A Ctrl+V Ctrl+V を22回反復とかで作った)
4194305行の巨大なテキストファイルだったとして、
function Test-FileContent([string[]] $lines) { $cnt = 0; foreach ($line in $lines) { $cnt++; Write-Host "cnt=" $cnt } }
$lines = Get-Content .\bigfile.txt # (1)
Test-FileContent($lines) # Get-Content完了後の結果を引数で渡す
とするとお、「cnt= 1」が表示される前に(1)で永劫の時間待たされるますが、
function Test-FileContent() { $cnt = 0; foreach ($line in $Input) { $cnt++; Write-Host "cnt=" $cnt } }
Get-Content .\bigfile.txt | Test-FileContent # Get-Contentが読んだら即パイプで渡す
とすると*即座に*「cnt= 1」以降のカウントが始まる
どういうことかというと、bigfile.txtが(1行何か書いたいた後 Ctrl+A Ctrl+V Ctrl+V を22回反復とかで作った)
4194305行の巨大なテキストファイルだったとして、
function Test-FileContent([string[]] $lines) { $cnt = 0; foreach ($line in $lines) { $cnt++; Write-Host "cnt=" $cnt } }
$lines = Get-Content .\bigfile.txt # (1)
Test-FileContent($lines) # Get-Content完了後の結果を引数で渡す
とするとお、「cnt= 1」が表示される前に(1)で永劫の時間待たされるますが、
function Test-FileContent() { $cnt = 0; foreach ($line in $Input) { $cnt++; Write-Host "cnt=" $cnt } }
Get-Content .\bigfile.txt | Test-FileContent # Get-Contentが読んだら即パイプで渡す
とすると*即座に*「cnt= 1」以降のカウントが始まる
852デフォルトの名無しさん
2023/08/10(木) 07:07:45.76ID:3iQsMBl9 つなみに
>$resultが数億オブジェクトだったりしたら後者の方がパイプラインがスムーズに流れてよさげ(>>846)
も検証すた、
>>846のレスポンスが即時のコードと似通っているが関数内でBEGIN { } PROCESS { }でなく$Inputをforeachループで回した場合、
すわなち
function Test-FileContent() { $cnt = 0; foreach ($line in $Input) { $cnt++; Write-Host "cnt=" $cnt } }
Get-Content .\bigfile.txt | Test-FileContent
とすると、、「cnt= 1」が表示される前に永劫の時間待たされる、、、
というわけで、パイプライン(の後段まで)に大量のデータを無駄に流すなというのは真やが
生じてしまった大量のデータはむしろパイプラインにしか流さないのが正義……
>$resultが数億オブジェクトだったりしたら後者の方がパイプラインがスムーズに流れてよさげ(>>846)
も検証すた、
>>846のレスポンスが即時のコードと似通っているが関数内でBEGIN { } PROCESS { }でなく$Inputをforeachループで回した場合、
すわなち
function Test-FileContent() { $cnt = 0; foreach ($line in $Input) { $cnt++; Write-Host "cnt=" $cnt } }
Get-Content .\bigfile.txt | Test-FileContent
とすると、、「cnt= 1」が表示される前に永劫の時間待たされる、、、
というわけで、パイプライン(の後段まで)に大量のデータを無駄に流すなというのは真やが
生じてしまった大量のデータはむしろパイプラインにしか流さないのが正義……
853デフォルトの名無しさん
2023/08/10(木) 07:10:57.08ID:3iQsMBl9 >>851の肝心のところに誤記が合ったスマンヌorz
*即座に*「cnt= 1」以降のカウントが始まるコードは正しくはこれ↓
function Test-FileContent() { BEGIN { $cnt = 0 } PROCESS { $cnt++; Write-Host "cnt=" $cnt } }
Get-Content .\bigfile.txt | Test-FileContent
*即座に*「cnt= 1」以降のカウントが始まるコードは正しくはこれ↓
function Test-FileContent() { BEGIN { $cnt = 0 } PROCESS { $cnt++; Write-Host "cnt=" $cnt } }
Get-Content .\bigfile.txt | Test-FileContent
854デフォルトの名無しさん
2023/08/11(金) 18:46:06.42ID:I7dwFhkG パイプの利点は個数を意識しなくて済むことだけど中断が一切できないしデメリットの方が多い
よっぽどの事情でもない限りコマンドレット自作しても遅いだけで良い事なんて1つもない
公式のselect -firstなんかはパイプの流儀に従ってないから似た事をしようとしてもあれ?って自らの間違いに気付くんだよ
powershellの深遠を覗くとそのいい加減さにガッカリするだけ
よっぽどの事情でもない限りコマンドレット自作しても遅いだけで良い事なんて1つもない
公式のselect -firstなんかはパイプの流儀に従ってないから似た事をしようとしてもあれ?って自らの間違いに気付くんだよ
powershellの深遠を覗くとそのいい加減さにガッカリするだけ
855デフォルトの名無しさん
2023/08/11(金) 19:17:06.70ID:SL3m3m5F 一番の利点はメモリの節約です
856デフォルトの名無しさん
2023/08/11(金) 19:30:40.13ID:I7dwFhkG メモリなんて遅さで相殺される
powershell + 大量データ = 遅くて不採用
powershell + 大量データ = 遅くて不採用
857デフォルトの名無しさん
2023/08/11(金) 19:42:42.98ID:bAYgNtyZ >>856
使いどころを履き違えるとそうなる
使いどころを履き違えるとそうなる
858デフォルトの名無しさん
2023/08/11(金) 19:56:15.04ID:I7dwFhkG859デフォルトの名無しさん
2023/08/11(金) 20:07:52.72ID:PQblbJTG 一番良いのは、Windowsを使わない
これにかぎる
こんなクソなOSを世界中から捨てるべき
これにかぎる
こんなクソなOSを世界中から捨てるべき
860デフォルトの名無しさん
2023/08/11(金) 20:09:59.59ID:SL3m3m5F Windowsは汎用事務処理端末としては競合なしだ
861デフォルトの名無しさん
2023/08/11(金) 20:27:11.32ID:SL3m3m5F メモリ効率とスループットは交換できるようなものではない
手軽さが不要ならPythonでも使っておけばいい
手軽さが不要ならPythonでも使っておけばいい
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- 🏡
- スーパーが開くまで約4時間何すりゃいいんだ?
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- 飲みの約束だるい
- 減税は低所得者差別
- 高市さんに土下座してもらったら一発解決なのに何でやらないんだろ??
