PowerShell -Part 4

レス数が950を超えています。1000を超えると書き込みができなくなります。
2020/01/01(水) 16:08:31.66ID:4oQ1Kxot
前スレ
PowerShell -Part 3
https://mevius.5ch.net/test/read.cgi/tech/1539074808/

次スレは>>980が立ててね!!
2021/01/09(土) 09:13:27.43ID:iGxXP/Ic
5.1はメンテしないってことか?
OSにデフォで入ってるバージョンなんだから直せよ
2021/01/09(土) 09:49:28.96ID:kPw1IBO3
いきなり直したらユーザースクリプトのバグが顕在化したりするだろ
どうでもいいようなスクリプトなら7に上げろよ
2021/01/09(土) 10:38:48.10ID:amtktMoR
どうでもいいスクリプトで問題回避できるなら7に上げなくてもいいんじゃね。
2021/01/09(土) 11:36:00.49ID:KQEfE/JM
>>874
ありがとうございます。
あげるのも怖いので別の方法にします。
2021/01/09(土) 11:45:27.45ID:vKxQ0OMt
>>877
そう言うのは>>875に言ってやれよ
2021/01/09(土) 16:15:40.54ID:WaDdsN2m
>>878
あげる?のではなくて別物なので併用できるけど。
5.1 → powershell.exe
7.x → pwsh.exe
2021/01/10(日) 04:54:33.84ID:3v4yt86U
以下の表記の意味を教えてください。
void Queue[TResponse](Google.Apis.Requests.IClientServiceRequest request, Google.Apis.Requests.BatchRequest+OnResponse`1[TResponse] callback)
メソッドに角カッコ?や、型指定に+や`1[TResponse]の意味がわかりませんでした。

$batch = New-Object Google.Apis.Requests.BatchRequst($service)
$batch.Queue
で表示される内容です。
2021/01/10(日) 08:11:25.80ID:a907yL+h
クラスのメンバーにクラスがある時は+になるんじゃなかったか
System.Environment+SpecialFolder みたいな

[TResponse]はジェネリックの型引数
`1は型引数を1つ取るって意味
883881
垢版 |
2021/01/10(日) 21:15:33.29ID:3v4yt86U
>>882
ありがとうございます。ジェネリックというのは知らなかったので調べてみます。
あと、その、Queue[TResponse]、というメソッドに型が付いている?のもジェネリック関連でしょうか。
884デフォルトの名無しさん
垢版 |
2021/01/12(火) 16:53:39.85ID:0UGYDHaB
pythonに飲み込まれるってマジ?
2021/01/12(火) 18:35:28.45ID:U7HouJQi
pythonが吐血しちゃいますよ
2021/01/13(水) 11:04:50.14ID:u12/DUzm
>>884
え?Pythonから.NET Framework扱えるようになるの?
2021/01/13(水) 12:04:34.41ID:JJnXAm01
知らんけど今はまだ使えないの?
2021/01/13(水) 12:35:42.75ID:u12/DUzm
ironpythonなら
2021/01/16(土) 08:03:53.11ID:4aouipyb
v7.1.1
https://github.com/PowerShell/PowerShell/releases/tag/v7.1.1
890デフォルトの名無しさん
垢版 |
2021/01/18(月) 22:22:09.29ID:6Ncg8pZo
【D:\】の全てのフォルダやファイルに対して、作成日時や最終アクセス日時などを設定したいのですが、
PS D:\> Get-ChildItem -Path "D:\" | Where-Object { $_ -is [System.IO.FileInfo] } | ForEach-Object { Set-ItemProperty $_.FullName -Name CreationTime -Value "2021/01/01 00:00:00" }
ではエラーが出ます。

何がいけないのでしょうか?
2021/01/18(月) 22:59:36.90ID:Pb59NPOt
例えば特定の一つのファイルやフォルダなら上手く行くとか
パイプを分解してどこでエラーになってるのかを突き止めるとか
丸投げするにしてもエラーメッセージ位は出してあげると答える人も喜ぶと思いますよ
2021/01/19(火) 02:44:39.14ID:m3MeBQ6p
1.D:\が存在していない
2.D:\へのアクセス権がない
3.D:\にあるファイルに読み取り専用属性が設定されてるものが混ざってる
どれかな?

Where-Object { $_ -is [System.IO.FileInfo] }抜き、ファイルに限定しないで実行したときは
フォルダへのアクセス時にエクスプローラー開いてると
”別のプロセスで使用されているためアクセスできません”となった(たとえ操作対象のフォルダを開いていなくても)

変更された日時を確認するためにエクスプローラー開いたまま実行してたりする?
893デフォルトの名無しさん
垢版 |
2021/01/19(火) 21:02:07.64ID:qrtgnbPs
# set the target folder path
$targetFolder = 'I:\';

# get all files including files in sub folders
$itemList = Get-ChildItem $targetFolder -Recurse;

foreach($item in $itemList){
$item.CreationTime = '2020/12/21 00:00:00'
}
なスクリプトで実行したらエラーなく出来ました。
お騒がせしてすみませんでした。
2021/01/19(火) 23:49:36.84ID:XQEllFmW
>>893
>>890
私の環境で実行したら何のエラーもなく、CreationTimeが2021/01/01 00:00:00
になったの。

逆質問だけど、どんなエラーだったのか教えてください。
2021/01/20(水) 10:29:40.54ID:sOzWFlEJ
エクスプローラーとか、バックグラウンドで動いているシステムなどが、
フォルダをロックしていたら、失敗する

だから、タイミングによって、成功したり失敗したりする

読み取りロックは、読み取り同士では共有できるけど、
書き込みロックは、その他すべてと共有できないから、失敗する確率が高い
2021/01/25(月) 21:14:40.94ID:PMAucoEc
v7.0.4
https://github.com/PowerShell/PowerShell/releases/tag/v7.0.4
2021/01/27(水) 19:49:56.64ID:BJM8Dy5y
テキストファイルに設定できるストリームって何に使うんすか?
2021/01/27(水) 21:16:07.96ID:lPCF/h8Q
テキストストリームの事なのかNTFSの代替データストリームの事なのか
どちらなんだ
2021/01/27(水) 22:11:57.22ID:qq3K45Kg
代替データストリームはテキストに限った話じゃないのでは
2021/01/27(水) 22:45:50.85ID:9akTDBYB
テキストに限った話ではないけど、質問者が正確に把握してるともまた限らない
901デフォルトの名無しさん
垢版 |
2021/01/29(金) 23:59:43.31ID:t1LR5As2
PoweShellのクラスで、C#と同様にインデクサーを定義することはできますか?

例えば、あるクラスのインスタンス$hogeに対して
$hoge[$i] という感じで添字でアクセスしたいです。
2021/01/31(日) 14:37:31.38ID:jsWOzGKR
C#の演算子オーバーロードがPSで使えるかと同じ無意味な質問
2021/01/31(日) 16:01:58.79ID:sgLd3qg+
>>902
使えるの?
2021/01/31(日) 17:07:09.19ID:Ti7TRi+9
>>898
たぶんテキストストリームのことです
file:stream1
↑これ
2021/01/31(日) 17:24:57.96ID:x4IKZ5QX
そのファイルに付属させたい情報を一緒にいれておくということだろう
ソースだったら、開発秘話とか入れとけば?
2021/01/31(日) 17:26:58.51ID:x4IKZ5QX
あと自分の写真とか連絡先とかプロフィールを入れとけばいいかもW
2021/01/31(日) 19:01:56.87ID:Ti7TRi+9
>>905
>>906
ああREADME.md的なものをですか?
なるほどそれは便利そう
908901
垢版 |
2021/01/31(日) 19:31:38.13ID:yFPHlREj
>>902
PowerShellでも.Netの
コレクションクラスを使えますので、
インデクサーを使うこと自体はできますよね?
同様のことをユーザー定義クラスで実現できないかと思ったのですが、
無意味でしょうか…
2021/01/31(日) 20:11:33.10ID:IDCaHEld
>>904
それ代替データストリームに見えるけどどの辺がテキストストリームなんだろ
しかも、NTFSに依存する機能で.mdの代替とか悪手でしかない
2021/02/01(月) 11:36:09.24ID:XDbQ82ak
>>909
結局何に使うのか言ってないじゃん
911デフォルトの名無しさん
垢版 |
2021/02/05(金) 00:48:27.75ID:a81hUa+F
PowerShellのパイプやリダイレクトは仕様が良くないね。
エンコードせずにバイナリデータのままパイプする従来の方法も選べたほうが良かったね。
2021/02/05(金) 14:45:47.08ID:PbAzOwWf
cmd /c foo `| bar `> baz
とでもしておけ
2021/02/05(金) 21:20:19.10ID:FdcfXC45
>>911
これじゃあかんの
[byte[]]$bin = cat -encoding byte
2021/02/06(土) 08:02:58.77ID:xZe5l+zL
パイプを使いたいんだよ
2021/02/06(土) 09:37:27.62ID:ya6+Y4aC
パイプカットするの?
2021/02/06(土) 14:28:17.57ID:0arkAH5a
>>914
encoding byteがどういう型が返るか示しただけでもちろんパイプにも使えるけど
917デフォルトの名無しさん
垢版 |
2021/02/06(土) 23:58:30.54ID:5Ze23T9D
>>912
`| や`>が解説されているマイクロソフト公式ページはどこになりますか?
検索キーワードが記号ばかりなので探し方が分からず困っております。

>>913
私の環境では、以下のエラーが出て動きませんでした。
Get-Content: Cannot process argument transformation on parameter 'Encoding'.
'byte' is not a supported encoding name. For information on defining a custom encoding,
see the documentation for the Encoding.RegisterProvider method. (Parameter 'name')
2021/02/07(日) 01:02:44.55ID:hwDwbBnD
>>917
'|'はパイプ'>'はリダイレクトで調べれば出てくるよ
bashの知識が必要になるな
919デフォルトの名無しさん
垢版 |
2021/02/07(日) 01:34:59.08ID:IiZq+u+t
>>918
具体的なURLはどこになりますか?
920デフォルトの名無しさん
垢版 |
2021/02/07(日) 01:38:10.26ID:IiZq+u+t
>>918
検索にbashの知識が必要というのは具体的にどういう意味ですか?
2021/02/07(日) 01:46:34.08ID:IiZq+u+t
ひょっとして>>912>>918は別人なのかな。
もし別人なら>>918への質問はなかったことにしてください。論点がずれてるようだから。
2021/02/07(日) 07:11:26.49ID:jVPjdJHk
@パターン1
$data = @('red','green','blue')
if ( $data -ne 'green' )
{
'greenはありません'
}

greenはありません

Aパターン2
$data = @('red','green','blue')
if ( $data -ne 'pueple' )
{
'greenはありません'
}
greenはありません


両方とも同じ結果を返してしまいます。
配列と比較して、無かったらtrue、あったらfalseみたいな書き方ってありませんか?
イメージとしては

if ( $data.notContains('green'))

みたいな書き方です。

用としては、if ( $data.Contains('green'))で足りるのですが、
気持ちの問題として、無かったらtrue、あったらfalseという書き方をしたいです。

よろしくお願いいたします。
2021/02/07(日) 09:44:27.16ID:jX/y7Db/
>>922
> 両方とも同じ結果を返してしまいます。
まず
$data = @('red','green','blue')
$data -ne 'green'
で何が戻ってくるか確認すればなぜそう言うふうに動くかわかると思う

> 気持ちの問題として、無かったらtrue、あったらfalseという書き方をしたいです。
どうしても-eqとか使いたい場合、俺なら($data -eq 'green').Count == 0って書くかな
どう見ても$data.Contains('green')の方がわかりやすいと思うけど
2021/02/07(日) 09:58:10.78ID:fgGFki9a
$data = @('red','green','blue')
if (not ($data -eq 'green')) {}
if (not ($data.Contains('green'))) {}
if (not ($data -contains 'green')) {}
if ($data -notcontains 'green') {}
if ('green' -notin $data) {}

-eq演算子はフィルタとして働くのでここでの用法は微妙
-in系の演算子は配列が大きいとオーバーヘッドが大きいらしい
2021/02/07(日) 09:59:45.82ID:fgGFki9a
否定をtrueにするってどういうことだろ
$colors = @('red','green','blue')
$found = $data -contains 'green'
if ($found) {
} else {
}
なら自然に読み下せる
ここで$notFoundという変数を使われると気になる
if (not $found) {
# 先に書いておきたい処理
} else {
# 長々とした本処理
}
としたいという趣旨ならわかる
2021/02/07(日) 10:03:05.78ID:fgGFki9a
変数名を変え忘れたので訂正
$found = $colors -contains 'green'
2021/02/07(日) 10:18:17.21ID:jVPjdJHk
>>923-925
レスありがとうございます。

> 否定をtrueにするってどういうことだろ
> どう見ても$data.Contains('green')の方がわかりやすいと思うけど

$exec_shinai_jikan=@('01','02','03')
$imananji=Get-Date -Format HH

if ($exec_shinai_jikan -notcontains $imananji){
"実行するよ"
} else {
"実行しないよ"
}

実際のコード(一部)はこれです。変数名のセンスが独特ですよね・・(By 開発の人、私は開発じゃないです)といわれているので
出すのが恥ずかしかったんです。混乱を生んだようでして申し訳ない。

>で何が戻ってくるか確認すればなぜそう言うふうに動くかわかると思う

 ・0か0を超える値か
 ・nullかnullを除く何らかの値か

でtrue or falseが決まる感じでしょうか?
 
-notって、-notだけじゃ赤傍線引かれるけどなにがだめなんだと思ったら、-not〜って表現があったんですね。
ありがとうございます。
2021/02/07(日) 10:22:55.16ID:5sEA4G4p
>>918
bashの知識は不要でしょ
DOSですらパイプやリダイレクト存在するんだし
2021/02/07(日) 10:24:14.00ID:fgGFki9a
なるほどそういう感じか
-not演算子のハイフン書き忘れてた
ごめんね
2021/02/07(日) 10:26:29.15ID:fgGFki9a
>>923
($data -eq 'green').Count -eq 0
これってgreenが含まれない場合は最初の-eq演算による絞り込み結果が$nullになって
ぬるぽになるかと思いきや$null.Countの呼び出しは特例的に0を返すんやね
またPowershellの妙な癖を覚えてしまった
2021/02/07(日) 11:48:29.36ID:jX/y7Db/
>>930
> これってgreenが含まれない場合は最初の-eq演算による絞り込み結果が$nullになって
ならないよ、単に空の配列になるだけ
gm -inputobject ($data -eq 'yellow')
とかやればわかる
2021/02/07(日) 12:10:49.69ID:fgGFki9a
>>931
ありがとう、勘違いしてた
そこは自然な動きなんやね
2021/02/07(日) 13:45:02.08ID:hwDwbBnD
>>919
https://docs.microsoft.com/ja-jp/powershell/

ここでリダイレクトとかパイプとか検索ワードを入れれば解説が出てくるよ
2021/02/07(日) 20:57:33.01ID:rt2m338a
>>913,917
6.0で仕様変更された

https://docs.microsoft.com/ja-jp/powershell/scripting/whats-new/breaking-changes-ps6?view=powershell-7.1#unify-cmdlets-with-parameter--encoding-to-be-of-type-systemtextencoding-5080
-Encoding の値 Byteはファイルシステム プロバイダーのコマンドレットから削除されました。 新しいパラメーター -AsByteStream を使用して、入力としてバイト ストリームが必要なこと、あるいは出力がバイト ストリームであることを指定してください。
2021/02/10(水) 10:00:24.88ID:hefdb5Yb
可変長配列数?的なものの実現方法を教えてください。
CSVを以下の通り加工したいのですが、

1554412,A,B,C,D
2176944,D,C,E,F,G,H,I,J
4887447,F,H,J,A,K

こんな感じのカンマ区切りcsvを

1554412,A
1554412,B
1554412,C
1554412,D
以下同じパターン

で成形したいのです。

csv区切り文字は必ずカンマで、
フィールド数は行により異なります。

行を読み込んで、配列に入れて〜、配列の最初のフィールドを入れて〜
とぼんやり想像しているのですが、「個数が定まっていない行を、配列に入れる方法」が想像つきません。
可変長配列数?的なものの実現方法を教えてください。
2021/02/10(水) 18:12:00.38ID:hRqw8VTE
2つ目のカンマ or 改行まで読んでから要素数2の固定長配列に入れるのはどうですか。
エレガントな方法ではないと思うので、他の方の意見も参考にしてください
2021/02/10(水) 18:19:41.40ID:hRqw8VTE
あ、A, D, FじゃなくてA, B, Cでしたか。
マルチバリューカラムになっているのを正規化したいんですね。
最初の一つ目だけ取るのと勘違いしてました。

1. 一行読んでstring
2. カンマでstring.splitしてstring[]
3. [1]からstring.lengthまでを、[0]とstring.joinして、string[]
4. 全行ループ
これでどうですか
2021/02/10(水) 19:17:13.97ID:JrOSOdLx
PowerShell っぽくならこんな感じかな
'1554412,A,B,C,D', '2176944,D,C,E,F,G,H,I,J', '4887447,F,H,J,A,K' | %{
$a, $b = $_ -split ',', 2
$b -split ',' | %{ "$a,$_" }
}
2021/02/10(水) 19:51:01.55ID:hRqw8VTE
どうしてこれ動かないの?
$fが更新されない
スマホでコード書くの疲れたんで、誰か教えて下さい。

https://tio.run/##TY3LCsIwEEX38xVDyEJxLEaiVUHw/cYfkC5EUluoqTRFreK316kguBm4hzn3XtO7yVxkkqQs5cPhEEcCVKejtWrTmCY0pRm0ld/ta00zTnNa0JJWtKYN6F7P19pnsqINf29BjLDprkmcozjM7S3OUnsxNg8Gg72572JrBECYZuZ4irAmHxhb5NU6vkAW1Tijn08CZFihwh1awZ9VfC2myvM4OW9n7DmPmqoefIuelRRio6rgKwtG8IZ3WX4A
2021/02/10(水) 21:07:38.33ID:bnTPmcqs
>>939
$xs[0]としてごらん
5行目"@ -split "`n"で意図通りになると思う
2021/02/10(水) 21:45:54.25ID:JrOSOdLx
>>939
"[Environment]::NewLine"

"$([Environment]::NewLine)"
2021/02/10(水) 21:58:58.82ID:hefdb5Yb
>>937
とりあえず用は足せました。が、多分ご紹介の内容と全然違うことをやってると思います。
レスの内容が半分分かりませんでした。

>3. [1]からstring.lengthまでを
ここが猛烈にヒントになってこんな感じにしました。

foreach ($l in Get-Content C:\temp\test.txt) {
$l=$l.Split(",")
1..(($l.Length) - 1) | % {write-host ($l[0],$l[$_]) }
}

サンプルのコードをいただけると幸いです。

>>938
これも無事動きました。ありがとうございます。
%ってのを知りませんでした。

Powershell難しすぎです。
勉強してるんですが、正直心折れそうです。
bashはそこそこ使えるので行けるだろと思ってたんですが、ナメてました。
死にそうです。
2021/02/10(水) 22:00:44.14ID:hefdb5Yb
>>942
自己レスすいません。

これも結局、

write-host ($l[0],$l[$_]) }
で間をカンマ区切りにしたかったんですけど、
1時間手を変え品を変えで結局ダメでした。

