PowerShell -Part 4

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2020/01/01(水) 16:08:31.66ID:4oQ1Kxot
前スレ
PowerShell -Part 3
https://mevius.5ch.net/test/read.cgi/tech/1539074808/

次スレは>>980が立ててね!!

0952デフォルトの名無しさん2021/02/12(金) 13:51:19.53ID:q/2+I+Zd
>>950
>>951
$process = Start-Process -PassThru notepad
$process.Kill()

できました
ありがとうございました

0953デフォルトの名無しさん2021/02/12(金) 13:58:44.73ID:aXMNNeBu
すばらしい

0954デフォルトの名無しさん2021/02/13(土) 18:04:24.59ID:elIMNXvv
音楽プレーヤーで MP3 ファイルをシャッフル再生させたいので、
dir /n /-b /s *.mp3 > playlist.txt
の結果をランダムに入れ替えるにはどうすればいいでしょうか?

(乱数で再生する行を求めると同じ曲がつづくかもしれないのでシャッフルにしたい。)

0955デフォルトの名無しさん2021/02/13(土) 19:45:47.08ID:PYtZn7CJ
>>954
テキトーでいいなら
dir /n /-b /s *.mp3 | sort -prop @{Exp={[Guid]::NewGuid()}} > playlist.txt

0956デフォルトの名無しさん2021/02/13(土) 20:59:17.73ID:9JYy97c0
Sort-Object {Get-Random}じゃあかんの?

0957デフォルトの名無しさん2021/02/13(土) 21:06:22.08ID:PYtZn7CJ
>>956
それでもいいけど、遅いらしい
https://aquasoftware.net/blog/?p=612

0958デフォルトの名無しさん2021/02/13(土) 21:14:23.98ID:D/l9Txdy
自分の音楽コレクションのプレイリスト作る要件なら速度は別にと思わなくもない
5分とか掛かるならちょとやだけど

0959デフォルトの名無しさん2021/02/13(土) 21:58:32.75ID:WEbw7iAW
プレイリストのランダム再生機能ぐらい大抵のプレイヤーに付いてるだろうに

0960デフォルトの名無しさん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〜で置き換えるというのなら納得がいくんですが、
なぜ、後者のように、書いてもランダムになるのかが納得いきません
変数定義はパイプの前の話で、どうしてそれがパイプ先の、ランダムにする操作で置き換わるのでしょうか。

0961デフォルトの名無しさん2021/02/13(土) 22:48:16.31ID:PYtZn7CJ
>>960
やってることは同じで結果が単に$foo[0]に入ってるだけ
$foo[1]~$foo[9] の内容は変わってないはず
ちなみに置き換えてるわけじゃなくて新しい配列を作ってそれを$rとか$foo[0]に入れてる

0962デフォルトの名無しさん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のようなとらえ方でいいでしょうか?

0963デフォルトの名無しさん2021/02/13(土) 23:33:24.56ID:PYtZn7CJ
>>962
ああ、すまん ( ) は見落としてた
パターン1は単に式を ( ) で包んでるだけだからパターン2と同じと思っていい

09649542021/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()}}

でうまくいきそうです。 ありがとうございました。

0965デフォルトの名無しさん2021/02/14(日) 00:07:20.96ID:rA0IJrKX
>>963
ありがとうございますよくわかりました

パイプで処理がわかれると思っておりましたが、
=で右辺と左辺に分ててる感じなんですね

0966デフォルトの名無しさん2021/02/14(日) 00:22:33.69ID:D24G58JB
>>964
上手く行って何より

蛇足だけど
> foreach {$_.FullName}
の所は PowerShell 的には
> Select-Object FullName
でもいいかな

0967デフォルトの名無しさん2021/02/14(日) 00:28:18.02ID:D24G58JB
>>965
他の言語に似せるためか代入文は最優先で解釈されるようになってるみたい
まあよくわからなかったら多少余分でも ( ) を付けといた方があとから見ても誤解されにくいと思う

0968デフォルトの名無しさん2021/02/19(金) 08:22:42.85ID:islL1Ifn

