[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 09/03 04:39 / Filesize : 313 KB / Number-of Response : 1023
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

PowerShell -Part 6



1 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 18:36:12.07 ID:LaQ04ZoE.net]
前スレ
PowerShell -Part 5
https://mevius.5ch.net/test/read.cgi/tech/1615994992/

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

369 名前:デフォルトの名無しさん mailto:sage [2022/06/01(水) 04:00:12.01 ID:U+A7iBPz.net]
remove-item.***なんて言う実行ファイルは存在しないから無理なのは当たり前
どうしてもstart-processに繋げないといけないの?

370 名前:361 mailto:sage [2022/06/01(水) 05:21:30.48 ID:lJWk1HAY.net]
>>362
レスありがとうございます。

> どうしてもstart-processに繋げないといけないの?
というわけではありません。

1行で管理者権限でRemove-Item C:\Users\Public\Desktop\testを実行する
ということが出来れば、どんな方法であっても構いません。

①powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process powershell -Verb runas"
②Powershellが管理者:Windows Powershellとして起動する。
③remove-item C:\Users\Public\Desktop\test を実行する

という①と③を1行でまとめる方法です。

371 名前:デフォルトの名無しさん mailto:sage [2022/06/01(水) 11:08:03.91 ID:yxFCK4Jy.net]
>>363
自分もこの問題は解決出来なかった
UAC有効な環境で管理者権限使うならStart-processか管理者権限実行なのも一緒
しかしStart-processはコマンドレット実行出来ない模様

ワークアラウンドで別のcmdスクリプト作ってそいつをStart-processで実行させるという非スマートな力業でどうにかするしかなかった

372 名前:デフォルトの名無しさん mailto:sage [2022/06/01(水) 11:27:22.75 ID:HV/k13ls.net]
powershell -NoProfile -ExecutionPolicy unrestricted -command "Start-Process -Verb runas -FilePath powershell.exe -ArgumentList ‘-command remove-item C:\Users\Public\Desktop\test'"
試してないけどこんな感じで出来ん?
不備とかエスケープ処理が必要だったりとかあるかも
powershellから昇格させたpowershell呼んでそこでdel

373 名前:デフォルトの名無しさん mailto:sage [2022/06/02(木) 00:03:43.97 ID:B9Goniqn.net]
>>365
出来ました

374 名前:361 mailto:sage [2022/06/02(木) 00:05:13.65 ID:B9Goniqn.net]
>>365
出来ました!ありがとうございます!

375 名前:デフォルトの名無しさん [2022/06/04(土) 17:47:37 ID:TSmSPUgr.net]
定義した変数のメモリ開放は$nullの代入でいいのでしょうか?
メモリリソースが足りませんとエラーがでるので。

376 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 18:56:11.76 ID:IRaDT1CY.net]
Remove-Variable
まあ設計を見直した方がいいと思うけど

377 名前:デフォルトの名無しさん [2022/06/04(土) 20:19:25 ID:TSmSPUgr.net]
ありがとうございます!



378 名前:デフォルトの名無しさん [2022/06/18(土) 20:04:49.41 ID:2rZBula1.net]
フォルダ内にあるすべての画像ファイルにおいて、その画像のWidthが1280のものだけを削除するスクリプトを作成中ですが、ファイルはどうやって削除するのでしょうか?

Get-ChildItem "D:\Download\test" | Sort Name | % {
$img = [System.Drawing.Image]::FromFile($_.fullname)
if ($img.Width -eq 1280) {
Remove-Item $_
}
}
だと
Remove-Item : Cannot find path 'D:\Download\test_01.jpg' because it does not exist.
とエラーがでるのですが、パスの設定方法がいまいちわかりません。

379 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 20:44:46.51 ID:opzT6/bZ.net]
Remove-Item $_.FullName

$_ | Remove-Item
かな

380 名前:デフォルトの名無しさん [2022/06/18(土) 20:51:53.83 ID:2rZBula1.net]
ありがとうございます。やってみます!

381 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 00:03:25.24 ID:d/5y1flf.net]
VSCode でも、コマンドプロンプト・PowerShell を使うと、
ファイル・フォルダ操作のアクセス権限が無いから、
右下のトーストに、そういうエラー通知が来る

