PowerShell -Part 7

1デフォルトの名無しさん
垢版 |
2023/11/29(水) 16:07:49.46ID:0g8RZ7sB
前スレ
PowerShell -Part 6
https://mevius.5ch.net/test/read.cgi/tech/1644744972/

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

learn見たら「-includeは-pathの末尾が*じゃないと動かない(-recurseなら省略可)」ってはっきり書いてたわ
2023/12/01(金) 22:30:34.62ID:S2lEQVa3
ファイルシステム側に検索オプションを指定するのが-Filterで
PowerShell自信でフィルタリングするのが-Includeだっけ、懐かしい話だ
2023/12/02(土) 08:48:18.48ID:Fkw0aBk3
gciの表示が間延びしてるのを詰めたい
ModeとLastWriteTimeにあんなに幅いらんやろ
9デフォルトの名無しさん
垢版 |
2023/12/02(土) 20:49:53.53ID:CMdctbaC
4ですみなさんありがとうございます
当然質問する前にLearnで確認していたのですが、てっきりワイルドカードも使えるよ!ぐらいのニュアンスだと思っていました
大人しくwhere-object使います。すっきりしましたm(_ _)m
2023/12/02(土) 21:42:01.24ID:B4ObjCpy
>>8
Format-Table -AutoSize
2023/12/03(日) 07:28:03.75ID:tKLbRUl7
すまんコマンド追加で整形したいんじゃない
デフォルトの形式をいじりたい
2023/12/03(日) 09:12:08.68ID:GWzH2m5A
about_Format.ps1xml
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_format.ps1xml
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

としてみたら全然違う結果になってしまった
出てきたものの数字を変えるだけじゃだめなのかな
2023/12/03(日) 13:55:42.15ID:tKLbRUl7
なぜTable形式でなくList形式になるのでしょうか
2023/12/03(日) 17:41:11.89ID:tKLbRUl7
ファイルとディレクトリが混ざってるからだった
あとは日付と時刻を詰めたい
16デフォルトの名無しさん
垢版 |
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

として使うにはどうするのでしょうか
2023/12/05(火) 14:36:11.77ID:lXd0pnoy
できない
そういうのはfunctionとかfilter作ってやる
2023/12/05(火) 14:53:09.61ID:7QjuGoaz
パラメーターを持つコマンドの代替名
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_aliases#alternate-names-for-commands-with-parameters
19デフォルトの名無しさん
垢版 |
2023/12/05(火) 15:54:15.98ID:RGe8cD49
そこまではたどり着いたのですが苦戦しています
正直言って手も足も出ません
どうすればよいのでしょうか
2023/12/05(火) 21:04:00.28ID:rxI6O073
何がしたいのか知らんけどpowershellのパイプはオブジェクトに変換しないとだからtarが期待する入出力にはならんだろうな
ほれ
function tarout {
tar -x -O -f $args
}
tarout - file
2023/12/05(火) 21:27:27.93ID:7QjuGoaz
>powershellのパイプはオブジェクトに変換しないとだからtarが期待する入出力にはならんだろうな

PSNativeCommandPreserveBytePipe
https://learn.microsoft.com/ja-jp/powershell/scripting/learn/experimental-features#psnativecommandpreservebytepipe
22デフォルトの名無しさん
垢版 |
2023/12/05(火) 21:47:53.20ID:RGe8cD49
>>0020
それは最初に自分で試してだめだったやつですな
パイプでなく標準入力を読もうとしてCtrl-Z待ちで止まるやつ
Windows 10 から tar.exe あるんで試してから回答してもらえると嬉しい

>>0021
PowerShellからネイティブは通る
ネイティブからネイティブは通る
ネイティブからPowerShellは通らない
だからPowerShellでtaroutは書けないってこと?
だとしたらPowerShellくそすぎる
23デフォルトの名無しさん
垢版 |
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はくそ
2023/12/07(木) 08:28:41.09ID:c+XrIY2G
beginブロックで$inputを使うとバイトストリームが出てくるようになって欲しい
そしたらtaroutもこう書けるようになるのに

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

