Windows PowerShell (正式版リリース)1.0
1 :
名無し~3.EXE :
2006/11/17(金) 21:00:36 ID:x71SRjyi
2獲ったどー
3 :
名無し~3.EXE :2006/11/17(金) 22:00:12 ID:40CQDzkf
4 :
名無し~3.EXE :2006/11/17(金) 22:24:41 ID:x71SRjyi
パイプでオブジェクトが渡せるって面白いんだよね。
これは超いいね。
すげーなこれ。 UNC パスとか楽勝で事える。もうDOS窓なんかには戻れねーな。
日本語メッセージの折り返しが激しく読みにくいわけだが・・・ 全角/半角が同じ幅のフォントってどっかないかねw
teraterm内で開くにはどうすればいいですか 別の窓が開いてしまうのがイヤです
12 :
名無し~3.EXE :2006/11/18(土) 01:12:26 ID:YE0+WVO2
独自のドライブ(プロバイダ?)はどうやってつくるの?
13 :
名無し~3.EXE :2006/11/18(土) 07:59:37 ID:JpQfcFts
WSHやらDOS窓やらをこねくり回してやってたことが1つででそうってとこがイイ しかしceleron700なPCではコンソール開くまでに時間がかかるのが難点 DOS窓みたいにパッっと開けよ。 使いこなすには時間がかかりそうだ or2
PowerShell名前がちょっとカコワルイ気がする。。。 なんか略称で呼ばれるようになるのかな。
.NETFramework上で動くので、低スペックPCでパっとってのは無理。 Vistaが主なターゲットだし。
>>14 略称PS。旧称MonadShell、MSH。
これはいい。
IMEが使えないのか
Alt + 半角/全角
使えるが。CMD.EXE(NTコマンドプロンプト)だろうと COMMAND.COM(DOSコマンドプロンプト)だろうと PSだろうと、半角全角 ではなく Alt+半角全角 だろ。
つーかIME起動は本来ALT必須 Windowアプリ向けのMS-IMEが特殊
んだ。「漢字」が前面、つまりAlt押しだからな。
アンインストロールできなくね? てか、system.management.automation.dllちゃんとインストロールされる? おれんちだけ?
"プログラムの変更と削除"の、更新プログラムの表示 にチェックいれて Windows XP -ソフトウェアの更新 の中から探す
linuxオワタ
>>19-22 すまんかった。
いつの間にか出来たからおかしいなと思ったら、
そういえばすっかり忘れてたよ。
>>23 見つからないから気になって探したら
インスコ時にngenでコンパイルされてassemblyにキャッシュされる模様。
たまにこういうとんでもないモノを出すからMSは侮れん
>>30 なるほど。そういうことなんですね。。
VisualStudioの参照設定って、dll本体がなくてもできるもんなのですかね?
なかなかできないので、インストーラから無理やりdll抜き出しちゃったよ。。
ls Function:\ したら、 Name Definition ---- -------- D: Set-Location D: とかあるな。cd D: せずに D: だけでドライブ移動。怠けすぎ CMD.exeのcd /D D:\ とくらべると随分短くなったもので。 こんな書き方できるってことは再帰は無しかな。
VS持ってないからわかんない。ていうか何をする気だ… おもしろい物作ったらクレクレ
ちょっと勉強してみようかなぁという程度で、 何作るかなんて考えてないんですが、 何かできたらうpりますねw ありがとうございました!
これってリモートで使用することってできるんですかね? ・PC1上のtelnet等でPC2上のPowerShellにログインして操作を行う ・PC1上のPowerShellでPC2に直接ログインして操作を行う こんな感じで。
LAN張ってないからわからんけど telnetしてpowershellと叩けばいいんじゃね?
>>33 cmd.exeはおろかcommand.comの時代からd:でDドライブへ移動でしたが……。
>>33 > CMD.exeのcd /D D:\
お前凄いな。初めてそんな方法知った。10年前からD:しか知らなかった。
>>33 普通はd:で移動するだろ
一応cdのhelpにあるから存在は知ってたが
実際に使ってる奴は初めて見たぜ
ネタが高度すぎて素か釣りか区別できないw
cd d:\ でドライブ移動できるって言いたかったんじゃない?
使い方の名案とかあったら誰か提案してほしいな。 使えそうなことはわかるんだが、どういう使い方をすると便利なのか思いつかない。 Windowsで強力なコマンドシェルが必要なシーンというのがあんまり思いつかないのだが。 日常的にやってるあんな操作こんな操作が自動化できますよって提案が欲しい。
telnetはヤだからsshも欲しいな。
いいもんが出てきた、とは思うよ。 Windows Serverの自動運用の仕事をしているのだけど、 非力な上にIFやFORといった制御構造が素直に書けないDOSバッチ、 強力ではあるけどFileSystemObjectやら何やら妙に遠回りが多くて生産性の低いWSH、 これらを使っていると、何でWindowsには標準でbashが無いんだろうと思うことがとても多い。 客の要望でフリーウェア使用禁止、 またLinuxの運用も並行してやってるから特にそう感じるんだろうけど…… bashとDOSバッチとWSHで、同じ処理のスクリプトを書いてみれば、 内容にもよるけどたぶん誰でも同じ思いを抱くはず。 PowerShellは、まだ使ってないけど、スクリプトの書式がパッと見UNIXシェルかPerlみたいだもんね。 ただ、早速インストールして起動してみたけど、 いくら何でも遅すぎる…… どなたか高速化の方法がわかったら教えてください。
↑ 「フリーウェア」がどうとかとかいった話は語弊があってすまんす。 cygwinとかSFUとかでbash等を入れて使うという道を封じられてるってことです。
何でこれが良くてSFUが×なんだ
全然違うがな。
cmdみたいにフォルダの右クリに登録したいんだが、 フォルダのパスをどう与えたらいい?
cmd.exe /c cd /d %1 & %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
>>43 ユーザーズガイドをSSHで検索すればいいよ。
>>49 アリ、cmdから起動させるわけか
powershell -nologo -noexit -command "&{set-location -path 〜}"
てな感じで 〜 のとこ考えてたんだ
52 :
名無し~3.EXE :2006/11/19(日) 05:43:19 ID:iFXuwLCv
確かに、とりわけ起動時の遅さはちょっとびっくりするね。
53 :
名無し~3.EXE :2006/11/19(日) 08:42:21 ID:wyLaJ7jb
そのうちIEみたいにWindowsの起動プロセスに含まれるようになるよ・・・
>>53 いつだったかIEとExplorerが統合されたように、PowerShellとcmdが統合されることはあるかもね
でもcmdやPowerShellが起動プロセスに含まれるとは思えんな。そもそもcmdの存在すら知らない人いるし
起動の遅さは.NETアプリである以上しかたがないな。
致命的な遅さだな スクリプト化してファイルにすれば済むが
遅いか? サブマシンとして使っている、Vistaが無理な4年前のノート (PenIII 1.2GHz 1GB)でも2秒足らずで起動するぞ? このCUIが重いようなら、Vistaの(XAMLで描かれた)GUIは無理。
2秒は遅いよ。コマンドプロンプトなんて瞬時に起動するよ。
ウィンドウ開くのに0.4秒 copyright表示に0.5秒 コマンド入力可能になるまで13秒
>>57 GDI(特にフォント描画)は最新GPUでもRAGE128でも変わらない
VistaのAeroはD3Dが速いほど軽くなる
頭の中でコマンドを考えるのに12秒くらいかかってるんだと思われ
>>59 同じくらい、打てるようになるまでに15秒かかる。
>>57 ,61
すごい。自分のPCがいかに低スペックかわかるわぁ。
>>60 いやD3D9によるレンダリングそのものは別にいいのよ。
メインはPen4 3.2GHzHT メモリ2GB GeForce7800GS積んだ
自作機だし(こっちはPSの起動は1秒程度)。
言ってるのは.NETFramework3.0(のWPF)の重さのこと。
ttp://www.windojitsu.com/code/postcard.xaml これは割とあちこちに貼られているサンプルだけど
ローカルに落としてもPSの比ではなく開幕ディスクがゴリゴリうなる。
スペックは2桁ほど違うはずなのに大昔VRML踏んだ時と体感変わらないくらい。
>>49 俺は
>>50 だとできんかった。
結局、試行錯誤の結果、
cmd.exe /c powershell -nologo -noexit -command "&{set-location -path %1}"
に落ち着いた。
これだとネットワーク上のパスでもカレントにしてできる。
(起動時にcmd経由のためエラーメッセージだけ出るけど)
PowerShellは素晴らしいんだが これ入れると標準のcmdが文字色黒、背景色白に勝手に変更されて直せないorz
>>67 ん? CMDのウィンドウ左上クリックのプロパティでいじってもだめ?
あ、プロパティだとショートカットだ。規定値で。
うお、かっこいいな。 使いこなせるかどうかは別にして orz
内部動作はIronPython参考にしてるとは思うけど 構文的には似てないからじゃないかな。 ブレース言語かつ暗黙の $_ があるあたりはPerl譲りだし 内部イテレータやブロックはRuby譲り。
Vista用のPS1.0が来年1/31て…。
eval みたいに文字列を実行するにはどうすればいいですか?
イベントビューア久しぶりに見たらちょっとむかついた
>>79 $a="Get-ChildItem"
&$a
みたいな感じで。
ためしてないけど、 Invoke-Expressionじゃだめか? > eval
>>82 サンクス!イケますた!
>>81 それもやってみたんだけど名前のみokでパラメータ付とかはダメみたいなの。
84 :
名無し~3.EXE :2006/11/23(木) 10:03:44 ID:OEVZ8uAx
結局VISTAにも標準ではつかないのかな?
86 :
名無し~3.EXE :2006/11/24(金) 01:55:57 ID:i4dzB3XP
2kにはないのか・・・ さすがにそろそろXPにするかなぁ
テキストベースじゃなくて、オブジェクトベースで入出力するっていうアイディアは結構面白い。 GNUとかのお友達が、より広範なプラットフォームで動作するクローン作ってくれるかもね。 Cygwinに組み込まれても面白そうだね。
>86 2kはFramework動かんの?
Framework2.0は動くけど、PowerShellのパッケージがインストールできないんでしょ。
orcaでインストーラのバージョンチェックいじったらインストールできて そのまま使えたという書き込みがスラドにあった。> 2k そこまでやる気力は無いかもしれないが。
91 :
名無し~3.EXE :2006/11/28(火) 00:43:15 ID:NojsA+H+
>>90 orcaってのをいれてみていろいろやってみたけど
たんなるexeでインストーラ形式じゃないから?
むりっぽかった。
ふるいのはmsiとかだったの?
いまスラドを確認したらOrcaでいじってインストールできたとの話は PowerShell RC1の話でした。 いろいろ試させてしまったようで大変申し訳ない。
93 :
名無し~3.EXE :2006/11/28(火) 01:33:22 ID:NojsA+H+
>>92 いやいや、orcaを知ることができただけでもよかったよ。
94 :
名無し~3.EXE :2006/11/28(火) 02:31:18 ID:pSQSZH7s
みなさまありがとうございあmした ぶじかいけつしました〜♪
95 :
名無し~3.EXE :2006/12/01(金) 14:28:13 ID:lI1d52G4
なるほどなあ。
イベントログにWindows PowerShellってのが出来てるのにきょう気づいた 正直どうなんだろ?つかこんなのアプリケーションログで十分だろ。。。
おまけにそいつだけログサイズの設定が違うので 他と合わせたわ(512kB、7日で上書き)。 ちなみにIE7(Beta?)も単体で存在する。全く使われてないけど。
保守も兼ねて。 微妙な状態かもしれませんが、Win2kで正式版を動かしています。 動かすには手間がかかるのでオススメできなかったり....。 苦茶な導入をすることになりますが、ヒントらしきものを。 配布パッケージをバラしてupdate.exeを実行することになります。 ただし、2回ほどupdate.exeを騙す必要があります。 また、インストールが出来たとしても、 powershell.exe等のバイナリによるOSのバージョンチェックに引っかかります。 (powershell.exeはxp以降で起動するようになってる) それをなんとかすれば起動できるようになりました。 さらに実行ポリシーをRemoteSignedに落とさないとエラーが出たりしました。 (これは当方の環境だけかもしれません)
99 :
名無し~3.EXE :2006/12/22(金) 23:05:21 ID:Qm6lwLuU
閑古バード鳴いてる?
まぁこれを使わないとダメとかこれを使った方が一段と便利に という決定的なものがない気がするからなぁ 知らんけど
「〜するには」形式のサイトどっかに無いかな
で、 Out-Host の日本語対応はまだなの?
今度2003鯖のセットアップするんだがどコレ入れときゃやりやすくなるかな。
>>104 その判断を自分で出来ないレベルの奴は、入れても意味無いと思うよ。
>>106 のサイトからコピペ
[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$form = new-object system.windows.forms.form
$form.topmost = $true
$button = new-object system.windows.forms.button
$button.Dock = "Fill"
$button.Text = get-date
$button.Add_Click({$button.Text = get-date})
$form.Controls.add($button)
$form.showdialog()
たったこれだけでフォームが表示される。
今までWSHでInputBox表示して
1が入力されたらAの処理、
2が入力されたらBの処理というような感じでやってたけど
これは凄いっす!
スクリプトファイル1つで対話型のアプリケーションが作れるって事?
>>107 そゆこと。
ほかにXAMLなんてものもあるからねえ
C#, C++/CLI, VB, J#など複数のインターフェース言語からひとつの.NET実行イメージを扱える、というコンセプトがあるが、
それをPowerShellやXAMLなどスクリプトからも扱えるようにした、と。
汚染度とサンドボックス化を整理すれば、ローカルにインストールするアプリからJavaScriptが担うようなWebアプリまで
シームレスに扱えるようになるという意図。
できたー [void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $form = new-object system.windows.forms.form $form.topmost = $true $label = new-object system.windows.forms.label $label.Text = "ラベルだよ" $label.Dock = "Top" $check = new-object system.windows.forms.checkbox $check.Text = "チェックだよ" $check.Dock = "Top" $check.Add_Click({$label.Text = $text.Text + " " + $check.Checked}) $text = new-object system.windows.forms.textbox $text.Text = "テキストだよ" $text.Dock = "Top" $form.Controls.add($label) $form.Controls.add($check) $form.Controls.add($text) $form.showdialog()
110 :
名無し~3.EXE :2007/01/16(火) 02:13:41 ID:wkvnOy3k
111 :
名無し~3.EXE :2007/01/16(火) 17:19:35 ID:hoVVS1u3
tail -f みたいなことできるコマンドありますか?
>>111 ぐぐれば? "tail.exe" "-f"
受信料の支払いをお願いします。
ID:AM4jNHK3 NHK乙
こんなスレにまで日本ひきこもり協会の魔手が……
116 :
名無し~3.EXE :2007/01/26(金) 21:02:59 ID:wuZqHLcs
PCJapanに記事載ってるよ
ちょっとメモさせてね Get-ExecutionPolicy Set-ExecutionPolicy Restricted 実行できるスクリプトはない(デフォルト) AllSigned 信頼できる発行元が署名したスクリプトのみ実行 RemoteSigned ダウンロードしたスクリプトは信頼できる発行元が署名した場合にのみ実行 Unrestricted 制限なし Set-ExecutionPolicy RemoteSigned
118 :
111 :2007/01/29(月) 01:05:21 ID:GXfngCAS
>>112 Windowsで使えるtailコマンドを知りたいのではなく、
PowerShellコマンドに標準であるのかを
知りたかったんですが。
119 :
名無し~3.EXE :2007/01/31(水) 11:07:15 ID:HoIZ3ZyM
exe直リンよろ
直リンスレでよろ
でこれって zsh より強いの?
zshの補完機能の強力さには勝てない
.NETオブジェクトを扱えないシェルなどいらん。
いんすこしたけど、もっさりしてるなー WSHでおk
フォントって2種類しか使えないの?XP
Windows 2000では使えないんだな
マニュアルrtfかよw いまやHTMLじゃなきゃ読みたくない体になっている
ドキュメント配布はxpsにすべきだな
130 :
名無し~3.EXE :2007/02/17(土) 04:10:15 ID:l/aPEhzZ
遅すぎて使い物にならない。 cygwinでおk
タブ補完が使えたり便利になってる部分もある。 しかし、XKeamacsがまともに使えなかったり相変わらず不便。
PowerShellってHomePremiumでは使えないんですか?(´・ω・`)
F7.....入力履歴一覧表示
↑、↓.....履歴表示
PageUp..........一番古い履歴 PageDown.....いちばん新しい(最近の)履歴
Ctrl + ← Ctrl + → カーソルを単語単位で左右に移動 Home End カーソルを行頭、行末に移動
Esc ...... 行クリア
F8 ...... 履歴を検索。数文字打ってF8押すと補完してくれる。
チラシの裏にでも書いてろ
チラシの裏よりも見られないこのスレならいいだろ
PowerShellの解説本が売ってた。
テンプレのnewpops氏の本だから 他人の書評よりまず氏のブログを見て 合う合わないを判断してもいいんじゃね?
144 :
名無し~3.EXE :2007/04/03(火) 09:19:50 ID:2NdhdmuH
145 :
名無し~3.EXE :2007/04/04(水) 14:31:29 ID:x+5MzxW0
かなりイイけど、 エスケープが"`"だったり、 ファイル名の"["と"]"がワイルドカードになっちまうのがマンドクセ。
146 :
名無し~3.EXE :2007/04/18(水) 18:36:36 ID:jMQDvofa
定番 [void] [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [Windows.Forms.MessageBox]::Show("Hello, world!") …って、これならWSHのPopUpメソッド使った方が簡単か。 それにしてもスクリプトの記述方法が本当に特殊で困る。 何かC#とC++とPerlをちゃんぽんにしような感じだし。
less みたいのないすか?
moreしかない
なぜ区切り文字まで補完してくれない
むちゃくちゃ重い
Power(が必要な)Shellって事か。
152 :
名無し~3.EXE :2007/06/05(火) 23:20:44 ID:m7ZaUNT0
比較演算子に<とか>とかつかいたいでつ。 コマンド辞典とかでないかな・・・
これ覚えるよりAHK覚えるほうが実用的だよな
AHKってなに? AutoHotKey?
テクノロジーとしては面白いんだがエンドユーザにはあんまし関係ないか。 FTPのProviderとか誰か作らないかな。
標準搭載されたServer2008が広まって(Server2003を上回って)からだろうなぁ。
157 :
名無し~3.EXE :2007/06/09(土) 14:53:14 ID:RUshwDAU
XCOPYってパワーシエルでどうやってやればいいんですか?
cp -recurse
160 :
名無し~3.EXE :2007/06/26(火) 10:30:44 ID:p01GAEfP
なんて言うか、 何もせずにファンそのものが増えての、 オリコン入りなら両手放しで嬉しいが、 大人買いとか、煽ってのオリコン入りは、 正直、あんまり嬉しくない。 逆にちょっと見苦しい気もする。 それに、今、DLコンテンツに移りつつあるし。 そっちのほうでアニメが上に来ないってのは、 やっぱり、まだまだなんだろうなと。
161 :
名無し~3.EXE :2007/06/26(火) 21:11:15 ID:s7ibO4lw
ちょwwwwアニメ版いいかんじで終わったんで深く考えなかたけど、そこまでドロドロしてんのかw ゲーム版やりたくなったじゃないか 今からならPS2かPCどのバージョンやればいいですかね?
どこのゴバーク?
センターウンコに決まってんだろ
164 :
名無し~3.EXE :2007/07/01(日) 11:00:46 ID:KIR+WKNr
pingとかネットワーク系のコマンド無いのこれ?
166 :
名無し~3.EXE :2007/07/01(日) 22:56:46 ID:di1aVF0n
いまいちもりあがらんね。 JP1とか買ってくれない ビンボー会社でシステム管理やってる オラには重宝しそうな感じなんだけど。
167 :
名無し~3.EXE :2007/07/06(金) 18:29:25 ID:24W+BNh8
$test = "新新","新現","現行" $test $test[0] -lt $rest[1] $test[1] -lt $rest[2] $test[0] -lt $rest[2] $sort = $test|sort $_ $sort $sort[0] -lt $sort[1] $sort[1] -lt $sort[2] $sort[0] -lt $sort[2]
168 :
名無し~3.EXE :2007/07/08(日) 09:28:15 ID:jx/HjY15
ゼウスの負の遺産ほしい?
ps1の関連付けでファイルのドロップできる?
面倒だけど、できる
Win32APIを呼べますか?
DllImport使えるみたいだね
だめだろ
174 :
名無し~3.EXE :2007/08/04(土) 20:42:49 ID:878UiVYL
あやしい表紙の絵と翻訳本ってなんか難しそうだけど買ってみるか。
176 :
175 :2007/08/06(月) 23:40:34 ID:qAck1Toj
というわけで早速
>>174 の本を買ってきたが
文中のへんてこなアメリカンジョークがうざいね。
気にするなよHAHAHA-
179 :
178 :2007/08/07(火) 23:41:38 ID:eCYiNuxe
新機購入したからインストールしてみたけど起動普通に早いじゃん、一瞬だよ XPだからSuperFetchが効いてるわけではないし CPU/Turion64 X2 1.7Ghz MEM/2GB とりあえず色々遊んでみまつ
ps1ファイルは標準入力が読めないのね。 type a.txt|hoge.ps1 hoge.ps1<a.txt
-?より/?の方が打ちやすいのでパラメータの指定子を変更したいのですが、どうやればできますか?
MS-DOSのファンクションコールにそんなのあったな。 - か / を選ぶのが。全く使われていなかったけど。
しかもMS-DOS 5.0から廃止された
-に変わったのは、 /だとパスの区切り(\の代わり)にも使えてややこしいって理由だとどこかで見たので 多分無理。
>>181 こんな感じでおk
#test1.ps1
foreach ($i in $input) {
$i.trim()
}
#ここまで
PS >> type a.txt | ./test1.ps1
"<"を使おうとするとサポートされてないってエラーになるな。
こういう書き方も出来る。
#test2.ps1
begin {
"header"
}
process {
$_.trim()
}
end {
"footer"
}
#ここまで
PS >> type a.txt | ./test2.ps1
187 :
182 :2007/08/17(金) 20:49:45 ID:/9pvVAYt
少なくとも簡単にできるようにはできてない感じですか、残念
どれがいい? Windows PowerShell宣言! Windows PowerShell イン アクション Windows PowerShell実践スクリプティング―オブジェクト指向と集合指向の統合シェル
190 :
名無し~3.EXE :2007/08/19(日) 16:08:39 ID:RNQd+dN7
宣言:レシピブック アクション:言語解説。PowerShellを詳しく勉強するならこれかな 実践:おれには合わなかった。著者の主張が強く押し出されてる感じ
実践なんたらって本は文章が生意気だったので買わなかった。
俺も嫌な人間性が見えたから実践はパスした
>>191 3年ぶりに本を書きました。今回初めて、「ですます」調ではなく、「である」調の文体を採用しました。
IT業界を元気付けるために必要と判断いたしました。
拙著を読み返してみると、筆者の考えがストレートに伝わる印象を受けます。
ワロス
コマンドレットのヘルプ読んでもさっぱりな俺は素直にアクション選んだ方がよさそうですね
196 :
名無し~3.EXE :2007/08/19(日) 23:59:18 ID:vltCM7Kk
Windows PowerShell実践スクリプティングの作者、豊田 孝 こいつの書く本、Webの記事は全て糞 訳本は割とまともだか
他PCのイベントログを参照することはできませぬか?
ほかのウインドウをPowerShellの前にドラッグするとその部分表示されてた文字がボケボケになるのってvistaだと解消される? コマンドプロンプトでもそうだったからGDIの仕様なのかなと思ってるんだけど
>>198 XPでもそんなの見たことないぞ。
ディスプレイドライバおかしいんじゃね?
mjdk 自分が試した事のあるPCではどれも再現されるんだけどな…ドラッグする側のアプリにもよるみたいだけど まあ一度最小化して戻せば直るから別にいいんだけども
Write-Host Write-Output どう違うの?
Write-Host >CON Write-Output 標準出力
インアクション届いたのでレモネード飲みながら読んでるのですが ざっと見た感じ自作クラスは作れないっぽいですか?
>>203 PowerShellで扱える型は.NETの型なので、本物のクラスは
C#みたいな.NETアセンブリを作れる言語でないと作れない。
JavaScriptみたいに動的にオブジェクトを作る方法なら8章に書いてある。
今日、書店でインアクションを見つけたから読んでみた 分厚くって良い感じだけどやっぱり高いね さすがに市民図書館には置いてないだろうな > PowerShell 便所において毎日読みたい本だぜ
実行速度はWSHより速い?
遅い
速いわ。 初回起動は遅いけど。
210 :
名無し~3.EXE :2007/08/26(日) 23:41:35 ID:okLxGB+6
Windows PowerShell実践スクリプティングの作者、豊田 孝 この本の中にコラムが3つあるのだが、内容は基地外みたいだった。 よくもこんな内容の文章が書けたものだ。 立ち読みして確認してみるべし
.net関係だからコールドスタートが遅いな ドトネトでFizzBuzzしてみたのでチラウラしてみる [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") # Create $form1 = New-Object System.Windows.Forms.Form $Button1 = New-Object System.Windows.Forms.Button $Listbox1 = New-Object System.Windows.Forms.ListBox # # Button1 # $Button1_onclick = { $ListBox.Items.Clear() for($i = 0;$i -lt 100;$i++) { $str = $i.ToString() if (($i % 3) -eq 0) {$str = 'Fizz'} if (($i % 5) -eq 0) {$str = 'Buzz'} if (($i % 15) -eq 0) {$str = 'Fizz Buzz'} $ListBox.Items.Add($str) } }
$Button1.Dock = [ SYstem.Windows.Forms.DockStyle]::Top $Button1.Location = New-Object System.Drawing.Point(0,0) $Button1.Name = 'Button' $Button1.Size = New-Object System.Drawing.Size(300,32) $Button1.Text = 'Button' $Button1.add_Click($Button1_onclick) # # Listbox # $Listbox1.Location = New-Object System.Drawing.Point(10,50) $Listbox1.Dock = [ SYstem.Windows.Forms.DockStyle]::Fill # # form # $form.Controls.AddRange($Button1) $form.Controls.AddRange($Listbox1) $form.Name = 'form' $form.Text = 'Fizz Buzz' [System.Windows.Forms.Application]::Run($form) フォーム使うならC#特急の方が手軽かな?w
今まで断固拒否してたXPSP2を入れたついでに.NetFramework2.0も入れてPowerShellも入れてみたけど なんだこの見難いリファレンスは・・
日本語版は?
ねーよ
なんだ、使えねーな
218 :
名無し~3.EXE :2007/08/28(火) 23:33:38 ID:5jZDxNsL BE:918648498-DIA(205104)
日本語版ふつうにあるだろw
chmのことだぞ
日本語が欲しければ Get-Help cmdlet や純正のDOCヘルプを読めばいい chmはクリックリファレンス程度のものだからそれほど重要ではない それよりもFTPとSCPとWebDAVのプロバイダ マダー?
へー、Win板数年ぶりに来たけど、 これって面白そうだね。 []が違和感あるな。Objective-Cみたいだ。
環境変数の使い方を良く忘れる。 $env:〜か。
これってやろうと思えばFPSゲームみたいなのも作れたりするの?
>>223 詳しく知らないけどAvalonが完成すれば出来るかもしれない
もっとも速度的に難があると思うが
>>224 XNAと連携させて3Dゲームが作れるコマンドラインシェル〜とか夢が広がるなぁと思った次第でして
新バージョンで<のサポートもそのうちあるらしいから、ついでにもっと変態シェル目指して欲しい
どれどれ、と読み始めて >ソフトウェアを開発することは重労働である ここまでほうほうと読み進めて >同じ程度に屈辱に満ちている。 あかん、ここでなんか吹いてしまった
228 :
名無し~3.EXE :2007/09/02(日) 22:39:44 ID:YLhoHGUL
だろ?なんか書いている奴にむかついて読めないって久しぶりだよ俺w
ひねくれ者が多いな。
こちらスネーク、宣言の入手に成功、状況開始する
数時間の格闘の末WPFプログラムを起動できたけど、Aeroみたいな窓枠にはならんのね いや分かっちゃいたけど
>>211 のFizzBuzzだが、switchでこんな書き方出来た。
switch(0..99) {
{$_ % 15 -eq 0} {'FizzBuzz'; continue}
{$_ % 3 -eq 0} {'Fizz'; continue}
{$_ % 5 -eq 0} {'Buzz'; continue}
default {$_}
}
たいして短くなるわけでもないが
こんなことできますか?WSHのときはやり方分からなかった。 全角半角混在のテキストデータを100バイト毎に改行を入れる ※1レコード内の全角文字、半角文字の割合は不定 ※全角文字はレコード間をまたぐことはない
なんというやぼったいコード…この男は間違いなくプログラミング初心者 #数えにくいので10文字でやってみた。 #ていうか代入楽っすね。 $result="" $string="Windows PowerShell (正式版リリース)1.0" for ($i=$j=0;$i -lt $string.Length; $i+=10) { for (;$j -lt $i+10 -and $j -lt $string.Length; $j++) { $result+=$string[$j] } $result+="`n" } write-output $result
やーいやーい文字数じゃなくてバイトだよ、俺の馬ー鹿
ネイティブイメージジェネレータとか言うの使うと 起動時間速くなるの?
.NET_R-Tuneで心なし早くなった気はする でもAnalizerの方は起動しなくなった
ps1スクリプトをコマンドのように実行するのってスクリプト置いたディレクトリにパスと押してないと無理だよね?
と押して→通してorz
バッククォート使ってコマンドにパラメータを複数行にわたって指定するとき 二行目以降ではハイフン入力後のパラメータの補完機能が有効じゃなくなるね、バグなのか仕様なのか
>>234 全角半角とか気にするからにはShiftJISのファイルだよな。
>※全角文字はレコード間をまたぐことはない
ってのは、元データがそうなってるって意味で合ってる?
get-content "input_file.txt" -encoding byte -readcount 10 |
foreach { $_ ; [byte[]](0x0d,0x0a) } |
set-content "output_file.txt" -encoding byte
こんな感じでどうだろう。
文字列にするとUNICODEにされてしまうので、バイナリのまま処理するのが楽だと思った。
UTF-8かもしれんぞ
244 :
234 :2007/09/06(木) 20:18:01 ID:f/Q0kyzH
おおおおっ!求めていたのはまさにこれです! ありがとうございました。 > 全角半角とか気にするからにはShiftJISのファイルだよな。 > >※全角文字はレコード間をまたぐことはない > ってのは、元データがそうなってるって意味で合ってる? 仰るとおりです。1レコードxxバイトと決まってはいますが 漢字項目の空いている部分が半角スペースで埋められていたりしているので 文字数ではなくてバイト数で処理したかったんです。
PowerShell Community Extensionsにlessあるじゃん! 今頃気がついた。
246 :
245 :2007/09/11(火) 08:03:44 ID:rZmXxX7S
アセンブリの中のクラスを表示することってできますか?
Assembly.GetTypes で、アセンブリで定義される型が取得できるので [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.PowerShell.ConsoleHost").GetTypes() とするだけでいい。 とりあえずGetTypeメソッドとGet-Memberコマンドレット使ってみて、出てきた名前をMSDNで調べるといろいろわかってくるぞ。
249 :
247 :2007/09/12(水) 02:04:58 ID:pVb2Weua
>>248 おお、ありがとうございます
System.Windows.Formsの中身が知りたかったんですが、恐ろしい数が出てくる…
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms").GetTypes() | ?{$_.IsPublic} IsPublicで絞らないと意味ないのがいっぱい出てくるな。 (IsVisibleの方がいいんだろうか?)
MSDN見た方が早いぞ。 VisualStudioExpressにも付いてくる。
252 :
247 :2007/09/13(木) 00:19:14 ID:+7RN+Hq/
>>250 ,251
助言ありがとうございます
(dir).countとかが当たり前にできてしまうキモさに惚れたんですが
アセンブリ関係は素直にC#とか勉強した方がよさそうですね
インアクションP43の一行目、「一対の〜問題になります。」の部分が何を言っているのかよく分かりません どうして一文字を引用符で囲みたい場合に問題になり、それがバッククォートで解決されるんでしょう?
これを実行すると for($i = 1; $i -le 100; $i++){ Write-Progress "サンプル" "進行状況:" -PercentComplete $i Start-Sleep -Milliseconds 80 } ↓こんな状態になるのはどうして? ササンンププルル 進進行行状状況況:: [oooooooooooooooooooooooooooooooooooooooooooooooooo ]
全角文字幅を考慮してないんだろ DOSKEYでもカーソルを戻すとおかしくなるし
某スレで前回起動した時の時間を調べて一週間以上空いてたら云々ってあったから 最終アクセスタイムの取得方法調べてたんだけど、恐ろしく簡単に出来るのね diir|%{$_.LastAcceseTime} ついでに時間比較に渡す文字列の書式も結構融通利くし、賢いわー バッチファイルでやってた頃が嘘みたいだ…以上チラ裏
>>253 確かに意味不明だw 訳がおかしいんだと思うが。
要するに一文字だけクオートしたい場合は`使えばいいって事を言いたいんだろう。
[Void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") (New-Object System.Windows.Forms.FolderBrowserDialog).ShowDialog() を実行すると 「新しいフォルダの作成」、「OK」、「キャンセル」ボタンは表示されるけど ツリー部分が何も表示されない。どうして? OS:Vista
>>257 'や"を使うと囲おうとしているということを覚えておく必要があるから
単純にトークンを繋げたいなら`の方が楽ですよ、位の意味ですか
`で繋いだだけでは文字列として認識されないのが難ですね
コマンドレットのパス指定…の時もTabで補完しちゃうからあまり使い道が…
STAThreadだと使えないコンポーネントみたいだな。PowerShellはMTAThreadで実行されちゃうので。 VB.NET経由で無理やりSTAThreadで実行する方法がPowerShell宣言に載ってたが。
262 :
260 :2007/09/19(水) 22:39:21 ID:yE+vo/S7
>>261 試しにその方法で実行するスクリプトだけ
>>258 の二行に差し替えるとあっさり表示できた
でもスクリプトが動作するなら初めからSTAで動作するPowerShellも用意して欲しい悪寒
263 :
261 :2007/09/19(水) 23:45:11 ID:JCKiJNG0
今更だが ×STAThreadだと使えない ○STAThreadでないと使えない ですなorz せめて標準でSTAで実行できるコマンドレットか何かが欲しいね 今回のフォルダ選択なら $sh = New-Object -com Shell.Application $sh.BrowseForFolder(0, "test", 0).Self.Path でも出来るが。
264 :
258 :2007/09/20(木) 00:24:49 ID:YqKZPYh1
とりあえず原因が分かってよかったです。 $sh = New-Object -com Shell.Application $sh.BrowseForFolder(0, "test", 0).Self.Path でいくことにします。
2つのDBのコンペア(全テーブル)なんて簡単にできますかね。
DBはあまり知らないが .NETからアクセスできるならたいていのことは出来る
PowerShell実行環境の条件は、.NET Frameworkのみインストールされてればおk? それともPowerShellパッケージも必要なのかな
パッケージ必要だと思う。 Server2008にはデフォで入ってるらしいが。
WSHは、VBScript、JScript以外にも、Perl、Ruby、Pythonなども動作するらしいけど WSH+Pythonとかどんな感じなんだろう。 PowerShell、Cygwin+UNIX Shellと総括的に比較してもらいたいものだ。
総合的
しかし2kを除外するとか正気の沙汰とは思えんな
Get-Aliasの使いにくさは異常、何故Get-Commandの逆にしてくれないのか…
>>273 面白そうなのでWinRSが欲しいです
NT除外もひどいよなー
Meたん除外なんて人間の所業とも思えません><
<除外もひどい、とマジレス
WindowsServerWorld 11月号 便利なHTMLヘルプをオリジナルで作る
RECT構造体を使いたいのですが [Reflection.Assembly]::LoadWithPartialName("WindowsBase") みたいにやっても型を認識してくれません、どうやればいいんでしょうか?
すみません呆けてましたorz ↑でアセンブリ読み込んだ後、[Rect]でも[WindowsBase.Rectでもなく
MSDNの通り名前空間に指定されてるSystem.Windows+Rectで[System.Windows.Rect]とやればいいんですね
ttp://www.vector.co.jp/soft/winnt/util/se437962.html これでPowerShellからもWin32APIが間接的に呼び出せるみたいなので
とりあえずGetWindowRectのラップ関数作っているところだったのですがどうもうまく行かないです
function GetWindowRect([Int32] $hWnd, [ref] $WindowSize)
{
$a = New-Object System.Windows.Rect
[Reflection.Assembly]::LoadWithPartialName("WindowsBase").gettypes()|%{if($_.name -eq "rect"){$type=$_}}
$parameterTypes = [Int32], $type.MakeByRefType()
$parameters = $hWnd, $WindowSize
Invoke-Win32 "user32.dll" ([Boolean]) "GetWindowRect" $parameterTypes $hWnd
}
$WindowSize = New-Object System.Windows.Rect
GetWindowRect $hwnd ([ref] $WindowSize)
$WindowSize
System.Windows.Rect型変数は作れるようになったものの、それへの参照型をどうすればいいのか分からず…
上のリンクだとInt32へのそれを[System.Type]::GetType("System.Int32").MakeByRefType() のように指定してるのですが
力業でRECT&にしてみたものの、これじゃだめみたいです
助言お願いします
PowerShellでジャンクションとディレクトリってどうやって見分ければ良いんですか?
283 :
280 :2007/10/02(火) 21:24:15 ID:PbUo+l5T
あれからいろいろ試していたらできました $WindowSizeに.Valueを付けなかったり、Invoke-Win32への引数として $parametersの代わりに$hWndを与えていたこと等の凡ミスと 関数定義の中でforeachで無理矢理取得していたRECT型と 呼び出す側の$WindowSizeの型Rectが違っていることが原因だったようです さて、頑張ってSizerもどき作ってみよう…
Compare-Object。もうちょっと何とかならないの? 行番号も出せないし。まだFCの方が分かりやすかったよ。
無理せずにfc.exeを使えばいいよ つか標準でfcがFormat-CustomにAliasされていたのはちょっと勘弁してほしかった
>>282 Vista専用なんだよな。
コマンドプロンプトはVista前も載せてくれれば買ったのに。
[System.Windows.Forms+NOTIFYICONDATA]のインスタンスを生成する方法はありますか?
すみません、[System.Windows.Forms.NativeMethods+NOTIFYICONDATA]の間違いです C:\WINDOWS\assemblyのアセンブリ全部読み込んでも型がないってエラーが出ます
diff並の差分表示機能付けろ
292 :
名無し~3.EXE :2007/10/30(火) 20:23:28 ID:zQK49SRa
Windows2000で動かしたいです
293 :
powerppy :2007/10/31(水) 22:15:29 ID:WWQkwdaB
powershellでシステムログの監視をしたいのですが、 システムログを取得後、 メールではなく、netsendか他の方法で他のPCへメッセージ送信する 方法はありませんでしょうか? たいがいの本、ネット情報では、電子メールでという記事が多いので どなたか教えてください。
295 :
名無し~3.EXE :2007/10/31(水) 22:50:04 ID:xPF592GM
2003のセットアップするときこっそり入れておこうかな 後から入れようとすると承認うるさそうだし
296 :
powerppy :2007/11/01(木) 00:27:18 ID:kILMG1mw
net send でした、すいません。 .netのnetmessagebuffersendとかpowershellでつかえるんでしょうか? 書き方がわからなくて・・・
ふつうにnet.exe使えばいいのではないでしょうか。 PS > net send 〜〜 みたいに。 powershellはexeファイル直接実行できますよ。 それともこれではなんらかの要因で失敗するということでしょうか。
SFUから完全移行したい。 でもdiffが弱すぎて移行出来ない。
つwindiff
コマンドプロンプト用のdiffはどっかにあるんじゃないか?
だから、windiffつかえって windiff /?
使い方が分からない Windiff a.txt b.txt -slrdx c.txt 適当にオプション付けてみたけど違う
-filrx
Windiff a.txt b.txt -filrx c.txt にすると画面が出てくる。 Windiff Usage windiff path1 {path2} {-D}{-O}{-N name}{-s{s}{l}{r}{d}{x} savefile} f や i なんてオプション無いよ
2000やXPのSupport tools\windiff.exeにはあるよ
正式版まで待つわ
RemotingとかBackground Jobsとかいい感じに揃ってきてるな PowerTabがどうにももっさり何で、Tab補完をインテリセンスっぽくしたってのにも期待
>>305 解決しました。
VS6.0付属のwindiffは古いんですね。
Win2000のサポートツールに入っているのを使ってみたら出来ました。
もうバージョン上げるのか。ろくに普及もしてないのに、コロコロ変えるな。 新版向けに作ったら前のでは動かないし、旧版だと機能足りないし。 もうバージョン管理地獄かよ。 せめてServerCoreにでも入ってるならともかく、、、、ぶつぶつ。 と思ってる管理者は少なくないはずだ。
.NET2.0→3.0みたいに機能追加じゃね? いやドキュメント読んでないから知らんけど。
1.0が入ってると2.0が入れられないんだそうな 2008に標準で入るのが1.0か2.0かニヨニヨしながら見物ですよ?
まじかwww 1.0ばらまいた俺涙目www
/ /,_ュ_>、 \ / | ヽ ン' | \ l ,. 、 -‐l ゚i(○)i!゚ l- 、,,_ ヽ \ / ヽ、`'''゙ ノノ `'ヽ、 / `| __,.. -_‐ ニニニ ‐_- 、 _ l ,.-'゙ 〈.r '' ´ ` '' -={} /:::!`ァ- 、..,,____,,,.. -、,''゙ソ:::ヘ /:::::l ゙ ,.r= ` ´ ァ=-、 ` l::::_ィ 〈ヽ| '゙ ノ i 丶 l/,' | . , ‐ 、 | 〉! l l | リ 見なかったことにしよう . ヽ. ヽ ヽ`| l _ k/ . ヽ ヽ l」 , ` ヽ l-゙ ヽ. ', / ̄〉 ヘ ' 、ー――一ァ / ', '、, べ、 l ヽ ヽニニニシ / ゙, / _ ヽ! lヽ -―- /l . У_. イ ヽ 〉 _,| ` 、 / l_ ノ ´_,. ‐ ヽヽ/; / ヽ ; ̄ ̄ ,.イ l | ヽ | Lノ \_ ヽ _,.ィ´ L_ | `´〉 / ! l フー/ / `〈_` ' ‐ 、 _」 ゝ,l_| l ヽ / ̄ ̄ヘ / ` ' - 、`tォ、,_ ,.ィ「|,,.ゝ、 ヽ. l ヽ ∧ ハ / `' -、 /ス、 . /Y゙´ ヽ l l ヽ. / 〉t‐ 〈 ヽ/ ` - ト、 / | | | l ` l | | | i
.Net Framework 3.0 is required to use Graphical PowerShell and Out-GridView. とあるからSTA絡みのめんどくさい部分が解消されてるといいな しかし一番気になるのは'<'のサポートの是非、と思ってるユーザーは少なくないはずだ
正式版いつ頃来るんだろ。 導入を待ってたかいがあった。 早く正式版こい。
すごーく先だと思うよ。 CTPはベータじゃねぇ! ってブログにもしつこく書いてある。
なんだ。がっかり。
それでもペイエットなら…ペイエットならきっと何とかしてくれる…
exitって、コマンドレットにはないし、Get-Commandでも出てこないってことは コマンドプロンプトの組み込みコマンドなんだろうけど、なんでPSでも有効なんだろう
322 :
名無し~3.EXE :2007/11/08(木) 17:58:16 ID:PbeDAjSm
exitはステートメントだよ。
>>322 ステートメントは表示されないのか、抜かった
コマンドラインからwindiffの結果をファイルに吐いたやつって行番号付けられないの?
フィルタの練習問題だね
-flrx で差分だけを表示した場合。
>>324 今度こそキマシタワーGJ!!!
英語版は既にあったから、今回あわてて追加したんかな
あんなにvistaが羨ましく感じたのはSAPI5.3以来二度目だったぜ
ではさようなら1.0、はじめまして2.0
うーむタブ補完機能がどう変わったのか良く分からん… 俺の素敵翻訳脳ではこれってインテリセンスのことかと思ったんだけどなぁ The TabExpansion function now only shows unique parameters and lists them in sorted order. とりあえずjaフォルダをコピーするためだけに2.0消して1.0入れてまた2.0入れ直す作業したのは俺だけじゃないと信じたい
ファイルの分割・結合スクリプトが欲しい。 5Gぐらいのファイルがあるとそのまま圧縮出来ない場合(2Gとか4Gとか上限)が多いみたいだから。
PowerShellをPowerShellでタスクトレイに閉ってやろうと頑張ってみたけど結局DM2に逃げました 悔しいけどあのアイコンがタスクトレイに納まってる姿はかっこかわいい 本家が対応してくれると一番ありがたいけれど…
ctrl+u 一行クリア ctrl+h 一文字クリア これって出来ないんでしょうか?
>>332 Ctrl+Hは普通に使えるぞ?
一行クリアはEscで代用するかにとしょーと他、フリーのツールで割り当て変更しる
やってて気付いたが^AみたいにCtrl同時押しでエスケープするキー入力した後
TabやCtrl+I入力するとその部分だけ対応するJISコードに変換されるんだな
ついでにその状態でBackSpaceやCtrl+h入力すると本来のプロンプトより削れる
[void][Reflection.Assembly]::LoadWithPartialName("PresentationFramework")
$xaml = [xml]'<Window Width="Auto" Height="Auto" xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation " />'
$UniformGrid = $xaml.CreateElement("UniformGrid")
$UniformGrid.SetAttribute( "Columns", "10")
[Windows.Media.Colors].GetProperties() | % {
$TextBlock = $xaml.CreateElement("TextBlock")
$TextBlock.SetAttribute( "Name", "textBlock_$($_.Name)" );
$TextBlock.SetAttribute( "Text", $_.Name );
$Button = $xaml.CreateElement("Button")
$Button.SetAttribute( "Name", "button_$($_.Name)" );
$Button.SetAttribute( "Background", $_.Name );
[void]$UniformGrid.AppendChild($Button)
[void]$UniformGrid.AppendChild($TextBlock)
}
[void]$xaml.Window.AppendChild($UniformGrid)
$xaml.Save('xamlsource1.txt')
やっとxmlの作り方分かってきたけど、最下位要素への子要素の追加の仕方とか結構嵌まるね
CreateElement("1")が成功するのはxml的にいいんだろうか?
要素にアクセスしようとしてもどうせエラーになるけどさ
Vista64でWinDiffで「@」の入ったフォルダ同士を比べると結果がおかしい
A file can have a SLM version e.g. windiff foo.c@v-3 foo.c
開発チームがサードパーティ製アプリ宣伝してるってことはGraphical PowerShellはあんまやる気無しなんじゃろか
開発チームの目的はオブジェクトをCUIで幸せに扱うことであって GUIなんかどうでもいいんでしょ。
あれはGUIっていう・・・のか?いやまあGUIではあるが
C#でPowerShellを使ってみる!っていうサンプルプログラムレベルじゃね。
powershellがlogeventを大量に出してるけど何とかならん?
Set ie=CreateObject("InternetExploler.Application") の If TypeName(ie)="IWebBrowser2" Then は、PowerShellではどう書けばよろしいでしょうか?
生成は $ie = New-Object -ComObject InternetExplorer.Application
プロバイダってLINQ的な思想?
とりあえずのその場しのぎでいいなら、そのコマンドをリストアップしてくれれば協力するよ 俺は頼りにならない可能性が高いけど
XAMLReaderがあるくらいなんだから、OoxmlReaderやODFReaderもあるといいんだけどなぁってこれは.netの問題か
Silverlight 2.0(元1.1)は2000でも配布されるようだが ということはつまりC#なりIronpythonなりなんなりでPowerShellのSDK使ってエミュレータを作れば 後はHTAと組み合わせて2000上でPowerShellを再現することは可能なのかしら なんてことをふと思った自分の研究ですらない実験で徹夜中の12月23日彼女なし大学生の夜、というか早朝
>>351 去年の俺そのままじゃねーかw
就職決まってるならもう少しだから頑張れ
修士行くなら早めに就職口定めとけ
博士行くならご愁傷様
よい年越しを
1.1の環境構築するのめんどくさいなぁ、ってかExpression Blend Expressも出してくれよ
>>352 幸いかどうかは分からないがそのどれでもない稀有な存在であるのは確か
あー眠い、最後のサンプルやってこよう
パワーシェルでADSIつかえる?
PowerShellの起動がおっせーなーとか思ってたら パソコン入れ替えたら速くなった。
359 :
名無し~3.EXE :2007/12/31(月) 12:18:23 ID:l/s6gdLf
>>358 気休めどころか劇的に速くなったんだけど、有名なことなの?これ
なんで最初からネイティブイメージキャッシュとやらにインストールされてないの?
俺も横レスだが.netアプリ起動速くなったわ 感謝
monoでコンパイルしたアセンブリは初回起動が遅い。これは当然だから理解できる そして、VS C# (csc.exe)でコンパイルしたアセンブリは初回起動も普通に早い。 これもまあ理解できる。 でもなんでpsは遅いんだろう?
alias Export-Alias, Get-Alias, Import-Alias, New-Alias, Set-Alias cat Get-Content cd Set-Location chmod CACLS.EXE chown CACLS.EXE cp Copy-Item dat Get-Date diff Compare-Object echo Write-Output env Get-Variable grep Select-String history Get-History kill Stop-Process, Stop-Service ls Get-ClildItem man man mkdir mkdir, New-Item more more mv Move-Item ps Get-Process pwd Get-Location rm Remove-Item rmdir Remove-Item sort Sort-Object tee Tee-Object time Measure-Command unalias Remove-Item wc Measure-Object
【alias】 Export-Alias, Get-Alias, Import-Alias, New-Alias, Set-Alias 【cat】 Get-Content 【cd】 Set-Location 【chmod】 CACLS.EXE 【chown】 CACLS.EXE 【cp】 Copy-Item 【dat】 Get-Date 【diff】 Compare-Object 【echo】 Write-Output 【env】 Get-Variable 【grep】 Select-String 【history】 Get-History 【kill】 Stop-Process, Stop-Service 【ls】 Get-ClildItem 【man】 man 【mkdir】 mkdir, New-Item 【more】 more 【mv】 Move-Item 【ps】 Get-Process 【pwd】 Get-Location 【rm】 Remove-Item 【rmdir】 Remove-Item 【sort】 Sort-Object 【tee】 Tee-Object 【time】 Measure-Command 【unalias】 Remove-Item 【wc】 Measure-Object
PowerShell純正のエディタ(つまりコマンドレットか関数)って誰か既に作ってたりする?
368 :
名無し~3.EXE :2008/01/04(金) 18:34:28 ID:SwDo3M/g
>>368 edlinって何の事?これって外部プログラムじゃない?
それはそうと
$file = Get-Item file
$file.OpenText()、$file.OpenWrite OpenRead,AppendTextとか色々使えるから
edlinぐらいだったらほんとに簡単に組めるかもな
.netがそのまま使えるのは大きいな、でも大抵C#使ったほうが早(ry
GUIがよけりゃTextBoxにぶちこんで表示すりゃいいだけ
>>368 出来ればDOSプロンプトのeditコマンド程度の機能は持ってて欲しいけど
作業ファイル作らずに直接dir|sort|notepadみたいなことをしたいと言ってる人を某スレで見かけたんで
まあ面白そうではあるかなと思ったわけ
>>371 >>370 の方法ですぐ作れるんじゃない?ワンライナーでもできそう。フォームとテキストボックスとOKボタンとキャンセルボタンでいいんだろ?
>>372 あー、たしかに
いまいちFormsが使える意義が見出せなかったけど、こういう時は便利だな
Win98以前はなぜか notepad.exe <<<< editだったからなあ notepadよりjもeditの方が使い勝手いい あのころはまだ消防だったけど、学校でテキストエディタ使う機会があったからedit使ってた。 他のヤツはMS-word、たまにワードパッド開けてるヤツもいたけどなw 今でも「え〜、テキストエディタ?ワードで済ませちゃうよ」なんて逆の事行ってる人が居るけど、いまだに不思議でたまらん。 ああ、PS、PostScriptの話だったな・・・つい昔話にふけちまって(ry
普通に人いたんだなここw しかしコーディングオンリーでフォームをデザインするのはえらいしんどいな xamlのよさが身に染みるというかなんというか パイプの中間で呼ばれたときだけ値を返すっていうことできる?
376 :
名無し~3.EXE :2008/01/07(月) 03:15:26 ID:ajz/SGiK
functon numbers([int] $n) { $n numbers($n + 1) } function take([int] $n) { foreach($v in $input) { if(0 -gt --$n) { return } $v } } numbers 99 | take 2 99 100 みたいなこは出来ないのでしょうか?$inputはイテレータというより内容が決定済みのコンテナ?
s/(?<=なこ)/と/
378 :
名無し~3.EXE :2008/01/07(月) 08:53:48 ID:5Q5FJQeZ
>>376 functionじゃなくfilterを、$inputじゃなく$_を使え。前処理後処理はbeginブロックとendブロックで。
99..199|select -First 2
>>378 filter take([int] $n) {
if(0 -gt --$n) { exit }
$_
}
でイケました。サンクスなのであります
XP Homeじゃ無理なんでしょうか
379では何が不満なんだろう…
>>382 インストールの話か?
.NET2.0とSP2入ってれば問題ないはずだが
>>385 Select-Objectの使い勝手は強調しときたい次第
387 :
376 :2008/01/08(火) 14:45:30 ID:Pf7StnbN
>>383 あのコードはあくまで例で、(99,100) が取りたいわけではなくて
Haskellの無限リストみたいなことがしたかったのですが、伝わりにくくてサーセン
&{while(1) {1}}|select -First 10
では永久に処理が止まらないので目的は達成出来んとです
最初の10オブジェクトを左辺式から得た後即停止して欲しいところなのであります
>>387 PowerShellは再帰呼び出しは100回までに制限されてるからnumbersみたいな関数で無限リスト再現するのは無理だよ
何もexitしなくてもbreakで十分な気がするけど
すみませんが、質問です。 まったく分かっていなくて恐縮なのですが、PowerShellというのはWindows専用 なのでしょうか?Linux上で、MONOを使って動かしたりはできないのでしょうか?
>>390 Linux上でも動くべきだけど
残念ながら動いたと言う話は聞いてない
分かるよその気持ち、同情するよ
でもやっぱり.netの最適な環境を得るためにはwindowsしかないんだよ
Linuxのshell環境は十分強力じゃないか? なんでPowerShell使いたいん?
>>391 PowerShellが動くには.NET Framework 2.0が必要。
だから1.x相当のmonoでは動かなくて当然。
>>387 少なくもPowerShell v1のパイプ評価は左からのEager Evaluationだったような。
コードネームmonadの名を冠するくせに、実はLazy Evaluationの仕組みは無いように見えた。
UNIXのパイプをモダン化しているように見せかけてそこは退化してる。
自分も昔散々調べたんだけど、そういう結論に落ち着いた。
ほんとかどうかは知らんので自分で調べてくれ。
なんかよく分からんがストリーミングで全部解決する気がする
>>394 具体的に何がしたいのか、何がUNIXでできてPowerShellでできないのか書け。
俺の記憶では、パイプはUNIXの機能ではなくてシェルの機能だったと思うがな。
まず、help about_filter してから書けよ。
困ったときのインアクション
398 :
390 :2008/01/09(水) 20:33:17 ID:Ha5Sf/M5
>>391 ,
>>393 ありがとうございます。残念ですね。
Monoの進歩に期待しましょう。
>>392 確かにUNIXのシェルは便利なのですが、仕組みがいかにも古いので。
PowerShellには未来が感じられるのです。
Win以外の環境で1から作り直すなら.NETである必要すらなさそうだが… PowerShell自体はどうせWin32API使いまくってるだろうし つーかそろそろ帰っていいすか教授
んー?使ってねぇと思うよ。 まぁ.NetFramework自体が使いまくってるけど。
>>354 の本が店探してもない件
今度.NETのソース公開するらしいけどAutomation.dllとかも見れるんかなー
ところで遅延評価が話題になるのはコマンドプロンプトからの伝統ですか。
>>401 tcshやzshなどのよく使われるUNIXのシェルのパイプは、PowerShellと同じく左から右へデータが流れるようになっている。いわゆる遅延評価ではない。
だから、Haskelしか知らない信者の戯言か勘違いか知ったかぶりと聞き流すのがいいよ。
>>402 >tcshやzshなどのよく使われるUNIXのシェルのパイプは、
>PowerShellと同じく左から右へデータが流れるようになっている。
>いわゆる遅延評価ではない。
UNIX OSなどが提供するパイプにはバッファサイズがある。
プロセスAがパイプの入力口に何か書き込むと一旦バッファに蓄積され、
プロセスBがパイプの出力口をから読み出すとそのバッファからデータが取り出される。
ここまで基本。
いわゆる遅延評価的な動作は、次のような仕組みで実現されている。
1. パイプの入力口を持っているプロセスが、
バッファサイズを超えてパイプに書き込もうとするとブロックされる。
OSはこのとき別のプロセス(≒スレッド)にCPU実行権を移す。
溜まってるデータがバッファサイズを下回ると再びOSはこのプロセスにCPU実行権を割り当てて
中断していた書き込みのところから実行が再開される。
2. パイプの出力口を持っているプロセスが、
バッファが空のパイプから読み込もうとするとブロックされる。
OSはこのとき別のプロセス(≒スレッド)にCPU実行権を移す。
バッファになにかデータが溜まると再びOSはこのプロセスにCPU実行権を割り当てて
中断していた読み取りのところから実行が再開される。
(続き) つまり、 A | B | C | D | E のようなパイプ構造の、ある瞬間の実行状態は、 - 下流への書き込みで止まっているプロセス: A, B, C - 上流からの読み取りが終了して下流への書き込もうとしているプロセス: D - 上流からの読み取りで止まっているプロセス: E みたいな構造になる。 確かにデータは左から右に流れるけど、プロセスの実行順序はA〜Eの間で激しく行き来する。 これはまあ遅延評価と言っても良いんじゃないかと。 ここまでUNIXのパイプの話。これをPowerShellでどう再現するのかは知らん。
俺にはただのバッファリングにしか見えない
うんだからfunctionの代わりにfilter使えばいいんじゃない?
>>403 それは遅延評価ではなく
>>405 の言うとおり単なるバッファリングだな。
Haskell信者のくせに遅延評価の意味も知らんのか。
バッファリングはパワーシェルでも当然やっていることだが、
他のシェルが全バイナリをパイプに流すのに対し、パワーシェルの場合は
コマンドレットや関数のパイプではオブジェクトの参照だけを流すので、
バッファがあふれるという局面自体が少ない。
たとえば、shで100行10000バイトのテキストを渡すとすると、当然10000バイトの
データが次のプロセスに渡る。
しかし、パワーシェルの場合は100行×4バイト=400バイトのデータのみが
次のコマンドレットに渡ることになる。
これは退化ではなく進化だと思うが?w
加えて、
>>407 の言うとおり、functionでなくfilterを使えばデータの流れを各タスク(プロセスやスレッド)で並列処理できる。
filterについて調べてから書くようにな。
っつーか頭良い奴以外は理屈こねるな、スレの無駄だ。
>>408 >しかし、パワーシェルの場合は100行×4バイト=400バイトのデータのみが
>次のコマンドレットに渡ることになる。
パイプライン後段の内容によっては最初の3行しか使わないかもしれないかもしれないのに
必ず100行読み込むとすればそれはただの無駄。
さらに次のCmdletが処理するまでGCヒープからstringが削除できないので、
単にメモリを食ってパフォーマンスを稼いでいるとも言える。
行数に比例して「必要最低メモリ」が増加する。
>>409 >filterを使えばデータの流れを各タスク(プロセスやスレッド)で並列処理できる。
>filterについて調べてから書くようにな。
これは知らんかった。help about_filter しても出てこなかったし。
てことはこっちならJava BlockingQueueみたいなこともできそうだな。
後で調べてみる。これには感謝。
>411 不要なことがわかっているならそもそもパイプの最初に出力しなければいいだけ。 だからHeskell信者は使えないって言われるんだよ。 たとえばGet-Contentなら-totalCountを使え。 自作のスクリプトならそれに相当するオプションを実装しろ。 つーか、UNIXのパイプとやらで、上流のプロセスが本当に止まるかどうか 実際にやってみてから退化だの進化だの言え。
勝ち >>ID:y3Z8C3jm 負け >>ID:seKsAPZH=ID:dJ7eqWWQ
遅延評価じゃない、っていうのは違う気がする
目的は何であっても結果として「必要になるまで計算を行わない」が実現されているのだからそれは遅延評価といえる。
つか、バッファってよりキューだろ。
>>412 >不要なことがわかっているならそもそもパイプの最初に出力しなければいいだけ。
既存のプログラムの実装に依存するわけですが
415 :
名無し~3.EXE :2008/01/11(金) 16:17:05 ID:AqKZE9Wr
遅延評価を知らないどころか、バッファもキューも知らないとは。最初から勉強し直せ。キューバッファという言葉をどう説明する気だ? 既存のアプリの実装に依存するのは当たり前。お前の好きなUNIXでもそうなってる。それが遅延評価じゃない証拠だ。 お前が遅延評価だと思ってるのはマルチタスク。全然別の概念。
416 :
名無し~3.EXE :2008/01/11(金) 16:33:35 ID:AqKZE9Wr
パイプラインでは、上流のタスクがデータを流さない限り下流のタスクは処理できない。だからこれは遅延評価ではない。 全てのデータをキャッシュしようが、行毎に逐次評価しようが、上流から下流へのデータの流れは変わらない。単に一度に処理するデータ量が多いか少ないかだけの違いだ。 プロセスの中身がブラックボックスである以上、遅延評価はあり得ない。遅延評価を知らないHaskell信者とか、キューやバッファの意味もわからないプログラマか。はっ。
417 :
名無し~3.EXE :2008/01/11(金) 16:39:28 ID:AqKZE9Wr
とりあえず、ここはパワーシェルのスレだ。遅延評価についての勉強はHaskellのスレでしてこい。「ゆにくすのぱいぷらいんはちえんひょうかですか?」と聞いて笑われて来い。話はそれからだ。
まあインアクション読めば解決する話だけど、他で分かりやすい日本語資料少ないことだし(ヘルプやMSDNがなんかめんどく感じる駄目な俺) function <name> (<parameter>) { begin { ... } process { ... } end { ... } } が完全な関数定義の書き方 begin節で変数の初期化等して、process節で具体的な処理内容、end節で終了処理 明示的にprocess節を指定してfunctionを定義すると特殊変数として$_を使用できる これはにパイプの上流から流れてくるデータが逐次代入されるので 要するにForeach-Objectの$_と同じ使い方が出来る、はず そして話題のfilterについては filter <name> (<parameter>) { ... } は function <name> (<parameter>) { process { ... } } と同義なので、初期化と終了処理要らない関数記述する際には楽 と、本に書いてあることそのまま書いてみましたよっと
419 :
名無し~3.EXE :2008/01/12(土) 06:35:33 ID:KQk8xakC
これってunixのシェルと比較するとどれくらい強力? cshくらい?
シェルと名前はついてるが、UNIXのシェルと比較するのは愚か。 どっかのスクリプト言語とかDSLあたりと比較すべきでは?
>パイプラインでは、上流のタスクがデータを流さない限り下流のタスクは処理できない。だからこれは遅延評価ではない。 見方の違いじゃないの?下流のプログラムから見れば上流から流れてくるデータを待ってるわけだし。 しかもその必要分を決められるのも下流の方。結果として、必要分だけ評価されるんだか遅延評価でいいでしょ。 まぁ上流とか下流とか言ってる時点で論外だけどw
422 :
名無し~3.EXE :2008/01/12(土) 09:28:48 ID:Owgtpbtu
普通の質問ですみません。 "Set-Location c:\"コマンドでカレントディレクトリィー に行けるのは解ったんですけどフォルダ名の中に半角スペースや全角スペース がある場合そのフォルダにいけないのですが皆さんはどうしてますか? 何度やっても移動できません。 "Set-Location C:\WINDOWS"などスペースがないフォルダ 場合は普通に移動できます。
423 :
名無し~3.EXE :2008/01/12(土) 09:53:25 ID:6PE8KIUb
>>421 頭の悪い奴と話すのは疲れるなあ。
cat|grep でcatの出力がgrepに影響されるなら遅延評価だ。grepの出力はcatによって変わるが、その逆は無い。従って遅延評価ではない。
見方云々ではなく遅延評価という専門用語だからそれを勉強しろって話。独自の解釈がしたいなら「遅延評価」という言葉を使わず独自の言葉を作れや。紛らわしいから。
424 :
名無し~3.EXE :2008/01/12(土) 09:55:50 ID:6PE8KIUb
>>422 Set-Location 'c:\Pro
まで入力してTABを押して見ろ。
425 :
422 :2008/01/12(土) 10:11:16 ID:aDT2+PqY
>>423 catの出力?影響されるでしょ。grepは全部読むのがデフォなんだろうけど、たとえばcat|head -n X は?
catはheadが必要な分までしか実際は出力しない。バッファに余剰分が溜まりはするけど、ほぼheadが必要とする分だけ出力する。
つまり、不必要な部分の計算は、headの意思を受けて省かれる。これは遅延評価といえる。
>>426 まぢで?catは途中でKillされるのか?
あ、しないwwwやべ俺涙目 こうなるからパイプは遅延評価だ、みたいなサイト見て鵜呑みにしてました。ごめんなさい。
>>428 broken pipeで終了するんじゃねーの?
$ yes | head -n 10000 | head -n 1 y $ echo ${PIPESTATUS[*]} 141 141 0 $ yes | head -n 10000 | head -n 10000 y y y (ry $ echo ${PIPESTATUS[*]} 141 0 0 確かに遅延評価だね。
433 :
名無し~3.EXE :2008/01/12(土) 16:10:29 ID:6PE8KIUb
どうしても遅延評価で止まったと言いたいなら試しにheadでなくtailでやってみろや。 たまたま遅延評価を使わなくても同じことができる特殊な例だろ。普通はそれを異常終了と呼んでんだよ。
多分二つ三つ上の人がそうなんだろうけど、Nの人へ 少なくともv2.0 CTPではThe pipeline has been stopped.ってエラーが無限に出るよ これはこれで正しいと思う
あ、補足 trap {} を先頭に加えとけばとりあえず望みの結果にはなる
お前らそもそも遅延評価の意味をまったく理解できてないな。 ここはム板じゃないからその事を咎めはしないが 知ったかはやめようぜ。
dirでファイル属性が"d----"になっているものだけ、"-a---"になっているものだけって言う風に取得するのはどうやればいい? コマンドプロンプトのdirコマンドで言う/Aオプションが欲しいんだけど dir | ? { $._ -eq "d----" } ってやるしかないんかしら
間違い、$._じゃなくて$_.Mode
(gi .).GetDirectories() ゴメンナサイ
>>439 こんな方法もあるのか…いや俺的には全然OKですよ?
これまとまったドキュメントってないの? FAQs&Tipsだけじゃどうも要領を得ないな・・・
>>441 インストールすればユーザーガイドがついてくる。
quadfold.htaがまとまってる
rtfのままは使いにくいので、htmlに保存し直してHTAにすると楽
447 :
名無し~3.EXE :2008/01/15(火) 02:26:52 ID:iTok7twm
日本語ヘルプが欲しいな。 helpコマンドに全項目再帰的に食わせてリダイレクトすれば一瞬で出来そうな気もするがよーわからんw
450 :
名無し~3.EXE :2008/01/16(水) 01:17:33 ID:ehWOZWtp
まだ情報が出そろってないよね。
まだ全然全体を把握してないんだけど、うまく運用している人の例が知れれば
ちょっとは見通しが利くかなという感じなんだけど。
もちろん
>>1 のブログとかは読んだ。
個人的には多言語との比較してどうか、というところが気になる。
つまり、言語としてのPowerShell。
ぶっちゃけ、VBでWindows関係はいいじゃんと思ってて。
まあ、俺も日々実践して研究してるけど、なにぶんにも実例が出そろわないと
イメージしにくい。
451 :
名無し~3.EXE :2008/01/16(水) 01:18:14 ID:ehWOZWtp
他言語orz
言語の機能としてはin action読めばある程度わかるのでは 実運用でいったら出来ることなんて言語の機能よりライブラリ にかかってるんだから、.NETみてればだいたいわかるじゃん
いまだにcmdの方がすらすら書けるのがなんか悔しい
WMIも使えますか?
Get-WmiObject
これでPowerShellにEdit機能が搭載されてればエディタも必要なくなって最強なんだけどな。
何でいまだに窓枠が10年前と同じDOS窓なんだよ・・・ いい加減タブ+まともなWindowsアプリとして作り直せ・・・
BASICでさえスクリーンエディタ付いてたもんな
461 :
名無し~3.EXE :2008/01/16(水) 11:56:41 ID:GANYt/FG
>>456 >>381 がいつどんな完成度で出るかに期待してる。
それまではCygwin上のvim.exeをPowerShellから使うつもり。
>>461 普通のテキストエディタをEmacsキーバインドで使えばいいじゃん。
Emacsを待ってるくせに現状vimって、単なるLinux信者の行動にしか見えん。
464 :
名無し~3.EXE :2008/01/16(水) 13:01:11 ID:72pUpFaL
>>462 現状vimなのはvimのほうがEmacsより慣れてるから。
vimをそのまま使えば設定の労もなくPowerShellの中で使える。
え、変わるのか・・・俺あの画面が好きなんだけどな CTPリリースから70日ほど経ったけど、α版はまだかいのぅ スクリプトコンテストって自作コマンドレットもOKなら応募するんだけどなー、VBSはOKなのに。 こういう時実際の管理者やってる人なんかだと業務のそのまま応募できたりするんじゃろか。
9xのDOSプロンプトみたいにツールバーがつくだけだったりして。
>>468 ああなんだGraphical PowerShellのことか
自作コマンドレットで思い出したけど、VS2008用のコマンドレットのテンプレートってある?
takeownコマンドみたいなことするには Set-ACL使うしかない? ヘルプ読んだところ、Set-ACLは他のファイルから ACLをコピーするのが目的っぽいけど。 要するに(フォルダとそのサブフォルダにあるファイルを再帰的に) ファイルの所有者をadministratorにしたいだけなんだけど。
471 :
名無し~3.EXE :2008/01/17(木) 10:56:36 ID:RC+FihUq
>>470 filter Set-Owner {
param([string]$NewOwner)
if ($_ -is [System.IO.FileInfo]) {
$acl = Get-Acl $_
$acl.SetOwner((New-Object System.Security.Principal.NTAccount $NewOwner))
Set-Acl $_ $acl
}
}
Get-ChildItem . -r | Set-Owner 'Administrator'
やっと
>>354 が届いたぜ…新刊が注文から10日もかかるとは
内容はリファレンスやヘルプ的なものっぽいしハンドブック的な大きさだから常備するのに良さそう
とりあえず前文読んでて驚いたのはPowerShell自身は.NETアプリじゃないってことだった
>>471 なんかこのスレで初めて実用的なスクリプトを見た気がするw
473 :
470 :2008/01/17(木) 20:58:54 ID:HtEn5fhC
スクリプトかー。めんどくさいな。
>>471 でもありがと。
wmiとかでもできそうな気がするけど。
wmi使うならvbsでもいいし。
コマンド一発でできるようになる日は来るかなー。
>>473 %SystemRoot%\system32\WindowsPowerShell\v1.0\か
%USERPROFILE%\WindowsPowerShell\に
profile.ps1って名前でテキストファイル保存して
>>471 の2行目から9行目までコピペして貼り付けとけば、いつでもコマンド一発だぞ?
標準コマンドじゃないとって言うなら別だが
ところでモジュール化ってどうやるの? 確か.bashrcみたいなのは合ったと思うんだけどそういうのじゃなくて明示的にファイルを読み込むようなやり方で。
476 :
名無し~3.EXE :2008/01/17(木) 21:23:09 ID:eYrWDqMo
>>354 はインアクションを持っていればとくに必要って本でもないけど、
コンパクトだししっかり作られた良い本だと思う。
著者はmsの人。
>>475 スクリプトのドット化のこと?それともコマンドレットのスナップインのこと?
そもそも所有者の書き換えなんて仕事が何年に一度あるのか知らないけど、自分でスクリプト(書かない|書けない|使いたくない)のかな? なら、PowerShellなんて使うのやめて、フリーソフト作者に頼んでexe作って貰うのが良いんじゃない? つーか、頼むまでもなく、あるよね。既に。 それ使えば?コマンド一発でしょ。
479 :
名無し~3.EXE :2008/01/18(金) 06:39:34 ID:OoNiWISU
>>478 それがあることを知ってるのは
>>470 の一行目を見れば明らかだろ
それはわかった上で「PowerShellで一発でやる方法はないのか」と
聞いてるんだと思うが
だから、一度スクリプト作れば次から一発。
>>470 は
コマンド(2003Serverだけだっけ?)あるのもWMIでもできるを知ってそうなので
あえてPowerShellのコマンド(標準装備されていれば)でやりたいんだろう。
コマンドプロンプトからtakeown.exe使うのはOKだけどPowerShellで関数作るのはNGとか スクリプトをprofile.ps1にコピペするのも面倒だけどvbsで書くのはありとか、正直よく分からん
powershell.exe -command "PowerShellで一発だろ?"
あんまり馬鹿を相手にするなよ
.ps1を関連付けしてないので直に実行できないとか?
487 :
名無し~3.EXE :2008/01/19(土) 10:01:11 ID:+Iyk3BCx
使う度に同じスクリプトを書く必要があると思っているに10000点。
takeowmコマンドでオールオーケー ってかそれぐらい後発のPowerShellで標準で用意しとけよ。 マイクソソフト
489 :
名無し~3.EXE :2008/01/19(土) 13:33:17 ID:+Iyk3BCx
takeownはcmdの標準コマンドじゃないぞ。内部コマンドでもないし必ずインストールされるわけでもない。 cmdでも使えるしPowerShellでも使える。 どうもこの勘違い野郎のズレ加減といい、無意味な執着といい、応用のきかなさといい、日本語の拙さといい、こないだのHaskell信者そっくりだなw
必死にググってその記事を鵜呑みにして間違い指摘されてファビョってるバカなんだからスルーすればいいよ。 今時ググった記事をそのまま信じるとかゆとりすぐる。
他の人も書き込んでたけど・・・ プログラマブル〜って本を俺も読んだが これドットネット製じゃなかったのか!! さすが.NET起動が遅いな。とか知ったかこいてたから びっくりした。
>>491 ええ?ホント?
近所の本屋でやっとプログラマブル〜が並んだばかりだkら知らなかった?
プログラマブル〜って3000円出してまでも買う価値ありますか?
本のデザインが気に入ってる
>>491 そこ驚きますよね、起動が遅い理由が.NETのアセンブリ読み込んでいるからなのに違いはないんでしょうけど
ところでp17の(Dir *.txt).Countの元ネタは自分(
>>247 )なのかな、とか自惚れちゃってもいいんでしょうか
>>492 持ち運べるインアクションとしてはいいと思いますよ、2千円くらい安いですし
って、こういう言われ方は不本意かも知れないですけど…
ネィティブなのはPowerShell.exeとかでコマンドレットは.Netだと思うけど。
>>496 の意味がよくわからない……
コンソールAPIが貧弱なのが理由だったらなおさら.NETでPowerShell.exe相当の
インターフェース作ったほうがいいと思うけど
前に自分でPSHostからPSHostRawUserInterfaceまで継承して
WinForms.TextBoxベースのコンソール作ってみたけど、遅くて使
い物にならなかった
PoshConsoleも挙動が軽いとはいいがたかったし、単にパフォーマンス
の問題でネイティブアプリにしたんじゃないの > PowerShell.exe
>>497 それじゃコンソールアプリにならないんじゃないの?
499 :
497 :2008/01/20(日) 17:50:29 ID:GdzB4tZv
>>498 コンソール自体はコンソールアプリじゃなくてもいいよ
PowerShell.exeだって立派なGUIアプリじゃん
だいたい、コンソール自体がコンソールアプリだったらど
このコンソールで起動するんだってはなしになんじゃん
cmd.exeか?
PowerShellでフォームを表示すると
>>107 みたいにTopMostをtrueにしても前面に表示されませんが、どうすればできますか?
遅いってことはないけど、コマンドレットの出力を表示する位のことしかできなかったな。
502 :
名無し~3.EXE :2008/01/20(日) 22:50:34 ID:O9LLW8vz
504 :
名無し~3.EXE :2008/01/21(月) 10:54:54 ID:W3ctNwnf
>>504 国内でこういうの作れるメーカーひとつもないよね、なんでなんだろ・・・。
日本にも優秀なプログラマーは沢山いるって反論レスはいつもあるがどう考えても嘘だろ、開発じゃなくて商社しかないじゃん・・・。
なぜ唐突に日本批判・・・ 技術というよりマーケットがないだけなんじゃ。 IMEやエディタといった商用小物ツールは淘汰されまくりだしな。
507 :
500 :2008/01/21(月) 12:57:49 ID:Gh7+xIQu
よーし、じゃあ、俺が
>>504 相当のものを実装してやろうか
つーか、これみて技術力云々いってるんじゃ確かに
日本のプログラマのレベルは低いって感じだよね
ゲームがあるじゃないか
>>497 .NET独自でインターフェースつくったら、
Powershellの中でcmd使ったり
逆にcmdの中でpowershell使ったりするのが
手軽にできないでしょう。
ConsoleAPIを使うからシームレスに統合できる。
ただし.NETの標準のConsoleAPIネイティブInteropは貧弱(機能不足)で
独自にP/Invokeしないといけないし、
ガッツリP/Invokeするぐらいならば
いっそネイティブに作っちゃえ、と。そういうことかと。
PowerShellで簡単なリネームのコマンド教えてくらはい。
512 :
名無し~3.EXE :2008/01/23(水) 09:48:47 ID:X72PDsJy
cmd ren
mv
cmdのprompt相当の機能ってなんですか。 c:\document and settings > command に表示を変えたいです。
ls function:\ function prompt { $promptPwd = Get-Location @" $promptPwd > "@ }
わざわざGet-Locationする必要なかった function prompt {"$PWD`n>"} だけでよかった。 ヒア引用符?これは一度使ってみたかった(おい > command D:\hogera ってやってみたかったから '>'+$PWD.ToString().PadLeft(79) (ちなみに横幅は80文字) ってしてみたら失敗したw
amazon でインアクション注文したのが届いた 今から読む
>>515-516 ありがとうございます。
promptの中で好き勝手にwrite-host呼べるみたいなのでCygwinっぽく色つけてみました。
function prompt{ Write-Host -NoNewLine -ForeGroundColor Yellow "$PWD`n>"; " " }
>>514 function prompt { "$((get-date).DayOfWeek)> "}
いま
>>518 がいいこと言った
function hoge
{
$a = dir
foreach ($_ in $a)
{
if ($_.Mode -like "d*")
{
$Host.UI.RawUI.ForeGroundColor="Green"
}else
{
$Host.UI.RawUI.ForeGroundColor="Gray"
}
$_
}
}
ってこれぐらい誰でも考えてるか・・・
そういえばGraphical PowerShellがWPFでできてるってことは コンソールの背景に壁紙使ったりwmvを再生したりできるのかな
なんでよ
重いよこれ。ディスクキャッシュにのってても十分遅い。 マルチコアの恩恵の受けられないシングルタスクの重いアプリの受難の時代だな。 Intelのアホー
>>522 WPF自体はそういう機能含んでるから、そこまでUIいじくれるようになってればできるかなーっていう妄言ですよ?
とりあえずOS XのTerminalと同等かよりつぉいコンソールにしてくれれば文句はない。
まずはzshを超えるところから始めような
zshなどPowerShellの足元にも及ばんが。
screenが欲しくなるね。 ターミナルも、ラスタフォント縛りは嫌だな。 もっとCUIに注力して欲しい。 周りの環境が整えばpowershellはもっと伸びる子
世界最強シェルPowerShellの次に優秀なのって何?
PowerShellって多機能にしたせいで 何か使い難い。今まで馬鹿にしてたがUNIXのshellって凄いんだなぁと 初めて思った。
PowerShellのリファレンスサイトない? HTMLリファレンスサイトみたいになの。 無いなら誰かエロい人が作ってよ、頭の良い人はその才能を使うべき。 大いなる力は大いなる責任を伴う、なーんつって( ^ω^)…
てかヘルプ内蔵する為のドキュメント書いておきながら それをリファレンスにまとめないとかまったく意味不明だな。
534 :
名無し~3.EXE :2008/01/26(土) 09:03:03 ID:r7GwYUox
ヘルプ内蔵してるから不要だ、エッヘン と開発者が申してます
>>532 >>278 にPowerShellのヘルプをHTMLに落とすスクリプトが載ってる
図書館で借りるかバックナンバーを注文するべし
うp
冗談だろ?テキストが与えられてるのに、それを使ってヘルプを自分で作れない開発者なんかいないよな? ヘルプ作成は開発者の必須スキルだぜ? つーか、ヘルプでないといけない理由がわからん。 テキストなんだから、検索したいならgrepかければいいじゃん。
powershellを使いたいのは開発者だけじゃないだろう。
&"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\TlbImp.exe" "$env:SystemRoot\system32\wmp.dll" "/out:WMPLib.dll" [void][System.Reflection.Assembly]::LoadFrom("WMPLib.dll") $wmp = new-object WMPLib.WindowsMediaPlayerClass $wmp.URL = "MyPlaylist.m3u" こいつは凶悪だ・・・
>>537 ブラウザから説明がはみ出すから<pre>タグ取っ払ったら見やすくなった。
$hostとかの説明はMSDNに統合されないと無理なんだろうな。
PowerShell入れたら(かどうかはよくわからないがほぼ同時期に) Cygwinでエスケープシーケンスが処理できなくなった・・・ これ直す方法ないのかな。
>>541 何の事かと思って試してみたが、確かに凄いね。
でも、メモリ食いすぎだろこれ。GUIなしなのにこの重さじゃ
何のためにshellでやるのかよく分からん。
>>544 いやもう最初試したときは頭から尾っぽまで当たり前のように実行可能なところに感動したよ
6MBのmp3再生時にPSのメモリ消費が31MB→45MBだったからそんなでもないように思うけど,
RealPlayer大好きな俺の感覚が麻痺してるのかなw
メリットなんてシェルで演奏できるって部分でだけ十分さ…
あまりに反応薄いから逆に不安になったくらい(まあ目立つのはそこだけなんだけど)
>>545 実際問題比較対象になるのはshellで実行可能な
音声再生方法じゃなないのかな?
もしunixな考え方でやるなら単純な.exeを実行して繋ぐから
実際に起きた事はmpg123.exe -listであれ?って程単純に、軽く出来る。
MSだけじゃないけどソフトな人は内部に拘りすぎて
ハードに近い考えならブラックボックステストで完全に失敗している
何時も何かをするための何かになりすぎて
結局新しいものを生み出せない状態に陥ってる、これでは評価されない。
>>546 う〜ん、UI作るのはめんdじゃなかった作るとシームレスにそのまま他のコマンド入力できるっていう
多分GUIレスプレイヤーとしてのほぼ唯一の利点が。・・・・・・うん、後付なんだ、すまない。
俺の伝えたかったのはまさにPSのプロセスで演奏してるっていう部分だから
後まあ以前から.NET使ってる人には常識なんだろうけどTlbImp&LoadFromの組み合わせも
音楽再生入った何か作るには役に立ちそうだけど。 元々dllは普通なら利用出来るし、難しいと言うなら スクリプトでやるとか、スクリプトならshell風にも しかもPS重い。重いのは.NETせいで濡れ衣かもしれないが 個人的には.NETを何であんなに糞重いものにしたのかとか その辺にまず疑問がある。
10年後のPCではサクサク動きます、きっと。
Javaは昔そう言われてたけど今でも(ry
Emacsも同じ事を言ってるけど今でも重いね。 まあ、軽いバージョンもあるけど。
つ「冷蔵庫の法則」
>>548 ,549
ngen でネイティブイメージ作ったら一瞬で上がるようになったよ。
554 :
553 :2008/01/29(火) 01:22:09 ID:nHG84DPE
確か上の方にスクリプトがのってた様な...
555 :
名無し~3.EXE :2008/01/29(火) 02:12:23 ID:E+a+nw+c
>>553 どのファイルをつっこんだのか教えてほしいな
ngen powershell.exe
しても
間違ったフォーマットのプログラムを読み込もうとしました。
といわれるばかり
ngenって.netのネイティブイメージ作ると書いてあるから powershellを入れても駄目なんじゃないのか? shellから.net frame workを呼び出す時に速く出来るとか
>>558 使い方が悪い。.NET アプリは .NET Framework のライブラリを起動時に読み込んでるわけだから、実行プログラムだけでなく、読み込むライブラリにも適用しないとだめ。
>>557 のスクリプトは、PowerShell の使ってるライブラリ全部に Ngen かけてる。少なくとも俺の環境では劇的に速くなった。
特に何もしてないのにPowerShellの起動が爆速になった。 SuperFetchの効果かな。
WindowsとProgram Files以下のDLLとEXEをとりあえずngenに全部突っ込んでみりゃいいのかねw
powershell.exe自体はWin32コンソールアプリなわけだからngenしても意味ないでしょ ウインドウ開いてカーソルが出るまではcmd.exeと変わらんから、ここまでがpowershell.exeの起動で そこからmscorlib.dllとかSystem.Management.Automation.dllとか読み込むのに時間かかってるんでない
ぜんぜん違う。 PowerShell起動中にInstall-NgenAssemblies.ps1を実行してみろよ。 次から一瞬で起動するぞ。 Paint.NETでも試したが起動が速くなった。
そのネイティブイメージというのは実体はメモリにあるだけなのか それともどこかにファイルが出来るのだろうか
ていうかngen的なものはexe実行時にOSが自動的にやってくれよ。 そういう機構入れれば.NETがここまで忌み嫌われることもなかっただろうに。
>>565 MSの開発者だって馬鹿じゃないだろから
あえてやらないのは、何か理由があるんだろうよ。
だから何かのデメリットがあるんじゃないのかと疑ってしまう。
567 :
名無し~3.EXE :2008/01/29(火) 14:59:24 ID:HKRm/2au
>>565 一度キャッシュされたアセンブリは、明示的にキャッシュから削除しない限り、アセンブリを削除しても残る。
だから自動的にやったらゴミファイルでキャッシュがどんどん肥大化する。同じファイル名でもバージョンが違うと別物としてキャッシュされるから、特にバージョンアップの激しいソフトなんかゴミを貯めまくる。
それを避けるために必要なものだけキャッシュする仕組みになってる。
そんだけ。
そんなの月一でクリーンアップすりゃいいだけの話
569 :
名無し~3.EXE :2008/01/29(火) 15:12:20 ID:HKRm/2au
MSDNには、ソフトのインストール時にキャッシュし、アンインストール時にキャッシュから削除する方法が説明してある。 が、.NET Framework の特長として「コピーするだけでインストール終了、削除するだけでアンインストール終了」というのがある。先に述べた方法では、インストーラが必要になるので、それに反する。だからキャッシュの管理は基本的にユーザーに任されている。
とりあえず思うのは賢い奴以外が憶測や勘違いで妄想垂れてスレを汚したり雰囲気悪くすることだな。 バカはとにかくKYことに神経をとがらせろ、有用な情報をフィルタリングするのも一苦労なんだから。
571 :
名無し~3.EXE :2008/01/29(火) 15:17:33 ID:HKRm/2au
まあ、Vista の次の OS あたりで自動化されんじゃないの? 計画では Vista で OS と統合される予定だったんだけどね。
572 :
名無し~3.EXE :2008/01/29(火) 15:19:21 ID:HKRm/2au
>>563 何が全然違う?読み込むって表現は微妙かなとは思うけど
Install-NgenAssemblies.ps1でもやっていることは上で挙げたようなDLLをngenしてるだけだよ
たぶん起動速度のことを言ってるだけで、562に言ってるんじゃないんじゃね? で、ngenは確かにアンインストールしないとキャッシュが残るけど、 依存関係で一緒にインストールされたライブラリ(?)に関しては、 不要になると削除される(というかインストール時にアップデートされる)みたい。 バージョンアップが活発でもゴミが溜まるわけではない。 自作ソフトの開発版をngen installしまくってるけど ngen displayしたら古いバージョンは無かったよ。
あ、そういう意味か、勘違い失礼
576 :
名無し~3.EXE :2008/01/29(火) 20:17:59 ID:HKRm/2au
>>574 確かにバージョンアップすると古いバージョンが削除される設定にもできるけど、それは設定次第。各バージョンが共存できるのも .NET の特長。
ちなみにそれって何の設定? ngenの設定?それともコンパイル時とか?
自動的にngen実行したら初回(あるいはキャッシュがクリアされた直後)は いちいちUACのダイアログが出る上にngenの分時間が掛かるじゃん。 お前がUAC切ってるからってみんな切ってると思うな
shellなんて立ち上げっぱなしにするし、JITだし。 あえてngenでプリコンパイルする理由がさっぱりわからん。
立ち上げっぱなしにしないし 起動が遅くなるのが気に食わないし そもそも、ちょっとした処理にしか使わないけどと言う人には、問題あるだろ。 で、キャッシュは何処にできるんだ?ひょっとし ネイティブイメージなら.netなくても使えるとか期待してみてるんだけど。
それは大分前に読んでるけどGAC がディスク領域を消費しているって事は どこかにキャッシュが出来ているんだろ。 俺はそれが何処にあるのか知りたいだけ。 後はGACの本体が部分的には.NETのフレームワークを利用して動くのかとか
なぜそんなに偉そうなんだ。 貴様は人に物を頼むときの口の利き方を知らんのか。 貴様が3歳児なら大目に見てもやるが違うのならその横柄な態度を改めて恥じろクズ 半年ROMる必要すらないわ、失せろ
お前に書いたわけでもないのに、なぜそんなに偉そうなんだ。 貴様は初めて見たIDに対する口の利き方を知らんのか。 貴様が3歳児なら大目に見てもやるが違うのならその横柄な態度を改めて恥じろクズ 半年ROMれ。スルーできないなら悪態を書く前に黙って失せろ つまりこういうことだな。滑稽な奴w
-contains演算子の存在に気付いてなかった自分に絶望した
>>582 嘘つくなよ。581のからリンク一個飛ぶだけでGACがどこのディレクトリに当たるのかは書いてある
つーか、まともに.NETやってればそれを知らないとかあり得ない
そもそもGACとngenで生成されるネイティヴイメージは別物だから
> で、キャッシュは何処にできるんだ?ひょっとし
> ネイティブイメージなら.netなくても使えるとか期待してみてるんだけど。
この疑問は的外れ。.netなくても使える、なんて発想も爆笑もの
頭悪いうえに横柄なのはお前だから
587 :
名無し~3.EXE :2008/01/30(水) 09:46:20 ID:9HmT6sct
ネイティブイメージはGACにインストールされるんだけど。
>>586 なんだ、やっぱり駄目なのか。
大体予想通りだったから別に良いんだけど。
お前は、わざわざ報告してくれて中々話の分かるツンデレだな。
記事は読んだよ。
ただ、どうでもいい記事の中身など、一々覚えてないし。
確かに.netなど微塵も使った事がないが。
3になったので、まともな製品になってるかかと少し見てるだけで。
まあそんなに過大な期待はしてないけど。
>>587 頑張って調べてくれたようであれだけど
一部、間違ってるらしいぞ。
>>579 それは何か試すたびに強制終了食らう俺への挑戦ですね?
イベントログみても珍文漢文だし、なんとか一瞬で消えるエラー文を保存する手段はないものか・・・
592 :
名無し~3.EXE :2008/01/30(水) 20:05:40 ID:9HmT6sct
>>591 PowerShellあるいはcmdを起動した上でもう一度プロンプトからPowerShellを起動する。それから極悪スクリプトを実行。そうすれば強制終了くらってもエラーメッセージは残る。
>>592 うっひょthx、しかしエラー文読んでも今の俺じゃ役に立てれそうにないな(イベントログよりはマシだけど)
594 :
名無し~3.EXE :2008/01/30(水) 22:39:35 ID:4Xd0jaZG
あ、そうか! Adobe Readerも.netだからngenかければ高速化できるじゃん! ・・・何一つ.netじゃなかった orz Adobe ReaderもMozillaもPhotshopもイラレも.netで出来てたらよかったのにw あ、でもこれを.netに移植したらどうなるんだろ? 毎回JITコンパイルしたらさぞ楽しいだろうにw
w←これつける奴ってなんで厨房ばっかなの? 発言の節々に頭の悪さがにじみ出てて不愉快なんだが。
俺は Foxit Reader 使ってる ブラウザ埋め込みでないのが難点だが大概の pdf は読める
やばい、whereと-cantansの組み合わせが強力すぎる・・・
>>597 実行時に圧縮を展開してさらにJITコンパイラで展開するという
2度手間になるだけのような…。
ネイティブイメージのキャッシュも効かなそうだし、
試しにやってみたらシリアライズ周りでエラー起きたし・・・。
$source | Select-String -SimpleMatch "PowerShell"ってやった場合$sourceはどのスイッチと繋げられるの? -InputObject $sourceとは出力違うし、-Pathに変数を指定する方法あるのかな
>>601 Get-Help Select-String -full で調べてみろ。
-InputObject は ByValue
-Path は ByPropertyName
つまり、Get-Content | Select-String とした場合、-InputObject が、
Get-ChildItem | Select-String とした場合、-Path が使われる。
Get-ChildItem 以外で -Path を使いたい時は Add-Member を使え。
>>602 ありがとう、$source = type log.txt としたものだから、-InputObjectが使われてるはずだけど
実際に-InputObject使うと$sourceの改行無視して1行として扱ってるんだよね
パイプで渡すと一行ずつ読み取ってるせいのかちゃんと分けて扱ってくれる
改めてヘルプ見てて気付いたけど、-Textスイッチがあるっぽいのに実際使用できないのは2.0だからかね…
Add-Memberは今回の場合どう使えばよろしい?
>>603 -InputObject <psobject> と書いてあるだろ?
-InputObject <psobject[]> じゃねーだろ?
-InputObject は配列を受け取らない。
だから、こうだ。
foreach ($_ in $source) { Select-String -InputObject $_ -Pattern '正規表現' }
Add-Memberは今回の場合使わなくてよろしい。-Pathを使いたい時っつってるだろ。
これやってみろ↓
New-Object object | Add-Member NoteProperty 'Path' 'source.txt' -PassThru
>>604 OK把握した、何度もありがとう
602の最後の一行を-Pathに変数のパスを指定したいなら、的な意味に受け取っていた
・・・2.0にした後英語わかんねーって1.0のヘルプをぶち込んでたせいで
Select-Stringのスイッチが結構変わってことに気付かなかった俺アホス
というか何で1.0には-Encodingがなかったんだろ
酔った勢いと余った図書カードを処分したいが為にPSインアクションを買ってしまった・・・ どー見ても使いこなす気ありません・・・
前書きとかコラムの開発裏話読んでるだけでも結構楽しいぜ
ごめんなさい プログラマブル買うために書店行ったら別の本が欲しくて駆っちゃった プログラマブル読む限り、.netなシェルはPSだけじゃなくIronPyshonというてもあるんだな
確かにpythonやperlをシェルにする奴もいる。タイプ量が多くなっても気にならないならそれでもいいんじゃないの?
XP版のPowerShellには(当然かもしれないけど)ジャンクションとか リンク関係のコマンドレットが装備されてないようだ orz Vistaてリンクとかサポートされてるんだよな? ウラヤマシス だとするとどんなコマンドレットでやるの? Set-Link?New-Link?Link-File/Link-Directory?Mount-Device/Mount-Directory? ぐぐってもみつからないのでplz
サポートされてねーよ。
mklinkを使いなさいってことですか
ああ、スクリプトコンテストに送るような一発ネタが思い浮かばん Janeで最近開いた画像のURLを指定数取得するスクリプトーなんてぜってー俺しか必要としてないだろうしなぁ
2chを巨大なディレクトリ構造とみなして統一的に扱えるコマンドレットキボンヌ
>>609 pythonはタイプ数多いが、perlはタイプ量少ないだろ。
それにemacsとかで使わないとはちょっと考えられない感じだし。
IronPythonなら.net使えるから言う程の差はないだろ。
>>614 それはコマンドレットじゃなくてプロバイダでは?
FTP用のプロバイダがあってもいい気がする
Copy -Item D:\hoge.txt my
ftp:\hoge.txt という感じでアップロードできるヤツ
>>615 Perlでファイルの中身をソートして表示する場合
open(IN, $fileName);
@lines = <IN>;
close(IN);
sort @lines;
print @lines;
PowerShellの場合
cat $fileName | sort
Perlで他のコマンドを呼び出す場合
exec "vi";
PowerShellの場合
vi
>>617 当然、場合によるだろ。
そもそも、shellとして使うなら.netでpsが補強しているように
ライブラリとかでperlも補強して関数とか使えないと条件が同じじゃない。
もし必要ならcat相当のを作っておけば良い。
emacs使うというのもeshellとかエディタの補強を加味しないで
使うなんて常識的に考えてありえないだろ。
shell変わりに使うって事はそういうことだろ
海栗糞板にカエレ
621 :
名無し~3.EXE :2008/02/10(日) 09:32:55 ID:G4pwbdWC
>>618 コマンド一つ使うのにいちいちexecとかsystemなんて打ってられるかってことだよ。
誰もスクリプトとしての側面なんて比較してない。シェルとして日常的に使うには cat|sort は大事。それは、catとsortだけ作ればいいって話じゃない。
622 :
名無し~3.EXE :2008/02/10(日) 09:41:02 ID:G4pwbdWC
つまりだ。.NET使いたいならVisual StudioでC#使えばいいわけで、PowerShellをなぜ使うのかって言うと、シェルとして使うことを前提に作られてるから使いやすいから。これに尽きる。
623 :
名無し~3.EXE :2008/02/10(日) 09:42:56 ID:G4pwbdWC
エクスプローラしか使ったことのない奴にはPowerShellもPerlも区別つかないみたいだがな。
連投うざいよ
「連打やめてよ(涙)」だろw
ps1ファイルの自身のファイル名はどうやって取れますか?
Thanks a lot!
HKEY_CLASSES_ROOT:\へのプロバイダないもんかな ProgIDをdirとかwhereしてみたいんだけ(ただの好奇心)なんだけども
>>629 あるよ。ただHCRをマウントしてないだけで・・・
それともclasses用の特殊なプロバイダ?
New-PSDrive -name HCR -PSProvider Registry -root HKEY_CLASSES_ROOT
そういえばヘルプ(Get-Help)をみるとnew-Psdriveになってるけど何で?
Javaとかでこういう命名法使うのは知ってるし、C#のローカル変数はこの規則に従うようにとかのガイドラインも見たが・・・
なんでヘルプにこの命名法が使われてるのか不明。コマンドレットはNew-PSDriveなのに
>>630 あ、あったのねー、ねーネー…(echo)
そういう、マウントしていないけど存在するプロバイダの列挙はどうやるの?
dir HCR:\CLSID | ? { Test-Path $($_.PSChildName + "\ProgID") } | % { Get-Item $($_.PSChildName + "\ProgID") } | % {$_.GetValue("")} | ? {$_ -match "application"} うーむこの書きやすさは快感だわ・・・
>>631 使えるプロバイダはGet-PSProviderで
現在マウントしてるドライブはGet-PSDriveで
Get-Command -verb Get ...
>>633 それだとHRLは出てこなくない?
Registry ShouldProcess {HKLM, HKCU}
>>634 ああ、それのことか
プロバイダって言ってたからてっきりPSProviderのことかと思ってた
マウントするデバイス(便宜上w)のことが言いたかった訳ね
つまり、ls /dev/ するにはどうすればってはなしか
それは別のツールを使うか、プロバイダに付属するコマンドなりを使って調べんとだめなんじゃないの?
Get-Help プロバイダ.Name -Category Provider でプロバイダの説明が得られるから(自分で調べろよ)
Get-PSProvider | % { Get-Help $_.Name -Category Provider} | more とでもやって一通り目を通したら?
>>635 HKEY_CLASSES_ROOTのプロバイダの存在は何処で知ったのかなーとか思ったけど
よく考えなくても全てはマイコンピュータからぶら下がってる一つのレジストリだから
当然"HKEY_CLASSES_ROOTのプロバイダ"なんてものは存在しないわけね、酷い勘違い
>>623 perlもlispもEmacsもeshellも
それ以外のまともなshellも使った事がないはよく分かったよ。
psはMS初のまともなshellってだけで
タイプ数とかそういうショボイレベルでは大差ない。
逆に言えばライブラリとかオブジェクト使えるとかのps独自の売りを除けば
意外と普通のshellだと思うよ。
そんなバイクからエンジン抜けば意外と普通の自転車だよ、みたいなこと言わんでも… コマンド命名規則やパラメータ、オプション名が統一されてるのは従来のシェルにない革新性だと思う
そう、エンジン抜いた部分が素晴らしいと 主張しても無理があるという話なのは理解できるだろ? たからタイプ数とか危うい部分でメリットを主張するのはどうかと。
いやそもそもがそういう話(609,615)だったのでは PowerTab使えばさらに実際のタイプ数減るし インタラクティブシェルとしては重要な点だと思うよ
そんなのはどんなshell使ってる人でも 色々考えてタイプ数は少なくするようにする人はいるさ。 しかし大事なのは、中にはあえて増やしている人も居たりして 一概に何が良いとは言えない感覚の問題を含むって事だな。 しかし、こういうのは使用された期間が長いshell程 試行錯誤されて有利な傾向にあるのが一般的。 初心者の目を引くとかなら分かるけど、そんな部分で勝負にはならないよ。 あ、初心者なのか。
642 :
640 :2008/02/12(火) 01:35:10 ID:5kwD2NcL
>>641 うん、俺が初心者なのは確か(断る必要もないだろうけど623とは別人だよ)
あ、オブジェクトって部分以外の特異な長所にプロバイダの存在も追加ね(Windowsのシェルとして使う場合)
>>641 何が言いたいのか整理してから書いたら?
>>643 ・タイプ数はけして少なくない
・タイプ数は少なければ良いというものでもない。
・初心者ウケ狙いで適当な事書くのも良くない(信者的な意味で)。
psの前にまず日本語な
>>644 ・PowerShellは他のシェルに比べてタイプ数が多い
・タイプ数の少なさは利点にはならない
・初心者ウケ狙いで適当な事を書いた人がいる(信者的な意味で)
ということが言いたいわけか?
最後の一文は同感だなw
シェルとして使う限りにおいて、どう考えてもパワーシェルの方がPerlに比べてタイプ数が少なくなるのは歴然だし、タイプ数が少ないことは大きな利点だと思うがな。 タイプ数が少ないというのは、つまり、システム変数が $_ とか $& とか短いということじゃない。同じ仕事が少ない指示でできるってことだよ。少ない指示で仕事のできる部下は、いちいち指示されなきゃできない部下より優秀。わっかんねーかな? Emacsを使えば?というのは、Emacsをシェルとして使うということで、Perlをシェルとして使うことにはならない。それこそシェルとしてEmacsに劣ることの証明だ。
>Emacsを使えば?というのは、Emacsをシェルとして使うということで、Perlをシェルとして使うことにはならない。 フムフム(゚Д゚ ) >それこそシェルとしてEmacsに劣ることの証明だ。 (゚Д゚)ハァ?? Emacs -> シャーペン、Perl -> エンピツ、シェル ->筆記具(学習用)で置き換えてみよう >シャーペンを使えば?というのはシャーペンを筆記具として使うということでエンピツを筆記具として使うことにはならない。 >それこそ筆記用具としてシャーペンに劣ることの証明だ。 やっぱり1行目と2行目の関連性が無い
そもそもEmacsがテキストエディタと言うよりLISP実行環境だってのは良いとして、 Perlってshellか? スクリプト言語かもしれないがシェルと言えるのか? Perlをインタラクティブに使った事は在るのか? たしかに標準出力でperlインタプリタにスクリプトを手入力で渡してやれば動くのかもしれないが 果たしてそれがインタラクティブと言えるのか? 異種格闘技過ぎてワケワカメ
え、俺適当なこと言った?
>>648 PowerShell作者は対話形式のシェル操作をより優先したのがシェルで
アプリケーションを記述することに重点を置いたものがスクリプト言語だと言ってるね
一方の利点が他方の足枷になることもあり、PowerShellはその両立が目標で最大の難関だった、とも
>>647 シェルは知らないけど文房具は知ってるから無理やり想像してんのかw
悪いけど共通点ほとんどないから。
触ってみるのが一番だと思うよw
perlとPowerShell比較してる人はperlの対話型実行環境と比較してるんじゃないの Rubyのirbみたいな 俺はPerl触らないからよく知らんけど irbも普段使いする人は相当手いれるからどっちでもいいんじゃね ただ、PowerShellはPowerShell.exeのコマンドライン履歴とか、編集があんまり柔軟 じゃないっつーか、タブでの補完くらいしかいじれないのがさみしい 具体的にはsh系のviモードみたいなのが欲しいんだけど……
>>650 んいや、そういう訳じゃないって。目に見えない抽象的なものを目に見える具体的なものに置き換えるのは基本的なことだろ?
まあ互換性のない型にキャストしようとすると例外が発生するがw
単純に1行目と2行目の関連性がないじゃない。だからほかのも(物質的でわかりやすいもの)ので置き換えた場合
関連性がつかめるようになるかな?と試してみた。結果やっぱり関連性が見えないんだよね
Emacs、Perlはシェルから派生したクラスだとするなら
シャーペン、鉛筆は筆記用具から派生したクラスだろうから多分当てはまるんじゃないかな?と思ってたり
>Emacsを使えば?というのは、Emacsをシェルとして使うということで、Perlをシェルとして使うことにはならない。
これはまあ理解できるとして
>それこそシェルとしてEmacsに劣ることの証明だ。
全然証明してない
そもそも"Emacsを使えば?" というのを"Perlをシェルとして使うこと"としてとらえるような人って居るの?
わざわざ「Emacsを使えば?というのは、Emacsをシェルとして使うということ」なんて言わなくてもいいだろ
[A++という演算は、A = A+1というのであって、B = B+1ということにはならない]
=> [これは C < Bの証明だ]なんて変な話だと思うが
>>648 =
>>652 ね
どれが最強か?なんて話はどうでも言い話じゃないのか?
結局、道具が使いこなせない人はその道具が不便に思えるだけで
道具と相性がいい人は、まさに便利な道具として使ってるだけなんじゃないの?
lispが好きな人はlisp使えば良いじゃん
Win vs Mac戦争って結局どっちが勝ったんだっけ?Delphi vs VB (ry
便利・不便な点を列挙するのは悪い事じゃないけどねエスカレートすると宗教っぽくなるからやめて欲しいね、個人的に。
でもまあPowerShellって微妙な言語では在るよね
C#と比べると、シェル言語として対話性が強いよね。プロバイダによって提供される擬似FSは特徴的。
非.netなほかの言語と比べると、.netなライブラリを使えるのは大きいよね。単にライブラリがほかの言語ともシームレスに共有できるだけだが。
cmdと比べると明らかにシェルスクリプトと言う面において勝っている。
このスレって2・3人でまわってるのか? どんだけ不人気言語なんだ・・・
>>652 >>615 に遡ると
それに(Perlを)emacsとかで使わないとはちょっと考えられない感じだし。
となって
Emacs(でPerl)を使えば?というのは、Emacsをシェルとして使うということで、Perlをシェルとして使うことにはならない。
ということなんじゃないかな?
>>655 その通り。ありがとう。文房具にたとえないとわかんない奴と話すのはしんどい。
シェルならシェル、PerlならPerlで通じてほしい。
>>652 抽象的か?文房具にたとえなくてもperlとかEmacsとか十分わかるが。ググって見れば?
>>655 >Emacs(でPerl)を使えば?
なるほど、そういうことだったのね。エディタのEmacsと言語のperlを比べてる感じがしたから変だなと思ってたんだ。
>>656 別に文房具にこだわった覚えないよ。文房具の話をしたのは1レスだけだろ?
>>657 ただ身近にあるもに置き換えただけだって。
単に"Emacs(でPerl)を使えば?"というのがわからなかっただけだよ
これで全レスキモいとか言われたらへこむな
スレ汚しスマソ
誰かわかりやすくガンダムにたとえてくれ。
>>632 微妙に訂正・・・レジストリパスのPS標準環境変数を、って需要はさすがにあんまないか
dir HCR:\CLSID | ? { Test-Path $("HCR:\CLSID\" + $_.PSChildName + "\ProgID") } |
% { Get-ItemProperty "$("HCR:\CLSID\" + $_.PSChildName)" } | ? {$_ -match "application"}
PSって.NET周りのライブラリをラップしまくっていく計画はないの? []で囲んで呼び出すのってなんかメンドイ。 まあ若い言語にありがちなライブラリ不足を 最初から一挙に解決してるというのはすごいことではあるけどさ。
>>661 具体的に何をどうすればいいの?
たとえば [string]::Join() の代わりに Do-String -join ってすんの?
うわ、覚えるの面倒くさ。MSDNで調べられないし。
いやまあ2.0なら[string]::Join() は-joinで置き換え可能だけどね
2.0まで待てないから1.1とか出してよ
静的メンバを参照することって俺はそうそうないからたいして気にしないけど(
>>504 みたいなのもあることだし)
$_.の後がTabで補完できるようになって欲しいとは強く思う
うわ、Get-Itemproperty HCR:\CLSID\*\ProgIDで十分だったのかよ・・・これは酷い
promptやTabExpansionみたいな自動的に実行される関数って作れるの?
669 :
名無し~3.EXE :2008/02/21(木) 16:56:51 ID:kSsuFJJo
EmacsでPerlを使ったらPerlじゃないなんて、それは変だろ。 良くあるのは表面だけlispで中身は完全にPerlやbashで動いてる。 文房具で話すなら シャープペンがEmacsで 中身の芯がperlだろ 勿論、芯をPowerShellに変えるのもそんなに難しい話じゃないが この場合、エディタの補完で好きに出来るから タイプ数では差はつかないと思うが
釣れますか?
どっちかと言うと釣られたつもりなんだけど。 PowerShellマンセースレの トンデモ話に釣られて書いて見た。
タイプ数どうこう言っててPowerShellをオブジェクト無視して評価する方がよっぽどトンデモです
NGWORD:Emacs 2chにいるオヤジの粘着力は異常
「Perlをシェルとして使ったらタイプ数増えるぞ」って話でEmacsって。 釣りじゃなきゃ真正のアホか。 「シェル」を知らないから「シェルとして使う」の意味もわかんねーんだな。
文房具に例えなくてもわかるようになってから出直すんだな。 寒いから。
だからタイプ数は増えないだろw どんだけ
ターミナルエミュレータ無視とか 間に挟むEmacs無視とかありえないから。 折角機能在っても単独PCでDOSと同じ使い方じゃ意味なさすぎ 逆に、それならDOSでいいんじゃね?
お前ら、 $threads = dir 2ch:\板名/ $logs = $threads | % { dir $_ } とかやるなよ、絶対やるなよ
>>677 その場合はcommand.comがシェル。
不便だろ?
早く文房具にたとえなくても理解できるようになれよ。
さっき使い始めたんだけど、これってなんか新世代って感じがするね MSがEmacsみたいなエディタを出すって聞いても 正直あんまり期待してなかったんだけど、これは…… ヽ|/ / ̄ ̄ ̄`ヽ、 / ヽ / \,, ,,/ | | (●) (●)||| | | / ̄⌒ ̄ヽ U.| ・・・・・・・・ゴクリ。 | | .l~ ̄~ヽ | | |U ヽ  ̄~ ̄ ノ | |  ̄ ̄ ̄ |
tmp\a\ファイルいっぱい tmp\b\ファイルいっぱい ... tmp\z\ファイルいっぱい で、 PS tmp> なとき、 tmp\a.7z tmp\b.7z ... tmp\z.7z みたいに圧縮しようとして、エスケープやワイルドカード文字もディレクトリ名に使ってるからと ls | %{ cd -l $_; $_='C:\Program Files\7-Zip\7z.exe a ..\'+$_+'.7z *'; invoke-item -l $_; cd .. } や ls | %{ cd -l $_; $_='C:\Program Files\7-Zip\7z.exe a ..\'+$_+'.7z *'; & $_; cd .. } とかしたんだけども、全然動かなくて死にそうです だれかボスケテ リネームしろボケ!は最終手段でお願いしますorz
$_に代入しちゃ駄目 % { $name = $_.name ...} みたいな感じで一端他の変数に代入してからどうぞ
>>682 読みづらいな。
無駄を省いて変数を使うともっと読みやすくなる。
読みやすくなればバグも減る。
7zもってないから試してないけど、これでどうだ?
$7z = 'C:\Program Files\7-Zip\7z.exe'
ls | % {$n = $_.name; &$7z a "$n.7z" "$n\*"}
つーか、PATH通せ。
ls | % {7z.exe a "$($_.name).7z" "$($_.name)\*"}
PS C:\test\test> dir *aaa*.txt | ren -NewName ccc.txt Rename-Item : 'Microsoft.PowerShell.Core\FileSystem::C:\test\test\aaa [1].txt' の項目は存在しないため、名前を変更できません。 ファイル名に[]がついてるとリネームに失敗するんだけどどげんしたらいいの?
>>685 dir *aaa*.txt | mv -dest {'ccc.txt'}
687 :
686 :2008/02/25(月) 20:55:23 ID:aUIbUud9
あ、実際やってみたらスクリプトブロックいらねーや。 dir *aaa*.txt | mv -dest ccc.txt
-LiteralPathがRename-Itemにはないんだな
689 :
685 :2008/02/27(水) 13:02:52 ID:EtJ9RabM
ありがとうございます。 ワイルドカードだか正規表現に使う[]と内部的にぶつかってるって事なんですかね。 微妙な動作だな…
あ、[string]いらないや [string[]](1000..1100) | % { "file_$($_[1..3])" }
>>692 うちの2.0CTPだと
>>
file_0 0 0
file_0 0 1
file_0 0 2
<<
こんな出力になるんだけど……
普通に0埋めしたいだけなら
1000..1100 | % { "file_$($_.ToString("000000"))" }
ってするかな
# 3桁だと0埋めにならないから6桁にした
>>693 $OFS = "" を忘れちゃいやん
[string](1,2,3)
$ofs = "+"
[string](1,2,3)
$ofs = ""
[string](1,2,3)
""の中で式文使うのって他人に読み辛いかなーとかどうでもいいことを気にする年頃です
あー$OFSって組み込み変数なのか、すいませんでした
自分は変数展開すきじゃないので、出来る限りシングルクォートで書くかなぁ
>>693 も
>>692 みてなければ
1000..1100 | % { 'file_' + $_.ToString("000000") }
って書いたと思う
普通のシェルスクリプト書きなれた人は変数展開つかうのかな
$_.ToString('file_000000')
>>698 お、いいね!
\を付ければ"."も行けるみたいだ
0..100 | % { $_.ToString('file_000\.txt') }
%表記や3桁ごとに","で区切ることも出来るし、すごい便利じゃないかToString
700 :
名無し~3.EXE :2008/02/28(木) 10:49:38 ID:vF8vRiRW
C#のFormatは呼べないのかな String.Format("{0:D4}", 774) ==> "0774" String.Format("{0:000000}", 893) ==> "000893" それにしてもPowerShellはストレスたまる。 やりたいことと今自分が出来ることのギャップがありすぎる… 早くすらすら書けるようになりたいものだ
>>700 それもアリだね、静的メンバにアクセスする時はこんな感じ
クラスの完全修飾名(System.は省略可)を[ ]で括って"::"を付ける
0..100 | % { [String]::Format("file_{0:D4}", $_) }
結構いろいろやり方あるもんだ(というかこうして見ると自分の方法だけえらい浮いてるな…)
"{0:D4}" -f 774
.Netはコンソールで使うにはちょっと冗長すぎて 相性が悪いと思う。 Rubyみたいなのが良さそうに見える。 読みづらくて嫌いだが。
>>702 -f演算子すっかり忘れとるorz
こうして見るとSystem.Stringのメソッドは糖衣構文用意する方向で進んでるんだな
>>703 そろそろOSS界隈でもそういうの出てきて欲しいね
どっちもちゃんと使った事が無いのがよくわかる意見だね
707 :
名無し~3.EXE :2008/02/29(金) 15:57:26 ID:9rXKNg8r
>>707 INIファイルに原因があるわけじゃないけど、みんなINIファイルを実行ファイルと同じ位置に置いちゃうからなぁ
みたいな理由なんじゃないかな
いやXMLで吐くのが推奨になったからじゃね。
>>707 例えばINIファイルの文字エンコードを何にすべきかとか、
キーに使える文字の制限とかみんな知ってればそれでいいんだけどな。
逆にみんな適当だと野良INIファイルとの相互運用が悲惨そうだ。
>>708 というかまあ、インストール不要を謳いたいがために使われてるような
712 :
名無し~3.EXE :2008/03/01(土) 12:40:38 ID:Yp7Ku/YR
PowerShellスゲー > $settings = [xml]"<settings><path></path></settings>" > $settings.settings.path="c:\windows" > $settings.settings.path c:\windows > $settings.Save("c:\data.xml") > type c:\data.xml <settings> <path>c:\windows</path> </settings> > $x = [xml]"<dummy/>" > $x.Load("c:\data.xml") > $x.settings.path c:\windows PowerShellPlusもリアルタイムで .settings .pathを補完してくれるよ。
713 :
名無し~3.EXE :2008/03/01(土) 20:28:06 ID:bOqKt2Oq
Get-Command -noun "Service" CommandType Name ----------- ---- Cmdlet Get-Service Cmdlet New-Service Cmdlet Restart-Service Cmdlet Resume-Service Cmdlet Set-Service Cmdlet Start-Service Cmdlet Stop-Service Cmdlet Suspend-Service Remove-Serviceは無いのか・・・ Newは在るのに?
他プロセスの吐いたOutputDebugStringを受け取って垂れ流すスクリプトって簡単に書けたりしないですかね。 それをベースにプロセス限定したりメッセージをフィルタリングしたりというツールを作りたいんですが。
do { } while() と do { } until() があるのに なんでwhile() { } があって until() { } はないのだろう。 無いからと言って誰も困らないだろうが。
>>717 while () {} と until(){ }の2つにすればいいのに と思うのは漏れだけ?
until () { } = do {} while ()で
PowerShellPlus 1.0.1.30
あ、ps2ch.format.ps1xml古いまんまだ、Sourceフォルダに新しい方入ってるけども
dir /a:d /s /b ↓ gci -r | where{$_.Mode[0] -eq "d"} | %{$_.FullName} 何気に退化してるな・・・何が悲しくて文字判定しなきゃならんのかと。 もっとスマートにディレクトリを列挙できないのか。
filter b(){ $_.FullName } filter ad(){ if($_.GetType().Name -eq "DirectoryInfo"){ $_ } } ls -r |ad |b 上二つをprofileにかいといてさ
725 :
437 :2008/03/06(木) 21:13:47 ID:kpLaTG+1
>>723 それは既に俺が通った道だ!
>>438 を参考にこんな感じで対処した
function dird ([String]$Target = $PWD, [String]$Pattern = "*", [switch]$AllDirectories) {
if ($Target -eq ".") { $Target = $PWD }
if ($AllDirectories) {
$sw = "AllDirectories"
} else {
$sw = "TopDirectoryOnly"
}
[IO.Directory]::GetDirectories($Target, $Pattern, $sw)
}
ところで誰か関数やスクリプトコマンドレットで位置パラメータ指定する方法知りませんか
>>725 dir、lsは単なるエイリアスなんだから
dirを置換しても良いんでない?
>>726 組み込みのエイリアスは変更・削除できないし、
重複してるコマンド名の判定優先順位の変更のしかたとか知らないのでまあ適当にd付けとけ、と
さすがにこういうコマンドで& ${Function:\dir}みたいな使い方はどうかと思うので
Remove-Item Alias:/dir -ErrorAction SilentlyContinue で消してから付け直せば出来るよね。 俺はcd消して定義しなおしてるよ
電卓的に使おうとすると最後に評価した値を参照できないのが面倒だな。 >1+2 3 >$@ * 10 30 なんてやりたいのに。
オーマイガッ! Remove-Item Alias:\slで Alias was not removed because alias sl is constant and cannot be removed. とかエラー出るから消せないもんだと早合点しちまってたぜっ
>>725 位置パラメータって、名前なしで位置だけで決まるパラメータって事?
何もしなくても名前なしでパラメータ指定できないか?
あるいは$argsってのもあるが。
>>731 あーごめん、そのままだと定義したときの引数の順番そのままだから
もっと自由に指定したいなって意味
>>732 function f($x, $y, [switch]$s) { ... if ($s) { ... } ... }
なら、
PS > f -x 5 -y 6 -s
みたいに指定できる。もちろん順番も入れ替えられる。
ログファイル用のフォルダをそれぞれ作成するために $logs = dir *.log md folder cd folder $folders = ($logs| % {$_.Name.split('.')[0]}) #ここかなり無駄がある New-Item $folders -itemType direcotry #この瞬間が気持ちいい で出来たけど 5行目で無理しちゃた なんか良い方法ないですか? dir | % { $_.BodyName }的な何かは在りませんよね?System.IO.FileName (だっけ?)あたりを使うと楽になりますか?
ナゲーヨ [System.IO.Path]::GetFileNameWithoutExtension($_)
>>733 コマンドレット作る時で言うPositionの設定を順不同でしたりしなかったりをやりたいんだ
関数じゃ無理でもスクリプトコマンドレットならできるかなという気もするんだけど
と思ったら2.0CTP入れてhelp探せば普通に見つかりました、ゴメンナサイ…
こうすればいいわけね
Cmdlet Get-Args {
Param ( [int]$num2, [Position(1)][int]$num1, [Position(0)][string]$str )
Process { "$str : $num1 : $num2" }
}
Get-Args "number" 12 -num2 34
>>734 それは普通に
$logs = dir *.log | % {$_.BaseName}
でいいんではなかろうか
>>738 ScriptPropertyでもいいじゃないか
PSObjectだもの
>>739 サンクス
http://d.hatena.ne.jp/newpops/20070630 個々の通りにやったら出来た
<ScriptProperty>
<Name>BodyName</Name>
<GetScriptBlock>
$fn = $this.Name
$fn.Remove($fn.Length-$this.Extension.Length -1,$this.Extension.Length+1)
</GetScriptBlock>
</ScriptProperty>
>>740 PowerShellではすべてのオブジェクトをPSObjectでラップしていて
PSObjectには既存の型情報以外にもPowerShell側で使いやすいように拡張されたメンバ(PSExtended)があって
その一つとして[DirectoryInfo]には拡張子を取り除いたファイル名を返すBaseNameプロパティがあり
そのページ探しても乗ってないよってことを言いたかったんだけども、結果オーライ!
>>741 DirecotryInfoにもFileInfoにもBaseNameプロパティなんて無いよ
v 2.0 だと追加されてるのかな?それともなんか拡張とかインストールした?
743 :
741 :2008/03/08(土) 20:24:02 ID:9LQVXj6A
>>742 あ、ごめんIO.FileInfoの間違い
v1.0にはないのかー、もう一台v2.0だけ入れた方確認したけどBaseNameあったよ
結構こまいところで手が入ってるなw
v2.0のtypes.ps1xmlにはBaseNameがこう定義されてた <ScriptProperty> <Name>BaseName</Name> <GetScriptBlock> if ($this.Extension.Length -gt 0){$this.Name.Remove($this.Name.Length - $this.Extension.Length)}else{$this.Name} </GetScriptBlock> </ScriptProperty> 今更だけどオブジェクトのプロパティを選りすぐりたいだけなら%{}使うよりselectの方が気持ち爽やか
dir | group {$_.CreationTime.ToString("yyyyMM")} | % { md $_.Name; copy $_.Group -Destination $_.Name } copyにこんな乱暴な渡し方しても予想通りに動いた、パラメータのバインディングってすごいな groupってコマンドのエイリアス列挙くらいにしか使えないじゃんとか思ってたのが間違いだったわ
全ファイル列挙しようとしたら PS D:\> dir -Recurse -Force | select fullname > hoge.txt Get-ChildItem : パス 'D:\System Volume Information' へのアクセスが拒否されました。 発生場所 行:1 文字:4 + dir <<<< -Recurse -Force | select fullname > hoge.txt これは仕方ないのですか? OS:Vista
>>747 それは仕方のないことではなく、当然のこと。
デフォルトだとSYSTEM権限でのみアクセス可能。
ふつうアクセスしないし、する必要もない。アクセスしたいならACLをいじる。
ACLはエクスプローラ上からやるのが一番楽。PowerShellからはたぶん出来ない(出来ても面倒)。
エラー出るのが鬱陶しいだけなら、 -ErrorAction SilentlyContinue を最後に足せば良いよ
ちなみに
>>725 をcmdletとして定義すれば-ErrorAction他共通パラメータも使えるずぇ
751 :
747 :2008/03/15(土) 06:07:22 ID:7WidlZe8
ありがとうございます。 dir -Recurse -Force -ErrorAction SilentlyContinue | select fullname > hoge.txt これでいきます。
function dir2{ dir $args } dir2 C:\ これはOK dir2 -recurse これはNG どうしたらいいんすか?
>>747 PowerShellだけなら仕方がない。
runassysからPowerShellを起動すればいいだろうけど。
754 :
名無し~3.EXE :2008/03/16(日) 07:48:35 ID:CawtUaGs
755 :
名無し~3.EXE :2008/03/17(月) 01:53:20 ID:W3u8hNHz
また蒸し返して馬鹿さらすのか。
デスクトップ検索のインデックスををGet-ChildItemやResolve-Pathで利用できればいいのになーとかふと思った 実現方法なんて知りませんよ?
インデックスサービスにはCOMインターフェイスがあるけど MSNやVistaの検索ってあるのかな?
複数のコマンドを同時に走らせるにはどうやればいいのですか? コマンドを入力したあと(終了を待たずに)すぐにプロンプトに戻って次のコマンドを鬱にはどうすればいいのですか? bashなどで ./hoge && ./hogera や ./hoge & ./hoge & ... といったようなことがしたいのです
もうちょっと簡潔かつ分かりやすく書けないかな。 引数で渡されたフォルダ配下のフォルダ毎のディスク使用量を出す function goukei([string]$tgtDir){ if($tgtDir -eq ""){ $tgtDir = pwd } filter goukei_f{ $folder = $_.FullName $sum = (dir -literalpath $_.FullName -recurse -force -erroraction silentlycontinue | measure-object Length -sum).Sum #フォルダ名(フルパス)、合計サイズを出力 "$folder,$sum" } dir $tgtDir -recurse -force -erroraction silentlycontinue | ? {$_.PSIsContainer} | sort FullName | goukei_f }
761 :
名無し~3.EXE :2008/03/18(火) 09:34:06 ID:ahlghMa6
>>760 Get-ChildItem -recursive $tgtDir | Measure-Object -property Length -Sum
インデックスサービスで検索するやつを適当に作ってみた ---------- function search-index ([string]$Name) { if ($Name -eq "") { return; } $connection = [System.Data.OleDb.OleDbConnection]"Provider=MSIDXS; Data Source=""System"";"; $command = [System.Data.OleDb.OleDbCommand]"SELECT Path From SCOPE() WHERE CONTAINS(Filename, '""$Name""')"; $command.Connection = $connection; $connection.Open(); $datareader = $command.ExecuteReader(); while ($datareader.Read()) { Write-Output([System.IO.FileInfo]$datareader.GetValue(0).ToString()); } $datareader.Close(); $connection.Close(); } ---------- search-index "ファイル名の一部" って実行するとgciみたいに結果が表示される
(Get-ChildItem $this.Fullname -recurse $tgtDir | Measure-Object -property Length -Sum).Sum などとtypes.ps1xmlにScriptPropertyとして登録しておけばあっという間にCUI版Folder Sizeの完成だが これを深い階層/大量のファイルを持つディレクトリで使うとGet-ChildItemが尋常でない遅さになるという諸刃の剣・・・っ! いやprofileに有効無効制御するフラグ作ればいいだけなのですが
>>762 へー、.NETに組み込まれてんだね
4.0辺りでSystem.Searchみたいなクラス作ったりはないか
765 :
名無し~3.EXE :2008/03/18(火) 21:54:05 ID:qNgIQj6H
>>764 OleDbプロバイダが提供されてるからADO.NETでアクセスできるだけ。
>>765 COMオブジェクト作ってなんかやるんかなとか思ってたんだ
767 :
760 :2008/03/19(水) 00:08:36 ID:qLwWbzex
フォルダ毎に合計を出したいので
>>761 では駄目です
>>767 Get-ChildItemにサイズ表示させたいサブディレクトリのパス渡せばいいだけじゃん
>>725 でも使ってあげて
誰かver1.0用のOut-GridView作って
ディレクトリの古いファイルを整理したいので、 md old $list = dir | sort LastWriteTime move $list[0] old とやったのですが、ファイル名にスペースが含まれているとうまくいかないようです。 これって何とかなりませんでしょうか?
774 :
名無し~3.EXE :2008/03/24(月) 17:20:42 ID:MPiJHNZX
$list[0] | move -dest old
文字列を変数で渡す場合は中にスペースあっても問題ないはずだけどなぁ・・・
というか自分の環境だと問題ないのだが。。。
>>145 みたいなことがあるから、単一のファイル名を渡したいときは-LiteralPathの方が紛れは少ない
それはそうと時間別ファイル整理なら
>>745 を押し売りしてみるテスト
>>774 それでいけました。ありがとうございます。
>>777 うぉパーティションマジックのQuestってまだ生きてたんだ!
って別の会社だよね...
スクリプトを実行ファイルに変換する何かってあるのかな? あってもやっぱしAutomation.dllとかないとPowerShell入ってない環境じゃ駄目か
780 :
名無し~3.EXE :2008/03/31(月) 07:30:58 ID:qyqJGQdS
>>779 .NETからスクリプトを呼び出すのは簡単なので、実行ファイル化は難しくない。つーか30分で作れる。
実行にPowerShell.exeは必要ないが、その他のdllは必要。
System.系だからVisualStudioで作れば一緒に配っていいんじゃないの?ライセンス見てみなよ。
結局そういうものはC#で作った方が早いという(ry
>>780-781 や、自分にそんな腕はねーです
配布はしないけどUSBメモリに入れて持ち運んだりできるといいなと
まあ.NET2.0が入ってること前提ですが
スクリプトのバイナリ化って結構需要あるんだよな。
スクリプトを実行ファイルに変換する意味ってあるのかな?
PowerShellでかけるならC#でも大して変わらん手間でかけると思うけどなー exe化したいというより、ポータブルな実行環境がほしいって事だよな
速くなる。 (こともある)ような気がする。あと、コード盗まれないように、とか。
速くもならないし難読化もされない。 それらが目的ならするだけ損。
11著「Windows PowerShellポケットリファレンス」4/11発売 はどう?
どうっていわれてもまだ売ってないじゃん…… 俺はリファレンスなら要らないな
ttp://axion.sakura.ne.jp/blog/index.php?UID=1189067351 #New-Objectした場合
New-Object System.Xml.XmlDocument
#New-Objectして変数に代入、Loadした場合
$x = New-Object System.Xml.XmlDocument
$x.Load("test.xml")
$x
#Loadメソッド呼ぶ前に中身を確認した場合
del variable:x
$x = New-Object System.Xml.XmlDocument
$x
$x.Load("test.xml")
$x
[xml]$x
New-Object直後のオブジェクトはpsbaseのプロパティが表示される上に、それを確認した後Loadすると、
型変換しない限りずっとpsbaseのプロパティが表示され続ける・・・分かってればたいしたことではないけど。
>>792 dir | select * -ExcludeProperty Name
ps | select * -ExcludeProperty Handles
>>793 d、一度全部選ばないといけないのか、ううーむ
Pash
PowerShell open source reimplementation for "others"
(Mac, Linux, Solaris, etc...) and Windows (including Windows Mobile and Windows CE)
http://pash.sourceforge.net/ The current implementation of Pash is written using pure .Net 2.0.
It compiles on VS 2008 as well as on Mono.
Monoで動くPowerShell互換シェル作ってるみたい
796 :
名無し~3.EXE :2008/04/08(火) 18:23:47 ID:uY+7n3/J
Microsoft SQL Server PowerShell
ポケットリファレンス見てきた。 中をパラパラ見てたらオタクっぽい挿絵が・・・ 買うの止めた。 キモイ趣味を押しつけるのは止めて欲しい。
そんな事を言っていたら古典的名作の小説が萌絵の表紙、挿絵で販売させる 今の日本でこの先生きのこるのは難しい。 ところでどうしてPowerShellの字面は 動詞 名詞 の順なの?.NETのメソッドを呼ぶ際の 名詞.動詞 と入り乱れて激しく気持ち悪い。 単に外部コマンド呼び出しとの見た目を揃えたってことなのかな。
.NETのはオブジェクトにメッセージ送ってるわけだから コマンドレットとは全然違う 同じだったらかえっていやだ
>>797 どこにあるの?SQL*Plusみたいなもん?
IBM WebSphere MQ PowerShell VMware VirtualCenter PowerShell Citrix Delivery Center PowerShell が、その内追加されます
>>805 ほしいものないなw賞品のほうならほしいがw
デジカメもスーツケースもいらんw
受賞作品の「ネットワークプリンタの追加」ってやつ、ひっでーな。 しかも、特定環境に依存してたから選考委員が汎用に作り直したんだって? あれでカメラもらえんの? つーか、よっぽど応募少なかったんだな。 落ちた俺、涙目。
ちなみに↑のソースの実効部分ね。 全48行のうち、これ以外は単なるコメント。 $wsNet = New-Object -Com WScript.Network function ConnectNetworkPrinter([String]$printerName) { $wsNet.AddWindowsPrinterConnection($printerName) } function RemoveNetworkPrinter([String]$printerName) { $wsNet.RemovePrinterConnection($printerName) }
ていうか、これに負けるってお前どんなの出したんだよ?
他人のソースを勝手に貼り付けたら、普通は著作権が気になるところだが。うーん、著作部分は関数名と変数名くらいだな。
いや、実はVBScriptだと何千行もあるソースだったのに PowerShellに書き直したらたったの10行で!! みたいなことじゃないの まぁ、VBScriptのを応募した人にしかすごさが伝わらないけど
あ、COM使ってるだけなのか じゃあvbsでもほぼ同じ行数か 確かにこれに負けるって切ないな
2月発表のはずがここまでずれこんだのって すっげー低レベルな争いだったんだな・・・ 賞を与えるにふさわしいスクリプトを選ぶんじゃなくて どのドングリに賞をこじつけたら結果発表のページに 一番もっともらしい理由が書けるかっていう・・・ 実際のところいくつ応募が来たのか聞いてみたいところだな。 やっぱパワーシェルっていらん子なのか? まあでもネットワークプリンタ云々以外の受賞作品はまだ納得できるよ。 デリゲート超便利。
何が切ないって、Hey, Scripting Guy!にそっくりそのままVBSでのやり方が載ってる辺り まあ俺はPowerShell知るまでCOMなんて全く知りませんでしたが
今日マイクロソフトのイベント行ってきたけど、 いろんなサーバーの管理に使えるようになる みたいだから、管理者の間には広まるんじゃないかな。 同じ設定を繰り返しGUIでやるのとか面倒だからね それ以外の用途で流行るかどうかは謎
コンテストの作品見ても明らかにそれ以外の用途で流行ってる もちろん管理ツールとしても不動の地位を築きつつあるけど
スクリプト言語としてかなり面白い。 あとはコマンドラインシェルが、ZSHとは言わないがBASH並みに使いやすくなってくれれば…。 インクリメンタルサーチが欲しい。
受賞者って匿名なの? 受賞者より選考委員のほうが目立ってるのはどういうこと? 実在するの? 選考委員が作ってるんじゃないの?
>>822 とりあえずネットワークプリンタ以外の受賞者はこのスレのリンク探せば見つかる
受賞者が自分で公表するものなんだね
しまった -Wait だったorz
PowerShellではIEのBeforeNavigate2などのイベントハンドラは どんなふうに書くのでしょう?
手順1 VisualStudioをインストール 手順2 SDKのフォルダ内からTlbImp.exeを探し出す 手順3 WINDOWSフォルダからShdocvw.dllを探し出す 手順4 TlbImpを使ってShdocvw.dllを変換(例 TlbImp Shdocvw.dll /out:ほげほげ.dll) 手順5 変換して出来たアセンブリを読み込む(例 [System.Reflection.Assembly]::LoadFrom(C:\ほげほげ.dll)) 手順6 アセンブリ名.WebBrowserClassをNew-Objectする(例 New-Object) 手順7 Get-Memberするとadd_BeforeNavigate2メソッド出現 ウマー(゚д゚) いやもしかしたら普通にNew-Object -ComObject InternetExplorer.Applicationでも出来るのかも知れんけど
>>829 やるならInternetExplorerClass(IEで起動)かShellBrowserWindowClass(規定のブラウザで起動)だな
($a = New-Object ie.InterNetExplorerClass).visible = $true
$e = New-Delegate ie.DWebBrowserEvents2_BeforeNavigate2EventHandler {$a.Quit()}
$a.add_BeforeNavigate2($e)
こんな感じで確かにイベントをハンドル出来てる、けどNew-Delegateに渡すスクリプトブロックによってはPowerShellが落ちる
この辺よく分からんのでまぁ828の方で検証して
System.Windows.Forms.WebBrowserがIEのCOMをラップするクラスだが、
STAモードでないと動かないようになってる。
つまり、ラップクラスがそういう仕様になってるってことは、
IEをCOMから使うにはSTAモードで使えってことだね。
>>830 New-Delegateなんてコマンドレットがあったのかよと思ったら、
標準じゃないのか。
>>831 うん例のコンテスト受賞作のやつ、上でも話題になってるしまあ説明抜きでもいいかなと
STA要求してるわけね、通りで複文だと落ちる確率が増すわけだ(毎回スレッド変わるから)
ってそんなとこよりおまいら、v2.0のCTP2がcoming soonですよ!
http://blogs.msdn.com/powershell/archive/2008/04/24/how-could-you-top-ctp1.aspx > Can you imagine what you'd be able to do with transactional cmdlets!!!
Transactional NTFS キタ━━━━━(゚∀゚)━━━━━!!
やっべ超やっべ、これだけのためにVistaに乗り換えたいくらいだ
リモーティングがVistaと2008だけのサポートになったのはどうせ自分のXP機じゃ機能してないからどうでもいいと強がれるけど
まったくPowerShellはたいしたキラーアプリだぜフゥハハハー
Get-ChildItemのヘルプ見てたら、-excludeのところで このパラメータは、このコマンドレットでは正常に機能しません。 って記述があるけど、普通に使えるてるし、なんじゃこりゃ?
834 :
名無し~3.EXE :2008/04/30(水) 10:09:05 ID:QR9g4cCe
-Recurse と一緒に使った時に挙動がおかしい。
あー確かにサブディレクトリ内のディレクトリは別々に列挙される上にファイル群も別だな dir -re -ex *.txt | group { if ($_.PSIsContainer) { $_.Parent.fullname } else { $_.DirectoryName } | % { $_.group } 別に-exclude自体は有効だけど表示がおかしいって事か
なんじゃそら
>>829 Visual Studioの代わりにWindows SDKでも可。
どっちも巨大だからダウンロードが面倒なことにあまり変わりはないけど。
やっと来た・・・ここ数日深夜がんばったのに寝た瞬間来るとか・・・
ちょ、イベント操作系もXP非対応とかwwwwww俺涙目wwwwwww
うひょ、STAで起動するオプションが付いてる 関数も|の直後でもタブ補完利いたり細かいところがよくなってるな graphical powershellもだいぶ進化した感じ
しかしPSって流行らんな
今時分CUIツールが18ヶ月でDL数200万越えなら十分でしょ VBAの後継は動的言語に回帰するって言うVB.NETなんかな
このペースだと2.0正式版はいつ頃? 当てた人に抽選で我が家の使ってないものプレゼント。
PDCかWinHEC辺りでβが出れば万々歳 なんかGet-Memberした時にMemberTypeでEventが表示されるようになってる
>>835 豆知識
Get-ChildItem -Path * -Exclude *.txt とすると一階層だけ下のサブディレクトリのファイル・ディレクトリも列挙してくれる
-Pathの代わりに-Includeを指定するか単に-Excludeだけ指定すると本来予想される挙動を示す
powershell -sta とか gpowerhsell.exe 使えばWPFのウインドウも普通に出せるようになったけど 対話的にウインドウの内容を書き換えるのは無理なんかね
852 :
名無し~3.EXE :2008/05/09(金) 12:03:35 ID:z4JK9NGG
>>851 別スレッドを使えばいいんじゃないの?
WPFじゃなくて悪いけど、こんな感じ。
$form = New-Object System.Windows.Forms.Form
$delegate = New-Delegate System.Threading.ThreadStart {$form.ShowDialog()}
$thread = New-Object System.Threading.Thread($delegate)
$thread.SetApartmentState('STA')
$thread.Start()
for ($i = 0; $i -lt 100; $i++) {$form.Left = $i}
>>852 2.0 CTP以前だと通るのかな?CTP2だと通常起動(MTA)でもSTAでも(まあこれは当然として)$thread.Start()のところで落ちる
ttp://huddledmasses.org/wpf-from-powershell-updating-windows/ これのdemo-wpf4.ps1、大学のPCだと普通に動いたのに家のだと
$script:cpu = new-object System.Diagnostics.PerformanceCounter "Processor", "% Processor Time", "_Total"
$script:ram = new-object System.Diagnostics.PerformanceCounter "Memory", "Available KBytes"
のところで怒られるのは何故だろう・・・
854 :
名無し~3.EXE :2008/05/10(土) 17:49:25 ID:psJheK3P
>>853 CTP2でやったけどそこじゃ落ちない。フォームを閉じると落ちるけどな。
>>854 アセンブリ読み込むの忘れてたorz 確かにWinFormsならできるんだなぁ
多次元配列やジャグ配列の作り方良く忘れるから備忘録 基本は完全修飾名("System."だけは省略できる)にブレース付けて、-ArgumentListに引数を渡す New-Object -TypeName system.int32[][] -ArgumentList 3,4 型名を引用符で括って明示的に文字列として渡さないと文法エラーになるもの(おそらく多次元配列のカンマ)もある New-Object -TypeName system.int32[,] -ArgumentList 3,4 ←エラー 型エイリアスは本体と一対一の関係なので、派生系は表現できない New-Object -TypeName int[][] -ArgumentList 3,4 ←エラー まあ、2つ目と3つ目を良く忘れて何度もドツボに嵌まるわけですよ 作る必要もないとは思うけど 型[][,] とかの場合はどう書けばいいんだろ
859 :
名無し~3.EXE :2008/05/16(金) 11:39:12 ID:pdzY5jAs
これのgwmiをリモートコンピュータに行うのってドメイン環境じゃないとダメなん?
ワークグループだからかは知らないけどできなかった。 PS >(Get-WMIObject Win32_ComputerSystem).PartOfDomain False PS >Get-WmiObject Win32_BIOS -ComputerName server アクセスが拒否されました。 (HRESULT からの例外: 0x80070005 (E_ACCESSDENIED)) どうでもいいけどUNCパスがTab補完できるって便利だね。
862 :
名無し~3.EXE :2008/05/20(火) 15:09:31 ID:PFhDETFy
>861 でけーた。 -credentialかけてて、いまいちうまくいかなかったので 相手先のマシンと自分のマシンに同じID/PASSのアカウントを作成し リモート元はその作ったアカウントでログインしたらOK 細かいこと言えばそれ以前にGuestForce=0だとかこまごまやってるけど 大まかに上記でいけちゃいました。 あと、-credentialで通した場合、Win32_BaseBoardはいけるんだけど、Win32_Processがダメとか…。 名前領域に対しては権限振ってあるんですけどねぇ。
>>862 あー、-Credential忘れてたわーあははー。
こっちはそれだけで特にどのクラスも問題なく行けました。
864 :
名無し~3.EXE :2008/05/20(火) 18:27:42 ID:PFhDETFy
>863 ちなみに-credentialかけていけない時のエラーはこちら 0x80070005 (E_ACCESSDENIED) ハラタツノリですね。 そちらはいけましたか… ボンミスの匂いがしますので時間のある時にちょこちょこ調べてみます。
>>864 まあ性善説の名の下にノーガードで好き放題になってるネットワークなので。
一度WSHの方で試して成功するか試してみては?
使ってるコンポーネントは同じなはず。
WebClientの非同期ダウンロードで 進捗状況をDownloadProgressChangedイベントで取得しようとしてるんだけど --- $filename="ファイル名" $url="接続先URL" $wc = New-Object System.Net.WebClient $wc.add_DownloadProgressChanged({$Host.UI.RawUI.WindowTitle=$_.ProgressPercentage}) $wc.DownloadFileAsync($url,$filename) --- こんなコードだとDownloadProgressChangedイベント発生時にPSごと落ちちゃう # イベント処理部分は何にしても(それこそ空{}にしても)同じ状況 PowerShell側の問題なのかNET側なのか 根本的になんか勘違いしてるのかの切り分けができずもうわけわかめ
コンセプトは好きなんだがなかなかすらすら書けるようにならない・・・ たまにちょこっと使うシェルスクリプトがここまで重量級になることに矛盾を感じるぜ。 cookieに進捗を保存しておいて開くたびに新しいサンプル表示してくれるサイト作ってクレクレ
>>866 >>830-831 辺りと似たような理由なんで無いの
こんな感じで大体できたけど、$_にイベントのデータが詰まるわきゃないし、どこに格納されてるのかは知らね
$filename="dotnetfx.exe"
$url="
http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=ja&SrcCategoryId=&SrcFamilyId= `
0856eacb-4362-4b0d-8edd-aab15c5e04f5&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f6%2f7%2f567758a3-759e-473e-bf8f-52154438565a%2fdotnetfx.exe"
$wc = New-Object System.Net.WebClient
$a = New-Delegate.ps1 System.Net.DownloadProgressChangedEventHandler {$Host.UI.RawUI.WindowTitle=get-date}
$b = New-Delegate.ps1 System.ComponentModel.AsyncCompletedEventHandler {$Host.UI.RawUI.WindowTitle = "ダウンロード完了しました。"}
$wc.add_DownloadProgressChanged($a)
$wc.add_DownloadFileCompleted($b)
$wc.DownloadFileAsync($url,$filename)
早いとこ*-PSEvent*のドキュメント出してくれないかなぁ
むしろこんな流れの遅いスレで 即レス帰ってくると思ってるほうが異常だろ
問題提起しといて一日以上放置する方がどうかと思うけどなー俺 インアクションより抜粋 非同期のイベント処理は、PowerShellのバージョン1ではサポートされません。 実際に試してみると、PowerShellランタイムがそれを検出し、致命的な例外を生成して、シェルセッションを強制終了します。 もちろん、これは非常手段です。プログラムを不正な状態で実行し続けるよりも、明らかな方法で失敗させる方がましです。 単にメッセージを表示させる方法も試してみましたが、ユーザーがメッセージを見逃してしまい、スクリプトが動作しなくなったことに首をかしげることになります。 あまり感心できる方法ではありませんが、セッションが強制終了されれば、いやでも気が付きます。 では、何故非同期イベントをサポートしないのでしょうか。PowerShellにはオブジェクトへのアクセスを同期させるメカニズムがありません。 つまり、マルチスレッドプログラミングを確実に実行するための方法がありません。 この問題はインタプリタの将来のバージョンで解決される予定です。
$DL = Add-Type -Language CSharpVersion3 @"
using System;namespace down { public class load { static private System.Net.WebClient wc = new System.Net.WebClient();
static public void Down(string[] args) { Uri uri = new Uri(args[0]); var filename = args[1];
wc.DownloadProgressChanged += new System.Net.DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
wc.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wc_DownloadFileCompleted);
wc.DownloadFileAsync(uri, filename); } static void wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{ Console.Title = "Complete"; } static public void Cancel() { wc.CancelAsync(); Console.Title = "Cancel"; }
static void wc_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e) {
Console.Title = e.ProgressPercentage + "%"; } } }
"@ ?passThru
$DL::down(@("
http://pc11.2ch.net/test/read.cgi/win/1163764836 ","1163764836.dat"))
PowerShellインスコした。 もうちょっと賑わってるかなと思って来てみたら全然だな。
わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー わー
.NETライブラリやCOM使ってゴリゴリ書くしかないような部分以外で悩むところがない おんぶに抱っこしてくれてる部分が楽に書ける所為で5行以上書く気が失せる 結果的に10行以上になることは多々あるが
.NETライブラリ使いまくりのスクリプトが長くなってくると、C#を使うべきだったかもしれないと考えたりする
.NETにとってのWin32APIみたいなもんで、最後の手段でちょろっと使うくらいが正しいんだと思う 幸いそういう苦労をやってくれる人は何故か多いから使わせてもらってるけど
マンションの共有スペースの掃除みたいなもんで、できるだけ逃げて最後の手段でちょろっと顔出すくらいが賢いんだと思う。 幸いそういう苦労をやってくれる人は何故か多いからやってもらってるけど。 環境保護募金みたいなもんで、女連れのときちょろっと小銭入れるくらいが正しいんだと思う。 幸いそういう苦労をやってくれる人は何故か多いからね。 ×幸いそういう苦労をやってくれる人は何故か多いから使わせてもらってる ○幸いそういう苦労を代わりにやってくれる人が多いから使わせてもらってる
New-Item huga.txt,hoge.ps1,111huga222.ps1,111huga222.txt,1hoge2345.ps1,1_1huga2-2.ps1 -ItemType file (dir) -match "h[ou]g[ae]" (dir) -match "\d+h[ou]g[ea]\d+" (dir) -match "\d+h[ou]g[ea]\d+\.ps1" (dir) -match "^\dh[ou]g[ea]\d+" -match演算子ってこんな隠し機能あったのね。データバインディング強力なのにも程があるだろ。 ていうかGet-ChildItem自体が正規表現使えるようにするべきだと思うんだ。
?? すまん、これってどこの部分を隠し機能っていってるの? データバインディング?
>>880 あ、ごめん隠し機能ではなかった。全ての比較演算子はコレクションに対して要素を返すのね、-eqだけだと思ってた。
(Get-ChildItem) -match "パターン"
が
Get-ChildItem | ? { $_.Name -match "パターン" }
と全く同じ挙動を示したから、賢いなぁと思ったのですよ。
Graphical PowerShellって、文の途中でTabキー押しても以降の文が消去されないのが地味にいいな
Group-Objectで分けたグループの数だけカラムで分けて表にしてコンソール出力するのって 自分でそういう書式フォーマットのPS1XMLファイル作らんと無理かね? 1..10 | group { $_ -lt 6 } の結果を True False ---- ---- 1 6 2 7 3 8 4 9 5 10 みたいな感じで出力したんだけども
884 :
名無し~3.EXE :2008/06/06(金) 02:01:46 ID:UePP4j9u
>>883 PS1XMLじゃ無理だね。
スクリプト組むしかない。
TrueグループとFalseグループの要素数の多い方の数だけループし、
New-Object object | Add-Member でTrueとFalseのNotePropertyくっつけて出力。
これでできる。
>>884 なるほど、ひとつのPSObjectにGroupInfo.Groupプロパティを全部詰め込んじゃうと
{1, 2, 3, ...}みたいに省略されるから駄目かと思ったけど、PSObject[]の一つ一つに
GroupInfo.Group内の要素を詰めていってその配列を出力すればいいわけね
ただGroupInfoが += をサポートしてないからパイプの最後でオブジェクトをまとめるやり方がわからない・・・
どうせコンソールの横幅制限があるし、さらに一端それらを詰め込むためのPSObject[]を要素数5,6くらいで決め打ちしてつくるかなぁ
あーそっかパイプの最後でまとめて一番要素数の多いグループを知ろうとする必要は無いのか 要素1のPSobject[]を最初に作って随時伸ばせばいいんだ ってことでできた function Out-GroupView { $a = New-Object psobject[] 1 while ( $input.MoveNext() ) { $group = $input.Current for ( $i=0; $i -lt $group.count; $i++ ) { for ( $j=$a.count; $j -lt $group.count; $j++ ) { $a += New-Object psobject } $a[$i] | Add-Member -Name $group.Name -Value $group.Group[$i] -MemberType NoteProperty } } return $a } 1..20 | group { if ( $_ -lt 9 ) {echo "9miman" } elseif ($_ -gt 15) {echo "15ijou" } else {echo "dottidemonai"} } | Out-GroupView 表示は正しいけどエラーが出る・・・ぼすけて
っておい超凡ミスじゃんorz $a[0] = New-Object psobject 忘れてた
ぬが。最初からこうしとけばよかったんじゃん。 $a = New-Object psobject[] 0 しかしGroup-Object単体で同じことができるようになって欲しいので gpowershellのフィードバックメールで要望出す阿呆がここに一人
CTP2の新機能/コマンド網羅したGraphical Help出す気ないのかよ 使い方わかんねーよ
890 :
名無し~3.EXE :2008/06/08(日) 21:44:07 ID:JnYLMETO
CTPってのはβよりさらに前のバージョン。 基本的に知識と経験豊富な上級者向け。 ドキュメントなんて揃ってるわけねーだろ。
>>890 CTP1の時は数日後にはドキュメント公開されてた
今回追加された一部(というかほとんど)のコマンドはmanすらできねーんだよ
(Get-Command Get-PSEvent).Definition
ってやればパラメータは分かるけど、それだけじゃ難易度高すぎるだろ
892 :
名無し~3.EXE :2008/06/09(月) 07:04:28 ID:FwRlBsjW
>>891 だから?
ドキュメントが揃ったらそれはCTPじゃなくβだ。
お前にとって難しくて使えなきゃやめとけって話。
網羅って言ったのが悪かったのか・・・俺の"揃った"の定義だとCTP1がβになる矛盾 揃えなくていいからもうちょっと増やしたの出して欲しい
dir c:\windows\system32\*.ini と dir c:\windows\system32\ *.ini では俺の環境だと後者の方が百倍くらい速い すげー
Windowsを再起動してから後者を先にやってみ
>>897 Windowsを再起動してから後者を先に実行した後に
Windowsを再起動してから前者をやってその後
Windowsを再起動して後者をやってから前者をやってみ
コールドスタートの方が不利なのは当然だが、これとそれとは関係ない
2回繰り返してやってみれば分かるだろう
ssh経由だとpowershell使えないねえ 残念だ
902 :
名無し~3.EXE :2008/06/17(火) 17:55:36 ID:i/oAB/ji
PowerShellでExif情報を読むにはどうすりゃいいの? get-content DSCF0001.jpg とかでexifを読めるのかと思ったんだけど。
Get-Contentはただデータ読み込むだけだからやるとしてもGet-ItemPropertyだろ(出来ないけど) そういうのはPowerShellでどうやるかってより.NET(C#/VB etc)でどうやるかを調べた方が早い 例えば C# Exif でぐぐれば腐るほど出てくる
905 :
名無し~3.EXE :2008/06/18(水) 09:43:21 ID:a0YdzPMh
...
カレントディレクトリの全ファイルの頭に カレントディレクトリ名をくっつけるのってどうやるの? foo/bar.txt -> foo/foo_bar.txt みたいにしたいのですが。
$cdname = (gi .).Name dir | % { ren $_.name $($cdname + "_" + $_.Name) }
>>910 SP3チェック済みとか? なんだろね。
しかし、2000もサポートして欲しい。企業内で現役で動いてるマシンはいっぱいあるんだよ。
うちのプリンタサーバは95だす
そういえばPowerShellのアセンブリ使った.NETアプリは2000で動くんかな 月曜に試してみるか
XPでPowerShellアンインスコして実行ファイルと同じディレクトリにDLL置いて実行したら PowerShellの情報がレジストリにねーよヴォケって怒られた、諦めよう
916 :
899 :2008/07/08(火) 20:21:00 ID:+TP5ODE+
>>914 なんでわざわざそんな面倒くさいことを四天王?
PowerShellの情報のレジストリ情報をXPから2000に登録したらどうなるんだろう。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell以下をエクスポートしたと後PowerShellアンインストール エクスポートしたregファイルを統合、C#で作ったPowerShellのコマンドレットを使用するアプリ作成 その実行ファイルと同じディレクトリにSystem.Management.Automation.dllとかその辺全部コピー で、実行したら普通に動いた、わっしょいわっしょい 明日2000で試してみよう
1.0 RTM/2.0 CTP/2.0CTP2の3種同時起動できた
ttp://www-2ch.net:8080/up/download/1215938395094591.bmIITx PowerShell 1.0 RTMをインストールする(XPの場合 C:\WINDOWS\system32\windowspowershell\v1.0 とする)
*
レジストリエディタを開いて HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell をエクスポート、適当な名前をつけて保存
PowerShellのインストールフォルダのファイルを適当なフォルダに全部コピー
PowerShellのアセンブリをコピーする
$path = "C:\temp\1.0 RTM"; # 先にコピーしたレジストリファイルと同じディレクトリ
md $path;
[System.AppDomain]::CurrentDomain.GetAssemblies() | Where {$_.FullName -like "*Version=1.0.0.0*";} | Copy-Item -path {$_.Location;} -destination $path;
#CTP/CTP2でOut-GridViewを使いたい場合はそれを実行してから、gpowershell.exeが使いたいときはgpowershell.exe上で上三行を実行
*
以下 * の間を2.0 CTP/CTP2をインストールして繰り返す(保存先は変える)
PowerShellをアンインストールする(この時点ではCTP2の定義ファイルがインストールフォルダに残ってるはず)
1.0 RTMの定義ファイル(*.ps1xml)を元のPowerShellのインストールフォルダにコピー
1.0 RTMのレジストリを統合する
後は普通に起動するだけで3種同時に使用可能
以下どうでもいいこと
v2.0のCTPやCTP2の定義ファイルをインストールフォルダに置いておくと、
古いバージョンで起動時に一部更新されてる箇所でエラーが出る(それでも普通に動くけど)
各レジストリファイルをメモ帳などのテキストエディタで開いて
C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0 をコピー先のフォルダフルパス(上の例でならC:\\temp\\1.0 RTM)に置き換えて
それぞれを起動する前に HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell を削除して統合しなおす
するとコピー先のフォルダから定義ファイルを読み込んでくれるのでエラーが出なくなる
もしくはC:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0 の定義ファイルをその都度置き換えるでもよし
強力なバッチファイル環境の類かと思って見に来たら、 何だかとてつもなく難しい話してる・・・ これって管理者でないエンドユーザーには、あまり縁のない機能なんですか?
>>924 自動化したい処理があるなら誰にでも縁あるかと
今これといったネタがないから、バッチファイル投下すれば多分暇な人がPowerShellのコードに直してくれるよ
これってC#からスクリプトとして呼び出せる? 詳しく言うと、エンドユーザが後で好きなように計算式を書き換えれるように C#からPowerShellの関数を呼び出してその結果を使いたいんだが・・・ こういう仕組みのことをなんて言うのか分からないから自分で具具っても見つからないorz PowerShellから.netを扱う例ならいくらでも見つかってるんだが・・・
>>927 サンクス。こういうのってAutomationとか言うのかな?
これで色々遊べる
JScript.NETのevalでよくね .NET Frameworkだけで動くし
特に名前は付いてないと思う、ただPowerShellのアセンブリを参照してるだけっしょ XPにインストールしたPowerGUIのフォルダを丸ごと2000にコピーして そこにPowerShellのアセンブリ一式をコピー さらにXPのレジストリから↓をエクスポートして、2000にコピーして統合すればPowerGUI動いた HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellSnapIns\Quest.PowerGUI これでとりあえず2000でもPowerShellの実行&スクリプティング環境は整った powershell.exeが動いてくれるともっと嬉しいんだけど
"Hello","こんにちは","See you","またね","Thank you","ありがとうございます"| % { '{0}{1, 50}' -f $_.length , $_ } 何故か日本語はずれる
5 Hello 5 こんにちは 7 See you 3 またね 9 Thank you 10 ありがとうございます あってんじゃね?
>>933 50カラム分右詰していしてるから、シングルバイトの文字列はどれも終点がそろってるけど
日本語(マルチバイト?)の文字列だと終点の位置にその文字列の中心が据えられる感じ
>>934 あ、「ずれる」のね。「外れる」=文字数の計算が合わないのかと思った。失礼。
いずれにせよ、文字数だけ見ると、正しく表示されているけど、
日本語1文字を2文字分として数えないと、見た目正しくならない。
原理的には
$enc = [Text.Encoding]::GetEncoding("Shift_JIS")
"Hello","こんにちは","See you","またね","Thank you","ありがとうございます"|
% { $n=50-$enc.GetByteCount($_)+$_.length; "{0}{1,$n}" -f $_.length , $_ }
って感じで。
>>935 ああ勘違いさせてごめん
Encodingクラス使って対処かー
String.Formatでも同じ挙動だし、さすがに気づいてないわけ無いだろうから仕様か
誰か.NETコンソールかWinFormsで単純なPowerShellのコンソール作った人おらんかいのう
WinFormsでつくったよ
942 :
名無し~3.EXE :2008/07/25(金) 16:49:36 ID:qCv1ufn1
しかしPSは微塵も流行らんな
PowerShell使うようになって心なしかforとかifみたいな制御構文使う機会が少なくなった気がする forはパイプで渡せばコマンドレットが勝手にまとめて処理してくれるのと、 .. % あたりで事足りるからかな そうするとifは?とgroup、配列に対する各比較演算子のおかげか
>>941 大抵のメジャーな洋書は検索すれば rapidshare に上げられているけど、
時間を金で買うつもりで、結局訳書を買ってしまう。
C#で一通り.net Frameworksを触ってると どれもこれも見たことあるクラスばかりで感動する Get-Process = [System.Diagnostics.Process]::GetProcesses() Get-Date = [System.DateTime]::Now だけど Get-Location =/= [System.IO.Directory]::GetCurrentDirectory() なんだな。
>>942 結局ライブラリの充実さがものを言うから、C#で出来る事はPowerShellでも出来るんだよなぁ
出来ないことと言えば、CLIにコンパイルするのと、LINQやラムダ式あたり?
逆にPowerShellの利点と言えば、すぐに実行できるのとScriptPropertyぐらいだな
ScriptPropertyは拡張メソッドで同じようなことが出来るから代行できる。
だから、C#で出来る事をわざわざPowerShellでやる必要は無いから、流行ないんだろうな。知名度も高く無いだろうし。
インタラクティブに1行1行実行する必要性がそもそもねぇ…
パイプラインで渡してコマンドレットをつなげても、結局それはC#とかでこつこつ書いてるわけで
それなら、その言語で全部面倒見るなりライブラリを用意するほうが手っ取り早かったり
それに何より、PowerShell用に用意しても、はやってなさそうだから需要がなさそう。
OSに標準搭載されてくれないと始まらない 今使われているほぼ全てのWindowsで動くwshにはかなわない
Scripting.FileSystemObjectを使うだけでもれなくウイルス扱いしてくれるノートン先生を どうにかしてください
サードパーティの盛り上がりは既にwsh超えてると思うが・・・まあ日本はしょうがない
速度も遅すぎる。しかも、変なところで遅い。 Powershell 1.0なら dir -recurse | ?{$_.Mode -like 'd*'} よりも、 function global:dird{ $aList = @() $aList += dir -literal . | ?{$_.Mode -like 'd*'} $i = 0 while($aList[$i]){ $aList += $aList[$i].GetDirectories() $i++ } return $aList } のほうがなぜだが10倍くらい速い。 コマンドレットとパイプ処理が、ユーザー定義関数に惨敗していちゃいけない。
PSほにゃららプロパティを無視していいなら $list=@(); (gi .).GetDirectories()|%{$list+=$_;$_.GetDirectories()}|%{$list+=$_;$list+=$_.GetDirectories()}| ... |%{$list+=$_;$_.GetDirectories()}|%{$list+=$_;$_.GetDirectories()} が多分最速 面倒な人は (gi .).GetDirectories("*","AllDirectories")
コピペミスしてるけどどうでもいいよね
PSは副ストリームとの相性が悪そうだな PS > dir > hoge:b ドライブが見つかりません。名前 'hoge' のドライブが存在しません。 発生場所 行:1 文字:6 + dir > <<<< hoge:b 副ストリームもPS以上にはやってないからどうでもいいのかな?
>>947 サーバー系のOSかアプリかではもう標準装備が始まってるんだろ?
Ver2が次のSPとかに入ることを期待しよう。
あるいは、意外と早く出そうなWindows7に。
難癖つけたいだけだろ Vistaに標準搭載しなかったのは大きな失敗だけど、搭載されたところでXP以前には関係ない
うちの会社まだ2000なんだけど。 Vistaの次から標準搭載されたとしてあと何年待たされるんだか。 ソフトは勝手に入れるの禁止だし、OSに最初から付いてくるってのは大きな意味がある。
>今使われているほぼ全てのWindowsで動くwshにはかなわない なんて言ってる奴の要望に応えられることはない
>>948 Scripting.FileSystemObjectのレジストリを直せば?
NetCmdlets 2.0のベータ版が新しくなったらしいから入れてみたら PowerShellServerはバージョンは古いから動きません、新しいのにアップデートしてくださいとか言われる 何故だ・・・
>>959 PowerShellが"新しくて"エラー出てるんじゃない?
PS CTP ベータ2にPowerGUIいれたら「新しいPS入れろ」ってしかられた
>>960 2.0 CTP2を入れてたことはあったけど、今は1.0
RTMのTrial出るまで待つかぁ
Windows PowerShell V2 (Community Technology Preview - Features Subject to Change) Copyright (C) 2008 Microsoft Corporation. All rights reserved. PS C:\PowerShell> function s {s} PS C:\PowerShell> s The script failed due to call depth overflow. The call depth reached 1001 and the maximum is 1000. 関数呼び出し制限が100から1000になってる
もうリリースされて2年近く経つのに オブジェクト指向なコマンド環境 ってするタイトルにするだけであそこまで注目度あがるもんなんだなぁ… @ITの 次世代Windowsシェル 追い越すんじゃなかろか
バッチファイルやWSHの頃は「〜やるにはどうすればいいですか」に対して 「〜をやってくれる外部プログラム/COMを探すか作るかすればいいよ」って返答が精々だったのに いざ単体でなんでもできるようになるとC#でやった方がってなるのもなんか贅沢な悩みだな
>963 その100だの1000だの必然性の無いマジックナンバーはなんなんだw
968 :
名無し~3.EXE :2008/08/17(日) 08:48:33 ID:BS0uPrAQ
>>967 C# なんかだと、メソッドの呼び出し元をスタックにプッシュする。
そのスタックを有限にして、スタックオーバーフローエラーを発生させることで
無限再帰を防止している。
スタックのサイズに必然性はなく、「通常の使用ではこれくらいあれば十分」
と思われるサイズを設定している。
だから別に珍しいことではない。
単に100に制限していたのが少なかったということで1000に増やしただけ。
洋書だけど PowerShell in Action の続編が出るっぽい(今回の著者はMVP)
http://www.manning.com/siddaway/ 各種コンポーネントの活用法とかより実践的な内容になるのかな、試し読みPDFも公開されてる
さらっとP25で紹介してるGet-PSDriveの出力結果にあるFeedStoreってプロバイダ名のドライブはなんなんだろ
ああ、PSCXにそんなのがあったのか
見てないけど IE7に登録したRSSフィードとか?
そそ、まさしく
>>956 WindowsUpdateで強制インストールでもいいのにね・・・
IE7みたいに・・・
>>973 クライアントOSなら良いけど、サーバOSだと困ると思う
何のためにコンポーネント別にしてインストールできるようにしてあるのか分からない
CTP2のgpowershell.exeの入力コンソールはShift+Enterで改行できることに気付いた
Select-String (type pattern.txt) source.txt こんな感じで使いまわしてたスクリプト(の一部)があったんだけど 突然-Patternの値が空っぽだってエラーでて処理できなくなった 何度確認してもpattern.txtはちゃんと存在するし中身もある、訳がわからず数十分悩む 原因は改行だけの空行が入ってたことだったとさ
エディタの設定に使いたいんですがPowerShellの予約語一覧ってどこかにないですか。 検索一発で見つかるかと思ったらなかなか見当たらない・・・
>>978 うろ覚えだけど、
help about_reserved_words
で見れるはず
落ちるって
983 :
980 :2008/09/10(水) 20:49:13 ID:0pCgUL/8
ぽしゅ
次スレは聞くだけ聞いて放置する子がもうちょっと少なくなりますように
埋め
埋め
埋め
埋め
梅
埋め
993 :
名無し~3.EXE :2008/09/14(日) 09:34:43 ID:KGqaoXyN
ぃゃぁ
994 :
名無し~3.EXE :2008/09/14(日) 09:40:46 ID:KGqaoXyN
てs
ume
996 :
名無し~3.EXE :2008/09/14(日) 09:46:10 ID:KGqaoXyN
てs
埋め
梅
うmえ
1000ならお前らに彼女ができる
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。