[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 09/03 04:39 / Filesize : 313 KB / Number-of Response : 1023
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

PowerShell -Part 6



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が立ててね!!

562 名前:デフォルトの名無しさん mailto:sage [2022/09/22(木) 00:48:03.74 ID:XoRPEjFK.net]
Ruby で、win32ole を使って、
フォルダ以下のサイズ(再帰的な子孫も含めて)は、

require 'win32ole'

fso = WIN32OLE.new( 'Scripting.FileSystemObject' )

folders = [ "C:/Users/Owner/Documents/test_1",
"C:/Users/Owner/Documents/test_2" ]

folders.each do |folder|
folder_obj = fso.GetFolder( folder )

puts File.expand_path( folder_obj.path ) # \ を、/ に変換する
puts "#{ folder_obj.name } : #{ folder_obj.size }"
end

出力
C:/Users/Owner/Documents/test_1
test_1 : 28803

C:/Users/Owner/Documents/test_2
test_2 : 4390

563 名前:552 mailto:sage [2022/09/22(木) 01:41:34.82 ID:XoRPEjFK.net]
Ruby で、フォルダ以下のファイル(再帰的な子孫も含めて)で、
更新時刻が最も最近のものを求めた

folders = [ "C:/Users/Owner/Documents/test_1",
"C:/Users/Owner/Documents/test_2" ]

folders.each do |folder|
# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠し directory, file を除く
glob_pattern = folder + "/**/*"

latest_file = Dir.glob( glob_pattern )
.select { |full_path| File.file?( full_path ) } # ファイルのみ
.max_by { |full_path| File.mtime( full_path ) } # 更新時刻が最も最近のファイルパス

puts "#{ latest_file }\n#{ File.mtime( latest_file ) }"
end

出力
C:/Users/Owner/Documents/test_1/a.txt
2022-05-19 14:38:35 +0900

C:/Users/Owner/Documents/test_2/x/x.txt
2022-02-24 16:01:54 +0900

564 名前:552 mailto:sage [[ここ壊れてます] .net]
Ruby で、CSV 形式で出力する部分は、

require 'csv'

result_ary = [
[ "C:/Users/Owner/Documents/test_1", "28,803", "2022-05-19 14:38:35 +0900" ],
[ "C:/Users/Owner/Documents/test_2", "4,390", "2022-02-24 16:01:54 +0900" ]
]

# 2次元配列を、CSV 文字列に変換する
csv_str = result_ary.map( &:to_csv ).join
print csv_str

出力
C:/Users/Owner/Documents/test_1,"28,803",2022-05-19 14:38:35 +0900
C:/Users/Owner/Documents/test_2,"4,390",2022-02-24 16:01:54 +0900

565 名前:デフォルトの名無しさん mailto:sage [2022/09/22(木) 09:18:39.47 ID:5Z2vYjCC.net]
>>541
@(
"C:\dir1"
"C:\dir2"
) | %{
  $prop = [Ordered] @{Path=$_}
  $file = @(Get-ChildItem -LiteralPath $_ -Force -Recurse -File)
  ([Ordered] @{LastWriteTime='Maximum'; Length='Sum';}).GetEnumerator() | %{
    $opt = @{'Property'=$_.Key; $_.Value=$true;}
    $prop += @{$_.Key = $file | measure @opt | select -exp $_.Value}
  }
  [PSCustomObject] $prop
} | ConvertTo-Csv -NoTypeInformation

566 名前:デフォルトの名無しさん mailto:sage [2022/09/23(金) 00:05:04.72 ID:r49iT1KO.net]
>>555
おおー無駄がなくてすごい
これぐらい書けるようになりてぇ

開始は配列の変わりにコマンドレットでも良さそう
Get-ChildItem -LiteralPath <親フォルダ> -Directory | ...

567 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 13:45:46.35 ID:5ly2Ski6.net]
>>556
確かに。てか半端に汎用性意識せず、素直にこんなんでも良かったな。
@(Get-ChildItem -LiteralPath <親フォルダ> -Directory).FullName | %{
  $file = @(Get-ChildItem -LiteralPath $_ -Force -Recurse -File)
  [PSCustomObject] @{
    Path     = $_
    LastWriteTime = ($file | measure LastWriteTime -Maximum).Maximum
    Length    = ($file | measure Length -Sum).Sum
  }
} | ConvertTo-Csv -NoTypeInformation

568 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 14:01:26.72 ID:5ly2Ski6.net]
いや、こうか。
Get-ChildItem -LiteralPath <親フォルダ> -Directory | %{
  $file = @($_ | Get-ChildItem -Force -Recurse -File)
  [PSCustomObject] @{
    Path     = $_.FullName
    LastWriteTime = ($file | measure LastWriteTime -Maximum).Maximum
    Length    = ($file | measure Length -Sum).Sum
  }
} | ConvertTo-Csv -NoTypeInformation

569 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 14:13:19.66 ID:76wlmrvm.net]
試してないけどフォルダにファイルが1個も無い場合を考慮できてない気がする

570 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 14:48:45.69 ID:5ly2Ski6.net]
知らんかった。前者つもりだった。
(@() | measure -Sum).Sum → 0
(@() | measure Length -Sum).Sum → Null



571 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 15:45:18.22 ID:76wlmrvm.net]
powershellはgciはともかくmeasureが遅くてファイルが多くなると辛くなるね
結局C#に丸投げとかの手段になりそう

572 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 16:18:35.15 ID:PDKGWlWe.net]
試してないけど
Get-ChildItem -LiteralPath <親フォルダ> -Directory | %{
 $Stat = $_ | Get-ChildItem -Force -Recurse -File | Measure-Object LastWriteTimeLastWriteTime, Length -Sum -Maximum
 [PSCustomObject] @{
  Path     = $_.FullName
  LastWriteTime = $Stat[0].Maximum
  Length    = $Stat[1].Sum
 }
} | ConvertTo-Csv -NoTypeInformation
ってやると多少効率的かと

573 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 17:09:36.54 ID:UvTk6pcp.net]
>>561
まあC#でやった方が速いわな

574 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 19:58:47.42 ID:5ly2Ski6.net]
>>562
なるほどな〜、余分な集計をする事になるとしても
measureを1回で済ませられれば効率的な可能性があるのか、
さらにパイプラインで列挙と集計が同時進行になる可能性もあったり?
と思い試してみたけど、残念ながらLastWriteTimeの-Sumがダメらしい。
-ea:SilentlyContinueなら?と思ったがLengthのMaximumしか出ない。
でもこのアイデアは使えそう。

575 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 20:11:16.46 ID:PDKGWlWe.net]
>>564
ああなるほど、だから小細工してたのか、すまんかった
てか、初めからURL書いとけば良かったな

$Stat = $_ | Get-ChildItem -Force -Recurse -File | Measure-Object LastWriteTime.Ticks, Length -Sum -Maximum
[PSCustomObject] @{
 Path     = $_.FullName
 LastWriteTime = [DateTime][Int64]$Stat[0].Maximum
 Length    = $Stat[1].Sum
}

https://stackoverflow.com/questions/66697384/measure-multiple-properties

576 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 21:00:46.43 ID:UvTk6pcp.net]
>>565
さも自分で考えたかのように書いて劣化パクリかよ

577 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 21:03:35.79 ID:PDKGWlWe.net]
そりゃすまんな

578 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 21:18:28.66 ID:5ly2Ski6.net]
PSv7だとmeasureに集計プロパティ使えるのか。
PSv5なので試せないのが残念。

速度の話が出てたからmeasureの速度がどんなもんか>>558で計ってみたら
自環境だと普通の実装(最高水位線と足し算)より7〜8倍くらい遅いわ。
まあ、標準コマンドレットのよくある結果だな…。

579 名前:デフォルトの名無しさん mailto:sage [2022/09/29(木) 21:06:47.50 ID:OAAH5wr1.net]
タスクマネージャの詳細タブからaudiodg.exeの関係の設定を変更する操作をスクリプトで書けますか?

580 名前:デフォルトの名無しさん mailto:sage [2022/09/29(木) 21:46:11.19 ID:NUiBz/8K.net]
Get-Process "audiodg" | %{ $_.ProcessorAffinity = $コア数 }
$コア数は2のn乗で表したコア数の数
たとえば若い番号の3コアだけ割り当てたい場合は 0xf



