X



PowerShell -Part 7

0002デフォルトの名無しさん
垢版 |
2023/11/29(水) 20:26:02.61ID:aabs5txO
ドライバのinfファイルに署名がない古いハードを使うために
オレオレ証明書を作って勝手に署名する方法があるが
ググって出る手順のままではダメでいまはWindows Design KitとWindows SDKが必要で
SDKにあるmakecertコマンドはマイクロソフト公式に推奨されないとも…
PowerShellでできるからということらしいがどう使ったら同じ結果になるかはわからなかった
makecertのような非推奨コマンドと1対1のPowerShellでの使用例ってどこかにないだろうか
今後同じような事態に陥った時のため備えておきたい
マイクロソフトのサイトにはオプションの説明はあるけど
makecertとの対比表とかはない
0003デフォルトの名無しさん
垢版 |
2023/11/30(木) 19:34:57.73ID:4nwqW1NG
powershell関係あるのかしら
古い環境そのものやP2V化して動作確認取れる環境を保存していくのが簡単だよ
ドライバへの署名はあくまで1企業の都合という事をお忘れなく
0004デフォルトの名無しさん
垢版 |
2023/12/01(金) 21:00:19.47ID:0gNLMIqi
直下にあるファイルをgciの-Includeでフィルタリングしつつ取得する際に
Get-ChildItem -Include *hoge*.txt
はだめで
Get-ChildItem -Recurse -Include *hoge*.txt
-Recurseを入れると動くのはなぜですか?
サブディレクトリを含まない直下のみのファイル検索なら-Recurseなしでもいける認識なんですが間違ってますか
0005デフォルトの名無しさん
垢版 |
2023/12/01(金) 21:20:55.43ID:Jz3SJDE5
>>4
gciで-Includeを使う場合gciに与えるデフォルト引数としてアスタリスク「*」を含んだパス名が必要なんだよ特に書いてないけど
つまり「Get-ChildItem -Include *hoge*.txt *」で意図通りになるはず
というかね、-Includeなんか忘れていい。フィルタならwhere-objectでやった方が判りやすい
gci | where Name -like "*hoge*.txt"
コマンドレットは変な仕様が多いから妙だな…と思ったらそれ以上深入りする必要はない
0006デフォルトの名無しさん
垢版 |
2023/12/01(金) 22:24:22.03ID:nrjrox6C
そもそもワイルドカードの単純なフィルタならデフォルトの-pathでできるから-includeとか基本使わないな

learn見たら「-includeは-pathの末尾が*じゃないと動かない(-recurseなら省略可)」ってはっきり書いてたわ
0007デフォルトの名無しさん
垢版 |
2023/12/01(金) 22:30:34.62ID:S2lEQVa3
ファイルシステム側に検索オプションを指定するのが-Filterで
PowerShell自信でフィルタリングするのが-Includeだっけ、懐かしい話だ
0008デフォルトの名無しさん
垢版 |
2023/12/02(土) 08:48:18.48ID:Fkw0aBk3
gciの表示が間延びしてるのを詰めたい
ModeとLastWriteTimeにあんなに幅いらんやろ
0009デフォルトの名無しさん
垢版 |
2023/12/02(土) 20:49:53.53ID:CMdctbaC
4ですみなさんありがとうございます
当然質問する前にLearnで確認していたのですが、てっきりワイルドカードも使えるよ!ぐらいのニュアンスだと思っていました
大人しくwhere-object使います。すっきりしましたm(_ _)m
0011デフォルトの名無しさん
垢版 |
2023/12/03(日) 07:28:03.75ID:tKLbRUl7
すまんコマンド追加で整形したいんじゃない
デフォルトの形式をいじりたい
0013デフォルトの名無しさん
垢版 |
2023/12/03(日) 09:40:08.91ID:tKLbRUl7
Get-FormatData -TypeName 'System.IO.*' -PowerShellVersion $PSVersionTable.PSVersion | Export-FormatData -Path fd.ps1xml
gc .\fd.ps1xml | % { $_ -replace '7', '5' } | % { $_ -replace '26', '20' } | % { $_ -replace '14', '12' } > fd-mod.ps1xml
Update-FormatData -PrependPath .\fd-mod.ps1xml