0969デフォルトの名無しさん2021/02/23(火) 08:20:29.72ID:XBzTqCMZ
posh-git と GetChildItemColor
でダイブましになった

他にもおすすめあったらおせーて!

0970デフォルトの名無しさん2021/02/23(火) 20:50:03.67ID:8GGn/OTs
GetChildItemColorを入れるとシンボリックリンクのリンク先のパスが表示されなくなるのがクソ

0971デフォルトの名無しさん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パラメータの区切りをカンマで無くスペースにする方法があれば教えてください。

ググってみたのですが、ググり方が悪いのか、見つからず苦しんでおります

0972デフォルトの名無しさん2021/03/02(火) 00:22:05.89ID:NQgDi+il
>>971
行数制限に引っかかったので分割します。

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

なにとぞよろしくお願いいたします。

0973デフォルトの名無しさん2021/03/02(火) 10:00:39.98ID:TaWWQOJL

0974デフォルトの名無しさん2021/03/02(火) 23:49:57.97ID:NQgDi+il
>>973
ありがとうございます。
読み解くのに時間がかかりそうですが、
希望のものが書いてありそうです。

0975デフォルトの名無しさん2021/03/03(水) 03:07:24.22ID:hWQCqBl5
そもそもPowerShellの関数(コマンドレット)は空白区切りで引数渡すんだけどね
>>971はカンマ区切りで引数を渡してるんじゃなくて、カンマで作った配列を渡してるだけ
自動変数の$args(配列)はjavascriptでいう残余引数みたいな物

PS> .\test.ps1 aaa -foo bbb,ccc,ddd
名前付き引数 $foo に配列 bbb,ccc,ddd が渡され、未定義の aaa が $args に渡されてる

PS> .\test.ps1 aaa -bar bbb,ccc,ddd
$foo に先頭の引数 aaa が渡され、未定義の -bar と配列 bbb,ccc,ddd が $args に渡される

特にオプションを指定しなければ、複数の引数を設定すれば空白区切りで渡せる

0976デフォルトの名無しさん2021/03/12(金) 15:14:39.63ID:VgGpSMHu
PowerShell起動すると毎回更新しろって出るのがウザくて7入れてみたけど起動時の立ち上がりが遅くなって切れそう
しかも結局help云々が毎回出るし
MS頭おかしいんでねーの

0977デフォルトの名無しさん2021/03/12(金) 19:40:18.23ID:gsxqF2ed
おバカ自慢要らね

0978デフォルトの名無しさん2021/03/13(土) 10:00:11.18ID:fu8qQk1O

0979デフォルトの名無しさん2021/03/13(土) 14:33:26.87ID:LuYPD+lh
| where-objectで、条件に引っかかったら0(True)、引っかからなかったら1(False)を返す方法ってありませんでしょうか。

あるサービスの実行状態を知るために、こういうことをしてるんですが、

(Get-Service | Where-Object -Property Name -Match Adobe | Where-Object -Property Status -Match Running).length
1 ←AdobeがRunnningだった
0 ←AdobeがRunningじゃなかった

他に、もっとPowershellっぽい書き方があったら教えてください

0980デフォルトの名無しさん2021/03/13(土) 14:59:52.96ID:4/YYKqK7
>>979
ワンライナーにこだわっているのか?

0981デフォルトの名無しさん2021/03/13(土) 15:31:11.30ID:33EHGK5P
Ruby の3項演算子みたいなものは無いの?

真偽値となる条件式 ? 真の時の値 : 偽の時の値

0982デフォルトの名無しさん2021/03/13(土) 15:36:01.07ID:ErfpRTBJ
(gsv adobe*).status -contains 'running'

0983デフォルトの名無しさん2021/03/13(土) 15:48:12.79ID:Qa5+c/Kf
>>979
[int][bool](Get-Service | Where-Object {($_.Name -Match 'Adobe') -and ($_.Status -Match 'Running')})

0984デフォルトの名無しさん2021/03/13(土) 20:59:36.95ID:3roljCwu