そこで、アプリに対して、操作を許可する

それと、Windows でもファイルパス区切りに、/ を使える。
C:/Users/Owner/Documents/a.txt

382 名前:デフォルトの名無しさん [2022/06/19(日) 18:24:35.04 ID:xfiYTNc0.net]
今までこれをbatで起動させていました!
-------
sc stop DoSvc

@echo off

echo.
echo ====================
echo Enable_TaskScheduler
echo ====================
echo.

rem ----- win10_ServicePreparation_DoSvc -----
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DoSvc" /v "Start" /t REG_DWORD /d "4" /f

exit
-------
特定サービスの作動強制停止およびスタートアップ強制置換です
しかしこれでは管理者権限を付与する場合、人間がコンテキストで管理者実行をその都度選んでやらねばならず、
反映の有無も再起動が必要だったり再起動なしで切り替わったり不安定です

PowerShellのps1はそれら管理者権限付与の自動化や再起動不要が可能と聞きました
ネットにはバッチのような記述解説サイトが乏しいので、コードの代替案、またはおすすめの参考書等があれば教えてください〜

383 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 19:51:13.64 ID:k543CSlC.net]
mevius.5ch.net/test/read.cgi/tech/1597442426/857

384 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 22:46:16.09 ID:WW6NzJIS.net]
サービスを削除でぐぐれ

385 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 08:42:33.76 ID:sIvuqcVm.net]
レジストリを直接編集するな

Windows 秘話: なぞのキー
https://docs.microsoft.com/ja-jp/previous-versions/technet-magazine/dn456530(v=msdn.10)
> 変更または操作されることがまったく意図されていない設定が存在します。そのような設定を見つけたときには、とにかくそっとしておいてください。

386 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 08:48:02.21 ID:3bt1t/j5.net]
それはメーカーが分解すんなって言うのと同等の話

387 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 10:58:01.21 ID:4+IWkf9p.net]
目的がテレメトリ関連の通信の遮断だしサービス削除しかないと思うけどな



388 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 12:48:20.89 ID:LhK9JJfo.net]
Stop-ServiceやSet-Serviceあたり使えばいいんじゃね

389 名前:デフォルトの名無しさん [2022/06/20(月) 12:50:56.18 ID:E6UoKUAB.net]
ハード的家電において、メーカーの分解拒否声明は「簡単に直せる部分を民間でやられたら業績下がるやんけ」理論が殆どと、感電・火災防止が少しって感じ
同じくソフトにおいても、メーカーの調整拒否声明は「テレメトリを拒否されると情報転売が減って業績下がるやんけ」理論がほぼ全てで、僅かに不測の事態とその対応への危惧(面倒≒ユーザー側の心配はしていない)が含まれる感じ

大体、テレメトリの最終的な購入先は巡り巡ってそれらを利用したがっているガチ支那チョン露などの反社集団でしょうに
だから米国大手の支那癒着や制裁緩和の声が消えないわけで
例え吸われても、利用先が日本国内または米国のみであればそんなに問題視しませんわ

逆にDoSvcなんかは設定での表面上なOFFやグルポをしようと内部でMB単位のダウンロードをしっかりしていますし、
DoSvc動作用の基礎データか何かと期待したいものの時間経過で増大します→つまり120%ガチテレメトリなんですよ
そしてスタートアップを無効にしなければOS設定にかかわらず強制実行+勝手に通信+削除しようと復活増量し続ける
無効にしたスタートアップさえ手動(トリガー)へ勝手に戻される→高頻度自主改変がなければOSから「DoSvcの無い空間」を作り出せない

こんなソフトの癌とも言えるものを放置出来る方々の無神経さは平和の極みですな
安いからっつって支那産PCを大量購入し自衛隊へ配布した馬鹿で愚かな国賊官僚と同レベルに思う

390 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 14:23:54.66 ID:XSN9SiQv.net]
>>375>>382 でいいのかな
テレメトリを目の敵にするのは勝手だけど
だからってレジストリを直接編集していい事にはならないからね

391 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 14:47:00.73 ID:YswTafv8.net]
会社の物とかでなければレジストリくらい好きに弄ったらいいだろ
それで何かあっても自己責任ってだけで

