- 1 名前:デフォルトの名無しさん [2013/09/12(木) 18:35:04.72 .net]
- スレなかったので立てました
- 45 名前:デフォルトの名無しさん mailto:sage [2014/01/11(土) 00:01:38.07 .net]
- ISE みたいにプロンプト等へのコマンド入力や結果出力と
Read-Host とか Write-Host、[Console]::Writeline なんかを分離したければ 自力でホストを書かないと無理なんだろうか。 powershell -Command - でパイプでつないで他プログラムから使おうとしてるんだけど Read-Host なんかの対応がすっきりしない。
- 46 名前:デフォルトの名無しさん mailto:sage [2014/01/20(月) 05:25:29.55 .net]
- 単純に全てがオブジェクトになってるってのがプログラマなら面白がるよね
rubyあたりから手できそうでなかったアプローチだ 5年以上経った今となっては目新しくもなんともないけどw
- 47 名前:デフォルトの名無しさん mailto:sage [2014/01/20(月) 05:26:59.35 .net]
- 勝手に独自のwebclientコンポーネントを
curlとかwgetとか名付けてるのはあかんわ あかんとこもけっこうある
- 48 名前:デフォルトの名無しさん mailto:sage [2014/01/20(月) 09:12:21.99 .net]
- 文法がもうちょい C# (っていうか C っぽいの)を受け付けてたらプログラマ受け良かったんだろなと思う。
- 49 名前:デフォルトの名無しさん mailto:sage [2014/01/24(金) 15:18:36.81 .net]
- webページにPOSTしてゴニョゴニョするスクリプトを
すぐに書けたはいいんだが.netやってる人はお馴染みの サーバーによってプロトコル違反が発生しました. エラーが出て困った 結局powershell.exe.configなんてのを作るはめに・・・これはダサい
- 50 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 02:41:18.03 .net]
- Out-File -FilePath "Test.txt" -InputObject "test"
かっこよすぎワロタ
- 51 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 13:34:46.99 .net]
- powershellを起動させると他のEXCELなどのアプリと同じようにタスクバーにアイコンが表示されますが
起動させたpowershellから何らかのコマンドを実行してこのアイコンを点滅させることはできますか? つまりpowershellが他のウインドウの下に隠れている場合などでもユーザーに気づかせたいのです。 具体的にはps1ファイルを実行して処理が完了したら、ps1ファイルを実行しているpowershellの タスクバー上のアイコンを点滅させたいのです。
- 52 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 14:03:45.54 .net]
- Windows API の FlashWindowEx を使えば光らせることが出来るらしい。
Add-Type で適当なクラスを作って P/invoke で呼び出せばいい。 MS 公式で cmdlet 化したものを配布してるからそれつかってみたらどうかしら。 サンプルにある Start-Sleep -Seconds 5; Get-Process -Id $PID | Invoke-FlashWindow を実行してから 最小化してほっといたら5秒後にペカペカ光ったよ。 gallery.technet.microsoft.com/scriptcenter/Invoke-FlashWindow-df3d6762
- 53 名前:デフォルトの名無しさん [2014/01/25(土) 19:35:16.09 .net]
- PowerShell の言語仕様見てたら普通にプログラミング出来そうと思ったけどそのままだと遅いんだよね。
どれくらい遅いかと言うと最弱レベルだった。 測定は時刻を取って秒が変動するまでの while のループ回数を取った。 Lua(数値)だけは CPU時間なんだけど時刻を数値で取る方法が分からなくて。 速い >>>> 遅い C# on PowerShell > Lua(数値) > HSP3.31 = JavaScript > Lua(文字) > VBScript >> AutoIt3 = AHK >> UWSC >> PowerShell >> DOSコマンド 測定環境は Core i3 物理2コア Windows 8.1 i++ inc(i) PS4-C# 4145566 4088694 Lua CPU 1012841 836647 HSP3.31 915425 591546 JS chrom 777203 736391 JS fx 647385 VBScript 539979 340808 Lua文字 525671 473907 AHK Sec 188555 104679 AutoIt3 220890 82255 AHK Now 89020 71513 UWSC 23629 9137 PS4 4194 2108 .bat 471
- 54 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 20:20:49.34 .net]
- まああくまでバッチ処理レベルだしねえ。期待されてるのは。
なんでも出来る感じもするけどそれって結局 .NET がすごいからであって
- 55 名前:デフォルトの名無しさん [2014/01/25(土) 21:49:57.99 .net]
- ゴミ
- 56 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 09:00:16.19 .net]
- >>53
>時刻を取って秒が変動するまで よく意味がわからない…
- 57 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 09:31:04.45 .net]
- >>52
うわピカピカ光った! どうもありがとう〜! でもこれって引数とか沢山あるけど、もう単純に「呼ばれた瞬間に3回点滅!」みたいにして 短く出来ないかな? いま仕事してる現場で使いたいんだけど、ネット出来ない環境だしUSBメモリとかも使用禁止だから このスクリプト印刷して持っていって自分で打ち込むしかないんだけど コメント部分除外してもスクリプトが長いから、打ち込むの遅い自分にはつらい… 書き換えようとトライしたけど自分には高度過ぎて無理だった…
- 58 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 09:33:03.88 .net]
- 多分加算命令数/秒ってことでしょ?
ループの1処理ごとに時間取って比較してるのかねえ。 だとすると加算処理の速度比較っていうよりシステムコールの速度比較みたいなもんだな。 あと選別した言語に HSP とかなんで入ってるんだ? Java とか ruby とか python はどこいったんだ。
- 59 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 10:09:37.62 .net]
- >>57
削れたのほぼコメントぐらいだけど書いてみたよ。 pastebin.com/VwEt2EG8 引数もなにもなくて、Invoke-FlashWindow すると powershell が 3回光る。 光る回数とか変更したかったら fInfo.uCount = 3 を書き換えてくれ。
- 60 名前:57 mailto:sage [2014/01/26(日) 11:36:54.99 .net]
- >>59
時間のかかる処理をするps1ファイルの先頭にこれ入れて、最終行を「Invoke-FlashWindow」にしたら 処理完了時にバッチリ光りました! せっかく書いてもらったので絶対打ち込みます!(・`ω´・) ありがとうございました!
- 61 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 12:31:24.93 .net]
- PowerShellもそこそこ補完できるようになって来たけど、C#のコードはさすがに無理だからなー
Roslynが完成すればTabExpansionからIntelliSense呼び出すとかできるかもしれんが
- 62 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 17:48:22.43 .net]
- >>58
> Java とか ruby とか python はどこいったんだ。 使ってないし使う予定もないからだけど、そこらへんは普通にググったら出てくるだろ。 基本的に UWSC(スクリプト)との比較目的でやり始めたから キーボード、マウス操作できる AutoIt や AHK が入ってて 日本語でできる HSP が入ってる。 HSP は以前、使ってもないのにこき下ろしたことがあるけど実際どうだろうと思ってね。 VBScript や JavaScript はメジャースクリプト言語の代表として比較対象に選んだ。 UWSC があんまり遅いんでもっと遅いのはあるのかなってことで DOS コマンドでやってみてその後継の PowerShell もやってみたってわけ。 ttp://anago.2ch.net/test/read.cgi/software/1389240960/49+74 > 49 速い HSP3.31 = JavaScript (chrom) > VBScript >> AutoIt3 > AHK >> UWSC 遅い > 74 速い Lua(数値) > HSP3.31 = JavaScript (chrom) > Lua(文字) > VBScript >> AutoIt3 > AHK >> UWSC >>>> DOSコマンド 遅い それにPowerShellを加えたのが >>53 ちょっと変更があったのは時刻の取得が不公平な部分があったのを修正したから。
- 63 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 18:43:15.03 .net]
- >>58
ttp://www.infoq.com/jp/news/2009/04/top-scripting-languages-php-ruby >PHP >> Perl >> Python > Flex > Actionscript > Ruby > Javascript > Powershell > F# >> VBScript これを見ると、PowerShell は F#.net より高速だし、 VBScript よりはるかに高速と言うことになっているけど、どうなんだろうね。 PowerShell の時刻取得はコマンドレットだから呼び出しに時間がかかって当然なんだけど、 コマンドレットを使わなければC#に頼らなくても >>53 の中では最速ってことなんだろうか。 確かに別プロセスを立ち上げて時刻取得したら遅いだろうけど、 DOSでの時刻取得は環境変数を使ってあの速度だったから、シェルスクリプトは遅いんだろうと思って気にしてなかった。 円周率何万桁とかの時間を計測した方が正確なんだろうけど 時刻が秒単位でしか取れない処理系だと端数が出るんで不公平かなと。 あと、めんどくさいし。 よく知らない言語を調べながらやるのはめんどくさいし、スクリプトは最適化されないから自分で最適コーディングしないといけないし。 ループで使ってる時刻取得方法(速度順) C# on PS sec = DateTime.Now.Second; Lua(数値) sec = math.floor(os.clock ()) HSP3 val = gettime(6) Lua(文字) sec = os.date("%S") JavaScript sec = new Date().getSeconds(); VBScript val = Now AutoIt3 $SEC = @SEC AutoHotKey sec = %A_Sec% UWSC t = GetTime() PowerShell [int]$sec = (get-date).Second DOS sec = %time:~6,2%
- 64 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 19:06:04.20 .net]
- どうせやるなら100万回ループするのに何msec掛かるかを図った方が変なロスはないと思うよ
折角Measure-Commandで時間測れるんだし
- 65 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 22:09:50.36 .net]
- Measure-Command で 100万回のループやってみた。
C#の関数内のループで 53ミリ秒だった。 PowerShell だと・・・ $cnt++ 単純ループ 11秒 inc($cnt) 関数呼び出し 289秒 >>53 では 1,000倍の差があったけど、単純ループだと 200倍になってるんで コマンドレット呼び出しが 5倍不利に働いてると言える。 UWSC の 100万回単純ループが 12秒だったんで UWSC 程度の速度はあるということになるけど いろいろな機能をコマンドレットに頼るわけだから 実用機能で考えれば >>53 を基準にしていいんじゃないかな。 VBScriptはだいたい0.7秒 明らかにPowerShellは遅いんだけど このグラフはもしかして C# とか呼び出してるんだろうか。 ttp://www.infoq.com/resource/news/2009/04/top-scripting-languages-php-ruby/ja/resources/scripting_language_performance.png
- 66 名前:デフォルトの名無しさん [2014/01/27(月) 18:58:09.07 .net]
- 何が言いたいのかよくわからんなあ
それでpowershellはダメだと言いたいわけ?
- 67 名前:デフォルトの名無しさん mailto:sage [2014/01/27(月) 19:42:07.25 .net]
- 普通にプログラミング言語っぽいしプログラム板にスレ立ってるけど
速度は遅いから重い処理を記述するのには向かないということを 自殺ベンチ もとい、自死ベンチ あれ? 自作ベンチ結果を披露しているわけだが それでは不満か。 そう言えばバッチファイルのスレもこの板だったか。 記号だらけでWebだと検索しにくいんでお世話になってる。 自分で遅いというのは確認したけど C#のコードで高速化もできるし自分の用途の範囲で問題ないと思っているんで 今ちょっと PowerShell を勉強中だから 全然ダメじゃない帝人。 長々と書いたのを「そんなこと言ってない」の一言に置換しようかと思ったけど気にせず投稿
- 68 名前:デフォルトの名無しさん mailto:sage [2014/01/27(月) 20:57:22.58 .net]
- いや、はじめからそういう環境だってわかってみんな使ってるとおもうんだが・・・
- 69 名前:デフォルトの名無しさん mailto:sage [2014/01/30(木) 17:20:55.49 .net]
- シェルでループの速度を測る意味が分からない
- 70 名前:デフォルトの名無しさん mailto:sage [2014/02/02(日) 12:59:46.48 .net]
- サーバや、他人のPCでちょいと作業をするときにこそ役立つ。
自分の開発PCだったら、他にもっといいツールがあるし。 そんなわけで、早く Ver3以上 が標準の世の中になってほしい。
- 71 名前:デフォルトの名無しさん mailto:sage [2014/02/02(日) 17:43:09.23 .net]
- 俺は別にV2(=Win7標準環境)でもいいと思ってる
V1でもそこまで困らんけど、プリインスト機がまずないし
- 72 名前:デフォルトの名無しさん mailto:sage [2014/02/02(日) 19:36:05.65 .net]
- ちゅうか、なんだかんだでPowerShellって言語の更新サイクル早いね
Windows依存の功罪というかなんというか
- 73 名前:デフォルトの名無しさん mailto:sage [2014/02/03(月) 00:00:47.83 .net]
- GUIアプリが作れるようになるといいんだけど
- 74 名前:デフォルトの名無しさん mailto:sage [2014/02/03(月) 00:25:42.02 .net]
- 現状でも別に作れないことはないっしょ。Windows Form 使えるんだし。
- 75 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 13:34:41.80 .net]
- WPFでもかけるというかむしろそっちのが相性いいからちょっとした社内ツールなら楽に作れる
- 76 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 13:56:46.58 .net]
- もっとも普通は VS Express あたり落としてきて
GUI エディタでぽんぽんぽーんって作ったほうが早い気もするが
- 77 名前:デフォルトの名無しさん mailto:sage [2014/02/06(木) 07:36:08.61 .net]
- ぽぽぽぽーん♪
を思い出した。
- 78 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 17:47:23.21 .net]
- gci "C:\hoge.txt" | select-string "abc"
でテキストファイルの内容検索すると結果が「ファイル名:行番号:内容」という形式で表示されますが 行番号と内容だけ表示することって出来ないのでしょうか?
- 79 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 20:21:13.40 .net]
- オブジェクトをパイプでつなげてselect linenumberみたいに欲しいプロパティを指定する
オブジェクトにどんなプロパティがあるかはget-propertyで調べられるよ
- 80 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 20:23:17.58 .net]
- ごめんget-memberだった
- 81 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 20:32:40.64 .net]
- >>76
PowerShell Studio使えばPowerShellでWinformのポトペタはできるよ 他Admin Script Editorにもあったと思うけど、使ったことないから知らん >>78 デフォルトでMatchInfo型をそういう表示にしたいなら、 ↓こんな感じの*.format.ps1xmlを作成して Update-FormatData -PrependPath .\hoge.format.ps1xml とか。 <?xml version="1.0" encoding="utf-8" ?> <Configuration> <ViewDefinitions> <View> <Name>MatchInfo</Name> <ViewSelectedBy> <TypeName>Microsoft.PowerShell.Commands.MatchInfo</TypeName> </ViewSelectedBy> <CustomControl> <CustomEntries> <CustomEntry> <CustomItem> <ExpressionBinding> <ScriptBlock>"{0}:{1}" -f $_.FileName, $_.Line</ScriptBlock> </ExpressionBinding> </CustomItem> </CustomEntry> </CustomEntries> </CustomControl> </View> </ViewDefinitions> </Configuration>
- 82 名前:78 mailto:sage [2014/02/08(土) 23:48:58.04 .net]
- >>79
gci "C:\hoge.txt" | select-string "abc" | select linenumber,line でいけました。ありがとう! >>81 PSビギナーの自分にはハードル高すぎました。すみません…
- 83 名前:デフォルトの名無しさん mailto:sage [2014/02/09(日) 10:36:45.41 .net]
- >>81
ttp://store.sapien.com/p-207-powershell-studio-2012.aspx PowerShell Studio 2012 Price: $349.00 高すぎ ttp://www.itninja.com/community/admin-script-editor Admin Script Editor (ASE) 無料の最終バージョン 3089 downloads .net 2.0 が必要だた・・・ あ、3.5を入れればいいのか。 「Windowsの機能の有効化または無効化」でチェック入れるだけでダウンロード出来るんだなあ。 ・・・反応遅い。 ・・・でけた!! 追加アプリがいらないのはネイティブだけかな? ・Native Windows Form ・PowerShell KiXforms(.NET) ・PowerShell KiXforms(COM)
- 84 名前:デフォルトの名無しさん mailto:sage [2014/02/09(日) 14:19:38.26 .net]
- >>82
コピぺして拡張子をformat.ps1xmlで保存してコマンド実行すればいいはずだが・・・ あ、$_.FileNameは$_.LineNumberの間違い まあここまでやる必要もないとは思うけど >>83 あらほんと。 昔は別の名前で無料で公開されてたんだけどな、って検索したらこっちっぽい 会員登録は必要らしいけど無料だそうな PrimalFormsCE ttp://www.sapien.com/software/communitytools#PrimalFormsCE
- 85 名前:デフォルトの名無しさん mailto:sage [2014/02/18(火) 16:33:16.97 .net]
- PowerShellの Out-File と Set-Content あるいは Out-File -Append と Add-Content の違い
ttp://tech.guitarrapc.com/entry/2014/02/11/061627 PowerShellはやっぱり糞でしたww
- 86 名前:デフォルトの名無しさん [2014/02/21(金) 23:25:51.56 .net]
- >>83
俺の場合は、VS Expressで画面作って そのXAMLファイルを[string]get-contentで読み込む関数つくってる (頭のclass文だけは削除するようにしてる)。 だから、ぺたぺた貼って、PowerShellでメニュー画面作り。 その仕組みは20分くらいで作っちゃったよ。
- 87 名前:デフォルトの名無しさん mailto:sage [2014/02/22(土) 00:01:57.77 .net]
- 普通に VS Express で完結しちゃったほうが早くね?
- 88 名前:デフォルトの名無しさん [2014/02/22(土) 11:35:52.82 .net]
- >>87
いちいちコピペするの面倒じゃん。 VS ExoressでPowerShell作成環境ないから完結しないし。
- 89 名前:デフォルトの名無しさん mailto:sage [2014/02/22(土) 11:40:54.69 .net]
- いや powershell 使わんで C# あたりで完結しちゃったほうが早くないかねと。
- 90 名前:デフォルトの名無しさん [2014/02/22(土) 11:43:51.49 .net]
- そりゃものにより。
- 91 名前:デフォルトの名無しさん mailto:sage [2014/02/22(土) 12:11:48.57 .net]
- Roslyn完成したらISEにC#環境とGUIデザイナ組込みーみたいなのはそのうち出るだろう
- 92 名前:デフォルトの名無しさん [2014/02/22(土) 12:31:05.56 .net]
- Roslynでてくると
その次は、それを利用したもっと新たなステップの スクリプトが出てきそう。 ヘルスバーグはいつも楽しませてくれる。 とはいえ、まだ先の先だけど
- 93 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 18:34:10.77 .net]
- ここ↓に載ってるLINQでの問い合わせのコードってPowerShellでもそのまま使えるの?
www.atmarkit.co.jp/ait/articles/0803/25/news150_2.html テーブルから取ってきた値を1個表示とか簡単なのでいいんで書き方教えて欲しいです…
- 94 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 18:52:54.65 .net]
- そもそも拡張メソッドに対応してないんだから、クエリ式なんて使えるわけないじゃないですかー
Roslynが完成すれば、Invoke-C#みたいなの作って、 部分的にC#コードでLINQクエリ実行する、みたいなことはできるかもね
- 95 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 20:55:45.48 .net]
- 会社で他の人が書いたPowerShellのソースを見てて
「If($? -eq $false)」っていう記述があったんだけど、この「$?」って何なのでしょうか?
- 96 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 20:57:48.38 .net]
- >>95
help automatic_variables > $? > 最後の演算の実行状態を格納します。最後の演算が成功した場合は TRUE、失敗した場合は > FALSE を格納します。 UNIX のシェル由来だね。と言いたい所なんだけど $$ とか全然違うしなあ。
- 97 名前:デフォルトの名無しさん mailto:sage [2014/02/27(木) 02:21:37.54 .net]
- unixとかawkとか、既存のツールから由来してる機能は多いよ
beginやendのブロックとか
- 98 名前:デフォルトの名無しさん mailto:sage [2014/02/27(木) 17:48:58.25 .net]
- PowerBoots: PowerShell で WPF が使えるツールキット
blogs.technet.com/b/stanabe/archive/2009/05/01/powerboots-wpf-powershell.aspx Windows PowerShell で WPF アプリケーションを構築する秘訣 msdn.microsoft.com/ja-jp/magazine/hh288074.aspx
- 99 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 12:12:09.21 .net]
- パイプライン指向だか何だか知らんが、
functionにおけるreturnの扱いにくさだけは何とかしてくれんかな。 外部コマンド(Cmdletではない)実行する度に、それらの出力をnullやら他に逃さないと、 returnが汚れるのが激しくめんどくさい。
- 100 名前:デフォルトの名無しさん [2014/03/01(土) 13:20:31.29 .net]
- >>99
ん? 具体的なところがよくわからないんだけど どんな感じのことを言っている?
- 101 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 13:48:34.89 .net]
- function Out () {
"hoge" return $true }
- 102 名前:デフォルトの名無しさん [2014/03/01(土) 13:53:41.97 .net]
- その例の場合だと、書き方としては
function Out () { "hoge" } となるんだけど。
- 103 名前:デフォルトの名無しさん [2014/03/01(土) 13:58:52.35 .net]
- 関数内で変数を使って
かえしたれば function Out () { $a="hoge" $a } または function Out () { $a="hoge" return $a } returnのところは return($a) でもいい
- 104 名前:デフォルトの名無しさん [2014/03/01(土) 14:17:36.86 .net]
- >>101
要はこの例でいえば 自分で2つ返す(hogeとtrue)コーディングをしているので 余分と思われるものがでてる。
- 105 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 14:23:50.15 .net]
- 例えば SetSomething みたいな値をどっかに設定するのとか
DisplaySomething みたいな値をどっかに表示するのみたいなので成功したか失敗したかを返すような、 どっちかというと所謂副作用部分がメインの関数があったとして、 それをそのまま呼び出すと戻り値要らないのに一連の戻り値に入っちゃうのがうっとおしいって話じゃね。 C なんかでいうところだと printf の戻り値なんか普通ほったらかすのにいちいち (void) でキャストしたり 適当な変数に代入して読み捨てしないと戻り値に入っちゃうみたいな感じね。 まあそういう言語なんだって言われたらそれまでの話なんだけど。
- 106 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 14:24:11.73 .net]
- 自分ではっきり出力してればいいけど
普段何も返さないコマンドがエラーメッセージとか返して来たら困るね。
- 107 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 14:26:04.46 .net]
- >>102-104
ごめん。 そもそもの言い方が悪かったけど、 functionを、他言語の”関数”と同じように、呼び出し側からはreturnだけを受け取りたいってこと。 関数内で変数を使って かえしたれば function Out () { $a="hoge" $a } でやっていることは、$aに代入することによって、パイプラインに流れるのを阻止した状態。 これを、外部コマンドに対して行う場合は、 $a = $(外部コマンド) [void]$(外部コマンド) 外部コマンド | Out-Null などなど。 >>106 その通りでございます。
- 108 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 14:27:35.99 .net]
- 明示してないものまで戻り値に含まれるってのは他の言語と比較すると特異ではあるわな
- 109 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 14:37:28.46 .net]
- c#のoutがあればね。
refはあるんだが。
- 110 名前:デフォルトの名無しさん [2014/03/01(土) 14:43:03.21 .net]
- >>108
あ、俺のレベルでその意味わかんない
- 111 名前:デフォルトの名無しさん [2014/03/01(土) 14:50:34.97 .net]
- >>108
return文に指定していないものまでという意味ですか。
- 112 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 15:32:48.27 .net]
- >>111
そういうこと 明示しない場合は最後の式の値が戻り値になる、なんてのは結構あるけど 頭から最後までの式の結果を連結して返されるってのは「関数の戻り値」って考えると見たこと無い。 戻り値じゃなく出力って考えるとパイプラインのことと相成ってスッキリするんだけどね。
- 113 名前:デフォルトの名無しさん [2014/03/01(土) 16:40:40.92 .net]
- >>112
なるほど。 出力ということですね。 returnは、関数内でステートメント終了!の意味なんだろうな。 ってことは、常にreturn値だけをとりたいときは、安心のために。 $a=Out $a.[$a.Count-1] てな感じになるのかな。
- 114 名前:デフォルトの名無しさん [2014/03/01(土) 17:42:47.70 .net]
- おっと
$a=out $a[-1] でよかった。
- 115 名前:デフォルトの名無しさん [2014/03/01(土) 18:46:25.77 .net]
- それぞれ、悩む点が異なるので
いろいろ勉強になるな〜
- 116 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 23:04:20.14 .net]
- >>101
例に突っ込んでもしょうがないかもしれんが 文字列を直接埋め込んで何もしないって状況がありえなくね echo hoge ならともかく $a = New-Object Collections.ArrayList $a.Add(100) return $a とかなら分かるけど
- 117 名前:デフォルトの名無しさん [2014/03/02(日) 17:14:32.59 .net]
- >>116
おれもよくわからないんだけど。 無いんじゃないかな。 あるいは途中でのチェックのために入れたいとか。 だとすると、他の書き方をするべきなんだけど。 ともかく 他の言語だったらエラーで、そういう記述ができないんじゃないかな。 他の言語の関数だと、明示的に出力指定すると戻り値としてでなく、 コンソール出力等に返され、戻り値には入らない。 それを言っているんだと思う。 PowerShellで他言語と同じように使用したいなら、 他言語と同じような使用方法を守れば問題ないんだと思う。 たとえば、ファイル一覧をほしくて関数としてdirを使うなら。 function Out{ $dir = dir Write-Host $dir return $ture } $kekka=Out とすれば戻り値の結果$kekkaには余分なものは入らない。 要は、PowerShellは融通が利いちゃうんで戸惑ってる ってころじゃないのかな? 他の言語でできないことができちゃうってことでしょ。
- 118 名前:デフォルトの名無しさん [2014/03/02(日) 17:16:35.00 .net]
- 捕捉だけど
>無いんじゃないかな PowerShellの場合だと、それをわざと利用することはあるが、 他言語ではそういう使い方できないだろうという意味。
- 119 名前:デフォルトの名無しさん [2014/03/02(日) 17:22:32.45 .net]
- 質問からの例でいえば( >>101 の例でいえば )
本来は function Out () { Write-Host"hoge" return $true
- 120 名前:
} と記述する必要があるということでしょ。 外部関数を中で使うなら function Out () { $a=外部関数() Write-Host $a return $true } ってな感じですね。 実際、私はそういう記述してる。 [] - [ここ壊れてます]
- 121 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 19:19:22.75 .net]
- なんか画面出力の話にすり替わってるけど戻り値の話でしょ? >>99 が元ネタなんだから。
上でも上げたけど、C言語でいうところの printf みたいな 副作用がメインで戻り値はおまけで大抵は捨てるような関数を powershell で同じ感覚で使おうとすると 戻り値に混ざってきてなんじゃこらってなるって話じゃないのか? いちいち [void] でキャストして捨てますよーって明示しなくちゃいけなくてめんどくさいと。 int main() { printf("hello\n"); return 0; } の戻り値が { 6, 0 } になるようなもんだ。 >>101 の例でいくと、他の言語では、例えば C でも C# でもなんでもいいけど "hoge" は定数を置いただけだからなんも起きないし戻り値にも含まれない。コンパイルする時の最適化で消されるだけ。 でも powershell の場合は function の中で書いた式の戻り値全部を連結して返す仕様になってるから ("hoge", $true ) が戻り値になる。他の言語経由してる人なら return $true って書いてあったら $true しか返ってこないって普通考えちゃうよ。
- 122 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 19:20:11.13 .net]
- >>119
だから、その書き方とかキャストや、あるいは戻り値を参照渡しする、とかがめんどくさいんでしょ。
- 123 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 19:21:03.27 .net]
- うわ、かぶったw
- 124 名前:デフォルトの名無しさん [2014/03/02(日) 19:42:56.62 .net]
- >>120
そっか勉強不足だった。 Cは使わないけど。ってことは、コーディング上では、 int main() { "hoge";printf("hello\n"); return 0; } と書いても、コンパイラーでhogeは無視してくれるのか。しらんかった。 エラーかと思ってた。 出したいときは別途記述が面倒かもしれないけど。 画面といったのは"hoge"も別途必要としたから記述したのだと理解した 関係。
- 125 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 19:57:35.48 .net]
- powershell でいうところの (関数)[-1] って呼び出しが他の言語の一般的な関数呼び出し、って言えば何の話なのかわかってもらえるんじゃね。
- 126 名前:デフォルトの名無しさん [2014/03/02(日) 20:01:18.83 .net]
- まあ、そういう仕様としかいえないよな。
俺の場合だと、XAMLを関数内で組み立てるときにPoowerShellの関数 使用は重宝してる。 普通の言語だと、逆にくっつける操作が必要になるので煩雑になっちゃう。 return文自体使わないけど。 使う場面次第だな。
- 127 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 20:08:16.13 .net]
- パイプラインで出力をつないでいく設計思想だからねえ。
- 128 名前:デフォルトの名無しさん [2014/03/02(日) 20:16:15.40 .net]
- 関数自体から返るものすべてがオブジェクトだと
認識しないといけないね。
- 129 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 20:20:34.62 .net]
- 成否を返す関数との相性は悪いよな
あと複数結果返す関数でいえば結果が一個の時と複数の時でタイプが変わるのが気持ち悪かったわ $x = ls とかやったときにファイルが複数あると $x.GetType() => Array だけど 一個しか無いと $x.GetType() => DirectoryInfo ときたもんだ @()で呼び出しゃいいんだけど
- 130 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 20:21:58.90 .net]
- あくまでシェルであって言語としてはかなり歪だと思う
- 131 名前:デフォルトの名無しさん [2014/03/02(日) 20:29:09.68 .net]
- >>129
そりゃ旧来のシェルのほとんどは単なる文字列操作にすぎないからね。
- 132 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 20:32:39.91 .net]
- いや、言語としてはいいと思う。
が、シェルだと考えると、 .NETやコマンドレットだけじゃなく、外のコマンド・プログラムをたくさん使うことになるわけなので、 それらの戻りを全部把握して処理しないといけないのは、結構大変なことだと思う。 嵌って、「パイプラインすげー」と思う人、「なんだこれ、使えねーw」と思う人それぞれ。
- 133 名前:デフォルトの名無しさん [2014/03/02(日) 20:33:12.58 .net]
- >>128
初めは俺も思った。 なれたらこの方が便利だけど。 returnの役割は、スコープ終了と、リターンコードを返すための利用。てな感じ なんだろな。 結果とリターンコード両方が取れるのは、俺にとっては便利。
- 134 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 22:50:50.92 .net]
- >>120
いや俺が>>116で言ったのは、文字列だけ書いたらそれが画面に表示されるってのはPowerShellくらいだから(ないことはないだろうけど) 他の言語の感覚で文字列だけ書いてたら出力に混じって嫌だって例文は違和感があるって話 printfの感覚で echo hoge って書いたら出力に混じるから困惑したってことなら分かるけどって意味 だから出力が混じって困る例なら、たとえばC#で戻り値があることを意識してないメソッドを呼ぶような例がいいんじゃないか、ってんで>>116で書いた 確かに最終版はともかくデバッグ中は文字列埋め込むこともあるかもしれないけどね
- 135 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 23:05:47.11 .net]
- なんか出力と戻り値を取り違えてる奴がいるからややこしくなったんだろな。
あと例もよくなかった。 単に戻り値を返す適当な処理を書いとけば出力がどうのって話にならなかったんだと思う。
- 136 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 23:31:47.97 .net]
- 本買って読めとまでは言わんけど、man about_Returnにすら書いてあることくらいは読もうぜってことで
- 137 名前:デフォルトの名無しさん mailto:sage [2014/03/03(月) 22:10:36.75 .net]
- 【メモ】
write-output write-hostの違い。 ググって出てくるのは、色が付けられるとか、空行がどうのとか、そういうことばかり。 write-output "foo" echo "foo" "foo" は全部同じで、パイプラインに出力。 write-host "bar" | gm (エラー) つまり、write-hostは、コンソールへの直接出力(パイプライン経由ではない)。
- 138 名前:デフォルトの名無しさん mailto:sage [2014/03/03(月) 22:55:59.13 .net]
- コンソールっていうかホストプログラム全般な
画面へ出力することを前提としているから色を指定できる あとSnover泣いちゃうからまずヘルプ読んであげて
- 139 名前:デフォルトの名無しさん mailto:sage [2014/03/06(木) 18:15:30.08 .net]
- win8.1でヘルプが入ってなかったから、update-helpしたわけだが、英語版しか入らなかった('A`)
- 140 名前:デフォルトの名無しさん [2014/03/06(木) 23:40:23.45 .net]
- 英語を勉強するチャンス!
- 141 名前:デフォルトの名無しさん mailto:sage [2014/03/06(木) 23:44:05.55 .net]
- >>138
これは実績もあるイルカに期待するしかないかw
- 142 名前:デフォルトの名無しさん mailto:sage [2014/03/07(金) 19:07:10.78 .net]
- >>138
「Windows PowerShell 実践システム管理ガイド」 2009初版、という本によると、 C:\Windows\System32\WindowsPowerShell\v1.0 に、 ja-JP というフォルダを作って、そこに en-US フォルダにあるすべてのファイルをコピーする と書いてある 漏れはWin8だけど、ja-JP フォルダの中には、 すでに数個のファイルが存在している どうすべきかな?誰か試しにやってみて ja-JP フォルダの中の default.helpには、 オンラインヘルプのアドレスが書いてある
- 143 名前:デフォルトの名無しさん mailto:sage [2014/03/08(土) 10:57:34.76 .net]
- 7だと最初から入ってたよね。
だから、2008R2でも特になにもしなくてもリファレンスは使えてた。 2012R2だと、どうなんだろ。 サーバの場合、インターネットに直接繋げないケースも多いわけで。 WSUSではたぶん面倒見てくれないから、SCCMとか使うのかね。
- 144 名前:141 [2014/03/08(土) 15:49:20.02 .net]
- 漏れはWin8だけど、
C:\Windows\System32\WindowsPowerShell\v1.0 中の、 en-US フォルダの中には、powershell.exe.mui というファイルが一つあるだけ これを、ja-JP フォルダにコピーすれば良いのか? ただし、ja-JPにもすでに、同名のファイルがある 同名のファイルだが、ファイルのサイズは違う 前者は11KBで、後者は9KB このファイルは何だろう? ヘルプファイルをダウンロードするプログラムか何か?
- 145 名前:141 mailto:sage [2014/03/08(土) 16:26:47.96 .net]
- powershell と同じフォルダにある、
デバッグ用のpowershell_ise の方が使いやすい 右のコマンド一覧から、 コマンド + オプションを選んで実行できる
|

|