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が立ててね!!
2025/11/09(日) 01:50:45.56ID:/5rAS6BZ
>>640
>なお、 .NET Framework や Win32 API は、C#/VB#/C++/C といったプログラム言語からのご利用を目的として提供している機能になり、動作確認もこれらの言語で行っていただくことをお願いしております。
>また、これらの言語で正常に動作しながらも、PowerShell 上で期待通りの動作とならない場合は、プログラミング言語のご利用をお願いしておりますことをご留意ください。

あれれ?
PowerShellでたての頃って.netのオブジェクト使えるの売りにしてなかったかな?
2025/11/09(日) 09:43:41.33ID:9rrS+2ZK
最近の.NETは言語非依存を放棄してるからな
例えばSpanはPowerShellから使えない

Question about System.Span
https://github.com/PowerShell/PowerShell/issues/5897
2025/11/09(日) 10:23:37.05ID:VPZLG56/
.NET Frameworkって書いてあるからCore系の.NETは関係ないでしょ。Core系もサポートの方針は同じだろうけど。
PowerShell6以降のユーザーなんて5に比べりゃほとんどいないだろうし、
わざわざ6以降使ってる人はそんなに変な問い合わせしてこないだろうからサポート的にはあまり問題にならないんだろう
2025/11/18(火) 00:02:06.52ID:mC1Jcub0
c#14でファイルベースでスクリプトライクに書けるようになった
もうpowershellはオワコン!
645デフォルトの名無しさん
垢版 |
2025/11/18(火) 17:30:44.99ID:d9hs+rsN
それパイプは直感的に書けるか?
2025/11/20(木) 16:43:19.74ID:11rVJeas
5ってまだ共存してるの?UTF8BOMの問題があるのでcmdでも使えばいい気がするが
2025/11/20(木) 17:49:39.55ID:UDbnkgrO
PowerShellは速度も使い勝手もこのbatに勝てなかった

@echo off
%windir%\Microsoft.NET\Framework64\v4.0.30319\csc.exe /nologo %1
if errorlevel 1 exit /b
"%~dpn1.exe"
2025/11/20(木) 21:31:44.69ID:QY1RnXH9
C#はPowerShellみたいにWMIを簡単に扱えないじゃん

WMI インスタンスの取得
https://learn.microsoft.com/ja-jp/windows/win32/wmisdk/retrieving-an-instance
2025/11/21(金) 09:24:25.92ID:+qc1E8Ol
比較
OS標準だとC#は古いやり方しかできなそう

<PowerShell>
Get-WmiObject -query "SELECT * FROM Win32_Process" | ForEach-Object {
 $name = $_.Name
 $id = $_.ProcessId
 . . .
}

<C#>
foreach (var p in new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_Process").Get())
{
 var name = p["Name"];
 var id = p["ProcessId"];
 . . .
}
2025/11/21(金) 10:03:57.43ID:3+xXClvM
>>640
最初は分けて書いてるがそれ以降のPowershellが
Windows 付かない方のPowershell 限定なのか
Windows 付く方も含めてなのかよくわからない

>>641
無印 は.Net Framework 向けでないという表現なのか
無印も.Net Frameworkだめというのかどっちなのか

.NET Framework上で動くのがWindows Powershell
3.5.1(まだある) + 2(廃止)
4.8.1 + 5.1 現行のプリインストール
.NET 上で動くのがPowershell
core2or3 + 6-7.0
5.0 + 7.1 以降
やはり改めて確認しないとわからない
なんで分かりやすい別の名前にしなかったのか
651デフォルトの名無しさん
垢版 |
2025/11/22(土) 10:00:08.95ID:X6U8TT//
WMIって非推奨なんだっけ
普通に業務で使ってるけど
2025/11/22(土) 15:21:40.53ID:LaYCYKWP
Windows クライアントの非推奨の機能
https://learn.microsoft.com/ja-jp/windows/whats-new/deprecated-features

WMIC ユーティリティは非推奨となり、今後の Windows リリースで削除される予定です。 このユーティリティは、WMI のWindows PowerShellに置き換えられます。 この非推奨は、 コマンド ライン管理ユーティリティにのみ適用されます。 WMI 自体は影響を受けません。
2025/11/22(土) 19:36:43.52ID:F8YvH3R6
wmiなくなる話はないが使い方変わってる
Powershell 6以降WMI v1コマンドレット無い
今のところWindows Powershell 無くす話はないが
書き直すならPowershell でCIM (WMI v2)コマンドレットにしておいた方が無難?
https://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.5#wmi-v1-cmdlets
2025/11/26(水) 15:45:38.37ID:0sOrUy4b
PowerShell のプログラムで時々見かける

 if ( hoge ) {
  hogehoge
 }
 else {
  fugafuga
 }

みたいな
elseのところを2行に書く書き方が気持ち悪いし
PowerShell にコピペでインタプリタ的に実行させると閉じ括弧で構文が終わったと判断されて実行されちゃう
(さらに外側に括弧があれば構文として成り立つけど)
2025/11/27(木) 10:58:01.72ID:iSxBbXck
オレは気持ち悪いと思ったことない
言語特有の文法とか個人個人の書き方とか色々あるし
それで別にいいじゃんって思ってる
仕事でプログラムやスクリプト使ってる人たちは
その職場のルールもあるだろうけど
素直に従っておけばいいだけ
改良の余地があるなら進言するだけだし
2025/11/27(木) 12:30:08.06ID:Z/DnqSSi
普通じゃないし普通に気持ち悪いだろ
2025/11/27(木) 12:58:20.26ID:tq5aNNAF
ベストプラクティスにはそこまで細かい規約なかった
https://learn.microsoft.com/en-us/powershell/scripting/developer/cmdlet/strongly-encouraged-development-guidelines

C#、明示されてないがサンプルは三行
これに準じると閉じてエンターで走る
https://learn.microsoft.com/ja-jp/dotnet/csharp/fundamentals/coding-style/coding-conventions
2025/11/27(木) 15:27:32.59ID:Z/DnqSSi
普通(既存宗教):
} else {
または
}
else
{

奇形(新興宗教):
}
else {
2025/11/27(木) 15:30:06.19ID:Z/DnqSSi
>>657
C#とPSは違うだろ
PSのコーディング規約なんてあるのか知らんけど
2025/11/27(木) 15:39:55.59ID:o+yFQZuV
https://github.com/akiGAMEBOY/PowerShell_mysql-to-csv/blob/master/source/Main.ps1
これは両方の記述が混在してるな
2025/11/27(木) 16:35:40.04ID:/I+q4k2H
powershell民なら
} else
と書いておく
こうすると解釈が延長するわけでelse節が無ければ次行で
{}
と書いて終わらすこともできる
これはpowershell民に限らず行志向言語の常識的イディオム
2025/11/27(木) 16:51:14.83ID:o+yFQZuV
>>661
その理由はおかしくないか?
以下のように同様の理屈が成り立つ

}
で終わらせておく
elseで続けたい場合は
else {
で始められる
2025/11/27(木) 16:53:53.08ID:o+yFQZuV
ああ、インタープリタ的な使い方ってことか
2025/11/27(木) 16:58:55.38ID:o+yFQZuV
ならとりあえず
} else {
と書いておくほうが良い気がする
2025/11/27(木) 21:48:18.93ID:L4seW1+I
elseは使わないようにする
2025/11/27(木) 23:03:58.47ID:0ZpriLCv
5.xは三項演算子がないので他の言語よりelseを使う機会が多くなりがち
2025/11/28(金) 10:07:39.92ID:YEOTrRQk
Weekend Scripter: Best Practices for PowerShell Scripting in Shared Environment
https://devblogs.microsoft.com/scripting/weekend-scripter-best-practices-for-powershell-scripting-in-shared-environment/#use-consistent-indentation
PowerShellのコーディングスタイル
https://tech.guitarrapc.com/entry/2017/12/03/230119
2025/11/28(金) 10:46:55.41ID:XwmNjHGj
>>667
「ただし、これは、普段どちらで書いているかなどに左右されますし、チームでの共通化がとれていればいいのでしょう。

ちなみに、コミュニティでは、Stroupstrupが意外と多い結果です。」
2025/11/28(金) 11:06:29.89ID:mxO2kQAk
if 真ならelse の中いかないし
if 偽ならelse の中やりたいし
else 閉じて走るのがまずい状況がすぐに思い浮かばない
2025/11/28(金) 15:12:40.52ID:XwmNjHGj
これだけアチコチで使われてるとなると新興宗教とは言えない雰囲気
レスを投稿する

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

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