392 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 14:58:58.89 ID:h1SesB6c.net]
レジストリ編集では期待通りにいかないことを体験的に踏まえた上で上手くいく手順としてPSでやりたいって流れの質問なのにレジストリ編集するな!ってクソバイスやん
自己責任を理解せずに杓子定規で正しさを主張し続ける人にはアレな傾向を感じざるを得ない

393 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 15:20:32.49 ID:4G+nodK/.net]
batはレジストリの値を弄ってるのみにしか見えん
この後にPCを再起動でもさせるのか?

394 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 15:32:06.62 ID:JJsUxIz5.net]
だいぶ前から色んなところで聞いているけど
タスクマネージャーで権限がないから書き込めないとか
黒窓が出るのが嫌だとか
原因を追求する気もないのに聞いて回るクソヤロウだよ

395 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 15:46:09.48 ID:3ZXlTK7A.net]
>>378
レジストリの変更はともかく
この記事の「おしゃれなレストランにいると考えてみてください」
という謎の例えはどうかと思うw

396 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 17:32:51.93 ID:6RdOG7wm.net]
>>386
弄ってるよ
その続き読んだ?
引き続きレジストリ弄りたがってるとしか読めないならアスペかもな

397 名前:デフォルトの名無しさん [2022/06/20(月) 18:28:34.00 ID:E6UoKUAB.net]
バッチスレは論外ですな
batやスケジューラの挙動に関して最初から細かく説明していたのですが、どう考えてもガチ支那の五毛っぽいDQNが私の最後のレスを部分的にチラ見しただけで、答えている感じでしたね^^;
冷やかしがオナニーしている状態で、バッチスレの名が泣いていました

原因も提示し、それら打開策などの例や実施結果を挙げつつも、堂々巡りの、それもむっちゃ浅い既出内容をドヤ顔で書き込まれる感じ
バッチスレで唯一のプログラミングスレらしい収穫は「俺だったら.ps1で作る」という言葉、ただひとつのみでしたわorz

あとはなかなかまとまった時間が作れず、もう少ししたらps1版のサービス削除などもネット検索・吟味できそうです

最も盛んでしたwinXP時代にソフトを制作していた年代は今50前後?で開発・更新停止などが相次いでいますよね
そんで2022年現在、高校辺りでプログラミングを必修とする云々が出ている
間が20年くらいスッカラカンなのは日本の経済力低迷を表しているようで大変残念です
そりゃ今の官僚層が自衛隊へ支那産PC送ったりするはずですわ、そんなのが国を回しているんだから^^;



398 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 20:16:43.25 ID:+SBlN13D.net]
直接編集しちゃいけないなんてルールはないから好きにしな
無知が無学のまま弄った責任を負わされることを防ぐためのおまじないでしかないよ

399 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 20:23:12.95 ID:ItZjQb2L.net]
行き着いた答えがレジストリ書き換えの定期実行だから頭悪いにも程がある

400 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 21:31:17.15 ID:yjTGWQu/.net]
俺はちゃんとバッチスレにサービスの設定を変えるコマンドの事書いたぞ
コマンドのドキュメントのリンク付きで

このスレでも他の人が設定変更用のコマンドレットのこと書いてるし
何をどう見てるのやら

401 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 22:24:09.27 ID:4G+nodK/.net]
レジストリなんて不整合があれば書き戻されることもあるのでレジストリ弄るだけで解決しない

402 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 00:22:01.55 ID:KK61fTqr.net]
てかバッチスレが余りにも低水準かつ五毛全開だったからこそ呆れ、唯一のまともなアドバイスに従ってパワシェへ切り替えようとしているのにさ

わざわざ別スレのリンク貼ったりパワシェスレへ出張(笑)してきたり、ほんま意味不明ですわw

ま、ストーカー云々の類いはリアルもネットも気色悪いですしバッチスレ関係者から得られるものが無いのも経験済み
似た主題なので両方のスレを高頻度で訪問しているのかな、そう思うことにして特定のレスは流し聞きしときますよwww

403 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 00:36:09.32 ID:xELEw2uC.net]
Linux なら、systemd とか

Windows の仕組みは知らないけど、
レジストリはその結果を収めたデータベースだから、
結果をいじっても問題解決にはならない