何が悪いんでしょうか。
2021/02/10(水) 22:12:55.91ID:hefdb5Yb
何度もすいません。

write-hostで標準で区切り文字が半角スペースになってるという事実がやっとわかりました。
{write-host -Separator "," $l[0]$l[$_]}

で無事に希望の出力を得ることができました。

ありがとうございました。
2021/02/11(木) 00:08:14.80ID:lj0aoxL+
すっきり書けなくてもどかしい
$csv -split "\r\n" | % { $a = $_ -split ','; $a[1..($a.Count - 1)] } | % { $a[0], $_ -join ',' }
2021/02/11(木) 19:38:29.26ID:rrBqcjKj
>>939
newlineにクォートつけてたわw
>> 940, 941 さんthx

一応quote外した結果。
https://tio.run/##TY3dCoJAEIXv5ykG2YuiUdrY0oKg/396gfAiYk3B1nClsujZbYwuuhk4H/Odc83uOrexTtOqEg@LQxw5ILtdpWSHxjShKc2gI/1eXymacZrTgpa0ojVtQAWBr5TPZEUb/t6CM0LXXtOkwMPc3JI8MxdtinAw2Ov7LjEaIMpyfTzF2BAPTAzyZhNfIMp6mtHPdsgBEdWotId2@GeVX4up9DxO1ttpcy5iVzbDb9GzliJs1RV8RckI3vCuqg8
2021/02/12(金) 09:16:23.07ID:q/2+I+Zd
$?で直前のコマンドの実行結果を知ることができますが、
直前に実行したコマンドのPIDを知る方法ってありませんか?