581 名前:デフォルトの名無しさん mailto:sage [2022/09/29(木) 21:47:29.47 ID:NUiBz/8K.net]
上の3は4の間違い
もちろんタスクマネージャーをいじろうと思えばできるけど面倒

582 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 01:54:30.65 ID:Ls0wbInl.net]
>>570
わからん・・・
2の4乗=16 != 0xf ?
4=2の2乗 だと 0x2 ?

コア数というよりフラグ?マスク?ってこと?

583 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 05:17:13.01 ID:oHn8O8ll.net]
マスクだね
https://learn.microsoft.com/ja-jp/dotnet/api/system.diagnostics.process.processoraffinity

584 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 09:21:08.41 ID:ZYrZXJKF.net]
皆さんありがとうございます!

585 名前:デフォルトの名無しさん mailto:sage [2022/10/31(月) 09:21:34.51 ID:fKpjF07r.net]
comobjectでofficeを操作してるとき、
$xxx.Count() が 2なのに
$xxx[0] 範囲外
$xxx[1] 範囲内
$xxx[2] 範囲内
$xxx[3] 範囲外
みたいなアクセスになることがあるんやが
これはどう理解すればええんや?

586 名前:デフォルトの名無しさん mailto:sage [2022/10/31(月) 09:37:52.98 ID:jAJ0SKjr.net]
Item使わないからじゃね

587 名前:デフォルトの名無しさん mailto:sage [2022/10/31(月) 12:19:33.83 ID:K5+OjW4X.net]
Excelってたしか値も書式もないセルはオブジェクト自体が存在しない扱いになるので、インデックスが0から始まるとは限らなかったはず
データが取れる前提で処理するとうまく行かない

588 名前:デフォルトの名無しさん mailto:sage [2022/10/31(月) 23:20:47.42 ID:9ETwK7p6.net]
>>576
これかも
明日試してみるわ!サンクス!

>>577
これは怖いな
今回は関係なさそうだけど、心に留めておくわ、サンクス

589 名前:デフォルトの名無しさん mailto:sage [2022/11/01(火) 16:19:30.34 ID:3yQnaOmT.net]
Excelは1オリジンやで

590 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 21:25:18.64 ID:HyYadl7b.net]
誰かmtkclient教えてクレメンス



591 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 12:43:06.89 ID:xY1K1bhL.net]
>>566
>>555からの流れ、色んな書き方があるんだなー、と非常に為になった

592 名前:デフォルトの名無しさん [2022/11/06(日) 19:05:17.89 ID:vSW2pkDA.net]
$a = "abc::de/f/ghi/123jk"
$b = $a.TrimEnd("/")
をしても$bの出力が「abc::de/f/ghi/」にならないのですが、どこが間違っているのでしょうか?

593 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 19:19:37.21 ID:NZll9bPy.net]
>>582
同じ勘違いしたことある
指定文字「を」末尾からtrimするのがTrimEnd

$a.TrimEnd("jk123")

Trimメソッドは正規表現使えないからreplaceステートメントをつかう

$a -replace "\w*$",''

594 名前:デフォルトの名無しさん [2022/11/06(日) 23:51:09.18 ID:vSW2pkDA.net]
>>583
ありがとうございます!
今回はreplaceを使っていこうと思います

595 名前:デフォルトの名無しさん mailto:sage [2022/11/10(木) 20:57:05.64 ID:bawORDDu.net]
PowerShell 7.3 General Availability
https://devblogs.microsoft.com/powershell/powershell-7-3-general-availability/
What's New in PowerShell 7.3
https://learn.microsoft.com/en-us/powershell/scripting/whats-new/what-s-new-in-powershell-73

596 名前:デフォルトの名無しさん mailto:sage [2022/11/12(土) 14:51:35.07 ID:p3H1JcgM.net]
>>585 日本語訳

PowerShell 7.3 の新機能
https://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/what-s-new-in-powershell-73

597 名前:デフォルトの名無しさん mailto:sage [2022/11/12(土) 15:22:51.03 ID:c/ILT9OL.net]
11でもPowershell起動すると新しいのお試ししろとか表示されるけど5.1で十分だよなぁ
他の鯖系のベンダーのモジュールが5.1に対応しなくなったら考えるわ程度

598 名前:デフォルトの名無しさん mailto:sage [2022/11/12(土) 19:04:11.88 ID:lKqjLh4g.net]
>>586
前からexperimentalで有ったのは知ってたし、オプションだから嫌なら切ればいいんだけども…

cmdから呼ばれる想定のコマンドは引数処理に癖があるからと

599 名前:いって、特定のプログラムのみ特別扱いするワークアラウンド的挙動にはちょっと賛同できない
ワークアラウンドというのはユーザーがやるものだ

pwsh側で個別対応をするとしても、ユーザーが期待する形式の引数を取って、コマンドの期待する形式に変換するラッパースクリプトを用意すれば済むだけの話

普段linux/macでpwsh使ってるから、どれ程の癖なのかは図りかねるが、
[]
[ここ壊れてます]

600 名前:デフォルトの名無しさん mailto:sage [2022/11/14(月) 01:13:06.37 ID:zoPzNIvr.net]
$obj.('行');

1. 上記を7.3で実行するとハングする。
2. 5.1や7.2ではハングしない。
3. $prop = '行'; $obj.$prop; でもハングする。
4. '行'が違う言葉だとハングしない。
5. $obj.行; だとハングしない。
バグ?バグなの?ゲイツに電凸していいの?



601 名前:589 mailto:sage [2022/11/14(月) 01:23:18.32 ID:zoPzNIvr.net]
あ環境はWindows11とmacOS13で再現してます。連投スマソ

602 名前:589 mailto:sage [2022/11/14(月) 21:56:16.00 ID:zoPzNIvr.net]
589の条件4についてだけど、
$obj.([System.Text.Encoding]::UTF8.GetString((0xE8, 0xA1, 0x8C)));
でもハングして、UTF-8での先頭バイトが0xE8だった場合にハングするっぽい。
毎回ハングするのであんまり回数試してないけど。

603 名前:デフォルトの名無しさん mailto:sage [2022/11/15(火) 01:46:29.41 ID:E2xRIJUz.net]
まともにテストしてないか
変なメンテナが紛れてるか

604 名前:デフォルトの名無しさん mailto:sage [2022/11/15(火) 11:09:43.75 ID:ADWqgLY3.net]
7.30-preview.2 Core win10(en-US)だけど大丈夫な感じ

$gyo =[System.Text.Encoding]::UTF8.GetString((0xE8, 0xA1, 0x8C)))
$gyo

$trans=@{$gyo="go"}
$trans.$gyo, $trans[$gyo]
go

(まだ日本語IME入れてない新品なので行が入力できないのはご愛嬌)
属性/キーはハッシュ可能な任意のビット列で構わないはずなので、単にエンコルーチンの問題のはず、7.30-preview-2以降のgitレポの差分みては

605 名前:デフォルトの名無しさん mailto:sage [2022/11/15(火) 11:40:25.67 ID:Xte85wf7.net]
cx-fxは開始バイトだから安定リリースで出してたらマルチバイト圏壊滅してそうだが

606 名前:589 mailto:sage [2022/11/16(水) 02:47:51.66 ID:VVslFgtK.net]
>>592-594 ども!
>>593 ありがとうございます。
preview.3 から preview.4の間でなんかあったとこまで突き止めましたが、
preview.3から5までのStart-PSBootstrapがバグっててビルドに予想以上に時間かかったからもう寝るお