設定は各アプリ製作者が作っているものだから、
製作者以外の人間にできる事は、アプリをアンインストールする事だけ

設定にも様々な依存関係があるから、
アプリの内容も分からない人が、ある設定を変えても、どう作用するか分からない

例えば、アプリのメモリが解放されなくなって、
他のアプリも動かなくなるかも

それに設定を変えても、再起動しないと有効にならないかも知れないし、
再起動すると、設定が元に戻るかも知れない

OS 起動時の処理に、設定読み込みを登録しているかも知れない

404 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 09:15:38.14 ID:lQ/zAxwG.net]
ウダウダと一体何の話をしてるんだ
いいからStop-ServiceとSet-Service使えよ
ただ老人がじゃれ合いたいだけなのか?

405 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 11:49:55.72 ID:+f2eC/vV.net]
こんな辺境にまでやべーやつ | Out-Null

406 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 20:51:18.50 ID:At4JlVSH.net]
>>375
管理者やSYSTEMじゃなくてTrustedInstallerとして実行しても駄目か?
もちろんレジストリをいじるんじゃんなくてSet-Serviceを使うんだぞ
もう見てないかもしれんが

407 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 22:28:41.71 ID:OsaOMnRZ.net]
わざわざ召喚しようとする馬鹿発見伝



408 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 13:29:04.40 ID:VuoDyj+3.net]
最近foreach文のコレクションの要素を受け取る変数の名前をつけるのが
めんどくさくって
for文のカウンター変数の名前に i を使うのはよくありますが
foreachにも同じような定石ってありますか?

409 名前:デフォルトの名無しさん [2022/06/24(金) 13:47:20.90 ID:4Qrsm7mD.net]
aオブジェクト名

410 名前:デフォルトの名無しさん [2022/06/24(金) 14:25:06.98 ID:K2we1Lar.net]
e

411 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 20:56:03.77 ID:EMaN3eAt.net]
Item

412 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 23:55:58.07 ID:/S8ogjuv.net]
item, element

413 名前:デフォルトの名無しさん [2022/06/26(日) 07:43:19.31 ID:G39l7ngg.net]
例えば$url = "https://yyyy.xxx/aaa/bbbb/2/"があり、最後の[2/]をカウンタを使ってアクセスしたいとおもいます。
その際、$nextUrl = ($url -replace ".{2}$") + $cnt + "`\"
で行けると思ったのですが、何か間違えていますでしょうか?

414 名前:デフォルトの名無しさん [2022/06/26(日) 08:16:14.03 ID:JGEtGMnz.net]
-replaceの使い方を間違えてる

415 名前:デフォルトの名無しさん [2022/06/26(日) 11:32:39.54 ID:G39l7ngg.net]
replaceですか。ありがとうございます

416 名前:デフォルトの名無しさん [2022/06/29(水) 00:00:51.24 ID:x2p/lm6W.net]
arrayListの使い方がわからない。

----------------------------
$arrayReturn = new-object system.collections.arrayList
$col = new-object PSObject | select "A", "B", "C"

foreach ($i in 1..3) {
$col."A" = $i
$col."B" = $i + 1
$col."C" = $i + 2
$nul = $arrayReturn.add($col)
}

$arrayReturn
----------------------------

上記のコードを実行すると以下のようになってしまう。
A B C
- - -
3 4 5
3 4 5
3 4 5

本当は以下のようにしたい
A B C
- - -
1 2 3
2 3 4
3 4 5

なぜうまくいかないのか謎。

417 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 00:51:19.50 ID:cjQj ]
[ここ壊れてます]



418 名前:2yfD.net mailto: $col のnew-object生成をforeach{}内に移動してみては []
[ここ壊れてます]

419 名前:デフォルトの名無しさん [2022/06/29(水) 07:19:16.62 ID:x2p/lm6W.net]
>>410
うまくいった
はあああああああああああああ!?
なんで!? なんでこれでうまくいくんだ!?

ループの中に入れたら毎回$colの中身が破壊されると思うんですけど????

420 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 08:20:00 ID:8GN1KOCk.net]
PSObjectは参照型
ArrayListに追加されるのはオブジェクトそのものじゃなくてオブジェクトの参照だけ

421 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 09:10:01.99 ID:ofsaM31D.net]
>>412
完全に理解しました。thx