でもこれは難しいだろうな
2023/12/07(木) 15:51:22.78ID:X0+oSYJ4
beginじゃない別のキーワード用意するレベルじゃないと難しいだろうなぁ
2023/12/08(金) 08:18:26.16ID:tWmRPca2
いやbeginブロックで十分でしょ
今はbeginブロックの$inputは無意味なんだから有効活用

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

これでなんでhogeが出力されるんですか?
Nullになるかとおもったんですが
2023/12/09(土) 21:01:47.88ID:2orRcob9
型を合わせるために、NULLが空文字に変換されるから。

そこでNULLを期待するのはRDBとかの場合だね。(RDBにもよるけど。)
2023/12/09(土) 21:38:52.15ID:NdJUV/GZ
https://learn.microsoft.com/ja-jp/powershell/scripting/lang-spec/chapter-06?view=powershell-7.3#68-conversion-to-string

string 型に値を変換する規則は次のとおりです。

・null 型の値は、空の文字列に変換されます。
37デフォルトの名無しさん
垢版 |
2023/12/09(土) 21:38:52.87ID:P3Dp1Ib1
>>35
なるほど
ありがとうございます

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

…PowerShellは難しい
38デフォルトの名無しさん
垢版 |
2023/12/09(土) 21:42:29.77ID:P3Dp1Ib1
>>36
ありがとうございます
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")
これでできたんですけど
プロパティの編集方法は色々調べてみたんですがわかりませんでした
2023/12/13(水) 21:26:19.77ID:SOLvnyCP
https://www.powershellgallery.com/packages/PSSystemProperties/
2023/12/13(水) 23:49:36.01ID:RVDAjcVA
>>40
インストールでちょっとつまづいちゃいましたが
やりたいことができました ありがとうございます!
2023/12/14(木) 03:02:02.55ID:EBZTu/MN
中見たら7時代のWindows-API-Code-Packとやらを拾ってきて使うのか
本来シェル名前空間からやれそうな事なのにWritePropertyへ辿りつくまでかなり遠回りしたな
NGNG
あぼーん
2023/12/16(土) 07:52:34.43ID:fGCT2KhW
ps1ファイルをユーザーに手軽に実行してもらう方法ってないですかね

batだと単にダブルクリックするだけでいいところが、
ps1だとショートカット作って↓↓をくっつけてと、とても運用に耐えられないんですが
「powershell.exe -ExecutionPolicy Unrestricted 」
2023/12/16(土) 08:42:06.64ID:5tZpbEW3
>>43
これならできそう
2023/12/16(土) 09:34:51.52ID:pgUnJUCg
>>44
ググればバッチファイルにPowerShellスクリプトを埋め込む方法が見つかるよ
2023/12/16(土) 10:07:55.43ID:fGCT2KhW
>>46
ps1単独で解決できないものか
将来性を考えて、ps1使ってみようと思ったが、
バッチやvbsの助けがないと使いにくいんじゃイマイチだな
2023/12/16(土) 10:42:25.24ID:nDmmdgrP
ps1はコード署名して、グループポリシーで証明書配付しよう
2023/12/16(土) 12:13:16.06ID:fGCT2KhW
>>48
そこまでするなら、スクリプトよりexe作った方が早・・・
2023/12/16(土) 12:35:03.91ID:K5lUjnCI
>>43
やってみない手はない
2023/12/16(土) 16:03:42.74ID:XRhqtdk+
埋め込むやつって結局iex経由の特殊環境だから一部の変数とか使えなくて困る
無理に使わなくていいよ
2023/12/16(土) 23:27:25.62ID:yw6xDge+
横からすみません
>>40
のインストールにチャレンジしたのですが、管理者権限のPowerShellでInstall-ModuleをしたのにImport-Moduleでdllが無いみたいなエラーが出て使えません
どなたかアドバイス頂けないでしょうか
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を取り出してカレントディレクトリに配置
でいけるんじゃないかな
2023/12/22(金) 07:48:19.63ID:wPcChJb5
$PROFILE ってなんなのでしょうか
$PROFILE.GetType() だと String のようですが
$PROFILE | Select-Object * で AllUsersAllHosts などが出てくるのがわかりません
$PROFILE | Select-Object * で何が起きているのでしょうか
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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