Start-Process -FilePath c:\bin\command.exe -ArgumentList 1
$cmd1pid=get-chokuzenn-pid
$cmd1pid
78968

Start-Process -FilePath c:\bin\command.exe -ArgumentList 2
$cmd1pid=get-chokuzenn-pid
$cmd1pid
4292

実際に動かしたいのは、ttpmacro.exe(Teratermのマクロ)です。
Teratemマクロで外部の機器にsshで接続して、ssh接続のログの内容を見て
そのプロセスを終了させるか判断したいと思っております

書こうとしているスクリプトを動かす時点で、1個もTeratermが動いていないなら、
Get-Processでなんとかなると思うのですが、上記スクリプトを実行する時点で
ほかのTeratermが動いている可能性があり、それを間違って死なすわけにはいかず、
Powershellスクリプト内で、Start-Processなりで動かした、直前のプロセスのIDを知る方法があればと思い相談させていただきます

すいません、よろしくお願いいたします。
2021/02/12(金) 09:17:40.74ID:q/2+I+Zd
test.ps1

Start-Process -FilePath c:\bin\command.exe -ArgumentList 1
$cmd1pid=get-chokuzenn-pid
$cmd1pid
78968

Start-Process -FilePath c:\bin\command.exe -ArgumentList 2
$cmd2pid=get-chokuzenn-pid
$cmd2pid
4292