0985デフォルトの名無しさん2021/03/14(日) 15:40:02.21ID:am3+IzSP
PowerShellは処理の方法が多くていいな

0986デフォルトの名無しさん2021/03/14(日) 21:46:47.24ID:8YYOAayf
連想配列の参照渡しで
function f([ref]$h) { $h.value }
$h = @{ a = 0; b = 1}
f([ref]$h)
はうまくいくんだけど、引数もう一個増やして
function f([ref]$h, $s) { $h.value; $s }
$h = @{ a = 0; b = 1}
$s = 2
f([ref]$h, $s)
にすると、
f : パラメーター 'h' の引数変換を処理できません。引数には参照型を指定する必要があります。
何が悪いん?ググっても見つけられなくてさっきから悩んでる(汗

0987デフォルトの名無しさん2021/03/14(日) 21:55:49.94ID:8nGQn8Lf
括弧とカンマいらないのでは

0988デフォルトの名無しさん2021/03/14(日) 22:41:43.33ID:T+RcbFBu
f ([ref]$h) $s 

0989デフォルトの名無しさん2021/03/14(日) 23:07:21.02ID:8YYOAayf
>>988
出来た!ありがとう
でもなぜその書き方になるのかわからない(汗

0990デフォルトの名無しさん2021/03/15(月) 15:30:15.42ID:2OtrSpOH
カッコとカンマで引数渡すのはオブジェクトのメソッドの時だけだね
関数はスペース区切りで渡す

これは文法だから理由はない

0991デフォルトの名無しさん2021/03/15(月) 16:45:16.26ID:bRJV5TtK
1, 2 で配列作っちゃうようにしちゃったからねぇ
記法がシェルスクリプトとプログラム言語のあいの子みたいになってるからちょっと直感に反する所がちらほら見え隠れするのはしょうがない

0992デフォルトの名無しさん2021/03/16(火) 23:02:58.87ID:Bd62bkLQ
>>985
処理の方法が多いことは、可読性が落ちる原因にもなる。
PythonをもちあげてPerlをくさす時に使われたのと同じ論法だよ。

0993デフォルトの名無しさん2021/03/17(水) 08:00:24.75ID:EzeD0xtp
俺がPowerShellを気に入ったのはPerlと同じ匂いを感じたからだ

0994デフォルトの名無しさん2021/03/17(水) 08:19:50.03ID:vnLGIRIV
しかしPerlではないのがいいところ

0995デフォルトの名無しさん2021/03/17(水) 08:38:00.89ID:sqd1XF3h
Why did you do that? $VAR/ {} / Weak Intellisense
https://docs.microsoft.com/en-us/archive/blogs/monad/why-did-you-do-that-var-weak-intellisense

The $ in front of variables comes from our design center of being an interactive command oriented shell.
Interactive shells are NOT the same thing as Scripting languages with command interpretors.
Interactive shells are case studies in engineering tradeoffs (another way of saying that is that they tend to be a little quirky).
There is a tension between the needs of a great interactive experience and a great scripting/programming experience.
Time and time again during the course of the project, people would try to make us "choose" between one or the other.
We refused.

We believe that if you work hard enough at it, you can solve the puzzle and provide a great solution for both.
We were absolutely subborn on this point. Time and time again, we were able to succeed with this approach if we travailed long enough.

0996デフォルトの名無しさん2021/03/17(水) 11:52:58.50ID:eAjGywmP
interactive性は'標準で'エイリアスが定義されてることで十分満足してる

0997デフォルトの名無しさん2021/03/18(木) 00:08:54.40ID:t06qOp3P
PerlとPythonは文字に対するencode, decodeの意味が逆。まめな

0998デフォルトの名無しさん2021/03/18(木) 00:30:47.74ID:/MpReTiX

0999デフォルトの名無しさん2021/03/18(木) 00:39:40.12ID:3weRgygV
>>998
ナイス滑り込み

1000デフォルトの名無しさん2021/03/18(木) 01:34:48.09ID:dIgskCmL
質問良いですか

10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 441日 9時間 26分 17秒

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。