607 名前:589 mailto:sage [2022/11/18(金) 02:58:42.77 ID:5YGh8aoa.net]
お巡りさんこの人でつ38909f7ee
でそのコミットの中身がこちら
Update .NET SDK version from `7.0.100-preview.2.22153.17` to `7.0.100-preview.4.22252.9` (#17061)
おふぅ。PowerShellのバグを追っていて大変なものを見つけてしまったーどうしよう?

608 名前:デフォルトの名無しさん mailto:sage [2022/11/29(火) 18:07:22.13 ID:bVQqRFK0.net]
以前は PowerShell の日本語ドキュメントのリポジトリが Github に置いてあったはずですが今は消えていますよね?
事情がよくわからないんですが、マイクロソフトとしてはコミュニティで日本語翻訳を運用しない (機械翻訳でやっていく?) ということなんでしょうか。

それはそれとして、諸事情でネットワーク接続できない場所で日本語ドキュメントを読みたいんですが
どこかでまとめてダウンロードする方法とかありませんかね?

609 名前:デフォルトの名無しさん [2022/11/29(火) 21:34:29.76 ID:S4GKm+YH.net]
>>597
マイクロソフトにかきらず、英語以外の言語に翻訳することをみんなやめてしまっただけ。

ソフトウェアの更新スピードが速すぎて、ドキュメントを人間が翻訳する時間がない。

610 名前:デフォルトの名無しさん mailto:sage [2022/11/29(火) 21:48:53.54 ID:noJ3pHan.net]
日本マイクソロフトは何してんの



611 名前:デフォルトの名無しさん mailto:sage [2022/11/29(火) 23:10:55.01 ID:F0R68kvV.net]
日本語にすると曖昧になっちゃうからな
英語で厳密に説明されたほうがいいだろうし、ソフトウェア技術者だったら英語は素養の一つだね

612 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 01:07:23.00 ID:oNUduEv2.net]
>>599
ちょまどはイベントに参加したり楽しくやってる

613 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 01:12:58.71 ID:TaPBZKHt.net]
文字列検索する時は、ラテン文字のキーワードが検索結果に埋もれない日本語ドキュメントのほうが便利

614 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 02:05:17.65 ID:k8p89eha.net]
>>597
Get-Helpで取れる情報ならUiCulture指定してSave-Help
https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_updatable_help
それ以外ならGitHubから英語ドキュメント落としてきて機械翻訳かな
オフライン環境でスクリプト書く気はしないから必要なドキュメントは限られるのでは

615 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 08:53:37.63 ID:QfqHtuzd.net]
どうしてもドキュメントを日本語化してほしいなら16ビット時代みたいに
日本語版がリリースされる頃には英語版の新バージョンがリリースされている
みたいな事になってもおま国とか文句言わないようにしないとね
英語版が完成してからじゃないと翻訳作業を始められないんだから

616 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 12:40:03.59 ID:4G7kek1Y.net]
Google, DeepL, みらい翻訳

「みんなの自動翻訳@TexTra®」は、
国立研究開発法人情報通信研究機構(NICT)が開発した自動翻訳サイトです。無料
mt-auto-minhon-mlt.ucri.jgn-x.jp/

翻訳したいサイトのURLを入力するだけで、自動翻訳結果をエディタ上に再現

617 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 13:17:37.01 ID:Occ07s0g.net]
機械が無料で一瞬でそれなりの翻訳をしてくれる時代になったのに
わざわざ多ヵ国の翻訳チームを雇って変わり続ける膨大なドキュメントへの人件費を出す判断なんてできんだろなあ

618 名前:597 mailto:sage [2022/11/30(水) 17:21:56.68 ID:zA9UzzGK.net]
私は現時点では PowerShell について全く知識を持たず、
入門的な資料を移動中の合間にタブレットコンピュータで読みたいと考えています。
(通信は出来ないので事前に入れておく必要があります。)

基本理念をわかれば個々のコマンドの資料はたぶん英語でも理解できると思うんですが
新しい概念そのものを英語で読むのはしんどいです。

オフラインで読みたいと思うと ePub (などの電子書籍形式) になっているとやりやすくて
そうするには元が Markdown なら一発で出来ると思ったんですが、
機械翻訳を通してその形に持っていくとなると面倒ですね。

619 名前:605 mailto:sage [2022/11/30(水) 17:40:14.72 ID:4G7kek1Y.net]
Markdown は、HTML になるから、
「みんなの自動翻訳@TexTra®」で翻訳できるのでは?

翻訳したいサイトのURLを入力するだけで、自動翻訳結果をエディタ上に再現と書いてあるから、
ローカルPC にある、HTMLへのパスを入力すれば?

620 名前:597 mailto:sage [2022/11/30(水) 18:10:28.67 ID:zA9UzzGK.net]
>>608
翻訳できることにはなんの疑いも持ってないですよ。
コマンド一発で出来るツールはないので手間がかかると言ってます。



621 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 21:29:56.51 ID:QfqHtuzd.net]
適当な電子書籍の解説本でも買えば?

622 名前:デフォルトの名無しさん mailto:sage [2022/11/30(水) 23:01:06.28 ID:k8p89eha.net]
過去の公式日本語訳が出てきたとして、基本理念を理解したい人の役に立つレベルとは思えない
電子書籍買って読むほうがいい

623 名前:デフォルトの名無しさん mailto:sage [2022/12/01(木) 08:18:35.61 ID:iTNwCGJv.net]
インアクションの邦訳ぐらい?古いのしかないな

624 名前:デフォルトの名無しさん mailto:sage [2022/12/01(木) 13:08:12.37 ID:Qs+E1f1w.net]
もしも古い翻訳テキストが手元にあるなら
それでいいんじゃね
新しい要素だけググって調べてブラウザ上でctrl+Sするなりして保存しておけば?

625 名前:デフォルトの名無しさん [2022/12/03(土) 12:28:32.79 ID:Jt/U29yp.net]
配列の要素を逆順にしたものを得たいのですが, …たとえば,
$a = @(10, 0, 5)
これに対して
$a[-1..-$a.Length] …とすれば,@(5, 0, 10) が得られて,
それで不満は無いのですが,何かもっとシンプルに書ける気がして.
(→ でもこれって $a[-1..0] とは書けないんですね.)

あるいは
[array]::Reverse($a)
とすることで,$a 自体が逆順の中身に変えられるのですが
でも $a自体は 変えたく無いのです

感覚的には
$a.Reverse() とか
$a | Reverse-Object みたいに書けたらいいのに
とは思うのですが(…そんなものは無い)

文字列だったら
[linq.enumerable]::Reverse("abcdef") で逆順を得られるのに
同じ場所に 数値の配列を書いて
[linq.enumerable]::Reverse(@(0,5,1,2))
…としても,何故かできない (なぜなのかはc#に勉強不足な私には分からず)

ってなわけで,別に困ってるわけでは無いのですが
もっと シンプルな書き方ってありますか

626 名前:デフォルトの名無しさん [2022/12/03(土) 14:39:08.81 ID:H3EtATlx.net]
$a[length - 1 - n]

627 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 15:49:40.73 ID:h4dim/Vw.net]
>>614
とりあえず、$a[-1..-$a.Length]だと-1,0,1で並ぶから@(5,10,0)になっちゃうはず。
$a[$a.length..0] が正。
個人的にはlengthじゃなくてcount使ってほしい。

後はsort-object使うか。
$a|sort -des でいける。
ただし遅いので巨大配列には向かない。

628 名前:デフォルトの名無しさん [2022/12/03(土) 18:40:22.74 ID:Jt/U29yp.net]
>>616
$a[$a.Count..0] 言われてみれば! …これ使わせていただきます
なお,sort を使うと,どうしても数値でsortされてしまうので うまくいかない感じです
何の意味も無い基準でsortして(何の順番も変えないで) -desだけしてくれたらいいのですが

629 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 19:09:31.97 ID:K8Dj9wl7.net]
>>614
[linq.enumerable]::Reverse([int[]]@(0,5,1,2))
LinqのReverseはこれで動く

630 名前:デフォルトの名無しさん [2022/12/03(土) 19:46:36.52 ID:Jt/U29yp.net]
>>618 intの配列にcastってことなのか…半分くらいしか理解してませんが
ありがとうございます.
LINQは powershellだと 無理やり感があって,かえって使いにくい感じは ありますね



631 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 22:02:33.57 ID:vihcAie/.net]
Ruby なら、

reverse -> Array
reverse! -> self 破壊的変更

a = ["a", 2, true]
p a.reverse #=> [true, 2, "a"]
p a #=> ["a", 2, true] (変化なし)

a = ["a", 2, true]
p a.reverse! #=> [true, 2, "a"]
p a #=> [true, 2, "a"] 破壊的変更