すいません、スクリプトの例に誤りがありました
訂正します
2021/02/12(金) 09:57:59.46ID:JWXF4JEZ
v7.0.5
https://github.com/PowerShell/PowerShell/releases/tag/v7.0.5
v7.1.2
https://github.com/PowerShell/PowerShell/releases/tag/v7.1.2
2021/02/12(金) 10:15:49.19ID:JXvYdGCL
引数に -PassThru を付けて戻り値からidで取れないかな?
2021/02/12(金) 11:17:25.75ID:jxDcSv/l
>>947
プロセスIdなんて取る必要ない(むしろ危険)
>>950が言うように-PassThruオプションつけるとSystem.Diagnostics.Processオブジェクトが返ってくるからKill()メソッド呼ぶだけでいい
2021/02/12(金) 13:51:19.53ID:q/2+I+Zd
>>950
>>951
$process = Start-Process -PassThru notepad
$process.Kill()

できました
ありがとうございました
2021/02/12(金) 13:58:44.73ID:aXMNNeBu
すばらしい
2021/02/13(土) 18:04:24.59ID:elIMNXvv
音楽プレーヤーで MP3 ファイルをシャッフル再生させたいので、
dir /n /-b /s *.mp3 > playlist.txt
の結果をランダムに入れ替えるにはどうすればいいでしょうか?