としてみたら全然違う結果になってしまった
出てきたものの数字を変えるだけじゃだめなのかな
0015デフォルトの名無しさん
垢版 |
2023/12/03(日) 17:41:11.89ID:tKLbRUl7
ファイルとディレクトリが混ざってるからだった
あとは日付と時刻を詰めたい
0016デフォルトの名無しさん
垢版 |
2023/12/05(火) 09:46:48.52ID:RGe8cD49
引数付きエイリアスの作り方を教えてください

'ABC' > file
tar -c -f - file | tar -x -O -f - file

の 「tar -x -O -f」 をエイリアス tarout にして

tar -c -f - file | tarout - file

として使うにはどうするのでしょうか
0019デフォルトの名無しさん
垢版 |
2023/12/05(火) 15:54:15.98ID:RGe8cD49
そこまではたどり着いたのですが苦戦しています
正直言って手も足も出ません
どうすればよいのでしょうか
0020デフォルトの名無しさん
垢版 |
2023/12/05(火) 21:04:00.28ID:rxI6O073
何がしたいのか知らんけどpowershellのパイプはオブジェクトに変換しないとだからtarが期待する入出力にはならんだろうな
ほれ
function tarout {
tar -x -O -f $args
}
tarout - file
0022デフォルトの名無しさん
垢版 |
2023/12/05(火) 21:47:53.20ID:RGe8cD49
>>0020
それは最初に自分で試してだめだったやつですな
パイプでなく標準入力を読もうとしてCtrl-Z待ちで止まるやつ
Windows 10 から tar.exe あるんで試してから回答してもらえると嬉しい

>>0021
PowerShellからネイティブは通る
ネイティブからネイティブは通る
ネイティブからPowerShellは通らない
だからPowerShellでtaroutは書けないってこと?
だとしたらPowerShellくそすぎる
0023デフォルトの名無しさん
垢版 |
2023/12/06(水) 09:58:34.06ID:pwwMUfVm
一応整理

PS 1> 'Success' > testfile
PS 2> tar -c -j -f test.tar.bz2 testfile
PS 3> Get-Content -Path test.tar.bz2 -AsByteStream | tar -x -O -f - testfile
Success
PS 4> tar -c -j -f - testfile | tar -x -O -f - testfile
Success
PS 5> . { tar -c -j -f - testfile } | tar -x -O -f - testfile
tar.exe: Error opening archive: bzip decompression failed

PowerShellからのバイトストリームはネイティブに通る (PS 3>)
ネイティブからネイティブもバイトのまま壊れずに通る (PS 4>)
ネイティブからPowerShell(経由でネイティブ)は通らない (PS 5>)

だからPowerShellでtaroutは書けない
Start-Processで頑張れば書けるのかもしれない、知らんけど
進歩はしたがtarout程度に苦労多すぎなPowerShellはくそ
0024デフォルトの名無しさん
垢版 |
2023/12/07(木) 08:28:41.09ID:c+XrIY2G
beginブロックで$inputを使うとバイトストリームが出てくるようになって欲しい
そしたらtaroutもこう書けるようになるのに

function tarout { begin { $input | tar -x -O -f $args }}

でもこれは難しいだろうな
0026デフォルトの名無しさん
垢版 |
2023/12/08(金) 08:18:26.16ID:tWmRPca2
いやbeginブロックで十分でしょ
今はbeginブロックの$inputは無意味なんだから有効活用

