Windows PowerShell Part5 [無断転載禁止]©2ch.net
フォルダ内のjpgの画像データを一括でリサイズするとき、拡張子をjpegではなくjpgのままで変換したいのですが可能なのでしょうか >>726
UNIXシェルの構文はもっと糞だけどな >>730
正直、余計なことしてない分シェルとしてはUnix シェルの方が使いやすい
言語として貧弱なのはあくまでもシェルが本文と割りきってるからで
言語機能を強化するためにシェルとして分かりにくくなってるPowerShell よりもツールとしては百億倍合理的 echoの仕様すら統一できてないくせに合理的だの使いやすいだの
なんのギャグやら PowerShell のように奇妙キテレツな挙動じゃないからなそこまで実害がないもの 言語としての機能はPowerShell の方が上だよ
でも単純にShell として考えた場合の実用性はbashどころかcshにも劣る まあ裏返せばCLIの使い勝手しか改善のしようがなくなっちゃっただけなんだけどね
多分10年20年先も*shの読みづらさは変わらんだろうし 読みづらさなんて最初だけ
Unix の世界は慣れれば同じルールで一貫してやっていけるから楽
PowerShell なんてパイプラインの挙動がオブジェクトや文脈で変わりまくって、かなりの経験者でも動かしてみるまでどうなるか予想できないだろ?
Unix ならしばらく勉強すればログから複雑な条件で問題行を抽出するとかできるようになる
同じ期間PowerShell 学習した奴が同じことしようとしたら、自動書式化回避するために丸一日潰すことになる
Unix でせっかく克服した
Multicsのバッドプラクティスを
ご丁寧に復活させようとしてるのがWindows だろ ということは、もう一回りすれば、良い物ができるかもしれないのだな
トンプソンみたいな人がいれば...だが > PowerShell なんてパイプラインの挙動がオブジェクトや文脈で変わりまくって
意味が分からないんで解説お願い >>738
わからないから使えてる(気がしてる)んだろう
>>739
そういうのは挙動に一貫性があって言えること
慣れたところでその慣れが極めて局所的にしか役に立たないんじゃたいして役に立たない
MSの製品はアプリもAPI もみんなそう デバッグの第一歩がいきなりログ解析じゃ話にならない・・・原始的すぎる・・・ >>742
結局丸一日考えてその程度のことしか言えないのか >>736
> PowerShell なんてパイプラインの挙動がオブジェクトや文脈で変わりまくって
具体例よろしく
まあ笑える例しか出てこないと思うけどw >>740
一貫性がないのはUNIXシェルだろ
偉そうなこと言うのはechoの挙動くらい統一してからにしろ
何のためのPOSIXなのやら >>744
昔外部コマンドをパイプでつないだらバイナリデータが化けてイーッてなった覚えがあるんだけど
あれからだいぶバージョン上がったが、そろそろ直ってる? PowerShellでパイプに流せるのはテキストかオブジェクト
バイナリ流すとテキストだと思ってUnicodeに変換しちゃうらしい 外部コマンド呼んでstderrになんか出るとエラーになるのマジでうざい
cmdletちゃうんやからLASTEXITCODEだけで判断せえよ stderrは乱用されすぎなんだよ
PowerShellのWrite-VerboseやWrite-Debugはもっと評価されるべき Windows10にPowerShell7入れたんだがGet-Clipboardが
The term 'Get-Clipboard' is not recognized...
ってなるんだけどなんで?
ちなみにSet-Clipboardは使えた なんでだろ
gmo "Microsoft.PowerShell.Management" | % exportedcommands
の出力にGet-Clipboardあるか探してみて なんか知らんが今やったら使えた
>>751 のコマンド入れたから?
できなかった時から起動しっぱなしのシェルだからそれぐらいしか考えられない & hogehoge.exe 2> "hoge[1].txt"
なんてことをたいんだけど、これだとブラケットをワイルドカード展開しようとしてエラーになる。
[WildcardPattern]::Escape()使うとエラーにはならないけどファイル名にバッククォートが入る。
どうすればいいですか?
もしくはstdoutは捨ててstderrだけパイプラインに流す方法とかありますか? (& hoge.exe 2>&1|?{$_ -is [System.Management.Automation.ErrorRecord]}).Exception|Out-File -LiteralPath 'a[1].txt'
でできた 6.0以降はWindows powerShellじゃないんだが、このスレで話してもいいの? 外部コマンドの出力をパイプラインでつないでごにょごにょしようとしたら
外部コマンドが終わらないと次の処理に行かないんだが、どういうこと?
MS-DOSに先祖返りしたんか? 7.0.1が出て.appxが復活したもののなぜかPreview扱いになってるな
Windows TerminalでもPreviewとみなされてる(アイコンがPreview版) ググると文字列は+で繋げるとありますが、
$word="坂本"
echo $word+"竜馬"
だと坂本+竜馬と表示されるのですが?
$word="坂本"
echo $word"竜馬"
だと坂本龍馬と表示される。 >>764
ありがとうございます。
分かりました。 >>763
PowerShell流にやるならechoはいらないので
$word="坂本"
echo $word+"竜馬"
としないで
$word="坂本"
$word+"竜馬"
とすれば望まれた結果になりますよ >>766
関数でも最後ならreturn要らないの? >>767
要らない
他の言語のように return $a とか書けるけど
$a
return
と同じ意味 PSでは代入などの文にせずに式を書くだけでコンソールに出るから基本echoは要らない
echoにはおそらく互換性のために、式モードと引数モードというのがあって、引数モードだと引用符が要らない
最初から
echo 坂本竜馬
と書ける
式モードにするなら
echo ($word+"竜馬")
のようにかっこで囲む
>関数でも最後ならreturn要らないの?
最後だけでなく途中に書いた式による出力も全部戻り値としてパイプに渡される
PSにおいてreturnは戻り値を返すというより関数を抜ける役割で使うもの >>763
で、簡単じゃんと思ってディレクトリもこれで繋がると思ってみたり
ディレクトリはJoin-Path使う罠 7.0.2, 6.2.6が出た
7.0.2の.msixは相変わらずPreview版扱い Previewになってるのは7.1で修正するらしい Invoke-CommandでリモートPCのGUIコマンドを実行し、かつGUIの出力先を
そのリモート上の任意のセッション(consoleやrdp-tcp)にすることってできますか? そのguiアプリがコマンドラインオプションで出力先を指定できる仕組みを持っていればできるんじゃない? ググりまくってようやく答えを見つけました↓
https://serverfault.com/questions/690852/use-powershell-to-start-a-gui-program-on-a-remote-machine
LinuxみたいにXアプリを他ディスプレイに飛ばす(xhostで許可設定して -display :N オプションをつける)
みたいな真似は、やはり仕様上困難のようです。そりゃそうですね。
というわけで、PSToolsのpsexecを使うとやりたいことができました。
@qwinstaで出力したいセッションのIDを調べる
psexec \\リモートホスト -u ユーザ名 -p パスワード qwinsta
A-iオプションにそのIDを指定
psexec \\リモートホスト -u ユーザ名 -p パスワード -i セッションID notepad
(ちなみにOpenGLみたいにローカルのコンソールセッションでないと起動できないプログラムの場合は
事前にtsconコマンドでコンソールセッションをActiveにしておくのが必要です) Powershellでディレクトリ内も含めてファイル名だけ取得することってできますか?
Get-ChildItemのオプションで-Recursiveと-Nameだとディレクトリ名もついてくる Get-ChildItem -Recursive | %{$_.Name} Get-ChildItem -Recurse -Name -File 最適解は>>780なんだろうけど
いつも Get-ChildItem -File -Recurse | % Name としてしまう ありがとう。結果は
-Nameだとディレクトリ名も入ってしまう
| %Nameだとエラー
|%{$_.Name}だとファイル名のみ表示できた
でした なんで書いたとおりに試さないの?
%Name でなく、 % の後に空白の入った % Name
% は ForEach-Object の alias だから ForEach-Object Name ってこと ついでに言っとくと -File がないとディレクトリ名も表示される >>783
エイリアスわかんない相手にエイリアスつかっちゃ駄目な奴では コマンドラインでは gci -File -Recurse | % Name だな
Get-ChildItem なんて補完するのも面倒過ぎる dirでもlsでもgciでも手になじんてるのでいいよ Get-ChildItemdirちょー手になじんてる >なじんてる
日本語は馴染んでないようだね
そういう人にしか使えないから、いまいち普及しないんだろうね 濁点のミスはスマホ入力でよくあるから気にならない
けどGet-ChildItemdirっていうワードが謎で文意がまったく掴めねぇー
エスパーすると本命は、Get-ChildItemと書きたかったけどdirを消し忘れた
対抗は、Get-ChildItem手になじんでる!と言いつつコマンドレット名間違ってましたテヘペロという高度なボケ 私はたかがPowerShellすら使えない無能ですまで読んだ >>795
お前はWin7環境を強いられている民を全員敵に回した コンソールにかき捨てならエイリアスでいいけど
スクリプトになんでもエイリアス仕込む奴のコードは扱いたくない
コードゴルフじゃないんだし あっっっっっったりまえのことだな
>>797 にもあるけど
>When working interactively at the Windows PowerShell console, the primary purpose is to accomplish something. I want to get the task completed accurately, and timely. I do not want to expend any extra effort to accomplish the task.
こういう時はaliasを使うし、
>On the other hand, when I write a Windows PowerShell script, the purpose is to have something I can use over and over again.
>The goal here is reusability, not speed of development and execution. Therefore, I do not want to use aliases in my script because it hinders readability and understanding.
こういう時はaliasを使わない
gci | ? LastWriteTime -ge 2020/8 | sort LastWriteTime
( gci | ? lastw[TAB] -ge 2020/8 | sort lastw[TAB] )
とか結構使うけど、スクリプトでは絶対こんな書き方はしない
>>787 だって
>コマンドラインでは gci -File -Recurse | % Name だな
と断りを入れてあるんだからaliasの適切な利用だと思う CodeGolfして
gci | ? L*r*e -ge 2020/8 | sort L*r*e
でも動く 7.1.0-preview.6
Microsoft Storeに来たな VBAとかC#もこの板にスレ立てた方が盛り上がるんじゃないだろうか >>805
お前は何年前の話をしてるんだよ
FileSystem の Get-Content
https://docs.microsoft.com/ja-jp/previous-versions/windows/powershell-scripting/hh847788(v=wps.640)
-Stream <文字列>
このパラメーターは、Windows PowerShell 3.0 で導入されました。 PowerShell単体でBluetooth LEとか変なことやろうとしてるけど、
最後の最後で機器からのNotifyを受け取るのにWindows Runtimeのイベントを扱う必要が出てきて、PowerShellでは対処できそうにないなあ
Windows.Devices.Bluetooth.GenericAttributeProfile.GattCharacteristicオブジェクトのValueChangedイベントをRegister-ObjectEventしようとすると
Windows PowerShell cannot subscribe to Windows RT events.とか怒られる .NET 5.0が出たってことはPowerShell 7.1の正式リリースももうすぐか >>811
Microsoft Storeにも正式版が来たな
Previewと共存も可能 >>807
マジだ…知らんったわ
-asbytestreamとか見てあー最近こんなのあるんだ進歩してるなーとか思ってた ps1を隠蔽化しようと思ったらどうするのがいいんだ
Ps2exeでは簡単にデコンパイルされちゃうのは分かったんだけど >>814
難読化なら Invoke-Obfuscation ってのがあるよ >>815
サンクス!
こういうのが欲しかった!
これとExe化とか併用したら結構隠蔽力強いかな >>810
iOSやAndroidにも必要になるぞ Windowsの設定でアプリをリセットできますが、これを行うコマンドはあるのでしょうか?
インストール/アンインストールはAdd/Remove-AppxPackageでできるので、Appx関係を見てみましたが、分かりませんでした Remove-AppxPackage -PreserveApplicationData
の逆で、設定をクリアしたいと考えております ttps://winaero.com/reset-a-store-app-in-windows-10-using-powershell/ >>824
ありがとうございます。
まだ、1909から上げてないので、Reset-AppxPackageがありませんでした。
アップデートするか、別の方法へのリンクもありましたので、そちらも検討したいと思います。 「ごみ箱を空にする」の自動化はググればけっこう見つかるけど、実際やってみるとCMD窓が出てきてしまう。
これを出さずにサイレントで実行させるショートカットが作りたいんだけどなあ。 >>828
前者はVC++の導入が必要ゆえ、少しハードルが高いな。
後者は使いこなせば強力そうだ。チャレンジのしがいがあるな。後者でいってみよう。