(乱数で再生する行を求めると同じ曲がつづくかもしれないのでシャッフルにしたい。)
2021/02/13(土) 19:45:47.08ID:PYtZn7CJ
>>954
テキトーでいいなら
dir /n /-b /s *.mp3 | sort -prop @{Exp={[Guid]::NewGuid()}} > playlist.txt
2021/02/13(土) 20:59:17.73ID:9JYy97c0
Sort-Object {Get-Random}じゃあかんの?
2021/02/13(土) 21:06:22.08ID:PYtZn7CJ
>>956
それでもいいけど、遅いらしい
https://aquasoftware.net/blog/?p=612
2021/02/13(土) 21:14:23.98ID:D/l9Txdy
自分の音楽コレクションのプレイリスト作る要件なら速度は別にと思わなくもない
5分とか掛かるならちょとやだけど
2021/02/13(土) 21:58:32.75ID:WEbw7iAW
プレイリストのランダム再生機能ぐらい大抵のプレイヤーに付いてるだろうに
2021/02/13(土) 22:34:07.74ID:XvWS5Qrl
>>957 のリンク先のコードで質問です
勉強のためちょこちょこ編集してみたところ、
「なんでこれで変数の中がランダムにおきかわるの?」と疑問がわきました

$r = @(1,2,3,4,5,6,7,8,9,10)
$r=($r | sort -Property @{Exp={[Guid]::NewGuid()}})
$r