難しいと思うのは
・beginブロックに$inputがあったら、そのfunction,ScriptBlockにパイプでバイトよこせマークをつける
・バイトよこせマークがあったらパイプラインでネイティブコマンド扱いしてバイトを流す
処理が必要だからで・・・難しく・・・な・・・い、かも
0028デフォルトの名無しさん
垢版 |
2023/12/08(金) 20:15:49.14ID:8rS6bPls
公式で7.3にもなって直してないんじゃそんなのを気にしてるのは少数派なんだろ
むしろお前が動くしかなかろうよ
0029デフォルトの名無しさん
垢版 |
2023/12/09(土) 13:31:46.58ID:F2smNVkX
個人的にはpythonのライブラリ群をそのままPSObjectにぶっこ抜きして動かせるようにして欲しい
0031デフォルトの名無しさん
垢版 |
2023/12/09(土) 18:40:01.66ID:F2smNVkX
>>30
なんかそのスレッドはpython使いの声がでかいのかpython主導でpython起動すりゃいいだろ的な話がされてて俺の意図とは違うな
俺の考えはそれとは真逆でpythonの便利ライブラリだけpowereshellで拝借してキモいpython処理系自体を入れたくないのよね
俺の言いたいこと判るよね
0032デフォルトの名無しさん
垢版 |
2023/12/09(土) 18:46:30.00ID:iYG1bkmj
キモいpython処理www
キモいのはpowershellじゃぼけww
0033デフォルトの名無しさん
垢版 |
2023/12/09(土) 19:18:53.30ID:F2smNVkX
>>32
たしかにpowershellもキモいと言えばそうだがpythonとはキモさのベクトルが違うんだよ
>>30にはいい事も書いてある
>PowerShell チームに対して、これらの Python ライブラリをネイティブ PowerShell パッケージの一部として直接実装するよう求めているのであれば、私は同意しなければなりません。
いずれこういう俺と同じ考えを持つ輩がpythonライブラリのぶっこ抜きに成功し
キモいpython処理系が駆除された明るい未来を創り上げてくれる事に期待している
0034デフォルトの名無しさん
垢版 |
2023/12/09(土) 20:18:03.05ID:P3Dp1Ib1
$null | %{'hoge'+$_}

これでなんでhogeが出力されるんですか?
Nullになるかとおもったんですが
0035デフォルトの名無しさん
垢版 |
2023/12/09(土) 21:01:47.88ID:2orRcob9
型を合わせるために、NULLが空文字に変換されるから。

そこでNULLを期待するのはRDBとかの場合だね。(RDBにもよるけど。)
0037デフォルトの名無しさん
垢版 |
2023/12/09(土) 21:38:52.87ID:P3Dp1Ib1
>>35
なるほど
ありがとうございます

ためしに
$null | %{$_+$hoge}
にしたらNullになりました
+演算子の左辺の型に合わせて右が型変換されるんですね

…PowerShellは難しい
0038デフォルトの名無しさん
垢版 |
2023/12/09(土) 21:42:29.77ID:P3Dp1Ib1
>>36
ありがとうございます
0039デフォルトの名無しさん
垢版 |
2023/12/13(水) 09:57:50.32ID:RVDAjcVA
PowerShellでファイルの詳細なプロパティを編集することってできますか?
評価とかタグとか下のurlに載っている300種類ぐらいの拡張プロパティです
Windows プロパティ - Win32 apps | Microsoft Learn
https://learn.microsoft.com/ja-jp/windows/win32/properties/props

プロパティの取得だけなら
$shell = New-Object -COMObject Shell.Application
$folder = Split-Path $path
$file = Split-Path $path -Leaf
$Getfolder = $shell.Namespace($folder)
$Getfile = $Getfolder.ParseName($file)
$Getfile.ExtendedProperty("System.SimpleRating")
これでできたんですけど
プロパティの編集方法は色々調べてみたんですがわかりませんでした
0041デフォルトの名無しさん
垢版 |
2023/12/13(水) 23:49:36.01ID:RVDAjcVA
>>40
インストールでちょっとつまづいちゃいましたが
やりたいことができました ありがとうございます!
0042デフォルトの名無しさん
垢版 |
2023/12/14(木) 03:02:02.55ID:EBZTu/MN
中見たら7時代のWindows-API-Code-Packとやらを拾ってきて使うのか
本来シェル名前空間からやれそうな事なのにWritePropertyへ辿りつくまでかなり遠回りしたな
0044デフォルトの名無しさん
垢版 |
2023/12/16(土) 07:52:34.43ID:fGCT2KhW
ps1ファイルをユーザーに手軽に実行してもらう方法ってないですかね