632 名前:デフォルトの名無しさん [2022/12/05(月) 15:26:18.97 ID:9N6A06cG.net]
きっと とても初歩的なことだとは思うのですが

$a = "abc"
$job = start-job { write-host $a }
receive-job -Job $job # → 何も出力されない

これって スコープの問題なんでしょうか
{ブロック}の中の $aの中身を "abc"にしたいのですが

633 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 17:43:14.26 ID:sXIIIS0k.net]
$using:a
About_Remote_Variables

634 名前:デフォルトの名無しさん [2022/12/05(月) 18:59:35.95 ID:9N6A06cG.net]
>>622 ありがとうございます
ブロックの中の $a を $Using:$a と書けば望む動作になりました
まぁ、何でusingって名前なんだろ?とか
Remote Variablesとは言うけれど別にリモートじゃないし(?)など
まだ不思議な感じは残りますが…もうちょっと調べたり勉強してみます

635 名前:デフォルトの名無しさん [2022/12/05(月) 19:22:50.61 ID:9N6A06cG.net]
$a = "abc"
$job = start-job { param($str); write-host $str } -Arg $a
でも 受け渡せるんですね。

636 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 21:14:48.29 ID:Xw9Qnajp.net]
Start-Jobでスクリプトブロック実行すると
別プロセスのpowershell.exeが起動してそっちで動く。(少なくともPSv5.1では。)
イメージとしてはコンソールや.ps1から「powershell.exe -f 他スクリプト.ps1」で
他プロセスを動かすくらいに別スコープだと思ってればいいと思う。

637 名前:デフォルトの名無しさん [2022/12/06(火) 03:20:51.26 ID:PbeCdWM3.net]
>>599
マイクロソフトのサポートにはとんでもない質問が大量に押し寄せる。

Windows Serverが起動しなくなった。電源が入ってないけど、Windowsのバグに違いないやら、しつこい嫌がらせやら、女に変なことを聞く変態やらと3万円も払って電話してくる。

638 名前:デフォルトの名無しさん [2022/12/06(火) 03:22:42.62 ID:PbeCdWM3.net]
PowerShellのバージョンがわかりませんのでどうすればいいですか?

こんなのを3万円も払って教えてもらうのが日本人

639 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 06:55:15.41 ID:yvaEv+2c.net]
一時片手間にカスタマサポートやってたことあるけど結構トンデモ問合せは多い
いろいろ聞いて行ったら他社の製品の問合せだったなんてオチすらあるし

640 名前:デフォルトの名無しさん [2022/12/06(火) 07:03:21.20 ID:wGOv2qdu.net]
>>625 そういうイメージ…ということでわりと納得.
同じことですが…では、ブロックの中で処理中に 変数に何かを入れても
それは、receiveするまでは 取り出せないってことか…



641 名前:デフォルトの名無しさん mailto:sage [2022/12/19(月) 19:06:25.36 ID:ayS530mj.net]
functionの中でhashtable @{}を作成してその中にウィンドウと紐付いてるハンドルオブジェクトやらを入れて返して
functionの呼び出し側で使おうとしたら無効なオブジェクトやら何やらのエラーが出てまともに使えなかった
PSObjectに変換して返したらエラーは出なくなったがこれ何だろう
怖すぎなんだが

642 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 00:09:46.82 ID:5pWmYDMC.net]
参照型/値型とかその辺の理解は問題ない?
とエスパーしてみる

643 名前:デフォルトの名無しさん mailto:sage [2022/12/23(金) 17:58:06.26 ID:F84mgbO0.net]
紐付けてるオブジェクトやらは.NETの参照型ね
値型だったら恐らくこの問題は起きてないだろうし
PSCustomObjectのプロパティとhashtableの値への紐付けでオブジェクトの生存期間に差異があるようにしか見えないから
functionから戻る時に何か想定外な事が起きてるんだろうなあ

644 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 14:24:53.22 ID:r8IxISV7.net]
コマンド・プロンプトも一切つかったことない状況から
powershellの勉強最近始めたけど難しいね

先ず参考書籍少なすぎ
何から手を付けたらいいのか全くわからん

先輩諸兄はどんな感じで習得していったの?

645 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 14:35:15.62 ID:ZD0ehGa/.net]
必要に迫られて色々とネットで調べて解決策を探し回る
そのコードから理解できない部分や言語の基本を調べる(変数や表示の仕方とか色々と)
という泥縄式だな

646 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 15:00:48.14 ID:r8IxISV7.net]
ネットしかないのか、仕方ないな、、、

しばらくは苦しみながら覚えるしかないかぁ

647 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 15:45:26.24 ID:/tVTIbQ7.net]
Get-Help about_
で出てくるのを一通り読んどきゃ何も苦しむことなんてないだろ

648 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 17:56:17.16 ID:0E4juWNJ.net]
ある程度使えるようになってから書籍買って読んだら
「大体全部知ってるわ」ってなったから
ネットだけでもいけるだろ

649 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 18:20:49.07 ID:U6V4cNSL.net]
他の言語と違って思い込みて書かれた間違った記事が多いから警戒すべし

650 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 20:24:26.94 ID:jYPDn/gh.net]
ほかの開発言語やシェルプログラミングにまったく疎い状況からPoweshellで入門してゴリゴリ使いこなしてやろうという路線は正直筋が悪いと思う
とはいえ勉強のためにPythonあたりの入門書をやれとも言いづらい
やはり泥縄式かな



651 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 21:27:46.01 ID:T5RPj38W.net]
>>639
一応VBAとGASが多少できるなったから他の言語も余裕かな、っておもって
PowerShellに手を出したら苦戦してる感じ

一通り基礎を覚えたら実践的に色々と試してみたいけど
powershellは色々覚えることが多すぎてメンドイ、、、

652 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 21:53:19.53 ID:fSsOcWwB.net]
変数?配列?何それ状態から始めてる初心者だけど基本的な用語がわからないから検索にも苦労する
セオリーもわからないから無駄にあれこれやってあとはコメント書きまくってグチャグチャになってる

653 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 22:04:55.23 ID:vIW/uBHA.net]
PythonもJavaも全くコード書けないノンプログラマだけどPowerShellは分かり易い気がする

654 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 22:58:59.38 ID:B+wJL+Im.net]
素人だけど、「PowerShell実践ガイドブック」っていう本は、素人には理解しにくい仕様とかを理解するのにとても役に立った
ただ、いろいろ冗長でちょっと読みづらい本ではある

655 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 01:26:32.00 ID:++xg0WRh.net]
PowerShell上で cmd /C xxxx を使うのが最善という結論に到達する
こういうのでいいんだよ的な

656 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 14:16:21.29 ID:dmcJ6Qpo.net]
ヘルプが出来が良いので何も要らない気はするけど
ハック的なモノや中でどう動いてるとかはpowershellexplained、実用的な書法はPowerShellGetで人気のあるやつ読むとか

657 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 21:46:25.70 ID:D+6cXnGF.net]
PowerShell は配列周りがトリッキーなのを除けば比較的まともな言語だと思う

658 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 01:00:35.68 ID:036NTvOT.net]
覚え始めは Microsoft docs を探し、それでわからなければ個人の解説記事を探した
スクリプトを書くようになってからは about_ から知りたいことを追いかける事が増えた

上でも名前が上がった「PowerShell実践ガイドブック」は、ある程度できるようになってから読んだが
何もわからない状態で読むにも良いと思う
第2章までで基本的なことが身につく

659 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 15:03:24.27 ID:867KtYrP.net]
パワーシェルの勉強始めたいんですが、学習に良いサイトありませんか?

660 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 16:02:07.28 ID:HWC94+Gl.net]
>>648
実はこのスレだったりする
1つのサイト覗くよりたまにぜんぜん知らん知識が入ってくる
過去ログおすすめ



661 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 16:06:45.35 ID:HWC94+Gl.net]
あと間違った情報書く奴には必ず突っ込み入るから間違えたまま覚え事故も起き難くなる仕様だと個人的には思ってる

662 名前:デフォルトの名無しさん mailto:sage [2022/12/29(木) 16:17:56.35 ID:HWC94+Gl.net]
powershell何某でぐぐって出てくる日本語の情報はなぜか間違ってたり思い込みで書かれた記事が放置されてて悲しい
情報源としてはstackoverflow辺りをまず探すのが安定
Microsoftの知りたかったことの全て系は役には立つけど知りたい事全てを補完できるわけではない