$foo = @(1,2,3,4,5,6,7,8,9,10)
$foo[0] = $foo | sort -prop @{Exp={[Guid]::NewGuid()}}
$foo[0]

前者のように、$rの中身を $r | sort -Prop〜で置き換えるというのなら納得がいくんですが、
なぜ、後者のように、書いてもランダムになるのかが納得いきません
変数定義はパイプの前の話で、どうしてそれがパイプ先の、ランダムにする操作で置き換わるのでしょうか。
2021/02/13(土) 22:48:16.31ID:PYtZn7CJ
>>960
やってることは同じで結果が単に$foo[0]に入ってるだけ
$foo[1]~$foo[9] の内容は変わってないはず
ちなみに置き換えてるわけじゃなくて新しい配列を作ってそれを$rとか$foo[0]に入れてる
2021/02/13(土) 22:59:06.67ID:XvWS5Qrl
>>961
ありがとうございます
書き方が違うけど処理が同じというとらえ方でいいですか?

"パターン1"
$foo = @(1,2,3,4,5,6,7,8,9,10)
$foo=($foo | sort -prop @{Exp={[Guid]::NewGuid()}})
$foo

"パターン2"
$foo = @(1,2,3,4,5,6,7,8,9,10)
$foo = $foo | sort -prop @{Exp={[Guid]::NewGuid()}}
$foo

パターン1の書き方違いが、パターン2のようなとらえ方でいいでしょうか?
2021/02/13(土) 23:33:24.56ID:PYtZn7CJ
>>962
ああ、すまん ( ) は見落としてた
パターン1は単に式を ( ) で包んでるだけだからパターン2と同じと思っていい
964954
垢版 |
2021/02/13(土) 23:36:43.19ID:elIMNXvv
Get-ChildItem -path d:\ -filter *.mp3 -recurse | foreach {$_.FullName} | sort {Get-Random}
や、
Get-ChildItem -path d:\ -filter *.mp3 -recurse | foreach {$_.FullName} | sort -prop @{Exp={[Guid]::NewGuid()}}

でうまくいきそうです。 ありがとうございました。
2021/02/14(日) 00:07:20.96ID:rA0IJrKX
>>963
ありがとうございますよくわかりました

パイプで処理がわかれると思っておりましたが、
=で右辺と左辺に分ててる感じなんですね
2021/02/14(日) 00:22:33.69ID:D24G58JB
>>964
上手く行って何より

蛇足だけど
> foreach {$_.FullName}
の所は PowerShell 的には
> Select-Object FullName
でもいいかな
2021/02/14(日) 00:28:18.02ID:D24G58JB
>>965
他の言語に似せるためか代入文は最優先で解釈されるようになってるみたい
まあよくわからなかったら多少余分でも ( ) を付けといた方があとから見ても誤解されにくいと思う
2021/02/19(金) 08:22:42.85ID:islL1Ifn
Announcing the PowerShell Community Blog
https://devblogs.microsoft.com/powershell-community/announcing-the-powershell-community-blog/
2021/02/23(火) 08:20:29.72ID:XBzTqCMZ
posh-git と GetChildItemColor
でダイブましになった

他にもおすすめあったらおせーて!
2021/02/23(火) 20:50:03.67ID:8GGn/OTs
GetChildItemColorを入れるとシンボリックリンクのリンク先のパスが表示されなくなるのがクソ
2021/03/02(火) 00:20:13.77ID:NQgDi+il
#test.ps1
param([array]$foo)

echo ('$ARGS[0]' +':'+ $ARGS[0])
echo ('$foo[0]' +':'+ $foo[0])
echo ('$foo[1]' +':'+ $foo[1])
echo ('$foo[2]' +':'+ $foo[2])

PS> .\test.ps1 aaa -foo bbb,ccc,ddd
$ARGS[0]:aaa
$foo[0]:bbb
$foo[1]:ccc
$foo[2]:ddd

PS> .\test.ps1 aaa -bar bbb,ccc,ddd
$ARGS[0]:-bar
$foo[0]:aaa
$foo[1]:
$foo[2]:

PS C:\script>
PS> \test.ps1 aaa
$ARGS[0]:
$foo[0]:aaa
$foo[1]:
$foo[2]:

@引数やパラメータの数、パラメーター名などのエラーをチェックする方法を教えてください。
Aパラメータの区切りをカンマで無くスペースにする方法があれば教えてください。

ググってみたのですが、ググり方が悪いのか、見つからず苦しんでおります
2021/03/02(火) 00:22:05.89ID:NQgDi+il
>>971
行数制限に引っかかったので分割します。

@は引数〇個、パラメーター名foo、パラメーターfooの数、fooが1個以上(0はだめ)というのをチェックしたいです。

なにとぞよろしくお願いいたします。
2021/03/02(火) 10:00:39.98ID:TaWWQOJL
>>972
about_Functions_Advanced_Parameters
https://docs.microsoft.com/ja-jp/previous-versions/windows/powershell-scripting/hh847743(v=wps.640)
2021/03/02(火) 23:49:57.97ID:NQgDi+il
>>973
ありがとうございます。
読み解くのに時間がかかりそうですが、
希望のものが書いてありそうです。
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況