batだと単にダブルクリックするだけでいいところが、
ps1だとショートカット作って↓↓をくっつけてと、とても運用に耐えられないんですが
「powershell.exe -ExecutionPolicy Unrestricted 」
0047デフォルトの名無しさん
垢版 |
2023/12/16(土) 10:07:55.43ID:fGCT2KhW
>>46
ps1単独で解決できないものか
将来性を考えて、ps1使ってみようと思ったが、
バッチやvbsの助けがないと使いにくいんじゃイマイチだな
0051デフォルトの名無しさん
垢版 |
2023/12/16(土) 16:03:42.74ID:XRhqtdk+
埋め込むやつって結局iex経由の特殊環境だから一部の変数とか使えなくて困る
無理に使わなくていいよ
0052デフォルトの名無しさん
垢版 |
2023/12/16(土) 23:27:25.62ID:yw6xDge+
横からすみません
>>40
のインストールにチャレンジしたのですが、管理者権限のPowerShellでInstall-ModuleをしたのにImport-Moduleでdllが無いみたいなエラーが出て使えません
どなたかアドバイス頂けないでしょうか
0053デフォルトの名無しさん
垢版 |
2023/12/17(日) 00:21:34.60ID:OHxpVvei
>>52
下のURLの2つのnupkgをダウンロードして、ファイル名の後ろの拡張子を.zipに変更する
https://www.nuget.org/api/v2/package/Microsoft-WindowsAPICodePack-Core/1.1.4
https://www.nuget.org/api/v2/package/Microsoft-WindowsAPICodePack-Shell/1.1.4

microsoft-windowsapicodepack-core.1.1.4.nupkg.zip
microsoft-windowsapicodepack-shell.1.1.4.nupkg.zip
この2つのzipを適当なフォルダに解凍して、libフォルダその他が作成される事を確認。ここで必要なのはlib配下の*.dllのみ
libフォルダ内の自分のpowershell環境と適合する.NETのバージョンのフォルダから*.dllを取り出してカレントディレクトリに配置
でいけるんじゃないかな
0054デフォルトの名無しさん
垢版 |
2023/12/22(金) 07:48:19.63ID:wPcChJb5
$PROFILE ってなんなのでしょうか
$PROFILE.GetType() だと String のようですが
$PROFILE | Select-Object * で AllUsersAllHosts などが出てくるのがわかりません
$PROFILE | Select-Object * で何が起きているのでしょうか
0056デフォルトの名無しさん
垢版 |
2023/12/22(金) 09:10:30.60ID:nFOKM4xK
>>54
中身がPSCustomObjectでない変数にもNotePropertyを設定できる
ただしその変数に他の値を代入するとNotePropertyの情報は消えてしまうから用途は限定される
$a = "aaa"
$a = $a | Add-Member -PassThru "Value" "xxx"
$a = $a | Add-Member -PassThru "Value2" "yyy"
$a # aaa
$a.Value # xxx
$a.Value2 # yyy
$a | select *
$a = "bbb"
$a.Value # $null
0057デフォルトの名無しさん
垢版 |
2023/12/22(金) 09:51:40.03ID:wPcChJb5
('str' | Add-Member -type NoteProperty -Name 'wao' -Value 'Wao!' -passThru).wao
→ Wao!
(123 | Add-Member -type NoteProperty -Name 'wao' -Value 'Wao!' -passThru).wao
→ Wao!

理解した
0058デフォルトの名無しさん
垢版 |
2023/12/23(土) 21:24:52.21ID:xtnhDuDo
>>56
Add-Member は変数ではなくオブジェクトにメンバーを追加する
"aaa" と "bbb" は違うオブジェクトなんだから "aaa" に追加したメンバーが "bbb" に無いのは当たり前
0059デフォルトの名無しさん
垢版 |
2023/12/25(月) 07:53:26.01ID:5GC0Dj8P
ネイティブコマンドの出力ってPowerShell界に入るとString列になるけど
Stringのそれぞれにプロパティで元のバイナリ付けて欲しい
0061デフォルトの名無しさん
垢版 |
2023/12/25(月) 11:02:44.18ID:5GC0Dj8P
バイナリが通るようになったのは
「ネイティブからネイティブ」と「PowerShellからネイティブ」だけ
「ネイティブからPowerShell」に手軽にバイナリ通したい

バイナリ出力ネイティブ | バイナリ入力ネイティブ

として使うバイナリ入力ネイティブ用にラッパーが書きたいのに今は書けない
0062デフォルトの名無しさん
垢版 |
2023/12/25(月) 12:37:48.60ID:5GC0Dj8P
自分には必要ないから触れなかったけど
バイナリ出力ネイティブのラッパーも書けない
0064デフォルトの名無しさん
垢版 |
2023/12/26(火) 07:36:13.49ID:ghNGRT5G
引数に -i を複数回指定したいので param() を使わずに function を書いています
get-help で SYNTAX に使い方を表示するにはどうすれば良いのでしょうか
0065デフォルトの名無しさん
垢版 |
2023/12/26(火) 12:19:47.21ID:hM6Ywi/0
about_Comment_Based_Help
ttps://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_comment_based_help?view=powershell-7.4