663 名前:デフォルトの名無しさん [2023/01/01(日) 00:27:17.84 ID:CeabMe2h.net]
やり方が多すぎて失敗しているものだからな

664 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 15:47:50.12 ID:naMqCIBL.net]
リリース当時は学生だったからPIAをむさぼり読んでたな、楽しい本だった
挙動で間違いやすいのは(スコープを除けば)基本パイプ周りだから、
パイプ使わないスクリプトを書いてけば初手で躓く要素は少ないと思う

665 名前:デフォルトの名無しさん [2023/01/03(火) 21:14:49.48 ID:AaMOQNR6.net]
>>653
シェルスクリプトを知っているのが前提だと思っていたが?

666 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 21:46:27.47 ID:cXTWG1PB.net]
パイプで間違う要素なんてあったっけ?
むしろ配列まわりの方が間違いやすい気がするが...

667 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 22:10:05.90 ID:naMqCIBL.net]
前提は知らんけど、配列回りで間違えるのがパイプ使ってる時では?

668 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 23:27:08.09 ID:cXTWG1PB.net]
>>656
いやパイプ関係なく PowerShell の配列は色々トリッキー

例えば複数のオブジェクトを配列で返すコマンドレットが要素が1つだけだとオブジェクト自体を返したりするとか
https://qiita.com/hitsumabushi845/items/fe4219ba9daa34f541c2

switch文に配列与えたら各要素を順番に適用する(要は勝手にループする)とか
https://step-learn.com/article/powershell/076-switch-loop.html

669 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 00:46:17.26 ID:v02S4T2G.net]
>>657
まさに前者をパイプ周り(のための)の仕様だって認識してる
カンマ演算子の使い方は知らないとできないけど、型指定しない変数に代入して原因がわからないってことはないでしょ
後者はforやforeach省略出来て便利ってだけで、トリッキーだとは思ったことないわ

670 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 03:45:39.75 ID:jtN0WhrQ.net]
switchの評価式に配列をぶち込む発想は他の言語経験有りなら起きないから無害だけど
function戻りの配列の扱いは慣れてても混乱するから特殊な事情が無い限りPSObjectや別のコンテナに入れて返す(脳死)



671 名前:デフォルトの名無しさん mailto:sage [2023/01/06(金) 23:20:27.35 ID:kugWcEru.net]
どなたか助けてください。相談です。

一つのファイルに置換したい複数の数列(0.005→0.000、0.006→0.001、0.007→0.002、etc‥)が存在した場合、うまく自動で全て置換する方法はないでしょうか?

下の置換のコマンドを繰り返し使用してるのですが明らかに非効率で何かうまくできないか考えてます。

(Get-Content ファイル名) | foreach { $_ -replace "置換前","置換後" } | Set-Content ファイル名

672 名前:デフォルトの名無しさん [2023/01/07(土) 08:57:10.32 ID:rjY6PjFx.net]
>>660
$hash = @{ 0.005 = 0.000; 0.006 = 0.001; 0.007 = 0.002 }
$hash[0.006]

とすると 0.001 が返るから、"置換後" にあたる部分を $hash["置換前"] とすればいい。
詳しくはハッシュとかハッシュテーブルでググれ

673 名前:デフォルトの名無しさん mailto:sage [2023/01/07(土) 14:47:12.03 ID:tZDUx9Ho.net]
ver6.0以降だとスクリプトブロック使えるから、一応こんな感じで一度にできることはできる

"対象の数値" -replace "^[-+]?[0-9]+[.]?[0-9]*", { [decimal]$_.value - 差分の数値 }

数字の足し引きならCSVデータとかで読みこんで処理した方がいいとは思うけど

674 名前:デフォルトの名無しさん mailto:sage [2023/01/07(土) 15:16:28.02 ID:fgMMnpAg.net]
>>661,662
すげー。ありがとうございます。

675 名前:デフォルトの名無しさん [2023/01/08(日) 03:23:42.25 ID:nZw+zsKC.net]
0.005を足した数値にしたいと書いてないのが不思議

質問者は聞き方がわかっていない

676 名前:デフォルトの名無しさん mailto:sage [2023/01/08(日) 09:53:58.06 ID:n7Qx+Bf+.net]
ちなみに、v5でも[regex]::Replace()のMatchEvaluatorにスクリプトブロックを渡せるから
>>662より手軽さが劣るけど同様の事ができる。

677 名前:デフォルトの名無しさん [2023/01/09(月) 14:33:22.12 ID:2QUdKeZJ.net]
サブディレクトリ以下の全てのファイルに対し、ゾーンIDの削除をしたいのですが、
各ファイルのゾーンIDは
Get-ChildItem -Recurse -File | ?{
$_ | Get-Item -Stream Zone.Identifier -ErrorAction Ignore;
} | Remove-Item -Stream Zone.Identifier;
に書けばできるみたいです。

powershell の勉強のため、下記のような書き方だと、どのように書けばできるのでしょうか?
$itemList = Get-ChildItem $targetFolder -Recurse;
foreach($item in $itemList){
Get-Item -Stream Zone.Identifier -ErrorAction Ignore;
}

678 名前:デフォルトの名無しさん mailto:sage [2023/01/09(月) 15:34:37.62 ID:2yNmR2Eh.net]
>>666
こういうこと?
foreach($item in $itemList){
if (Get-Item -LiteralPath $item.FullName -Stream Zone.Identifier -ErrorAction Ignore) {
Remove-Item -LiteralPath $item.FullName -Stream Zone.Identifier
}
}
もちろん$itemはLiteralPathの代わりにパイプでオブジェクトごと渡してもいいと思う

679 名前:デフォルトの名無しさん [2023/01/09(月) 15:52:05.35 ID:2QUdKeZJ.net]
>>667
ありがとうございます。
勉強になりました。

680 名前:デフォルトの名無しさん mailto:sage [2023/01/10(火) 05:44:39.22 ID:bjV4/8ri.net]
例えば、Ruby で、再帰的にフォルダのサイズを求めてみると、

require 'win32ole'
fso = WIN32OLE.new( 'Scripting.FileSystemObject' )

# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠しフォルダ・ファイルを除く。
# /**/* で再帰的に、以下の全てのフォルダ・ファイルを走査する
dir_path = "C:/Users/Owner/Documents/**/*"

target_dirs = Dir.glob( dir_path )
.select { |full_path| File.directory?( full_path ) } # フォルダのみ
.each do |folder|
folder_obj = fso.GetFolder( folder )

puts File.expand_path( folder_obj.path ) # \ を、/ に変換する
puts "#{ folder_obj.name } : #{ folder_obj.size }"
end

出力
C:/Users/Owner/Documents/a
a : 14231
C:/Users/Owner/Documents/a/b
b : 4666

# next で、次の繰り返しに進む事もできるが、
# select みたいなフィルターで絞り込む方が、可読性が高い
Dir.glob( dir_path ).each do |full_path|
next unless File.directory?( full_path ) # フォルダだけを処理する

puts full_path
end



681 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 12:43:06.27 ID:y+pH12Ov.net]
Tree /fとget-childitem select-object Full name,を組み合わせたデータがほしいのですが、ご存知の方、ご教示願います。

682 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 18:21:06.24 ID:g43oPRJS.net]
>>670
名前の通り再帰処理でフォルダのツリーデータ構造を作ってから出力する事になる。
powershellの関数呼び出しは100ぐらいのネストでスタックオーバーフローするので、
ある程度動作確認が出来たら再帰処理を配列とループに変換するか、
C#なりで書き直す必要があるかも。

683 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 23:52:13.30 ID:Aq+myoAC.net]
>>670
https://www.powershellgallery.com/packages/Show-Tree/1.0.0
146行目を書き換え Write-Output ("{0}+---{1}" -f $start, ($PSDriveFullPath))

684 名前:670 mailto:sage [2023/01/24(火) 00:18:36.99 ID:splC6Inp.net]
>>672
ありがとうございますm(_ _)m。できました。スクリプトの実行が無効になっているため、読み込むことができません。と出ましたが、ポリシーを変更してできました。
>>671
ありがとうございます。制限があるのですね。

