PowerShell -Part 5

■ このスレッドは過去ログ倉庫に格納されています
2021/03/18(木) 00:29:52.04ID:/MpReTiX
前スレ
PowerShell -Part 4
https://mevius.5ch.net/test/read.cgi/tech/1577862511/

次スレは>>980が立ててね!!
2021/03/18(木) 01:54:43.20ID:KHyuuwNF
echo 保守しとくけど多分朝には落ちてる
2021/03/18(木) 02:11:36.48ID:LDDTgdRP
>>1
おつ
2021/03/18(木) 02:41:58.78ID:k7pgRAR8
パワー
2021/03/18(木) 12:05:10.24ID:t06qOp3P
パイプやリダイレクトが微妙
結局 cmd /C を使うはめに
2021/03/18(木) 14:38:25.42ID:CPg6C46D
Call native operator #13068
https://github.com/PowerShell/PowerShell/issues/13068
2021/03/18(木) 15:14:55.38ID:6Ys2lBRM
未経験新卒で入社してからLinux関連の開発しかしてこなかった俺がふとpowershellの勉強始めてるんだが、なかなか慣れんわ
まあ出来ることから地道に使い込んでいくしかないか…
2021/03/18(木) 16:29:17.47ID:7c+GTWi3
あるオブジェクトのプロパティ(数や名前は不明)を全て取得して
別に新規作成するPScustomObjectのプロパティとして設定したいのですか
どのようにすれば実現出来ますでしょうか?
2021/03/18(木) 16:30:46.69ID:7c+GTWi3
補足です。
あるオブジェクトのプロパティの値は必要ありません。
新しいPScustomObjectのプロパティの値は別のものをセットします。
2021/03/18(木) 17:04:09.34ID:5geAwNmp
get-memberでプロパティでフィルタしてadd-memberかな?
2021/03/18(木) 17:40:50.17ID:Zj9YO3RT
アナル。
後からオブジェクト追加ですね。
初心者なのでPScustomObject作成時にプロパティ指定しか頭になかったです。
サンクソ。
2021/03/19(金) 04:00:45.99ID:RMQx/osX
>>7
linuxだけど俺も周りもPowerShellしか使ってねえわ
2021/03/19(金) 04:02:37.40ID:RMQx/osX
まあ部署で統一図ったってだけだけどな
linuxのログインシェルにPowerShellはまだまだマイノリティ
2021/03/19(金) 09:44:27.09ID:ubz8QMhD
Select-Objectでプロパティを取り出す際に@{name=〜;expession={〜}}
って指定方法があると思いますが、
@data=@{"key1"=@(1,2);"key2"=@(3,4)}
という配列を値に持つハッシュ@dataから
1,3;2,4
と言う風にデータを取り出したいのですが
(各配列の要素0から順番に)

@data|Select-Object @{name="out";expession={ ($_.key1 + "," + $_.key2) -join ";"}}
だと
1;2;,;3;4
になってしまいます。

1,3;2,4
と取り出すにはどうすれば良いでしょうか?
2021/03/19(金) 09:45:14.92ID:ubz8QMhD
訂正
@data は $data の間違いです。
2021/03/19(金) 14:52:27.90ID:z8FPp2cZ
$data|Select-Object @{name="out";expression={ ($_.key1 -join ",") + ";" + ($_.key2 -join ",") }}


配列の加算
https://docs.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/everything-about-arrays#array-addition
2021/03/19(金) 17:10:06.64ID:Lmt+5Mde
>>16
う〜ん。これだと
1,2;3,4
と出力されてしまいます。

説明が悪かったです。
配列毎に順番に出力ではなく、
全配列の若い要素から順番に出力です。

配列Aの要素0,配列Bの要素0;
配列Aの要素1,配列Bの要素1;
配列Aの要素2,配列Bの要素2;



と言うふうに、
$dataの場合は
1,3;2,4
と出力したいのです。
2021/03/19(金) 17:23:02.60ID:e41Lj/Gw
スクリプト内の、Start-Processで起動したプロセスが、「別の」プロセスを起動します。
この「別の」プロセスのPIDを取るに、確実性のある方法ってありますでしょうか。

具体的に申し上げますと、TeratTermマクロの実行ファイル(以下、ttpmacro.exe)を、Start-Processで呼び出すと
ttpmacro.exeが、Teraterm本体を呼び出します。

以下の、@でttpmacro.exeのPIDは取れるのですが、ttpmacro.exeが呼び出した
Teraterm本体のPIDは取れません。

現状Aの方法、ttpmacro.exeをStart-Processで起動→3秒待ち(起動待ち)→Get-Processで最新のTeraterm本体のPIDを取る
で間に合ってはいるのですが、不確実性があります。

これの対処に、確実性のある方法があったら教えてください。

Get-ProcessのStart-Timeが〇秒以内の場合〜というのも考えたんですが、
やっぱり不確実があるのでまだ導入はしてません。

よろしくお願いいたします。

以下ソースコード一部抜粋しました。ご参照ください。

$ttl_macro=Teratemマクロのファイルパス
$ttpm_bin="C:\Program Files (x86)\teraterm\ttpmacro.exe"

@$ttl_pid=(Start-Process -PassThru -FilePath $ttpm_bin -ArgumentList "/V $ttl_macro $log_full_path")

sleep 3 #Teraterm本体の起動待ち用。

A$ttp_pid=((Get-Process -name "ttermpro") | Select-Object id,StartTime,name | Sort-Object -Property Starttime | Select-Object -Last 1)
2021/03/19(金) 17:37:54.61ID:jH8qf1vo
>>17
Keyは固定でいいのね
なら
($data.Key1.GetLowerBound(0) .. $data.Key1.GetUpperBound(0) | %{ $data.Key1[$_], $data.Key2[$_] -join ',' }) -join ';'
でいいかと
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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