このページの中の項目で
 スクリプト モジュールでのコメント ベースのヘルプの構文
 コメントベースのヘルプ キーワード
 関数のコメント ベースのヘルプ
 関数構文でのパラメーターの説明
 スクリプトのコメントベースのヘルプ
あたりが参考になるかも
0066デフォルトの名無しさん
垢版 |
2023/12/26(火) 16:47:47.85ID:ghNGRT5G
paramを使わずにSYNTAXを表示する方法を尋ねたのはそこを見たからでして
方法がありましたら具体的にご教示くださいませ
0068デフォルトの名無しさん
垢版 |
2023/12/26(火) 21:29:18.59ID:QC0ZGJu/
そもそもなんで -i を複数回指定したいんだろう
引数$i の型を配列にするのとは違うの?
00690064
垢版 |
2023/12/27(水) 12:51:53.61ID:1jSqRJ5E
ffmpeg.exeに毎回付けたいオプションがありまして
オプション付きエイリアス代わりのfunctionが欲しかったのです
ffmpeg -f aac -i audio.bin -f hevc -i video.bin -c copy out.mp4
のようにffmpeg.exeと同じ使い方だと嬉しい

ちなみにValueFromRemainingArgumentsで受けようとしても
ffmpeg: Parameter cannot be processed because the parameter name 'i' is ambiguous. Possible matches include: -InformationAction -InformationVariable.
と怒られます
0070デフォルトの名無しさん
垢版 |
2023/12/27(水) 13:02:29.78ID:X+3+vX99
指定する対象はaudioとvideoと決まってるんだから
-aiや-viにすりゃいい
変態的なffmpegのオナニーに付き合う必要はない
00710064
垢版 |
2023/12/27(水) 13:12:15.16ID:1jSqRJ5E
いやaudioとvideoに限らんし個数も不定なのよ
audioが言語別複数で、videoはチャプターごとに分かれて、字幕もあったり
結局ffmpegと同じ使い方ができるようにするのが面倒ない
0072デフォルトの名無しさん
垢版 |
2023/12/27(水) 13:59:38.84ID:Fe+mtIWC
ffmpegはシーケンスが意味を持つ引数になってるのよね
どういう順で記述するかによって適用される範囲が異なってくる
00740064
垢版 |
2023/12/27(水) 22:38:05.51ID:1jSqRJ5E
だからそうしてるのが理解できないのかな
paramを使わないというのは $args を自分で解釈するということ
その上でparamを使わない場合のget-helpの出力について相談したんだが
聞いた相手が想像を超えたバカだったたようだ
邪魔したな
0075デフォルトの名無しさん
垢版 |
2023/12/28(木) 08:55:34.70ID:xGxlWVWv
PowerShellにはPowerShellの流儀があるわけで
それに合わないことをやろうとすれば苦労するのは当たり前
C言語で関数型プログラミングをしたいって騒いでるのと同レベル
0076デフォルトの名無しさん
垢版 |
2023/12/28(木) 09:27:10.14ID:i2ZdA1S0
・質問者がget-helpのやり方をスレで質問
・そもそもこうすればいいんじゃね?と別解について疑問があがる
・さほど適した別解はないことが判明
・質問者に対して怒り出す

別に苦労したと文句たれてるわけでもないのに質問者がウザ絡みされて気の毒すぎる
0080デフォルトの名無しさん
垢版 |
2023/12/29(金) 11:07:50.54ID:HpMDoHHU
get-helpでヘルプを表示させる
コメントベースのヘルプを記述する
param()を使わない
という条件だったら単純にスクリプトの先頭にコメントベースで
.SYNOPSIS または .DESCRIPTION に「-iが複数使える」旨を書けばいいのでは

もしくは
param()を使わず$Argsを自前で解釈しなきゃいけないので
引数の解釈を構築するついでに
$Args.Countがゼロもしくは -help -h -? /h /?
あたりの引数で独自のヘルプを表示させちゃうとか

まぁ普通に考えたらこうならね?
0081デフォルトの名無しさん
垢版 |
2023/12/29(金) 15:57:16.18ID:SsN2lKB9
質問して答えにキレ散らかすキチゲエきてるねw
レスを投稿する


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