422 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 14:16:08.11 ID:SZ5j8L6g.net]
PSReadLine 2.2.6 enables Predictive Intellisense by default
https://devblogs.microsoft.com/powershell/psreadline-2-2-6-enables-predictive-intellisense-by-default/
入力しようとしているコマンドを予測 〜PowerShellで「Predictive IntelliSense」が既定有効に
履歴やプラグインなどを参考に推測できるIntelliSense機能
https://forest.watch.impress.co.jp/docs/news/1420812.html

423 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 21:06:08.62 ID:h+5hcb7e.net]
PSCustomObjectは積極的に使っていいものかどうか判断できない
結局C#でクラスや構造体宣言して使った方がいい気がするし
Powershellで作成したPSCustomObjectを、同ソースに埋め込んだC#コード側から参照する方法ってある?

424 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 21:46:04.47 ID:4kwBO65f.net]
>>415
dynamic

425 名前:デフォルトの名無しさん mailto:sage [2022/06/30(木) 01:46:52.84 ID:LVSNczoT.net]
>>415
New-Object PSCustomObject や [PSCustomObject]@{} は
Win10 の v5.1 なら Add-Type の C# でなくとも class があるからスクリプトでの使用頻度は下がった。
Win7 の v2 では function NewABC {} みたいなコンストラクタ的な関数用意して積極的に使ってた。

Win10 の今でも ConvertTo-Csv へ渡す前に日時や数値を書式指定して文字列化するために使ってる。
CSV に日本語カラム名が欲しい時に日本語プロパティ名の class 用意するのはなんか気が引けるけど
[PSCustomObject]@{} や Select-Object での誰が見ても短命なオブジェクトなら気にならない。

データだけでメソッドがなく複数作るなら System.Data.DataTable も有り。
.Columns.AddRange([string[]]) でプロパティ(DataColumn)定義して
.Rows.Add([Object[]]) でデータ(DataRow)追加する使い方なら意外と手軽に使える。
日本語カラム名の使用も問題ないし。

426 名前:デフォルトの名無しさん [2022/07/06(水) 09:44:42.33 ID:L+R7c7Gd.net]
-replaceと-ireplaceの違いって分かりますか?
まだ勉強中ですが、当然のように出てきて両方同じ説明しかされてないので気になって調べてみてもどこにも解説がなくて…
扱える値の範囲が違ったりとかするんでしょうか?
普通はどっちを使うものなんですか?

427 名前:デフォルトの名無しさん [2022/07/06(水) 11:05:49.65 ID:MXaUuSJv.net]
1.完全に理解した←初心者
2.チョットワカル←中級者
3.全然判らん←上級者



428 名前:デフォルトの名無しさん mailto:sage [2022/07/06(水) 11:41:17 ID:HSp/EaB5.net]
>>418
https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-7.2
既定では、 -replace 演算子では大文字と小文字が区別されません。
大文字と小文字を区別するには、次を使用します -creplace。
明示的に大文字と小文字を区別しないようにするには、次を使用します -ireplace。

replaceの既定動作を変更する方法は知りません。
大文字小文字を区別しようがしまいがどっちでもいいときは replace
そこんとこ間違ってもらっち

429 名前:瘢「るときは ireplace か creplace

普通がどっちかは分かりません。
[]
[ここ壊れてます]

430 名前:デフォルトの名無しさん mailto:sage [2022/07/06(水) 13:11:25.93 ID:c6fRPAAn.net]
例えば、Ruby のCSV 処理なら、

require 'csv'

input_csv = <<"CSV_TEXT"
id,果物
1,りんご
21,スイカ
33,みかん
CSV_TEXT

# 2次元配列
ary = CSV.parse( input_csv, headers: true ).each do |row|
row[ '果物' ] = "レモン" if row[ 'id' ].to_i == 21
end

p ary.to_a
#=> [ ["id", "果物"], ["1", "りんご"], ["21", "レモン"], ["33", "みかん"] ]

431 名前:デフォルトの名無しさん [2022/07/06(水) 13:16:19.97 ID:iisDFTgh.net]
>>420
ありがとうございます!
理解できました!
明示的に大文字の区別をつけるかつけないか指定する際に利用するものなんですね!
たしかにそれだと【普通】は場合によるとしか言えないですよね