685 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 20:31:25.08 ID:s0xdk+qH.net]
@("2023/01/01,123","2023-01-02,abc","2023 01 03,あいう") | convertfrom-string -delimiter "," | sort-object p1 -descending | convertto-csv -notypeinformation
"yyyy/MM/dd"っぽいと勝手に日付時間の形式に変換されるのですがされないようにできますか?
windows10 PSVersion 5.1.19041.2364

686 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 21:02:50.26 ID:s0xdk+qH.net]
@("`"2023/01/01`",`"123`"","`"2023/01/02`",`"abc`"","`"2023/01/03`",`"あいう`"") | `
convertfrom-string -delimiter "," | sort-object p1 -descending | foreach-object {"$($_.p1),$($_.p2)"}
こうすれば出来たっぽいけど何かめんどくさい

687 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 21:55:45.34 ID:Igk1TEx9.net]
>>674
日付でソートするならばConvertFrom-Stringによる日付処理のままDateTime型で扱うのが正しいのでは?

688 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 22:42:40.57 ID:s0xdk+qH.net]
csv出力する際に "2023/01/01" が "2023/01/01 00:00:00" となるのを避けたいということです
ソート部分は別の処理をするかもしれないです
わかり難くてすいません
あとは tostring() で変換し直すかくらいでしょうか

689 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 23:16:16.35 ID:4iQ2gNuN.net]
>>674
676 の方針で書き換え量少なめパターン
@("2023/01/01,123","2023-01-02,abc","2023 01 03,あいう") | convertfrom-string -delimiter "," | % { $_.P1 = $_.P1.ToShortDateString() ; $_ } | sort-object p1 -descending | convertto-csv -notypeinformation

Convertfrom-String を使いつつ変換したくないという裏には深い事情がありそうだが
その深い事情を無視していいなら新しくオブジェクトを作るのが楽かな
@("2023/01/01,123","2023-01-02,abc","2023 01 03,あいう") | %{ [PSCustomObject] @{ 'Date'=$_.split(',')[0]; 'content'=$_.split(',')[1] } }

690 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 23:25:37.64 ID:KpfZjU7w.net]
自分もConvertfrom-Stringさえ使わなければ楽だと思うが、
当初の質問通りConvertfrom-StringでDateTime型への自動変換を避ける方法、
という事なら
$a = @("2023/01/01,123", "2023-01-02,abc", "2023 01 03,あいう")
$t = @"
{p1*:2023/01/01},{p2:123}
{p1*:*},{p2:*}
"@
$a | ConvertFrom-String -TemplateContent $t

p1 p2
-- --
2023/01/01 123
2023-01-02 abc
2023 01 03 あいう



691 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 23:59:48.39 ID:s0xdk+qH.net]
>>678−679
ありがとうございます、参考にさせて頂きます
convertfrom-string を使っているのは前に使って動いてるからヨシッ!の精神と圧倒的な知識不足の為です

692 名前:674 mailto:sage [2023/02/09(木) 22:15:00.08 ID:Zgr5da8a.net]
PSCustomObject なんて便利なものがあるんですね
おかげで Convertfrom-String も使わないで済むようになり
日付の自動変換もされなくなりました、ありがとうございました

693 名前:デフォルトの名無しさん [2023/02/09(木) 23:20:46.77 ID:wH9zoD6W.net]
本来、肩こりを和らげるマッサージの福利厚生の充実よりも、肩こりしない環境にすることが重要なわけだが、
PowerShellやってる人は、肩こりを和らげるマッサージを喜ぶ傾向が顕著

694 名前:デフォルトの名無しさん mailto:sage [2023/02/09(木) 23:53:02.68 ID:KDi1Xk2q.net]
秀逸な例えをしたと思ってそう

695 名前:デフォルトの名無しさん mailto:sage [2023/02/10(金) 10:20:51.76 ID:UXgVE9re.net]
肩こりしない環境ってなんだろ
コマンドプロンプト?

696 名前:デフォルトの名無しさん mailto:sage [2023/02/10(金) 10:29:00.89 ID:SZzF5oES.net]
自分の慣れてる環境のことだろ

697 名前:デフォルトの名無しさん mailto:sage [2023/02/10(金) 10:36:58.88 ID:SshlofV9.net]
rubyってことかもな
これを言ったのがいつも突然出てくるruby野郎だったら間違いなくrubyだと言える

698 名前:デフォルトの名無しさん mailto:sage [2023/02/10(金) 11:52:35.79 ID:EJFy9nhI.net]
肩こりにはCUIはダメ
ぐいぐいするのが効くでしょう(秀逸)

699 名前:デフォルトの名無しさん mailto:sage [2023/02/10(金) 14:00:16.56 ID:fdH5JkI3.net]
Ruby では「2023/01/01, 2023-01-02, 2023 01 03」の内、
最後の形式だけ、Date.parse で日付オブジェクトに変換できない

日付オブジェクトに変換せず、文字列のままソートするのが簡単

date_texts = %w(2023/01/03 2023/01/01 2023/01/02)
p date_texts.sort # 日付の文字列でソート

#=> ["2023/01/01", "2023/01/02", "2023/01/03"]

# 要素内に空白を含むので、\ で要素内の空白をエスケープする
date_texts = %w(2023/01/03\ あいう 2023/01/01\ 123 2023/01/02\ abc)
p date_texts.sort # 全体の文字列でソート

#=> ["2023/01/01 123", "2023/01/02 abc", "2023/01/03 あいう"]

700 名前:688 mailto:sage [2023/02/10(金) 14:01:04.70 ID:fdH5JkI3.net]
Ruby で仮に、2列のCSV テキストとみなした場合でも、
sort_by で任意の列のソート順で、行をソートできる

require 'csv'

input = <<"EOT"
2023/01/03 あいう
2023/01/01 123
2023/01/02 abc
EOT

options = { col_sep:



701 名前: " " } # 空白区切り

p input_ary = CSV.parse( input, options ) # 2次元配列
#=> [ ["2023/01/03", "あいう"], ["2023/01/01", "123"], ["2023/01/02", "abc"] ]

# 日付列でソートする
p result_ary = input_ary.sort_by{ |row| row[ 0 ] }.map( &:itself )
#=> [ ["2023/01/01", "123"], ["2023/01/02", "abc"], ["2023/01/03", "あいう"] ]

# 2次元配列を、CSV 文字列に変換する
puts csv_str = result_ary.map( &:to_csv ).join

カンマ区切りで出力
2023/01/01,123
2023/01/02,abc
2023/01/03,あいう
[]
[ここ壊れてます]

702 名前:688 mailto:sage [2023/02/10(金) 17:56:45.48 ID:A9tz9okE.net]
Ruby の日付オブジェクトには、数十種類の書式がある

require 'date'

# デフォルトの書式は、下と同じ
puts date = Date.parse( '2023/01/01' )
#=> 2023-01-01

# %F: %Y-%m-%d と同等 (ISO 8601の日付フォーマット)
puts date.strftime( '%F' )
#=> 2023-01-01

# %T: 24時間制の時刻。%H:%M:%S と同等
puts date.strftime( '%F %T' )
#=> 2023-01-01 00:00:00

703 名前:デフォルトの名無しさん [2023/02/10(金) 21:41:15.34 ID:TDizb0jh.net]
目的と手段があべこべになってるって意味だよ、察しろよ

704 名前:デフォルトの名無しさん mailto:sage [2023/02/12(日) 21:55:38.94 ID:pO8qooq/.net]
確かにRubyを使うこと自体が目的になってる奴いるよな

705 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 17:44:45.89 ID:WNIjE3rx.net]
Excelを操作しようとしたら酷く遅い。
これは工夫が足りない感じ?

やりたいのは3000行、100列ぐらいに関数が詰まってて、その中でエラーとなってるセルを見つけること。
関数が別のブックを参照してて、その別ブックは日々自動生成されるからその生成されかたによってはどうしてもエラーになってしまう。

VBAでも出来るけど、他と併せて考えるとPowerShell向きの処理だから、これで始めたのに。
PowerShellからVBAのプロシージャ呼び出せば、この部分の処理は一瞬だけど、それは本末転倒だし。

706 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 18:06:52.69 ID:nz9Z1NDi.net]
>>693
COMのIDispatch経由だからVBAと比較すれば当然遅くなるよ
一個一個のセルを見て回るのなんかは特に遅い
powershell自体も遅いから遅さはさらに加速する
ワークブックを開けてるならCOMからVBAコードを動的に流し込んで処理させた方が全然速いかもしれない
CodeModule.InsertLines辺りでぐぐれば出てくると思う

707 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 21:45:54.83 ID:RKENxwK/.net]
全セルまとめて取ればどんな言語でも早いんじゃない?

708 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 01:42:49.14 ID:15y14fHP.net]
数式のチェックをするということならusedrange.formulaとかで二次元配列に入れてしまえば速いだろうね

709 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 07:28:37.93 ID:xSIr/CQB.net]
セルの値をチェックしたいのか数式をチェックしたいのかもわからんしそもそも既に作ってあるならその遅い部分のコード晒せばいいのに

としか思わん

710 名前:693 mailto:sage [2023/02/21(火) 12:34:29.62 ID:jIGEezda.net]
PowerShellでRangeに対してforeachを使ったら糞遅かったが、Range.Cellsに対して使ったら爆速でした。

VBAで.Cellsを付けないことは無いが、PowerShellだと書き方が変わるから気付かんかった。

ソースは仕事で晒せないが、記憶を頼りに再現したのを後で書くよ。



711 名前:デフォルトの名無しさん mailto:sage [2023/02/21(火) 15:29:46.97 ID:y0oxbjUQ.net]
やりたい内容によってはImportExcelとか使うといいかもしれない

712 名前:デフォルトの名無しさん mailto:sage [2023/02/21(火) 17:16:31.11 ID:mQxVjbPG.net]
Excel操作は真面目にやるとCOMの参照の管理と解放が大変で避けちゃう。
完全に自分用なら雑でもいいんだけどさ。
VBScriptくらいに気楽にやらせて欲しい。

713 名前:デフォルトの名無しさん mailto:sage [2023/02/21(火) 18:44:18.75 ID:7Z23bFwT.net]
あららSnoverさん去年退職しちゃったのか、、、
言語的には成熟してるし問題はないんだろうけど、残念だな

714 名前:デフォルトの名無しさん [2023/02/21(火) 19:36:25.83 ID:VTx8hARX.net]
>>698
素直にExcel VBAを書いた方が安全だよ。

715 名前:デフォルトの名無しさん mailto:sage [2023/02/24(金) 13:12:14.11 ID:xAv3d2xt.net]
gci -recでレジストリ検索出来るの便利だなって一昨日思った

716 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 21:04:03.19 ID:5eoJ3K3o.net]
大規模な PowerShell モジュールは Install-Module での導入がオススメです
https://jpwinsup.github.io/blog/2023/02/27/UserInterfaceAndApps/PowerShell/PowerShell-ImportModule-FunctionOverflow/

Windows PowerShell では、 1 セッションのうち利用できる関数 (Function) の数の上限を変数 $MaximumFunctionCount にて制御しており、既定では 4096 となります。
Import-Module にて PowerShell モジュールを導入しますと、この $MaximumFunctionCount で管理する関数の数にカウントされ 4096 を超えた場合にエラーが生じます。

Install-Module では、本事象は発生しませんので、Install-Module を、ご利用いただくことを推奨いたします。
単機能のモジュールであれば、今回のような制限が生じるほど大規模な関数 (Function) 数とならないですが、クラウド製品に対し提供されるモジュールは、大規模な関数数となる傾向がございます。
クラウド製品に対する PowerShell モジュールのご利用にはインターネット (オンライン) への接続が必須となりますため、Install-Module も利用可能でございます。

717 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 21:55:58.18 ID:NXRHGwBO.net]
vscodeのプラグインどうにかしてくれないかな
せめて参照関連はちゃんとして欲しい

718 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 23:08:46.00 ID:XEMkLhh3.net]
PowerShellの構文が分からなくなったときに今話題のChatGPTで質問してみたら
的確な回答返ってきてすげぇ助かったわ。もうパソコン教室は廃業だろこれ

719 名前:デフォルトの名無しさん mailto:sage [2023/03/10(金) 20:16:52.26 ID:qXeg3GIX.net]
ai のコード生成って結構すごいよね
コパイロット入れてるんだが、マジで打とうとしたコード先読みしてくる
インテリセンスみたいな数文字打って残りの補完じゃなくて、まるまる予測してきて更に当たってるっていう

720 名前:デフォルトの名無しさん mailto:sage [2023/03/15(水) 14:42:36.44 ID:o8REigww.net]
ここでいいですか

ttps://qiita.com/Midoliy/items/a033b763399c242dc5c5
C#をスクリプト言語として利用する方法

PowerShell 7.3.3 で、dotnet tool install -g dotnet-script を入力してもエラーになります↓

C:\Users\UserName0\AppData\Local\Temp\47744ec9-ca71-4312-b0e8-3f8bd18d5776\restore.csproj : error NU1101: パッケージ dotnet-scri
pt が見つかりません。ソース Microsoft Visual Studio Offline Packages には、この ID のパッケージが存在しません。
ツール パッケージを復元できませんでした。
ツール 'dotnet-script' をインストールできませんでした。この失敗は次の原因で生じた可能性があります。

* プレビュー リリースをインストールしようとしており、--version オプションを使用してバージョンを指定しなかった。
* この名前のパッケージが見つかったが、.NET ツールではなかった。
* 恐らくインターネットの接続の問題で、必須の NuGet フィードにアクセスできない。
* ツールの名前の誤入力。

パッケージの名前付けの強制を含む他の理由については、https://aka.ms/failure-installing-tool にアクセスしてください



721 名前:デフォルトの名無しさん mailto:sage [2023/03/15(水) 15:33:19.80 ID:IBd2LSQO.net]
そこ見てダメなら諦めたら
特にメリットないし

722 名前:デフォルトの名無しさん mailto:sage [2023/03/15(水) 21:33:00.90 ID:e2aqyp6Z.net]
>>708
https://stackoverflow.com/questions/58012732/unable-to-find-package-no-packages-exist-with-this-id-in-source-net-core
https://github.com/dotnet/sdk/issues/13429
を参考に英語のエラーメッセージでweb検索するとか。

723 名前:デフォルトの名無しさん mailto:sage [2023/03/17(金) 11:52:05.75 ID:1OmGmSd0.net]
>>707
コパイロットとやらはインタラクティブシェルでも使える?興味あり
gnureadlineうんこpsreadline最強と思ってたら思わぬ伏兵が…

bingのchatgptが話題になってるし、標準で付いてもおかしくないけど

724 名前:デフォルトの名無しさん mailto:sage [2023/03/17(金) 14:15:57.93 ID:piFUHGnm.net]
インタラクティブ(履歴)/スクリプトでもヒューリスティックにコンテキストを読んでくれるのは新しいね、もはや補完ではない気がするが

ところで-UseFussyが超便利

725 名前:デフォルトの名無しさん mailto:sage [2023/03/19(日) 10:19:36.25 ID:+AVX1Caz.net]
https://www.powershellgallery.com/packages?q=Copilot

726 名前:デフォルトの名無しさん mailto:sage [2023/03/27(月) 09:23:21.18 ID:qNF02T37.net]
f1で直近コマンドの、Alt-hで直近パラメータのヘルプがコマンドラインを汚さずにチラ見出来るけど
常時表示しておきたい

727 名前:デフォルトの名無しさん mailto:sage [2023/03/28(火) 15:38:45.60 ID:vZrgWFuJ.net]
>>714
https://learn.microsoft.com/en-us/powershell/scripting/learn/shell/dynamic-help?view=powershell-7.4

フックされてるShowCommandHelpあたりを改造してみては

728 名前:デフォルトの名無しさん mailto:sage [2023/03/31(金) 09:29:33.35 ID:Hum0KYCd.net]
コマンドプロンプトのstartコマンドのように
新しいウィンドウを作成せず、使うプロセッサを指定して起動するにはどうすれば良いですか

729 名前:デフォルトの名無しさん [2023/03/31(金) 10:04:55.21 ID:oEDBXBHf.net]
Add-Type によって、自作のクラスを使う処理を書いて、一応ちゃんと動くのですが
同じことを 何度もやろうとすると 二度目以降は「The type 〜 already exists.」と出て止まってしまいます.
そこで「既に そのタイプが存在しているかどうか」をチェックしたいのですが、これってどう書くんでしょうか

730 名前:デフォルトの名無しさん mailto:sage [2023/03/31(金) 22:12:52.48 ID:yFMegc6R.net]
>>717
こんなん
Add-Type @'
public class MyClass {
public void test() {
}
}
'@

if ("MyClass" -as [type]) {
"MyClass is exist"
}



731 名前:デフォルトの名無しさん mailto:sage [2023/03/31(金) 22:21:06.75 ID:bSGiEzAG.net]
>>716
(Start-Process -PassThru foo.exe).ProcessorAffinity = xxx

xxxの所で使いたいプロセッサを指定する

Start-Process -PassThru
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/start-process#-passthru
Process.ProcessorAffinity プロパティ
https://learn.microsoft.com/ja-jp/dotnet/api/system.diagnostics.process.processoraffinity

732 名前:デフォルトの名無しさん mailto:sage [2023/03/31(金) 22:35:53.19 ID:yFMegc6R.net]
>>719
>新しいウィンドウを作成せず
という指定が抜けてね?

733 名前:716 mailto:sage [2023/03/31(金) 22:58:55.98 ID:Hum0KYCd.net]
>>717
単純に try { [クラス] } catch { Add-Type 〜 } とか、知らんけど

>>719
Start-Processを使わない場合のように新しいウィンドウなしで起動したいです

734 名前:デフォルトの名無しさん mailto:sage [2023/03/31(金) 23:29:03.95 ID:bSGiEzAG.net]
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/start-process#-nonewwindow
-NoNewWindow
現在のコンソール ウィンドウで新しいプロセスを開始します。 Windows では、既定で PowerShell によって新しいウィンドウが開きます。

735 名前:716 mailto:sage [2023/03/31(金) 23:54:48.86 ID:Hum0KYCd.net]
>>722
最初はそれでいいと思ったんですが、コンソールの取り合いになります
(Start-Process netsh.exe -NoNewWindow とかで試すとわかりますが、くれぐれもご注意を)
取り合いにならないように -Wait も指定して
(Start-Process netsh.exe -NoNewWindow -Wait -PassThuru).ProcessorAffinity = xxx
とすると、-Wait が効きすぎて ProcessorAffinity をセットできないという罠

736 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 00:12:16.16 ID:rM0w1xSL.net]
つまり.NETのProcessorAffinityは存在するプロセスにしか適用できないから無理でいんじゃね
知らんけどWin32APIとかで別の方法を探った方がいいんじゃね

737 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 00:25:58.89 ID:rM0w1xSL.net]
たとえばWin32APIのCreateProcessにCREATE_SUSPENDEDというフラグがある
プロセスをサスペンド状態で作成してaffinity設定してからResumeThreadで開始
これでいけるんじゃね

738 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 03:49:24.51 ID:tD9Ph5o/.net]
Start-Jobの中で実行したら上手いこと裏でやってくれないだろうか

739 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 09:42:35.62 ID:nbrNF8T0.net]
Start-Process -NoNewWindow cmd.exe "/c start /affinity xxx /b foo.exe"

これくらいしか思い浮かばなかった

740 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 10:09:29.22 ID:rM0w1xSL.net]
定義が長くなったからこっちに貼り付けたよ
https://ideone.com/LOSuzD
使い方
bool [Win32API]::CreateProcessWithAffinity(appname, cmdline, affinity)
affinityはプロセスに直接設定するAPIが見つからなかったのでGet-ProcessをResumeThread前に呼び出して指定してる
サンプルはcmdを呼び出してpingをlocalhostに10回打ってる間にプロセス名とaffinity値を出してる



741 名前:727 mailto:sage [2023/04/01(土) 10:22:16.44 ID:nbrNF8T0.net]
Start-Process -NoNewWindow -Wait cmd.exe "/c start /affinity xxx /b foo.exe"
こうだった

742 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 10:27:57.30 ID:rM0w1xSL.net]
寝ぼけてた。コールバックの部分下だけで良かったわ
System.Diagnostics.Process.GetProcessById(pInfo.dwProcessId).ProcessorAffinity = (IntPtr)affinity;

743 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 10:32:18.54 ID:rM0w1xSL.net]
でもう一箇所、appnameに$nullを指定してもC#側型宣言で""に変換されてしまうので、CreateProcessの直前に下を追加しとくとcmdlineだけで動く
if (appname == "") { appname = null; }

744 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 10:52:36.56 ID:NrUMzMDg.net]
これパイプすればいいんだよ
ポイントは () を使わないこと

(Start-Process).ProcessorAffinity = xxx は NG
Start-Process | ForEach-Object {} で OK
(Start-Process) | ForEach-Object {} は NG
& { Start-Process } | ForEach-Object {} でも OK

745 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 11:09:34.29 ID:rM0w1xSL.net]
>>732
これ正解じゃない?
遠回りしたねえ

746 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 11:10:53.22 ID:rM0w1xSL.net]
Start-Process cmd.exe -ArgumentList '/c echo hello world & ping 127.0.0.1 -n 10' -NoNewWindow -PassThru | %{ $_.ProcessorAffinity = 1; $_ | select Name, ProcessorAffinity }

747 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 14:38:06.95 ID:khXUWf7f.net]
Start-Process cmd.exe -NoNewWindow -PassThru | % { $_.ProcessorAffinity = 1 } だと困る
Start-Process cmd.exe -NoNewWindow -PassThru -Wait | % { $_.ProcessorAffinity = 1 } か
Start-Process cmd.exe -NoNewWindow -PassThru | % { $_.ProcessorAffinity = 1; Wait-Process -Id $_.Id }

748 名前:デフォルトの名無しさん [2023/04/01(土) 16:54:32.28 ID:SzOWT/hN.net]
717です. 反応してくださったかた ありがとうございました

>>718
if ("MyClass" -as [type]) → なるほど!…これでした!

>>721
私も,とりあえずは
try{ [MyClass] >$null } catch{ Add-Type -Path "〜.cs" >$null }
で 済ませていたのですが
例外に たよる書き方は,なんとなくカッコ悪い感じがして(笑)

749 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 21:56:00.86 ID:sdpm0Gxz.net]
>>716
(Start-Process -FilePath 〜〜〜 -ArgumentList 〜〜〜 -WindowStyle Hidden

750 名前: -PassThru).ProcessorAffinity = 1 []
[ここ壊れてます]



751 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 22:32:49.48 ID:khXUWf7f.net]
それでは Start-Process を使わない場合と違って入力も出力もできない

752 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 22:58:19.34 ID:sdpm0Gxz.net]
あ〜、
> コマンドプロンプトのstartコマンドのように
> 新しいウィンドウを作成せず、使うプロセッサを指定して起動するにはどうすれば良いですか
というか
 新しいウィンドウを作成せず、
 コマンドプロンプトのstartコマンドのように使うプロセッサを指定して起動するにはどうすれば良いですか
という感じか。であればこれまでに出てた回答の方が正しいね。
ほぼ同じだけど自分なら
$proc = Start-Process -FilePath 〜 -NoNewWindow -PassThru; $proc.ProcessorAffinity = 1; $proc.WaitForExit();
みたいにするかなぁ。(でもStart-Processじゃなく小回りのきくProcessStartInfoを使うかな?)

753 名前:デフォルトの名無しさん mailto:sage [2023/04/02(日) 00:15:44.70 ID:l9+T+h5c.net]
質問です。
外部コマンドの標準出力やエラー出力を一緒に変数に入れたいのですが、
$result=外部コマンド.exe 2>&1
この式で一見動作はしてるようのですが、外部コマンドからエラー出力があった場合に赤い色が付き、powershell的なエラーメッセージも追加されてしまいます。
意図としては色とか追加メッセージとかは不要で、純粋に外部コマンドの標準出力やエラー出力を一緒に変数に取り込みたいだけなのですが、
そういう場合どう記述したら良いでしょうか。

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の方法か、もしくは>>776robocopyと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 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<313KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef