■ このスレッドは過去ログ倉庫に格納されています
PowerShell -Part 6
- 1 :デフォルトの名無しさん:2022/02/13(日) 18:36:12.07 ID:LaQ04ZoE.net
- 前スレ
PowerShell -Part 5
https://mevius.5ch.net/test/read.cgi/tech/1615994992/
次スレは>>980が立ててね!!
- 954 :デフォルトの名無しさん:2023/11/17(金) 11:55:26.61 ID:i3gkpHOP.net
- >>941
参照渡しでやってみれば?
--------
function hoge
{
[int] $a = 1234
function moge
{
param (
[ref] $b
)
$b.Value = 5678
}
moge -b ([ref] $a)
return $a
}
hoge
--------
about_Ref
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_ref?view=powershell-7.3
- 955 :デフォルトの名無しさん:2023/11/17(金) 14:37:28.42 ID:05VltA/O.net
- PowerShell 7.4 General Availability
https://devblogs.microsoft.com/powershell/powershell-7-4-general-availability/
PSNativeCommandPreserveBytePipe 待ってた!
- 956 :デフォルトの名無しさん:2023/11/17(金) 20:30:46.86 ID:Wtzmq/3L.net
- リンク先読んでないけど、.exeにパイプしたときに早くなる(普通になる)のかな
- 957 :デフォルトの名無しさん:2023/11/20(月) 14:11:07.62 ID:HI5+Omcp.net
- 文字列を8文字ごとに分割して配列に格納したいのですが
文字列が8文字以下だと1文字ずつ分割されてしまいます。
$nums = @()
$nums = $num -split '(.{1,8})' | Where-Object{$_}
上記を実行すると、
$num = 12345678 のとき、$num[0] は 1が格納されるのですが、
12345678が格納されるようにするには、どうすればよいでしょうか。
- 958 :デフォルトの名無しさん:2023/11/20(月) 14:50:35.31 ID:HI5+Omcp.net
- >>957
すみません。誤字です。
誤: $num[0] は 1が格納されるのですが、
正: $nums[0] は 1が格納されるのですが、
- 959 :デフォルトの名無しさん:2023/11/20(月) 15:52:48.41 ID:fHSnLnjq.net
- $numsには文字列の"12345678"が代入されてるから
$nums[0]だと"12345678"の1文字目の1が返る
1行目を [string[]]$nums = @() とするか
2行目を $nums = @(12345678 -split '(.{1,8})' | Where-Object{$_}) とすればOK
- 960 :デフォルトの名無しさん:2023/11/20(月) 17:23:25.47 ID:HI5+Omcp.net
- >>0957
ありがとうございます!
できました。
- 961 :デフォルトの名無しさん:2023/11/21(火) 21:09:20.96 ID:qJoihvDX.net
- PowerShell 7.4 だと
PS> python -c 'print("\\")'
\
と期待通りになるけど Windows PowerShell 5.1 だと
PS> python -c 'print("\\")'
File "<string>", line 1
print(\)
^
SyntaxError: unexpected character after line continuation character
となるのは何が起きてるの?
7.4 でも $PSNativeCommandArgumentPassing を Legacy にすると同じみたいだけど
具体的にどうなってるのか今更だけど知っておきたい
- 962 :デフォルトの名無しさん:2023/11/21(火) 21:20:45.10 ID:CeBFd4j1.net
- >>961
解析の停止:--%
https://learn.microsoft.com/ja-jp/previous-versions/windows/powershell-scripting/hh847892%28v=wps.640%29#%E8%A7%A3%E6%9E%90%E3%81%AE%E5%81%9C%E6%AD%A2--
- 963 :デフォルトの名無しさん:2023/11/21(火) 22:46:00.10 ID:qJoihvDX.net
- 対処法が知りたいんじゃなくてどう解析されたかが知りたい
- 964 :デフォルトの名無しさん:2023/11/21(火) 22:57:00.47 ID:wGZJ97Pn.net
- コマンドラインのパース内容をデバッグできるコマンドレットがあって
inactionで紹介されてた気がするけど何か思い出せない
- 965 :デフォルトの名無しさん:2023/11/22(水) 00:52:11.84 ID:z2bY/yQG.net
- $PSVersionTable
PSVersion 5.1
Ruby の1-liner では、%Q 記法があるから大丈夫
ruby -e 'print %Q(\\)'
\
ruby -e 'print %Q(あaい)'
あaい
- 966 :デフォルトの名無しさん:2023/11/22(水) 04:23:14.63 ID:nZzIGDLb.net
- >>964
Get-Command | sls "breakpoint|callstack"
デバッガーについて - PowerShell | Microsoft Learn
ttps://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_debuggers?view=powershell-5.1
- 967 :デフォルトの名無しさん:2023/11/22(水) 10:26:54.20 ID:Yh77KGhz.net
- >>966
回答ありがとう、でも思い出せないのは>>961の流れからの「コマンドラインのパース」自体の事だったんだ。
in Action引っ張り出して確認したが↓の事で、これで違いが分かるかも。(v7.4で確認してない。)
Trace-Command -Option All NativeCommandParameterBinder -PSHost {python -c 'print("\\")'}
- 968 :デフォルトの名無しさん:2023/11/22(水) 10:52:24.03 ID:Yh77KGhz.net
- 他に、形態素解析みたいに分解・解析できる機能もあった気がするが忘れた
- 969 :デフォルトの名無しさん:2023/11/22(水) 14:18:25.39 ID:W8vcuvaF.net
- PowerShell 7.4 だと python -c 'print("\\")' ですむことを
Windows PowerShell 5.1 だとどう書けばいいんだ
--% を使っても使わなくても分からん
- 970 :デフォルトの名無しさん:2023/11/22(水) 15:05:51.75 ID:fKGlzN6D.net
- パラメータの干渉受けたくないなら普通にStart-Processでいいでしょ
- 971 :デフォルトの名無しさん:2023/11/22(水) 15:26:30.66 ID:W8vcuvaF.net
- 対話シェルでStart-Processするのはつらい
- 972 :デフォルトの名無しさん:2023/11/22(水) 15:34:55.56 ID:W8vcuvaF.net
- つらいのは我慢するとしてStart-Processを使ってどう書けばいいの
- 973 :デフォルトの名無しさん:2023/11/22(水) 20:54:48.61 ID:5rDf7evN.net
- pythonの引用符はシングルもダブルもエスケープシーケンス展開されるからおかしな解釈になってるだけだな
pythonの仕様を呪うがいい
- 974 :デフォルトの名無しさん:2023/11/22(水) 22:06:38.07 ID:W8vcuvaF.net
- pythonは例として使っただけだしどうでもいいよ
あくまで興味の対象はPowerShellのコマンドラインのパース
やっぱ 7.4 すげぇで終わってもいいんだけど
なんか 7.4 の --% が腐ってる気がする
5.1 の想定通りの --% と違って勝手に引用符加えてぶっ壊してる感じ
はやいとこ直して欲しい
- 975 :デフォルトの名無しさん:2023/11/22(水) 22:37:16.49 ID:5rDf7evN.net
- うーんどうでもいい変なの相手しちゃった
- 976 :デフォルトの名無しさん:2023/11/23(木) 17:39:38.00 ID:Rimm12ii.net
- いやわかんないなら別にいいけど一応書いとくわ
もちろん 7.4 を Windows で使う話
stop-parsing token (--%) は以後のパースをしないはずなのに
引用符無視して空白で引数を分割してコマンド起動してるっぽい
CreateProcessまでに引用符が変に補完されるから意図通り動かない
--% が出てきたら引数の分割はネイティブコマンドに任せないとあかん
$PSNativeCommandArgumentPassing が Legacy の時と同じ処理な
そういうわけで Legacy 扱いされる .cmd とかでは問題ない
おかしいのは Standard 扱いされる .exe なんかの場合だけ
PSNativeCommandArgumentPassing の説明
>この実験的な機能が有効になっていると、PowerShell は、ネイティブの実行可能
>ファイルを呼び出すときに、文字列を再構築する現在の機構ではなく、
>StartProcessInfo オブジェクトの ArgumentList プロパティを使用します。
にある、文字列を再構築するのが Legacy、Argumentlist を使うのが Standard
という違いがわかれば理解できる話なんだが期待はしてない
- 977 :デフォルトの名無しさん:2023/11/23(木) 22:03:41.74 ID:KHOftQWe.net
- Powershellを体系的に学ぶにあたっておすすめの本ってありますか?
やりたいことをググってコードをコピペして使用してる状態で、コードの理解度が深まらないと思ったので体系的に学びたいと思いました。
自分のPowershellの用途は、日常的な作業の自動化(テキストファイルの読み書き、ファイルの起動やタスキル、アクティブウィンドウの切り替え、robocopyでのバックアップなど)で使っています。
- 978 :デフォルトの名無しさん:2023/11/23(木) 22:45:32.85 ID:38VIgpCL.net
- 馬鹿には無理
- 979 :デフォルトの名無しさん:2023/11/23(木) 23:00:45.15 ID:09UkZirn.net
- Windows PowerShell in Action Third Editionは読んだかね
https://sd.blackball.lv/library/Windows_PowerShell_in_Action_3rd_Edition_(2017).pdf
ただしこの本は6年前の情報。英語PDFだけど今は色々と翻訳手段もあるから読めると思う
powershellならWindows上の事であれば大抵の事はできるけど
本当に便利に使うならC#や.NETの前提知識があった方がいいだろうね
C#関連で可能な事ならほぼpowershellに置き換え可能だから
- 980 :デフォルトの名無しさん:2023/11/24(金) 00:12:01.77 ID:kL+9jaCp.net
- Powershell で複雑なものは書けないから結局、Ruby になる。
WSL2, Linux側からなら、Windows側をいじれるし
- 981 :デフォルトの名無しさん:2023/11/24(金) 03:38:21.50 ID:k2LHl+dn.net
- rubyガイジなんだろうけどそこでrubyになるのは贔屓目に見てもおかしいだろ
- 982 :デフォルトの名無しさん:2023/11/24(金) 05:42:11.56 ID:IciYTcVm.net
- >>977
コードをコピーしてchatGPTかPerplexityで「PowerShellで"〜〜〜"はどういう意味?」を聞けばいい
- 983 :デフォルトの名無しさん:2023/11/24(金) 13:14:03.37 ID:4NGqTzL9.net
- >>977
「PowerShell実践ガイドブック」は、PowerShellの動作の仕組みが詳しく解説されていてよかった
謎に思える挙動についても説明がある
ちょっと古いが(5年半前に出版)
- 984 :デフォルトの名無しさん:2023/11/25(土) 12:02:22.73 ID:pLnatqec.net
- microsoft learn じゃダメなの?
ttps://learn.microsoft.com/ja-jp/powershell/scripting/how-to-use-docs?view=powershell-7.4
ttps://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about?view=powershell-7.4
- 985 :デフォルトの名無しさん:2023/11/25(土) 18:06:48.53 ID:wD6fmxci.net
- MSの自動翻訳は5分と読んでられない
- 986 :デフォルトの名無しさん:2023/11/25(土) 18:41:01.39 ID:444pwTGg.net
- 英語ページでOK
- 987 :デフォルトの名無しさん:2023/11/25(土) 18:53:18.66 ID:Q+kYJTm7.net
- 975です。おすすめのドキュメント教えてくれた方ありがとうございます。
一つ気になったのですが、学習の順番としてはC#もしくは.NETから入ったほうが効率的ですか?
自分がPowershell始めたきっかけがグローバルホットキーをうまく使いたいというのが始まりで、
後述URLのコードをベースに継ぎ足しで書き加えている状態です。
PowerShellとC#でグローバルホットキーを登録する
https://qiita.com/minr/items/72b02d673727f9eb4c37
※自分のC#のレベルはHelloWorld出したぐらいまで、.NETについても知識としてほぼ白紙です。
- 988 :デフォルトの名無しさん:2023/11/25(土) 19:23:35.12 ID:c65Q6uO9.net
- ダボゥクリッコゥで実行出来ない面倒臭いものを誰が使うんですか?
- 989 :デフォルトの名無しさん:2023/11/25(土) 21:21:00.31 ID:2+5b9joX.net
- ダブルクリックで実行できたWSHはLOVELETTERワームやら何やらでセキュリティが低いとみなされて非推奨になりましたとさ
めでたしめでたし
- 990 :デフォルトの名無しさん:2023/11/26(日) 00:07:05.46 ID:tHVdGucZ.net
- 例えば、デスクトップにショートカットを作って、リンク先を以下のようにすると、
ダブルクリックでPowershell を起動して、Ruby でスクリプトを実行する
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe "ruby C:/Users/Owner/Documents/Ruby/a.rb"
初心者はRuby で始めるべき。
C# はRubyの10倍、時間が掛かるし難しい
- 991 :デフォルトの名無しさん:2023/11/26(日) 04:20:48.27 ID:xBck3nSS.net
- こんなんに粘着されちゃmatzが気の毒だわな
- 992 :デフォルトの名無しさん:2023/11/26(日) 07:10:42.58 ID:forkl5ep.net
- 同じ民族同士、分断せずに仲良くしろよ
DevBlogs - Microsoft Developer Blogs
ttps://devblogs.microsoft.com/
- 993 :デフォルトの名無しさん:2023/11/26(日) 10:47:01.19 ID:d/KzVdDP.net
- MatzはWindowsやC++に興味無いから
よほどエゴサでもしないかぎり気の毒なことにはならないわ
知らぬが仏
- 994 :デフォルトの名無しさん:2023/11/26(日) 15:25:10.25 ID:06WEnIxy.net
- う
- 995 :デフォルトの名無しさん:2023/11/26(日) 15:25:17.90 ID:06WEnIxy.net
- め
- 996 :デフォルトの名無しさん:2023/11/26(日) 15:37:23.40 ID:tLrTLV3h.net
- というか、Windowsの日本語localizationのデフォルトが未だにクゾだから、
「☑ベータ: ワールドワイド言語サポートを Unicode UTF-8 を使用」
を最初から標準にしていないかぎり、Windowsを日本語で使うこと自体、クソということになる
- 997 :デフォルトの名無しさん:2023/11/29(水) 13:21:53.02 ID:FINewHXp.net
- 外部コマンドを実行するときに外部コマンド自体は正常な戻り値を返してるのにpowershellで動かすとNativeCommandErrorって例外が出るんだけどなんでだかわかる人おる?
- 998 :デフォルトの名無しさん:2023/11/29(水) 15:06:21.22 ID:UMPQWy8o.net
- そういうのはまず再現できるコードを貼ってね
- 999 :デフォルトの名無しさん:2023/11/29(水) 16:09:41.88 ID:0g8RZ7sB.net
- ISE上で実行した場合に標準エラー出力があると
戻り値に関係なくNativeCommandErrorになるけど、このこと?
そうでなければ>>998にプラスしてバージョンなどの環境も示してね。
あと次スレ
https://mevius.5ch.net/test/read.cgi/tech/1701241669/
- 1000 :デフォルトの名無しさん:2023/11/29(水) 17:02:28.41 ID:FINewHXp.net
- >>999
多分それですありがとうございます
- 1001 :デフォルトの名無しさん:2023/11/29(水) 18:41:30.81 ID:Emfdd1vJ.net
- 質問いいですか
- 1002 :デフォルトの名無しさん:2023/11/29(水) 19:21:40.65 ID:0g8RZ7sB.net
- だめです
- 1003 :2ch.net投稿限界:Over 1000 Thread
- 2ch.netからのレス数が1000に到達しました。
総レス数 1003
314 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver.24052200