432 名前:デフォルトの名無しさん mailto:sage [2022/07/06(水) 20:34:21.87 ID:428zggiP.net]
迷ったら明示でいいと思う

433 名前:デフォルトの名無しさん mailto:sage [2022/07/06(水) 22:49:51.62 ID:pVM7wVd2.net]
パワシェルの-replaceは勝手に右辺を正規表現と解釈するから
それが必要ない場合は文字列.Replace()のがいいよ

434 名前:デフォルトの名無しさん mailto:sage [2022/07/07(木) 08:47:36 ID:fDYvmpy4.net]
>>423
そうですね!

>>424
おお、知りませんでした。
ありがとうございます!

435 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 13:33:50.89 ID:EP1tRVB4.net]
Windowsでコマンドラインシェルとして使う場合に
外部コマンド引数のクオーテーションの振る舞いをなんとかして欲しい

例えばpwshを外部コマンドとして使うとして

pwsh -nop -c "`$a = 'abc'; `$a | out-host"

は期待通り abc が出力されるのに

pwsh -nop -c '$a = "abc"; $a | out-host'

はエラーになるの不便過ぎる

436 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 20:51:35.26 ID:Bjqd/A21.net]
補完が有効になってやっとまともに使えるようになったなよくこんなクソ長くて覚え辛くて入力し辛いコマンドレットなんて使ってるよなお前ら
しかしMSって言語やフレームワークでもそうだが命名規則にセンスねーゎ
なんでnpmやgitみたいに使いやすく作れないのか壊滅的にセンスねーゎ

437 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 21:48:06.89 ID:SkLqj5eb.net]
互換性のあるエイリアス
https://docs.microsoft.com/ja-jp/powershell/scripting/learn/compatibility-aliases



438 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 22:10:30.33 ID:EP1tRVB4.net]
PS> pwsh -nop -c "`$a = 'abc'; `$a | out-host"
abc
PS> pwsh -nop -c '$a = "abc"; $a | out-host'
abc: The term 'abc' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

これほんと何がどうしてこうなるの?

439 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 23:27:21.05 ID:UIv0TQaX.net]
pwsh.exeへのコマンドラインとして解釈されるから、まずOSのルールに従って引数リストが次のように分解される
-nop
-c
'$a
=
abc
;
$a
|
out-host'
pwsh.exeの内側でコマンド文字列を再結合した時点では既にダブルクォートが失われているという寸法

440 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 23:35:00 ID:v6YmQ/+d.net]
PS内で呼び出すならスクリプトブロックでよくね?

441 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 23:40:56 ID:UIv0TQaX.net]
無茶言うなよ…
pwshの-cより右ならスクリプト扱いで、cmdやその他大勢の右ならOS解釈? pwshという同名のオレオレアプリの類だったときもスクリプト扱い?
言語仕様の一貫性的にあかんことになるだろ常考

442 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 23:49:47 ID:cCHwpa3p.net]
もしかして
リモートコマンド

443 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 23:52:42 ID:PFPNTTsE.net]
>>429
「'$a = "abc"; $a | out-host'」の「'〜'」は
そのコマンドライン上の文字列リテラルである事をPowerShellに指示してる事になって
PowerShellは1つの文字列「$a = "abc"; $a | out-host」の事だと受け取る。

コマンドが実行ファイルの実行で、その引数の文字列にスペースがあると
その文字列全体が「"〜"」で括られて文字列「"$a = "abc"; $a | out-host"」になる。
↑Windows PowerShell v5.1のTrace-Commandで確認
↓自信なし
powershell実行時の引数パース時に「\"」とか「"""」とかではない
単独「"」は不正な(余分な)メタキャラとして取り除かれるもよう。
で-cには「$a = abc; $a | out-host」が渡る。

>>430
確か「OSのルール」だと、実行ファイルに渡される引数は単一の文字列で、
スペースで区切ったり「"」を特別扱いするのはpowershell(pwsh).exeの独自のただし非常に一般的な仕様。
(大抵は、exeにコンパイルした際のコンパイラの仕様。)

444 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 00:09:26.45 ID:qWQ5DRIr.net]
Linuxのpowershellなら
PS> pwsh -nop -c '$a = "abc"; $a | out-host'
abc
になるんだろうな

445 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 08:04:26 ID:qWQ5DRIr.net]
コマンドプロンプトで
pwsh -nop -c "$a=\"abc\"; $a | out-host"
とするのは " 内部の " をエスケープするように見えて自然に納得できる
Windows版のPowerShellだけ
pwsh -nop -c '$a=\"abc\"; $a | out-host'
とするのは ' 内部の " をエスケープさせられて気持ち悪すぎる
おまけにLinux版でこう書くと動かないんでしょ

446 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 10:32:21.09 ID:d4+i07Ea.net]
>>436
コマンドプロンプト(cmd)だともっと高難易度の問題がある。
cmdのメタキャラ(&, |, <, >など)が偶数番目の「"」の後にあるとだめとか、
powershellコンソール以上に問題有り。
pwsh -nop -c "$a=\"&abc\"; $a | out-host"

同一のシェル名(pwsh)であっても、OSによって他プロセス起動の作法が違うのは仕方ないと思う。
国や地域で言葉や文化が違っても仕方ない感じ。
(POSIXとかに規定あればば別だが。)

例えば「ping」を動かすだけにしても結局オプションも挙動も違う訳だし、
現時点では他プロセス使う時点で、移植性考慮はプログラマの領分かな〜と思ってる。

447 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 10:48:49.98 ID:d4+i07Ea.net]
PowerShellのコンソールやスクリプト上で他プロセスを起動したい場合、
自分だとほぼ下記2通り。

(A) System.Diagnostics.ProcessStartInfoを使う。
(ちゃんと制御したい場合。スクリプトだと基本これ。)
$si = [Diagnostics.ProcessStartInfo]::new()
$si.FileName = 'powershell.exe'
$si.Arguments = '-nop -c "$a = \"abc\"; $a | out-host"'
$si.UseShellExecute = $false
$proc = [Diagnostics.Process]::Start($si)
$proc.WaitForExit()

(B) 引数を1つずつ@()に入れ、「"〜"」としたい場合は最初から値に含める。
(コマンドラインとかで手軽に。…手軽?)
& 'powershell' @('-nop', '-c', '"$a = \"abc\"; $a | out-host"')



448 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 10:59:09.60 ID:qWQ5DRIr.net]
MSYS2のbashもWindows上のコマンドラインシェルだけど
pwsh -nop -c "\$a = 'abc'; \$a | out-host"
pwsh -nop -c '$a = "abc"; $a | out-host'
のどちらでも動くんだよね
PowerShellには頑張って欲しい

449 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 14:41:14.65 ID:OGG0CV73.net]
わざわざProcessStartInfo使うとかめんどくさいわ
Start-Processでいい

Start-Process -FilePath 'powershell.exe' -ArgumentList '-nop -c "$a = \"abc\"; $a | out-host"' -NoNewWindow -Wait

450 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 21:16:37.86 ID:d4+i07Ea.net]
ProcessStartInfoが面倒なのは同意。
Start-Processで済む時は使う事もあって
大体はUseShellExecute = $trueの時かな。

Start-Processを使わない一番の理由は-Redirect*がファイルパス指定な事。
出力を無加工でファイル出力したい事がまずないので使いづらい。
なんで-PassThruのProcessオブジェクトの出力制御変更のスイッチじゃないのか。
標準出力・エラーを同時に制御するとデッドロックしやすいからかな。
Start-Processがその辺うまい事制御してくれたらスクリプトでも使うんだけど。

451 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 21:55:59.58 ID:0vXUA52p.net]
コマンドラインパラメーターの処理はexeをビルドした処理系のスタートアップコードに依存するのだ
MSのC/C++やMingwとかで微妙に変わってくるのだガハハ
WindowsでC/C++/C#の場合argvとかではなくWin32APIのGetCommandLineで取得するのが一番正解に近い

452 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 22:06:03.52 ID:qWQ5DRIr.net]
"" や \" が必要な仕様は気持ち悪いって話をしてたつもりが…
ネイティブコマンドを呼ぶのはコマンドと引数を並べて書くだけが普通でしょ
about_Parsing の icacls を呼ぶ例もそのまま並べてる
そのままと異なる動きをさせたい時以外は、>>438>>440 も面倒すぎる

453 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 22:40:11.92 ID:GKrnmeJx.net]
引数のワイルドカードを展開するかしないかみたいなやつね

454 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 23:17:22.46 ID:d4+i07Ea.net]
MSもこの辺の気持ち悪さ・分かりづらさは分かってるみたいで
core v7とかだと環境変数かなんかで、パースルール変更できるんじゃなかったっけ。
Win10のv5.1しか使わないから知らんけど。

455 名前:デフォルトの名無しさん [2022/07/10(日) 00:25:59.02 ID:qiFT6lHF.net]
実行順がわかりにくい

456 名前:デフォルトの名無しさん mailto:sage [2022/07/10(日) 00:55:31.74 ID:KsOikrPY.net]
何言いたいかがわかりにくい

457 名前:デフォルトの名無しさん mailto:sage [2022/07/10(日) 01:17:57 ID:KsOikrPY.net]
>>443
> ネイティブコマンドを呼ぶのはコマンドと引数を並べて書くだけが普通でしょ
例えば
$a = "abc"; cmd /c "echo $a"
を実行したら「$a」と出力されて欲しくて
「abc」と出力されて欲しければ>>438,440ってこと?
好みが分かれるところかなー



458 名前:デフォルトの名無しさん [2022/07/10(日) 04:27:28.58 ID:qiFT6lHF.net]
UNIXのシェルスクリプトのマネにならないようにした結果がこれ

459 名前:デフォルトの名無しさん [2022/07/10(日) 04:30:45.24 ID:qiFT6lHF.net]
PowerShellは、記号に独自の意味を持たせているから、PowerShell職人を養成しないと使いこなせない。

460 名前:デフォルトの名無しさん mailto:sag [2022/07/10(日) 09:49:01.94 ID:os7PFybL.net]
PowerShell in ActionにはUNIXシェルを参考にしたっていろんな所に書いてあるけど
たとえば比較演算子とか

461 名前:デフォルトの名無しさん [2022/07/10(日) 10:20:51 ID:j6DdFbos.net]
powershellはPerlの匂いがする
俺が好きになった理由はここ

462 名前:デフォルトの名無しさん mailto:sage [2022/07/10(日) 20:59:21.65 ID:KsOikrPY.net]
>>450
記号に独自の意味を持たせてる言語は多数あるのでは。
というか程度の差こそあれ殆どでは。
学習せず「使いこなせる」言語はないでしょ。

463 名前:デフォルトの名無しさん mailto:sage [2022/07/10(日) 21:53:38.94 ID:bG/pnkmn.net]
powershellの記号が特殊とかはあまり思わないな
それより配列の扱いがトリッキーとかの方が職人の養成が必要と思う

464 名前:デフォルトの名無しさん mailto:sage [2022/07/10(日) 22:11:42.01 ID:PiYySnCe.net]
ファイル名に[]が含まれてて苦労した人なのかなと思った

465 名前:デフォルトの名無しさん [2022/07/10(日) 22:53:56.17 ID:qiFT6lHF.net]
>>453
バッチファイルとの相性が最悪なのに気づかないとは情けないよ、あんた。

466 名前:デフォルトの名無しさん [2022/07/10(日) 22:55:51.37 ID:qiFT6lHF.net]
>>451
あらゆる言語を参考にして、いろいろ混ぜ込んで、奇妙奇天烈なものになってしまった。

467 名前:デフォルトの名無しさん mailto:sage [2022/07/10(日) 23:58:19.25 ID:RTsqHO1/.net]
まあ最大の問題は、空白をトークンの区切り、改行を入力に終わりとしたことだな



468 名前:デフォルトの名無しさん mailto:sage [2022/07/11(月) 00:03:16.90 ID:bX2QAhdS.net]
変数のスコープが他と違うPowershellには何も期待してない
グローバル変数を更新したつもりがローカル変数と見なされたりして使い難すぎる
グローバルデータを全部.NETのコンテナに逃がしてようやく使えるようになった

469 名前:デフォルトの名無しさん [2022/07/11(月) 00:04:59.61 ID:vt1vW9IA.net]
ファイルや文字列の操作の構文がヘンテコすぎる






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<313KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef