1 :
名無し~3.EXE :
2008/09/10(水) 20:43:18 ID:0pCgUL/8
ぽしゅ
win板って即死判定あったっけ
保守
PowerShell の次世代版βとかについて語るスレかと思った。 次のバージョンの開発って進んでるのかな
CTP2が出た五月の時点で後一年±4半期くらいって言ってた 7にさえ間に合えばいいんだから今から後1年位掛けてくれてもいいけど
SCVMM 2008はESXに対応するらしいけど、同じ要領でSQLPSも他のRDBMSに対応したりしないかしらん
10 :
名無し~3.EXE :2008/09/15(月) 00:12:33 ID:ou2pHTgt
あげ
1年以上前にmixiで知り合った大阪の女性と(俺は東京)新宿で遊ぶ事になりました。 会う前から仲は良く、お互いに電話したり顔写真送りあったりしてました。 彼女は初めての新宿だったので色々と案内したり、西口の野村ビルにある洒落たバー で飲んだり、カラオケ行ったりしてさ。楽しかった。このまま時間が止まれば良いって思ったくらい。 でも、時間が10時過ぎた時に気がついたんです。彼女が帰れない事に。 やっぱり会ったばっかでラブホは気が引けるので漫画喫茶に行こうって話しになったんです。 マンボウに行ったんですが満席で、テンパってた俺に彼女は『シャワー浴びたいんだよね』と言い出したものだから期待してしまい、そのままの勢いでラブホに直行したんです。 コンビにで酒を買いラブホに入りました。このままヤっちゃうのだろうか?もう俺の脳内はHな事しか頭になかったです。 2,3時間ほど話したあと、彼女が『シャワー浴びるから、見ないでね恥ずかしいし』と言ったので「お、おう・・」と緊張ぎみに答えました。彼女がバスローブで出てきたので、俺は確実にHモードになってしまいました。 俺もシャワーを浴び、バスローブに着替え出ると、彼女はベッドで横になってました。 『眠いから電気消して?』「お、おう・・・」 10分後 『ねぇ、こっち来て?一緒に寝よう?』 「え、マジでいってんの?」『うん』 隣に寝て心臓がバクバクな俺、でもヤっちゃダメだと思いそっぽを向く俺 。官能と葛藤中の俺に 『ねぇ?私H好きなの。しよ?』「え!?う、うん・・」薄暗い部屋でバスローブを脱がし合いキス、愛撫をし、お互いが絶好?に達していた時 『入れていい?』と彼女。「うん・・・え???ん?」 『入れていい?』 「え?ん???」 『私チンコ付いてるの』 「・・・・・・はい??」以下は省略させて頂きますが、新手の詐欺に遭いました(ry)
最新のPowerGUIインスコしたらエディタの方にプロンプト付のコンソールウインドウが付いてた マウスとショートカットキーでコピペできるから本家より便利、Win2kでも動作確認 PowerGUI始まったな
しかし半端ない過疎り方だな。 cmdと比べてはるかに複雑で.NETの知識も必要だから プログラム板とかじゃないと人来ないんじゃないかw
間違いなくcmdの方が難しい
まずは一般に普及しているOSに標準搭載されてから。話はそれからだ。
その前にWindows2000をサポートしろと。
PowerShell&win鯖&講師の経験があって平日バイトOKな人っているんだろか
そこで紹介されてるVisioのツールは本社でも翻訳作業が進んでるみたいなこと7月にMVPが言ってたけど それから2ヶ月ほど梨のつぶて
Windows7に載る頃にはバージョン3になってそこからが本番じゃね?
V2が完成するのが来年なんだからそれはない
最近だとVMwareの方が熱心だな、PowerShellの広報は。
これcmdのプロンプトから通常のスクリプト的に呼び出すことって無理なの? pathextに.ps1登録して foo.ps1を >foo って呼び出すようなかんじで
>>31 関連付けがメモ帳になってるから、それをPowerShellにしてやればいい
>>35 そういう人には PowerShell in Action かもしくはプログラマブルPowerShell を勧めるな、俺なら
>>33 例によって例のごとく2000でも動作確認
>>36 本屋で中身の確認は必須なんだろうけどできないこともあって泣ける
あと、本の買い方にもあまり自信が無かったりする(後で後悔したり
だから助かります。ほんとにレスありがとう
>>31 powershell .\foo.ps1
とかやればいいと思うが。
>>36 プログラム関連の書籍はこんな感じで大別出来ると思いますが
入門書
リファレンス、辞典逆引き
仕様書
サンプル集
PowerShell in Action は仕様書、プログラマブルPowerShell は入門書になるのかな
まずはこの辺を揃えるのが良いでしょうか?
>>36 さんのお勧めと、気になったものをピックアップしてみました
入門書 :プログラマブルPowerShell
リファレンス:Windows PowerShell ポケットリファレンス
仕様書 :PowerShell in Action
サンプル集 :Windows PowerShellクックブック
コンピュータ全般の知識はそこそこある。自力でトラブルシュートはできる。
DOSバッチが少々書ける程度で他プログラミングの経験は無い。
バッチは出来ないことが多いのでPowerShellを覚えようと思った。
用途は日常のPC操作や処理の自動化などの趣味の範囲。
長い目で見て仕事で使える腕前になれれば嬉しいです。
fortuneみたいに一日一テクランダムに授けてくれるサイトが欲しい。 あんまり端からガチガチに勉強するようなもんでもないんだし。 とin actionを買っといて愚痴ってみる。
44 :
名無し~3.EXE :2008/10/04(土) 08:15:09 ID:9C7RK4Qe
>>40 >バッチは出来ないことが多いのでPowerShellを覚えようと思った
WSH覚えてもいいんじゃないの?
wsh、vbsはシェルスクリプトじゃないからな。 どうもあの小汚い文法には馴染めなかった。PSに感じる違和感も半端ないが。
cmdから他に移行すればどれにでも違和感覚えるのは間違いない
>>40 見てて思ったけどcmdを使ってた人の為に書かれたPowerShellの本てないな
cmdでこうだった部分がこうなってるよって言うのを要所要所で解説してるはいるけど
某11の人、書いたらどうよ? 「コマンドプロンプトユーザーの為のPowerShell入門」
>>48 Perl、Python、Rubyって
CMDやシェルと同じこと(似たようなこと?)ができると思っていいの?
シェルスクリプトとスクリプトに厳密な区別はないよ。 雑に言えば外部コマンドを内部コマンドと区別なく'', ""なんかで囲まずに呼び出せるかどうかが違うだけ。 どっちも不慣れならまず >Perl、Python、Ruby を覚えた方がカバーできる領域は広い。
しかしそれがめんどくさい人の為にシェルがあるんだと思うが。
マシンがしょぼいせいかどうもPowerShellは 小気味よく動く書き捨てシェルスクリプトって感じがしないんだよな。 今週マシン新調する予定だから、それでcmd並にお手軽に使えるようになるのかね。 もっさり起動さえ気になってなければPS一本でも十分なのかもしれないな。
だから真っ先に
>>2 で起動の高速化をテンプレに加えといたんだぜ?
バッチがちょびっとできるくらいで
shell書いたことないインフラ屋に適したPowerShellの入門書ないですかね
ちなみに
>>40 の↓は難しそうでした・・・
>>入門書 :プログラマブルPowerShell
MSのくせにPDFなんて糞フォーマット使うなよ。 HTMLでオケ。
XPSを使わなかったことを褒めてやれよ
>>55 PowerShellの本自体がまだそんなに出てない。
他に入門になりそうな本っていうと
Windows PowerShell宣言!
Windows PowerShell ポケットリファレンス
PowerShell宣言!もどちらかというとレシピ集的な本だが。「プログラマブル〜」ほどプログラマ向けには振ってないと思う。
ポケットリファレンスの方は読んだことないが名前からしてリファレンスだよな…。
Webの入門記事みたいなのはそれなりにあるから、そういうのもあさってみるといいんじゃないかね。
>>50 >シェルスクリプトとスクリプトに厳密な区別はないよ。
いや、そんなことはない。
シェルは、外部コマンドを利用するのが前提。
スクリプトは、基本的に他に依存せずに処理できる。
じゃあPowerShellはシェルスクリプトじゃないね。
>>55 インフラ屋なのに、Perlとかも知らないの?
それはともかく、PowerShellってドトネトのオブジェクトや
ライブラリとかの知識がこっそり前提になってたり
するんで、すっぴんからはちょとしんどいんじゃね。
まー、がんばれや。
63 :
60 :2008/10/07(火) 19:04:22 ID:xVh3+xF4
>>61 あー。
いやでも、外部コマンドのかわりに、ドトネトに依存
しているという意味で、一種のシェルだとオモ。
スクリプトエンジンなのに、いきなりスクリプト実行禁止に設定してあってびっくらする マイクロソフトらしからぬ用心深さ
VBScriptで好き放題された経験があるからなあ
PowerShellを使えばEnglishの言語仕様や標準ライブラリを覚える苦痛から解放されますか?
日本語はずれまくりんぐ
シェルは外部コマンドの利用するものなんて定義はじめて聞いた シェルってOSの殻(UI)っていみだから、対話利用を前提に作られたもののことでしょ sh系はシェルとしてもともと作られていたものからスクリプト機能が付け加えられたから シェルスクリプトで、perlやrubyは対話利用も出来るけど基本はスクリプト言語 PowerShellも対話利用がベースだから普通にシェルじゃん
>>68 対話利用前提って、バッチ処理じゃなきゃふつうはそうじゃね。w
PSはMSにしては結構な野心作なんだから 古い定義による線引きなんて意味ないよ。
>>70 MSの野心作か。
なんか縁起が悪そうだな。w
>>49 cmdよりずっと多くのことができる。ただし、速度の面で難があったりもする。
ガーリックナンおいしいよね
>>74 cmdとPerlとかを比べる文脈で、速度の話に
どんな意味が。
PerlはもちろんRubyだって、cmdのかわりに
使うぶんには遅くて困ることなんかないだろ。
DLR統合してくれたら面白いのになぁ。 でも今更無理か。
Dottiyo? Left? Right?
>>78 ぱっと出てこないんだけど、何か思いつくような利点あるの?
>>82 テキストがUTF-8ではないのか、あるいは、Powershellが壊れているんだろう。
>>82 PowerShellって内部文字列はユニコードだから、画面に出すときは自動でShiftJISに変更してるんじゃ。
まぁ -encoding UTF8 で表示すればすむ話だと思うけど。
>>83-84 もう一度やってみたら出来たー、り、出来なかったり
テキストファイルじゃなくて出力がUTF8なネイティブコマンドの場合どうなるのか知りたかった
$OutputEncodingとか[Console]::OutputEncodingを弄ると良くないのかな
もうデフォルトがなんだったのかも分からん
86 :
名無し~3.EXE :2008/10/23(木) 09:48:32 ID:a9J6XFjC
UTF8で書かれたファイルを表示したいだけなら、type -encoding utf8 *.txt でできる。 この場合、UTF8で書かれたファイルの内容が一度UTF16に変換され、さらにシフトJISに変換されて表示される。 最終的にシフトJISになるので、その範囲外の文字は「?」になってしまう。 シフトJISをからめたくない場合は、chcp 65001を実行した後、 その上からさらにPowerShellを起動すれば良い。 > chcp 65001 > powershell > type *.txt 上記のようにすれば、UTF8で書かれたファイルをそのまま表示できる。 これならば、シフトJIS範囲外の文字も表示できるし、 UTF8を出力するコマンドも扱える。
PowerShellクックブック買ってきた。相変わらず分厚いな。 最初から読めばある程度入門的にも読めるかも? コマンドラインくらいの知識は必須だが。
Get-ContentはBOM付きテキストは自動でエンコード判別してくれるんだよな 逆にAdd/Set-Contentは必ずBOM付けちゃうけど、できれば選択制にして欲しい
PowerShellのPDCセッション最終日か、金曜までCTP3のスライドお預けだな
> The reason why I'm counting Troubleshooting is because it is all PowerShell based!
> Now, how about giving us an easy way of putting it on all our existing XP/Vista workstations without SMS. We understand the need but have nothing to announce. Probably won't for a few quaters. どういうこっちゃ
いやエディタコントロールがVSのものになるってだけか・・・
スマソorz
105 :
名無し~3.EXE :2008/11/04(火) 22:05:10 ID:ItkSYboJ
バルーンでテキスト出すのってどうやるの?
次のCTP/Betaが出てから更に1年かかるらしい
PowerShell v2 Release Schedule
ttp://dmitrysotnikov.wordpress.com/2008/11/06/powershell-v2-release-schedule/ Here at TechEd EMEA Jeffrey Snover has just announced detailed release schedule for PowerShell v2 (currently available as CTP 2):
December 2008 - CTP 3 (Community Technology Preview) or Beta 1 if it meets the internal criteria and all names/features are finalized.
RTM - end of 2009/early 2010 as part of Windows 7 and Windows Server 2008 R2.
RTM for XP, 2003, Vista, and 2008 - as a downloadable package (with new WinRM bundled in there) a few months after that (that is H1 2010).
さすがJeffrey!俺達におれたちにできない事を平然とやってのけるッ
そこにシビれる!あこがれるゥ!
ということは、Windows7に標準搭載はしないの?
>>108 これをどう読んだらそういう結論になるの?
>RTM - end of 2009/early 2010 as part of Windows 7 and Windows Server 2008 R2.
英語読めない
上でPerl Ruby Phthon覚えたほうが適用範囲が広いとか言ってる人いるけど、 環境がWinっていうことではさすがに、PowerShellの方がよっぽど便利だと思うよ。 いいわーこれ。これで、Win上の疑似的なUnix環境(cygwin)からおさらばできる。 と思ってたら。moreライクなページャは我慢ならんな。 "lv -Os"をAliasしようとするとスイッチNGって・・・orz lvs ってfunction作りました。結局、Cygwinのお世話に・・・ 思うように動かなくて、パイプで渡されるオブジェクト調べるはめになったり .netに精通してない俺にはなれないことも多いけど、 コマンドライン環境として、これなら十分満足 SS2からプログラム環境としてBSDでやってきたけど、 winをメインにやっていこうって決心がようやくできました。
そんな君の為に
>>2 のテンプレにあるコマンド対応表を見るとPSCXにlessコマンドがあるんだなというのが分かるようになっているわけだ
教えてくれてありがと ホホー、extension コミュニティなんてあるんだ。 ありがたくダウソさせてもらった けど、ここにあるless.exe使うんなら、 Cygwinにあるlv.exeやless.exe使うのと変わらんと思うけど? PoerShellだけでどうやってんのかすっごく興味あったけど、 他の言語で.exe作るならまぁできるわね。俺はAlias lvs lv -Osを以下でごまかした。 $OutputEncoding = [Console]::OutputEncoding function global:lvs(){ if( $args -ne ""){ foreach($i in $args){ lv -Os $i } else { $lines = @($Input); $lines | lv -Os } } PS: extensionインストールした後で、 PATH見ると最後にextensionディレクトリをアペンドしてるだけで明示的に指定しない限り その前にセットしたディレクトリ中のコマンドが影響受けるんじゃないとわかってホットした。 あと、プロンプトは元に戻した
Exactly(その通りでございます).
引数がPathのコマンド import-csvとかって 相対パスが使えないのな。.\hoge.csvとかしてもダメ。 そこでpwdと繋げたろ、とか考えたんだが ふと気付けば`pwd`みたいなコマンド展開ってないんだよな? ないんだよな? 実はあるって言ってくれー!
"$(pwd)\hoge.csv" (pwd).Path + "\hoge.csv"
>>115 Import-Csvは相対パス使えるでしょ?
.\hoge.csvも..\hoge.csvも動いたよ。
cd C:\Windows $x=pwd $x Path ---- C:\WINDOWS
まだ1月しか触ってないけどPerl+bashでできることでPowerShellにできないことってないんじゃない? Tcl/Tkみたいなこともできるし。そんな表面的なことよりもっと奥深い印象 Rubyのようにcomplexは扱えないけど 逆にシェルスクリプトになんでcomplex実装したのかのほうが疑問?
$$や$^を使いこなせる人はそういないだろうけど $PWDくらいは使おうぜ
>>119 マルチスレッドとファイルマッピングオブジェクトが使えればなぁ、と常々思う。
123 :
115 :2008/11/10(月) 06:42:40 ID:EXcprUZN
>116- レスども。しかしどれやってもうまく行かないのは何でだろう。 こんなかんじ。 PS C:\home\orz\csv> Import-Csv (pwd).Path+"code1.csv" Import-Csv : パラメータ名 '+code1.csv' に一致するパラメータが見つかりません。 発生場所 行:1 文字:11 + Import-Csv <<<< (pwd).Path+"code1.csv" ちなみにMSSQL2008のExpress Edition入れた時ついてきたPowe Shellで バージョンは確かめられない(-vしても出ねーし「プログラムの追加と…」に入ってねーし) けど、インスコされたフォルダ名にv1.0というのが入ってた。環境はXP、Professional なんか変なのかな?
>>123 (pwd)じゃなくて
$(pwd)だぞ。
125 :
124 :2008/11/10(月) 11:07:48 ID:I23Naipb
間違い。$の有無じゃなかった。 Import-Csv ((pwd).Path+"\code1.csv") もしくは Import-Csv "$((pwd).Path)\code.csv" だな。 直接書いたときと引数のときで解析の仕方が変わるからこの辺ちょっとややこしい。 > Import-Csv (pwd).Path+"code1.csv" でだめなのは、「(pwd).Path+"code1.csv"」がそのまま一つの文字列と認識されてしまうため。 詳しくは help about_Parsing を参照。
>>121 多分$env:aとか$array[0].aとかで補完効くように更新
まあちゃんと?ver3.0も作っていく予定みたいで期待
>>125 こう書くと余計なことを考えなくても済むと思う。
Import-Csv($pwd.ToString()+"\code1.csv")
俺は新機能なんかどうでもいいから
早く Excel2007 を 2003 同様に使えるようにして欲しい。
V2だといけるんだよね?
1.0に逆移植して、さっさと使えるようにして欲しい。
ExcelPackage も良さそうだけど、俺が欲しいのとは微妙にずれてる気がするなり。
http://www.codeplex.com/ExcelPackage
Import-Csv($pwd.path+"\code1.csv") やっぱこっちの方が楽だな。 打つ出し脳。
この例だと、 Get-Locationのaliasとしてのpwdと、特殊変数のPWDがあるせいでさらにややこしくなってるな。 $pwdって書くと変数の方で、(pwd)って書くとGet-Locationの返り値。 まぁ結果はいっしょなんだけど。
返り値って書いちゃうとおかしいね。出力結果ですな。
まあぶっちゃけ、 Import-Csv $pwd\code1.csv でいいわけだけども
変数を書く位置によって解釈が変わるのか。 ちょっとめんどいな。 つーかPathInfo型はデフォルトでString型に変換されるのかね。 その辺がよくわからん。
コマンドモードでその引数が $ @ ' " ( 以外の文字で始まる時と $ @ ' " ( で始まる引数に \ / が連続している場合は式モードにおいてその両端を""で囲ったのと同義、っていうだけ ""で囲った場合に任意の型がどのように型変換されるかは Trace-Command -Expression {"$pwd"} -Option all -Name * -FilePath traace.txt とかやって出力結果見てみればわかる
出力結果が凄すぎてわかりません>< "$pwd"がStringになるってだけならまあわかる。 Import-Csv($pwd\code1.csv) これがうまくいかない理由はなんだろう?
コマンドモードでも引数が $ @ ' " ( で始まる場合はその引数をそのまま式として評価する(上記の通り例外有) ($pwd\code1.csv) という式は先頭の $ の直後に { や ( がないので変数名と解釈されるけれど $pwd\code1.csv なんて変数は存在し得ない(変数名に\は使えない)のでエラーになる
Import-Csv $pwd\code1.csv でもこれだといけるね。 例外になるかならないかの理由がわかんない。 質問ばっかでごめん。 もう寝る。
コマンドが先頭にある場合の解釈モードのことをコマンドモード コマンドモードでは内部的には各引数が自動的に""で括られる Import-Csv code1.csv → Import-Csv "code1.csv" 例外的に引数の頭文字が $ @ ' " ( である場合はその引数を""で括らない Import-Csv $pwd → そのまま しかしさらにその例外として \ / が付いている場合はやはり自動的に""で括られる Import-Csv $pwd\code1.csv → Import-Csv "$pwd\code1.csv"
定義を追おうとすればややこしくはなるね コマンドを実行する時はファイル名やパスを渡すことが多いから、それに配慮した感じ Import-Csv "code1.csv" みたいに常に""で括るより Import-Csv code1.csv の方が自然 Import-Csv $pwd を Import-Csv "$pwd" のように解釈されると意図した型を渡せない Import-Csv "$env:windir\code1.csv" が Import-Csv $env:windir\code1.csv と書ければ楽
>>139 の説明の一部がちょっとだけ違う気がする。
$pwd\code1.csv でも $pwd"\code1.csv" でも、どっちもエラーは
「式またはステートメントのトークン '\code1.csv' を使用できません。」
だから、$pwdという変数はちゃんと解釈されていると思う。
式の最初が変数のとき、その直後に文字列なんか書いても文法に合わないっていうことじゃない?
$pwd-eq"\code1.csv" だとエラーが出ずにFalseだのTrueだの出るし。
Import-Csv($pwd-eq"\code1.csv")
ってやったら、Falseって名前のファイルを開こうとしてワロタw
>>142 まだ日本語記事少ないし、基礎から入門ってのもいいんじゃねと思って見てみたが
…これはひどいwww
>>142 いまどきはこのくらいやった方がいいのかも。
次回はコマンドの打ち方とヘルプの使い方かな。
149 :
名無し~3.EXE :2008/11/13(木) 15:10:04 ID:5Z1iYNbG
>>146 ゼロからはじめて、とりあえず0.01ぐらいまで行った、って感じ?
Get-Helpとわざと入力間違いする以外の方法で-Encodingや-ExecutionPolicyの定数を習得する方法ってないもんかね
取得の間違い
152 :
名無し~3.EXE :2008/11/14(金) 01:40:27 ID:A+R7elkP
質問があるのですが *とかのワイルドじゃなくて~みたいなのを使ってProgram Filesのフォルダにアクセスするのってどういう記述でしたっけ? C:\Program Files\hoge.exeにアクセスしたいのですが スペースがある為C:\Programと認識されてしまいます。 *でワイルドにするとソフトが立ち上がるのが遅くなりますので~でやりたいです。
C:\Program Filesの代わりにC:\Progra~1ってやつか それより 'C:\Program Files\hoge\hogehoge.exe' でいいんじゃ? プログラムを起動するなら&で &'C:\Program Files\hoge\hogehoge.exe'
155 :
名無し~3.EXE :2008/11/14(金) 11:10:48 ID:A+R7elkP
>>150 (Get-ExecutionPolicy).gettype() とか Get-ExecutionPolicy | get-member
とかやって試してたら、 (Get-ExecutionPolicy).value__ で数字が取れたし
[microsoft.powershell.executionpolicy]0 とかでオブジェクトもとれたけど。
[microsoft.powershell.executionpolicy] | get-member -static でも
プロパティに出てくるし
[microsoft.powershell.executionpolicy]::GetValues("microsoft.powershell.executionpolicy")
でも一覧が出た。GetValues を GetNames にしたら、微妙に違うな。
159 :
名無し~3.EXE :2008/11/15(土) 11:26:25 ID:jEjWBC/Q
演算子 < が使えないのは不便じゃないですか? > でファイルは出力できても、< ができないのでデータをソフトに戻せません。 みなさんは < を使うときは仕方なく昔のコマンドプロンプト使ってるんですか?
>>159 Get-Content とかでいいのでは
in actionで<は次バージョンでサポートするのしないのといってたような
くっ
試さずに言ってるけど、
>>126 利用して標準入力にデータ流し込めばできない?
標準入力しか受け付けないコマンドを久しく使っていない俺です
あれ、標準入力しか受け付けないプログラムって command (type data.txt) と command < data.txt で同じなんだっけ・・・ コマンド実行して入力待ちになったら別スレッドでデータ読み込んでSendkey、みたいな感じを一瞬想像した
ふつうパイプを使うだろ
パイプ入力を受け付けない類のネイティブコマンドで<使えないからどうしようって話なんかなと
cmd.exeの引数に、文字列で渡してやれば行けそうな気がする。
パイプ入力も、標準入出力も同じモノだと思ってたが、これって間違いなの? hoge.exe < hoge.txt ができるなら type hoge.txt | hoge.exe だって出来ると思ってた。(バイナリファイルは壊れますが)
基本的なことで質問します。key=商品名, value=価格 を要素に持つ連想配列を用意します。 トータル価格を算出したいのです $global:PCshopping = @{ "CPU" = "3.5"; "Memory" = "2"; "MB" = "4"; "GC" = "3"; "HDD" = "2"; "Case" = "3"; "PS" = "2"; }; $nameorder = ($PCshopping.GetEnumerator() | sort name); [double] $Paying = 0.0; foreach ( $x in $nameorder){ $Paying += $x.value } "Total Price = $Paying"; $Paying = 0.0; foreach ( $x in $PCshopping.values){ $Paying += $x; } "Total Price = $Paying";
171 :
つづき :2008/11/16(日) 15:32:34 ID:+MSN7HFx
問題なのはトータル価格算出の2つのforeachなのですが 並び替え後の $nameorderと並び替え前のPCShoppingは上のリストのように書かないと、 正しく動作しません。つまり、 foreach($x in $nameorder.values){ $Paying += $x } とか foreach($x in $PCshopping ){ $Paying += $x.value } では動作しないんですが、これはどういう風に考えればいいのか理解出来ずにいます。 どなたかご教示くださいmOm お願いします
>>169 出力は3タイプ
write-host 標準出力
write-output パイプ出力
write-debug デバッグ出力
尚、他言語出力がどれに相当するかはいまいちよくわからない。
標準出力とデバッグ出力の区別はわかるけど、
標準出力とパイプ出力が違うってので、いろいろ混乱してる。
思うようなパイプ出力をハンドリングできてないというか・・・撃
あれこれやってみて、うまくいったり、あきらめたり。。。。
173 :
名無し~3.EXE :2008/11/16(日) 17:11:32 ID:HYoFoab0
>>171 $PCshoppingはHashTable
$nameorderはDictionaryEntryの配列
クラスが違うから当然メソッドも違う。
何も不思議なことはないと思うが?
174 :
名無し~3.EXE :2008/11/16(日) 17:14:00 ID:HYoFoab0
>>172 Write-Hostは標準出力でなくコンソール出力。
175 :
名無し~3.EXE :2008/11/16(日) 17:19:56 ID:HYoFoab0
言葉足りたかな? 標準出力はファイルやパイプへリダイレクトできるもの。 コンソール出力は画面表示専用。 だから、Write-Hostには色など指定できるオプションがついてる。 PowerShellのパイプには基本的にオブジェクトが流れるが、 標準入力としてバイトデータ(通常はテキストとみなす)を 受け取る従来のコマンドが出力に 指定された時には、オブジェクトをToString()して さらにShiftJISにエンコードしたデータを渡す仕組みになっている。
Windows 7 にはPowerShell v2が同封されてる模様 PS流行るかもしれない
>>173 >$nameorderはDictionaryEntryの配列
この部分がよくわからない。
というかなんでそういう言語仕様なのか設計思想が理解出来ない。
ハッシュテーブルをソートした結果に対してなんで別クラスを用意するのか?って部分
PowerShellはオブジェクトの構造が、表面から見える部分と、内部では見えないオブジェクトが
パイプ処理されてることで、なかなか思い通りに動かなくて困ってる。ってのは俺だけかな?
>>173 >クラスが違うから当然メソッドも違う。
メソッドが違うって言っても、上の例で、foreachの対象を方やクラスそのもの、方やメンバを
対象にしないと動かないってことに言語仕様としての一貫性に疑問持たない?
実際、君は、同じことやろうとして、HashTableとDictionaryEntry配列のループに関して、
躊躇せず、正しく使い分けられるわけ?
そもそも
連想配列 == HashTable == Dictionary ってのは機能として同じものでしょ。
言語として別な型として扱ったとしても。
上の例に関してなんか解説してくれてるところがあれば紹介してくださいな。
なにこの人、うぜーーーー つーか、.NET Frameworkとシェル環境を無理やりすり合わせてるんだから変なとこくらいあるだろうよ DataTableがどっかの時点で勝手にObjectの配列になるとかもそうだし 設計思想が知りたきゃPowerSell in Action嫁
>>179 うざけりゃわざわざレスなんか返さずスルーしとけよ。ネットの基本な。
>DataTableがどっかの時点で勝手にObjectの配列になるとかもそうだし
そのどっかの時点を明示するのは言語仕様として当然必要だって話な。
変換されて困る場合はXXを明示してくれとかな。それがわからなけりゃ使う方としちゃ困るだろ。
PowerSell in Action の原書は持ってるが、上のようなことに言及してたかな?
>>180 >元が列挙可能なコレクションなら、何をソートしても結果は配列になる
なるほど、そう考えるのか。何か指針が欲しかった。
そういうことを解説してる部分を探してみます。
>>171 下のに関してはこう書くと動くよ。
foreach($x in $PCshopping.GetEnumerator() ){
$Paying += $x.Value
}
>>158 GetNamesか、なるほどなー
そういうわけで
Set-ExcusionPolisy -ex <tab>
sc -Encoding B<tab>
[型名].<tab>
[型名].Assembly.a<tab>
ができるようにしといた
>>121
185 :
名無し~3.EXE :2008/11/16(日) 22:56:46 ID:NCgsRNVZ
>>177 はあ?
PowerShellの仕様じゃないだろ。ばかたり。
つーか、ソート結果を保持できる連想配列があるなら教えてくれ。
ソートできないハッシュだからこそO(1)で入出力できるんであって、
ソートしたらO(n)になってパフォーマンス激落ちちゃうだろが。
C#でソートできるか?Perlでできるか?awkでできるか?Javaでできるか?
こんな初歩の初歩からドキュメントしてたらキリがないぞ。
186 :
名無し~3.EXE :2008/11/16(日) 23:12:13 ID:NCgsRNVZ
てか、GetEnumerator()呼び出して 自 分 で Hashtableから配列に変換してんのに、 勝手に変換されたとか切れてるってどんだけ使えねーの?
↑何をおかど違いのところに吠えてんの?バカなの?
>>185 >C#でソートできるか?
SortedListがあるわけだが
SortedListだと2分探索でO(log N)じゃないの?
SortedListも知らずに一知半解の知識を振り回してんだろ。
191 :
名無し~3.EXE :2008/11/17(月) 08:18:14 ID:XdvJmOH9
SortedListが連想配列だと思ってるバカがいるw
192 :
名無し~3.EXE :2008/11/17(月) 09:06:48 ID:t1ZFp79q
SortedList ってハッシュ関係ないよね? なぜいきなり SortedList が出てくるのかわからん。
>>170 確かにforeach書式に統一性がないな
perlだと、ソートは単純配列なので何の違和感もない
%PCshopping = (
'CPU','3.5',
'Memory', '2',
'MB', '4',
'GC', '3',
'HDD', '2',,
'Case', '3',
'PS', '2',
);
%sortedname = sort keys(%PCshopping);
@sortedname2 = sort keys(%PCshopping);
$Sum = 0.;
foreach $val (values(%PCshopping)){
$Sum += $val;
}
print $Sum, "\n";
$Sum = 0.; foreach $val (%sortedname){ $Sum += $PCshopping{$val}; } print $Sum, "\n"; $Sum = 0.; foreach $val (@sortedname2){ $Sum += $PCshopping{$val}; } print $Sum, "\n";
>>171 PowerShellは、
[Hashtable] $H
foreach( $x in $H)
って書くと$xは$Hのそれぞれの要素にアクセスしてくれるんじゃなくて、
$Hそのものにしかアクセスしない。
foreach ( $y in $PCshopping){
}
$y #<---ここで $PCshopping そのものが出力される
$Paying = 0;
foreach($x in $y.values ){ # <--その$yを使って要素に順次アクセス
$Paying += $x;
}
$Paying;
196 :
名無し~3.EXE :2008/11/17(月) 10:35:11 ID:XdvJmOH9
>>193 PowerShell(.NET)でも同じくkeysやvaluesを使った書き方をすればいいだけの話。
なぜややこしくなっているかというと、どっかのバカが
GetEnumerator()なんぞ呼び出して、HashtableをDictionaryEntryに分解してるからだ。
分解したものを配列にして一つの変数に収めてるんだから、そりゃクラス変わるだろって話。
なぜこんな簡単なことがわかんないのか、それが一番わからんw
SortList云々言ってるやつは論外ねw
どっちがどうだったか悩まずに済ませたいだけなら $PCshopping.GetEnumerator() | % { $_.value } | Measure-Object -Sum $nameorder.GetEnumerator() | % { $_.value } | Measure-Object -Sum でいいんじゃない?
>>196 後のぐちゃぐちゃは読んでないが、
>>171 は書式の一貫性を言ってるんだろ。
in 配列は順次アクセスするのにin ハッシュと書くと順次アクセスしないのはおかしな話だ
>>196 >>195 にはperlだと連想配列でも配列でも、順次アクセスする一貫性について具体例を示したんだがね。
201 :
名無し~3.EXE :2008/11/17(月) 10:58:36 ID:XdvJmOH9
>>199 何と一貫してないって?Perlと一貫させる必要は無いよな。
foreachでkeyとvalueを同列に扱って順次アクセスする必要はない。
むしろkeyとvalueをまとめたDictionaryEntryとして順次アクセスする
PowerShellの手法のほうが、統一性もわかりやすさも美しさも便利さも上だ。
202 :
名無し~3.EXE :2008/11/17(月) 11:01:08 ID:XdvJmOH9
>>200 おいおいw
あわてずにもうちょっと考えて書けよw
perlと一貫って?いったいどういう読解力してんだ。もう、ちょっと考えて書けや。話にならんなお前。 実際、foreach文を使うユーザとしてどっちの動作を期待するかってことを考えれば、 XX=配列,ハッシュ関係なく in XXで要素アクセスするのが動作としては妥当だろが。
204 :
名無し~3.EXE :2008/11/17(月) 11:10:44 ID:XdvJmOH9
まず、%sortednameがソートされてない事実に気づいてるか?w print %sortedname; sortかけてるのにsortされてない。どこが一貫性あるのかな? 次に、%sortednameは連想配列として宣言されているが、 その実単なる配列だ。 print $sortedname{'MB'}; どんだけ異常で醜いプログラムか理解できないの? ほんとに?
205 :
名無し~3.EXE :2008/11/17(月) 11:14:09 ID:XdvJmOH9
で、そんな醜いPerlと同じ仕様にする必要はないってこったよ。 PowerShellでは配列ハッシュ関係なくin XXXで要素アクセスできる。 その要素がPerlのようにkeyとvalueをかわるがわる出力するような 醜い仕様でなく、keyとvalueをまとめた構造体DictionaryEntryである。 美しいだろ?
>>201 keyとvalueを同列にアクセスする必要なんて、ないがな
そんなのは扱いにくいだけだろ。
keyとvalueをまとめた、ノードポインタに対してアクセスするのが当然だ。
207 :
名無し~3.EXE :2008/11/17(月) 11:17:03 ID:XdvJmOH9
>>206 俺にアンカーつけんなよ。
Perl厨に言え。
>>205 >PowerShellでは配列ハッシュ関係なくin XXXで要素アクセスできる。
PowerShellでは in XXXで要素に順次アクセスなんかできない。
209 :
名無し~3.EXE :2008/11/17(月) 11:19:14 ID:XdvJmOH9
要素が3つある連想配列がある。 foreachで回すと、PowerShellの場合は3回ループする。 Perlは6回ループする。 どこに一貫性がある?
>>ID:XdvJmOH9 foreach ($x in $HASH) は $x = $HASHとしかならない。順次アクセスなんかできない。 要素アクセスしたければ foreach ($x in $HASH.keys) もしくはforeach ($x in $HASH.values) と書かなきゃダメだってば。 あと、くっだらんレス書いてるのにいちいちあげんなアホ
211 :
名無し~3.EXE :2008/11/17(月) 11:24:01 ID:XdvJmOH9
>>210 ほらできるw
keysとかvaluesとか使えと書いたのが読めないのか?
文盲は書き込むなw
212 :
名無し~3.EXE :2008/11/17(月) 11:25:24 ID:XdvJmOH9
あと、あげられて恥ずかしいなら最初から黙ってることだなw
>>211 ほらできるじゃねーだろ。
foreach($x in $HASH){
$x.key;
$x.valie;
}
で、順次アクセス可能なら、何も問題はない。
ノードにポインタ移動していくんだから。全く違和感はない。
でも、こう書けず↓しか書けないことに何も感じない神経が理解できんな。
foreach($x in $HASH.keys){
}
foreach($x in $HASH.values){
}
あと、
>>206 はお前に書いたレスだから、何もkeyとvalueをごっちゃにアクセスする必要なんて
あるかよ。
214 :
名無し~3.EXE :2008/11/17(月) 11:39:10 ID:XdvJmOH9
>>213 foreach ($x in $HASH.GetEnumerator()){
$x.key;
$x.value;
}
さて、これと同じことがPerlでできるかね?w
何か問題でも?w
215 :
名無し~3.EXE :2008/11/17(月) 11:41:28 ID:XdvJmOH9
>>214 「同じ結果」ならできるか。
じゃあ、こうしちゃおう。
foreach ($x in $HASH.GetEnumerator()) {
$x.key;
$x.value + 100;
}
さて、一貫性のあるPerlでどう書くの?w
216 :
名無し~3.EXE :2008/11/17(月) 11:45:27 ID:XdvJmOH9
そもそも、合計値を出したいだけならソートする必要なんてないんだよね。 $PCshopping.values | Measure-Object -Sum 一行で済むことをグダグダと。
何を言い出すかと思えば each も知らずにお前バカやろ。 while(($key,$value) = each(%HASH)){ $key $value } どーとでも個別に使えや。
218 :
名無し~3.EXE :2008/11/17(月) 12:09:11 ID:XdvJmOH9
>>217 そんな書き方しかできないのを何も疑問に思わないの?w
>>215 >「同じ結果」ならできるか。
>じゃあ、こうしちゃおう。
あわてて気づいたけど、お気の毒。ゲラゲラ
>>218 同じforeachを使いながらGetEnumerator()を噛まさないとループしないことに何の違和感も感じないの?
いっとくが、俺はperl命なんて思ったこともないぜ。
221 :
名無し~3.EXE :2008/11/17(月) 12:21:44 ID:XdvJmOH9
>>220 eachなら良いの?w
気の毒にw
もはや自分が何を言ってるのかわかんないんだろw
222 :
名無し~3.EXE :2008/11/17(月) 12:23:15 ID:XdvJmOH9
埋もれてるからもう一度書いてやるよ。 もっと頭から湯気出しなw まず、%sortednameがソートされてない事実に気づいてるか?w print %sortedname; sortかけてるのにsortされてない。どこが一貫性あるのかな? 次に、%sortednameは連想配列として宣言されているが、 その実単なる配列だ。 print $sortedname{'MB'}; どんだけ異常で醜いプログラムか理解できないの? ほんとに?
sortednameにソート保持を期待してるわけではないよ。
eachも知らない2chの規約違反の不必要なアゲ行為を繰り返す >>ID:XdvJmOH9 よ。
>>193 では、あくまでも連想配列と配列を同じように要素アクセスできることを示してるだけ。
sort 使った結果の出力にsortednameを適当に命名しただけだから。
>>170 のリストにあったソートをそのまま持ってきてるにすぎん。
ソート云々じゃなくて
>>171 は配列とハッシュの順次アクセスについて言ってるだけだろ。
224 :
名無し~3.EXE :2008/11/17(月) 12:32:51 ID:XdvJmOH9
もう一つ例題。 Perlの「一貫性のある(w)」手法で書いてみなw 「一貫性のある(w)」each使ってもいいよ。 foreach ($x in ($hash.GetEnumerator() | sort Name)) {$x.key; $x.value + 100}
225 :
名無し~3.EXE :2008/11/17(月) 12:35:15 ID:XdvJmOH9
>>223 あれれ?
ソート保持を期待してない?
じゃあなんでsortednameなのぉ?w
おっかしーゲラゲラ
メシウマ〜〜
おいおいwwwwww
うわ、苦しい苦しい
俺、笑いすぎて苦しすぎw
お前、言い訳が苦しすぎw
>>221 連想配列を単純配列としてアクセススルにはeachも何もイランだろうが。
ループも何もせず、foreach( $x in $HASH) と $x = $HASHが等価なら、
なにがしかのwarningを出すのが処理としては妥当だし、必要なことだと思うね。
227 :
名無し~3.EXE :2008/11/17(月) 12:36:16 ID:XdvJmOH9
Measure-Object知らないPerl厨よ、「教えてくれてありがとう」は言わないの? 苦しい〜〜www
228 :
名無し~3.EXE :2008/11/17(月) 12:37:16 ID:XdvJmOH9
>>226 えー?
要素がひとつだと警告出すのぉ?
現場知らないやつはこれだからw
>>225 >ソート保持を期待してない?
>じゃあなんでsortednameなのぉ?w
ソート関数の出力だからsortedと適当に命名したと
>>223 に書いたんだが、ガキかお前は。
なにがしかのデータを配列に格納しないと、順次アクセスしてるかどうかわからないだろが。
230 :
名無し~3.EXE :2008/11/17(月) 12:39:38 ID:XdvJmOH9
じゃあさ、じゃあさ、要素ゼロのforeachもやっぱ警告出すのぉ? 要素多すぎる時はぁ? 久々のヒットだな、こいつwww 腹いて〜w
231 :
名無し~3.EXE :2008/11/17(月) 12:40:39 ID:XdvJmOH9
>>229 ソート関数の出力がソートされてないのに何にも疑問持たないのぉ?
うっわ苦し〜w
each 知らず現場って。お前まさかPwerShell使って仕事してるってか。 each 教えてくれた俺に礼はないのか?
C#だとこれで行けるんだけどな。
var PCshopping = new Hashtable
{
{"CPU", "3.5"},
{"Memory", "2"},
{"MB", "4"},
{"GC", "3"},
{"HDD", "2"},
{"Case", "3"},
{"PS", "2"},
};
foreach (DictionaryEntry item in PCshopping)
{
Console.WriteLine(item.Key + ":" + item.Value);
}
foreachで使うのにGetEnumeratorを書かなきゃならんのだとしたら確かにちょっとだるい。
まあGenerics導入前のコレクションなんて今時使わないけど。
むしろObsolete属性付けても良いぐらい。
PowerShell 2.0ではその辺の空気も読んで欲しい。
ttp://blogs.msdn.com/bclteam/archive/2007/06/26/non-generic-collections-to-be-removed-from-silverlight-inbar-gazit.aspx
>>230 waning レベルで指定してもいいがな。warning レベルも知らないって?どんな現場だコイツ
waning 出さなくても、in $HASHは要素メンバにアクセスするのではないことを
言語仕様として明示してるんか?
235 :
名無し~3.EXE :2008/11/17(月) 12:46:47 ID:XdvJmOH9
結局 >>ID:XdvJmOH9 こいつは in $HASHで、順次アクセスしてくれると思い込んでたんだろな。 気づかせてくれて謝意の言葉は?
>>233 まともにコミュニケーションのとれない>>ID:/hcYzH78はほっといて、
forach で in のあと [hashtable]だとループしないってのは規約としてあるの?
foreach文を使用して、PowerShellで列挙可能なすべてのものを反復処理にかけることができます。 通常、これには.NETのIEnumerableインターフェイスの実装も含まれますが、PowerShellに合わせ て少し調整されています。具体的には、IEnumerableを実装するクラスのうち、PowerShellでは列挙 可能と見なされないものがいくつかあります。これには、文字列、ディクショナリ、ハッシュテーブ ルが含まれます。PowerShellではコレクションを自由に分解できるため、文字列が突然文字ストリー ムに変化したり、ハッシュテーブルが一連のキーと値の組みに細分化されたりするのは避けることに しました。特に、ハッシュテーブルの場合は、PowerShell環境において軽量(タイプレス)オブジェ クトとしてよく使用されるため、それらのスカラー性を維持する必要があります。 以上PowerShell インアクション P180より抜粋
たまに盛況かと思えば基地外二人が暴れてるだけかよ。
>>238 うわ。わざわざタイプしてくれたのありがと。
in actionには解説してくれてるのね。
Microsoft.Press - Windows.PowerShell.Scripting.Guide.(2008) で検索かけてみたけど未だ探せてない。
241 :
名無し~3.EXE :2008/11/17(月) 13:13:32 ID:t1ZFp79q
>>237 なんだ。基地外二人かと思ったら一人芝居かよ。迷惑な。
>>215 >foreach ($x in $HASH.GetEnumerator()) {
>$x.key;
>$x.value + 100;
}>
>さて、一貫性のあるPerlでどう書くの?w
foreach ( keys($HASH)) {
$_;
$PCshopping {$_} + 100;
}
で何か?
243 :
名無し~3.EXE :2008/11/17(月) 15:21:40 ID:XdvJmOH9
244 :
名無し~3.EXE :2008/11/17(月) 15:22:50 ID:XdvJmOH9
>>241 失礼なことを言うな。ちゃんと二人いる。
245 :
名無し~3.EXE :2008/11/18(火) 02:07:41 ID:o/YiBCZW
えらくスレが伸びてると思ってきてみれば。
>>205 >PowerShellでは配列ハッシュ関係なくin XXXで要素アクセスできる。
イタタタター!
Perlを批判してPowerShellに入れ込んでる割に、もっとも基本的なことを知らねぇんだな
と思って >>ID:XdvJmOH9をマウスでポイントすれば、
>191 >196 >201 >202 >204 >205 >207 >209 >211 >212 >214
>215 >216 >218 >221 >222 >224 >225 >227 >228 >230 >231 >235 >243 >244
唖然!およそまともな社会人なら仕事してるはずの月曜日の8:00から15:00にこれだけ張り付いてるって?^100
こいつはニート、あるいは暇な糞文系確定だな
オ イ 就 職 難 で 大 変 だ な 糞 学 生
せっかくいなくなったのに蒸し返すな
>>205 >その要素がPerlのようにkeyとvalueをかわるがわる出力するような
>醜い仕様でなく、
こいつの知識レベル酷いな。何も知らないんだな。このレベルのヤツにまともにレスしてもしゃーないんだが、、、
Perlからごっそり書式をぱくった似非PerlことPowerShellをlinuxとBSD上で起動かしてみ。話はそれからだ。
似非PerlといえばPHPだろ
まぁ、同じカテゴリの後発言語は先発言語をなにがしかの参考にしてるから、 後発言語=似非先発言語だけどね。全く違った書式で書かれる方が迷惑だし。 Win限定で土俵が違えば比較にならんわ。
てかPSって言うほどPerlに似てないとは思う sigilがあることぐらいじゃね
なんだこの低レベル同士のバカ騒ぎ
PowerShellは実行ポリシーとかチョーわけわかんないシステムで〜 スクリプト?〜がチョベリお手軽に動かせないしー 従来のバッチファイルの方が便利ってかんじー 従来のバッチファイル @echo off echo Set-Location "%cd%" >temp.ps1 echo Get-ChildItem >> temp.ps1 powershell -command - < temp.ps1 del temp.ps1
>従来のバッチファイルの方が便利ってかんじー どこが?
ふつうパイプを使うだろ @echo off ( echo Set-Location "%cd%" echo Get-ChildItem ) | powershell -command -
すげー未読いっぱいとか思ったら、単なるバカ祭りかよ。 foreachの繰り返しが一回しかない時にwarning出せとかアホかと。 perl信者もバッチ信者もうざいからよそでやれ。
257 :
名無し~3.EXE :2008/11/19(水) 12:34:04 ID:LvoKkwKM
↑お前が一番うざいから厚生事務次官のようにぶち殺されろや?
>>121 New-Objectの-ComObjectパラメータとTrace-Commandの-Nameパラメータで補完できるようにした
New-Object -Com shel<tab>
260 :
121 :2008/11/29(土) 16:06:50 ID:C4SR45b6
262 :
名無し~3.EXE :2008/11/30(日) 13:23:47 ID:KL9TgWDC
なんて凛々しいお姿。 PowerShell本の表紙はこいつで決まりだな。
さて、V2CTP3/Beta1お披露目の12月ですよ
cmd.exeもそうだけどPowerShellでもxkeymacs正常動作しないな。C-spcとかC-@が動作しない。 あと、XKEYMACS_SHELLをPowerShellにしてM-!で起動するとタスクバーのXKEYMACSアイコンが 赤に変化して、キーフックが一切無効になるんだけど、何か使い方間違えてる?
なんでそんなことをPowerShellスレで聞こうと思ったの?
270 :
名無し~3.EXE :2008/12/05(金) 01:23:26 ID:LYYDE0cI
予定にはあるみたいだが、よく考えたら2.0はXP向けにRTWされない可能性もあることに気付いた 俺ピーンチ 配布されるとしたらMSのXP向け最後の大型無料アプリか
>>270 インターネットの基礎知識だけど、リンク張るってのは「そちらを参照してくれ」って意味だよ。
"&Foo", "&Bar", "B&az"なんかを指定してコンテキストメニューなりラジオグループなりのUIを表示して ユーザーに選ばせるコードってどう書けばいいですか?
まず、System.Formsをロードします
>>272 バーカ。そういう無関係なもんを延々スレ初めのスレッドに貼るかよ。
何このゴミスレ
279 :
名無し~3.EXE :2008/12/08(月) 14:01:22 ID:/ZOtr8v9
>>272 2chのイロハだけど、テンプレに貼られたリンク先に関しては、
リンク先に書かれてる内容に準拠した話題のレスを書き込んでスレ進行しようっていうスレ主の意志表示だよ。
理解した?おバカちゃん &herats
280 :
名無し~3.EXE :2008/12/08(月) 14:02:45 ID:/ZOtr8v9
ID変えながらの連続投稿がすごく悔しそうでいいぞw
>>260 Get-ServiceとかGet-Process含めてコマンドレットに渡す引数で補完できそうな文字列はほぼ全部補完できるようになった、と思う
ついでにカンマで複数の引数を渡す場合もそれぞれで補完できるようにした
gps <tab>,p<tab>,exp<tab>
さて、アメリカ的にはそろそろ出さなきゃホリデーに入っちゃうんじゃねーの?
>>285 後進して一足踏み出したようにしか見えないが?読者層が不明すぎる。
それと、最後の単位計算は本当に無駄だな
なぜそういうことが出来るのか説明されていないから、使い道もないし訳も分からない
powershellを起動してnGBを計算させるより
calcを起動して2の30乗をかけるか、1024を3かけた方が良い
>>286 まあブクマしてる人もいるしいいんじゃね・・・
間違ったことは言ってないし
今のところは。
>>285 前回から一ヶ月か…。
一年後にはスクリプト入門くらいにたどり着くかね。
PSが非処女だと発覚して無期限休載。
今までこのスレでここまで注目された入門記事が他にあったであろうか、いやない
>>260 メソッドの引数で定数を補完できるようにした
型を指定しないとエラーになる時
$str = "day night"
$str.Split(" ", 3, "None")
型を指定しないとエラーになるときは-as演算子の後にTABキー押せば補完可能
$str.Split( " ", "None" -as<space><tab>
$_.で大体合ってるプロパティ・メソッド名に補完できるようにした
ls |group { $_.Cr<tab>.Tost<tab>"y")} | tee -var foo| ? { $_.G<tab>.c<tab> -gt 5 } | % { md $_.N<tab> ; copy $_.G<tab> $_.N<tab> }
くらいなら普通に補完可能
応用で-Propertyパラメータ持ってるコマンドレットのプロパティ名補完できるようにもした
ps |group na<tab>
PowerShell.exeの実行パラメータに-WindowStyleでNormal/Minimized/Maximized/Hiddenが選べるようになってる、素晴しい でも一瞬表示されちゃうのは実行ファイル自体をwscript.exe/cscript.exeみたいに分けないと無理なんだろうな
CTP3、起動するごとにウインドウの位置がずれるのはなんなんだろう・・・ Sizer使ってるから別にいいけど
Connectが半ばバグ報告合戦になっとるな いいぞもっとやれ
linuxいじり始めてからcmd.exeに不満が出てきたので、試しに入れてみたら、 起動直後、「'FileSystem' プロバイダで InitializeDefaultDrives 操作を実行しようとして失敗しました」 なるメッセージが出て焦ったのですが、このメッセージの意味はなんでしょうか? もし管理権限で起動してたらCドライブをフォーマットされてしまうところだった、とかじゃないですよね。
>>299 ファイルシステムプロバイダがデフォルトのドライブの初期化に失敗したということ。ファイルシステムプロバイダが
ドライブを正常に読めないだけで、Cがフォーマットされたりするということはない。
>>300 どうも。ここでのIniitializeは初期設定とか初期読み込みとかの意味っぽいですかね。
外付けドライブを別プロセスでchkdskしてたせいもしれません。
303 :
名無し~3.EXE :2008/12/30(火) 14:30:20 ID:dBcfzHmU
バイナリファイルの結合コピーってどう書けばいいのでしょう? DOSの場合の copy /B file1+file2+file3 destfile って奴です
楽なのがいいなら function bcopy { cmd /c "copy /B $([string]$args)" } でいいと思うけど、PowerShellで完結することにロマンを感じるなら type -enc Byte file1,file2,file3l | sc -enc Byte -Path destfile とかじゃない?
>>260 変数がハッシュテーブル型の時、変数名+ドットの直後のTab押しの補完候補にキー名が出てくるようにした
Get-Process | Get-Unique | % { $hash += @{$_.ProcessName=$_} }
$hash.pow<tab>.pro<tab>
Select-Objectの-ExpandPropertyの組み合わせが二回以上続く場合でもだいたい正しい補完候補になるようにした
変数名の配列表記が多次元だったりネストしてる場合でも補完できるようにした
$a = New-Object "Int32[,]" 2,3; $b = "PowerShell","PowerShell"; $c = [ref]$a; $d = [ref]$b,$c
$d[0].V<tab>[0][0].Get<tab>
$d[1].V<tab>[0,0].tos<tab>
>>305 乙
でも、出先で使えないと嫌だから使わないw
雲行きの怪しいPowerShellでも、IE7のように一般家庭にも普及する から使っているわけであって…
普及するよね?ね? CTP 3ってなに? 一生CTP、人柱向けじゃないよね?ね?
(未完成品を世に出さない職人魂は大好きですがw)
308 :
303 :2009/01/03(土) 10:00:56 ID:cksqnF5B
>>304 数GBあるsplitしたmpeg2-tsファイルを結合して一つのファイルとしたかったんですが、
Cygwinでcatを使ってmergeするととてつもなく時間がかかってしまいました。
PowerShellになにかやり方があるのか知りたかったんですが、type -enc Byteだとさらに遅いですね
>>308 .net使えるから
System.IO.FileStream / StreamReader / StreamWriter / TextReader / TextWriter / TextStream / BinaryStream / BufferdStream / Compression.DefalateStream / IsolatedStreage.IsolatedStrageFileStram / MemoryStream
あたりから適当な奴を探して使えばいいんじゃね?
それが早いかどうかは別として
cmd.exeのcopyコマンドって2GB制限か何かあるんだっけ?
1ディスク内だとランダムアクセスになって遅い ディスクtoディスクだとそれぞれがシーケンシャルアクセスになって速い とか?
copy a+b でaのi/oが稼げる?
>>308 むしろ、cmd.exeで
type file2 >> file1
ではどうか?
>>313 それで早くなるなら FireFileCopy とかがはやったりしない。
typeコマンドだと、そもそもEOFに引っ掛かるから駄目だな。 色々考えてみたけど、PowerShellを生かした良い方法が思いつかない。 MB単位で一気にR/Wしようとすると、結局New-Objectから始めるしかないような…… だったらC#でいいじゃんって話になるし。
>>260 スクリプト・フィルタ・関数のパラメータ名補完、およびその引数で定数の補完
man -f<tab>
'param([System.StringSplitOptions]$foo,[System.Management.Automation.ActionPreference]$bar,[System.Management.Automation.CommandTypes]$baz) {}' > foobar.ps1
.\foobar.ps1 -<tab> -b<tab>
.\foobar.ps1 -foo rem<tab> -bar <tab><comma>c<tab><comma>sc<tab> -ea silent<tab> -wa con<tab>
代入式の左辺値が列挙体である場合右辺値を定数に補完
$ErrorActionPreference =<space><tab>
$cmdtypes = New-Object System.Management.Automation.CommandTypes[] 3
$cmdtypes =<space><tab><comma><space>func<tab><comma><space>cmd<tab> -as<space><tab>
パイプの一つ前の式が Get-Item Get-Command もしくは変数のみな時 '$_.' の補完をより正確にした
gi hkcu:\ | % { $_.subkey<tab>
gcm powershell.exe | % { $_.file<tab>
$data = Get-Process
$data[2,4,5] | % { $_.<tab>
>>303 ,308は、typeやcatはもちろんcmd.exeのcopyコマンドでも数GBのファイルを結合するのには時間かかるから代替案が欲しい、ってことでいいの?
シェルなんだからファイル操作とかは充実させて欲しい 分かりやすく簡潔に高速なコマンド FastCopy-Item とか
要望があるならConnectなり本家ブログなり日本のフォーラムなりに書くよろし 某11の人も自分に言ってくれれば頑張って伝えるって言ってたよ
320 :
名無し~3.EXE :2009/01/07(水) 13:43:41 ID:ZQWq28Yq
そのくらい自分で作れや。
改行を読み取ろうと思ったら、反応してくれない・・ 書き込みは対応してるのに、検索はしてくれないのか? ↓改行をアンダーバーに変換しようと思ったら反応ナシ。 cat "ファイル" -replace "`n","_"
>>321 基本Get-Contentの出力はObject[]
各要素に一行ずつStringとして入ってるから、改行はないよ
なんかひたすらどうでもいい発見をしてしまった $a=ps $a-f0..10000
>>317 いや,cmd.exeのcopyコマンドは俺にとっては十分早いです.
これに代わるやり方がPowerShellには用意されてるのか?ってことを単純に知りたかっただけです.
もうcmd.exeを忘れたい
そういや xcopy とかの代替ってのもないんですかね? PowerShellってのはcopy のようにreplaceされたり,dosの外部コマンドが実行されたりするわけですね. といいながら,Cygwinにパス通してるのでfindなんかで困るわけですが・・・
コマンドプロンプトからPowerShellになって機能ダウンしたなんてことがないといいんだが
Windows7のベータにPowerShell2.0標準で入ってるな。
それは前から言われてるじゃん 問題はVista/XP向けに.NETやIEみたいに自動更新かSPで載せるかどうかでしょう
Visual Studio のコマンドプロンプトがPowerShellに切り替わったら本物
VS2010から少しずつコアの実装も.NET化していくみたいだから、 VS2013?あたりからPowerShellに切り替わるんじゃない?
>>332 特にDLLを開発してるときには
そのDLLを自動でロードしてくれたりしてなw
PowerShellの演算子やキーワードを列挙できるクラスがあったはずなんだけど、誰か知らん?
>>335 System.AddInの立場はどうなっちゃうんだろうねぇ。
>>336 get-command とか get-help * じゃダメなんだよね?
わからん……
ヘルプ的なコマンド以外でそんなものをユーザーに提供するシェルってあるんだろうか。
>>337 中で使うんじゃないかと予想。
>>339 あーこれだ、この記事忘れて探してたのよ、ありがとう
V2でしか使えないなら埋め込むしかないな
get-money
>>260 '-' で始まる演算子を補完できるようにした
"Power","Shell" -m<tab> "Power" -r<tab> '(Pow)(er)','$1d$2'
1..9 -co<tab> 5
変数の後にパス区切り文字 ( / と \ )の組み合わせでパス補完できるようにした
$PWD\../../<tab>\<tab>
"$env:SystemDrive/pro<tab>/<tab>
皆デフォルトの補完機能で満足してるのかな
まあスクリプト書くならエディタがいろいろあるけど
>>343 それになれると、出先でPS使うときに苦労するから使わない。
>>344 実行ポリシーの制限?
まずもって出先にPowerShell環境があるっていうのがうらやましいけど
-replace について "Hello World" -replace '(.*) (.*)','($2) ($1)' →(World) (Hello) になるのに "Hello World" -replace '(.*)(.*)','($2) ($1)' →() (Hello World)() () こうなるのは何故ですか?
これ使いこなすより普通のスクリプトで書いた方がよっぽど強力で書きやすいよね。
>>347 PowerShellは関係ないなー。w
●「.」は、原則として全文字だから、空白も含まれる。
だから、1つめの()で文字列全体がキャプチャされて、
2つめの()は空となる。
●置換文字列の「()」は、特別な意味がないので、
そのまま結果文字列に入る。
>>349 >>347 が言いたいのは() (Hello World)の部分じゃなくて、その後の() ()の部分じゃないかと推測
>>260 PowerShellのキーワードが補完候補に出るようにした
次に来る括弧( '{' か '(')が決まっている場合はスペースの後にそれも出る
b<tab>
p<tab>
w<tab>
Clear-Variable Get-Variable New-Variable Remove-Variable Set-Variable の -Name パラメータで変数名の補完
コマンドレット共通の -ErrorVariable -OutVariable パラメータおよびそのエイリアス -ev -ov と
Tee-Object の -Variable パラメータで変数名の補完
Export-Alias Get-Alias New-Alias Set-Alias の -Name パラメータでエイリアス名の補完
Format-List Format-Custom Format-Table Format-Wide の -groupBy パラメータでプロパティ名の補完
さすがにもう弄る部分が思いつかない
2.0使ってる奴いるのか
PowerGUIってEditorの色を変更できないのかな? 真っ白の背景は目に突き刺さるような気がしてCornSilkに変更したいんだけど
とりあえず現状は無理なんじゃない?
>>347 何か不思議だね。
* じゃなくて + だと、たぶん期待した動きになるんじゃないかな。
"Hello World" -replace '(\w+)','$1 dayo'
→Hello dayo World dayo
'Hello World' -replace '(\w*)','$1 dayo'
→Hello dayo dayo World dayo dayo
* だと何故2回も dayo が出るのだろう。
どういう理屈なのか?
>>357 Hello
空白
World
Worldの直後
の計4回マッチするためじゃないの?
いや、空白はマッチしないだろう。\w だから。
Hello
Helloの直後
(空白はそのまま出力)
World
Worldの直後
こんな感じかな。
すると
>>347 は
Hello World(=$1)と直後(=$2)
直後(=$1)と直後(=$2)
と2回マッチしてる感じ?
360 :
名無し~3.EXE :2009/01/19(月) 09:41:55 ID:AHPatGWQ
>>359 \wは関係ない。.*はスペースであろうがなかろうがマッチする。
なんで二回出るのかっていうのは、こういうことだよ。
-replaceは文字列中でマッチしたものすべてを置換する。
たとえば、'Hello Hello' -replace 'Hello', 'World' は World World となる。
'Hello World' -replace '(.*)(.*)', '($2)($1)' の場合、
まず最初に$1=「Hello World」、$2=「」がマッチし、置換される。
次に行末で$1=「」、$2=「」がマッチし、置換される。
つまり、二か所でマッチしてるから二回出力されるというだけの話。
これを防ぎたければ、
'Hello World' -replace '^(.*)(.*)$', '($2)($1)' とすれば良い。
>いや、空白はマッチしないだろう。\w だから。 orz まったくそのとおり 空白の直前のつもりでつい・・・
ドンマイ
>>260 補完候補用のデータファイル読み込みをちょっとだけ高速化
$PSHOME\profile.ps1を汚さないようにした
[a<tab> や New-Object ps<tab>で型アクセラレータも補完候補に来るようにした
.NET/WMI のクラス名を補完する際次の '.' や '_' までの文字列を候補に出すようにした
New-Object System.win<tab>.for<tab>.bu<tab>
bashとか構文が好きになれなかったけど、 PSならがんばれそうだな Linuxに早く移植してほしいね
ForEach-Object -InputObject 1,2,3,4,5 -Process { $_ + 1 } 上の式と出力が同じなのは次のア〜キの式のうちどれでしょう(制限時間5分・複数回答可) ア switch (1,2,3,4,5) { default { $switch + 1 } } イ 1..5 | & { $input + 1 } ウ foreach ( $i in 1..5 ) { $i+1 } エ ForEach-Object -InputObject 1..5 -Process { $_ + 1 } オ ,1,2,3,4,5 | % { $_ +1 } カ 1..5 | & { do { $input.current + 1; } while ( $input.MoveNext() ) } キ ,1..5 | % { $_ + 1 } 実行せずにぴったり正解できた君はえらい
monoshellてのもあるけど、どっちも停滞してるね まあ期待するだけ無駄だろう 今更30年以上続くBourne Shell系から離れることは出来んよ
369 :
名無し~3.EXE :2009/01/23(金) 17:35:15 ID:UByj+8ln
.NET が使えるということと必須ということは違うと思うんだけどね。 それに WSH って昔からあるけど、何かめんどくさそうだから使ったことない。 シェルがないからかな?
WSHはCOMの知識がないとそれこそ何もできないと思うんだがなー
初心者向けの解説してるサイトがあったら教えてください ばかですみません
PowerShell って良いですよね。ActiveDirectoryの管理にもバッチリな感じです。 そのPowerShellを使えば、私ごときがかかえるちっぽけな問題などスッキリ解決できると信じています。 そのちょっとした問題というのは私ごときが管理するActiveDirectoryのユーザーどもの lastLogonTimestamp を知りたいということです。 PowerShellの万能の機能と皆様の智慧が合わされば即座に解決されると信じています。 誰か教えてよ。プリーズ。
Add-PSSnapin Quest.ActiveRoles.ADManagement Get-QADUser | ft FirstName, LastName, DisplayName, lastLogonTimestamp -auto
377 :
375 :2009/01/28(水) 16:26:46 ID:sDYl5ViY
なるほど。これを使えと。 www.quest.com/japan/information/pr080121.asp 感謝の極み
コマンドラインスタックの挙動ってこんな感じで合ってる? Esc+q の代わりに ; 入力してからTAB [Reflection.Assembly]::LoadWithPartialName( "System.Windows.Forms" ) $_stack = New-Object Collections.Stack function tabexpansion ($line, $lastWord) { switch -r ($lastWord) { '(.*);' { $global:_stack.Push($line) [System.Windows.Forms.SendKeys]::SendWait("{ESC}") } } } iex (@' function prompt { if ($_stack.Count -gt 0) { $_keys = $global:_stack.Pop().TrimEnd(';') -replace '([[\]\(\)+{}?~%])','{$1}' [System.Windows.Forms.SendKeys]::SendWait($_keys) } '@ + @" ${function:prompt} } "@)
>>260 function や filter キーワードの後で既存の関数名に補完するようにした
*.txt@<tab> で ファイル名のグロブパターン展開機能のような感じの何か
^ や ~ で除外パターン指定も可能
;<tab> でコマンドラインスタック機能かもしれないらしい何か
;:<tab> で手動ポップも可能
#<id><tab> や #<pattern><tab> でヒストリ補完(V2CTP3の機能)
初めて使う場合の読み込み時間の高速化
PowerShellで日本語入力ができない。。 日本語の表示や貼り付けはできるんだけども。 なにか設定が必要なのかなぁ。 環境は PowerShell ver1 x64 OS: WinXPx64
383 :
名無し~3.EXE :2009/02/06(金) 16:40:52 ID:h4C3ThcP
日本語の折り返しはちゃんと表示されるようになった?
exit の別名定義は作れませんか? exit じゃなく end と打ち込めば終了できるようにしたいのです。 方法があれば教えてください
関数の中で exit を実行すればいいだけだけど、 end は予約語だからお勧めしない( begin〜process〜end 句 ) 他でいいなら function fin { exit } end っていう名前の関数を定義することは出来るけど、 & ${Function:end} 等の形でないと呼び出せない
>>388 なるほど、関数でいいんですね。 alias のことばかり調べてました;
fin や quit という名前にすることにします。ありがとうございました。
これってどの程度規格として確定するものなのかな? あんまりおっかけしたくないからまだVer 1使ってるけど。 C#とかJISでも確定したけど、Ver 2.0とかVer3.0になってまるで無駄規格に見えるし
規格はないよ、ある必要もないでしょ? 言語仕様は 1.0 と 2.0 で大した差はない、ほとんどコマンドレットの強化が主軸
変な規格に雁字搦めにされることなく伸び伸びと育って欲しい。
つーかCやC++だって、2回も3回も規格は更新されてるんだよ。 もちろんCOBOLやFortranもね。 ちなみに次のVC++は新規格(C++0x)だから、予習しておくように。
後方互換なんぞいらん
$a = @{}; 1..1000 | % { $a.Add($_,$_) } でも $a = @{}; 1..1000 | % { $a += @{$_=$_} } でも結果は同じだけど、後者はやっぱり配列に要素足していくのと同じような処理してるみたいだな
旧バージョンのソースが動くのなら言語仕様の破壊的変更でもなんでもござれだな
PS H:\> $a = @() PS H:\> $a += gi hoge.txt PS H:\> $a.gettype() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array これで、要素が1つの配列を作った。 PS H:\> $a = $a | sort lastwritetime PS H:\> $a.gettype() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True FileInfo System.IO.FileSys... 要素が1つの配列をソートすると、配列ではないものになってしまう……仕様か?
仕様だよ ()でくくろう
あー、リスト構造が欲しいだけならわざわざジェネリクス利用せんでもArrayListで十分かねぇ
Java
V2CTP3のヘルプファイル、ページ遷移する毎にスクリプトエラーが出るのがうざった過ぎる
date って何者? 出力は Get-Date と全く同じっぽいし、実際 Get-Date のパラメータも使える でも Get-Alias date とか Get-Command date とかやってもそれらしいもの出て来ない
>>403 試してみると、dateに限らず、aclでもaliasでも
get-xxx
のコマンドレットは get を除いても認識するようにみえる
ただし、コマンド検索の優先順位は低いみたいだけど
自動的なコマンド検索のルールであって、明示的な別名でないから
コマンド検索ではでてこないのかな
405 :
403 :2009/02/14(土) 18:46:41 ID:+9kzfDpH
>>404 ああなるほど、そういうカラクリか
基本的に他の何かと被ってない場合はそれが実行されるっぽいね
406 :
名無し~3.EXE :2009/02/14(土) 22:40:58 ID:i0SQATsl
パラメータとなる変数のデフォルト引数に$argsを渡せば(結果的に)位置パラメータに出来るんだな function test ($a=$args[0], $b=$args[1]) { $a;$b; $args|write-host -b black } test 1 2 3 4 5 2.0の[Parameter(Position=0)]$aよりいろいろと楽
これに挑戦してみた
ttp://d.hatena.ne.jp/YokoKen/20090216/1234796799 > Program Files フォルダ直下の各フォルダを、サイズの大きい順に並べて、
> 上位 5 件のディレクトリ名とサイズ (単位MB) をテーブル形式で表示するための PowerShell スクリプトを書く。
$s = @{}
ls 'C:\Program Files' | ? { $_.Length -eq $null } |
sort { $n=$_.Name; ls $_.FullName -Recurse | measure Length -Sum | % { $s.Add( $n, $_.Sum ); $_.Sum } } -Descending |
select -First 5 | ft Mode,CreationTime,Name,@{l="Size";e={"" + [int]($s.($_.name)/1MB) + "MB"}}
ハッシュテーブル使うとワンライナーにはできないな、なんかいい方法あるんだろか
409 :
名無し~3.EXE :2009/02/18(水) 08:35:00 ID:w9fwNLJX
>>408 ls $Env:ProgramFiles|?{$_.Mode -match 'd'}|%{$_|Add-Member NoteProperty s (ls $_.FullName -r|?{$_.Length -gt 0}|Measure-Object Length -Sum) -pass}|sort s -des|head 5
410 :
名無し~3.EXE :2009/02/18(水) 08:41:55 ID:w9fwNLJX
headは標準のエイリアスじゃなかったので書き直し。 ls $Env:ProgramFiles|?{$_.Mode -match 'd'}|%{$_|Add-Member NoteProperty s (ls $_.FullName -r|?{$_.Length -gt 0}|Measure-Object Length -Sum) -pass}|sort s -des|select -first 5
>>410 ソートのところで s の代わりに { $_.s.Sum } を渡さないと正しくソートされないと思うけど、Add-Memberか、なるほどなー
412 :
名無し~3.EXE :2009/02/19(木) 08:59:17 ID:UsRbdZW6
>>411 sort は Sort-Object のエイリアス。
プロパティ名を渡すようになってるから s で良いんだよ。
逆に { $_.s.Sum } で本当にソートできるかどうかやってみたら?
413 :
名無し~3.EXE :2009/02/19(木) 09:29:33 ID:UsRbdZW6
いや、ごめん。意味分かった。 (ls $_.FullName -r|?{$_.Length -gt 0}|Measure-Object Length -Sum).Sum ってことね。確かにそうしないと正しくソートできないね。
414 :
名無し~3.EXE :2009/02/19(木) 15:25:31 ID:UsRbdZW6
三度目の正直。MB単位で表示も入れて、こんなもんでどうかな? ls $Env:ProgramFiles|?{$_.Mode -match 'd'}|%{new object|Add-Member NoteProperty FileName $_.Name -pass|Add-Member NoteProperty MB ((ls $_.FullName -r|?{$_.Length -gt 0}|Measure-Object Length -Sum).Sum/1MB) -pass}|sort MB -des|select -first 5
new
>>414 new objectのところがアレだけど、それでいいと思う
やっぱり Get-ChildItem で Mode 指定できるようになってほしいな
417 :
名無し~3.EXE :2009/02/20(金) 07:41:25 ID:d4zMvVAi
アレってなんだよ?
418 :
名無し~3.EXE :2009/02/20(金) 10:56:44 ID:d4zMvVAi
なるほど、new object じゃなく New-Object object か。 エイリアス定義しまくってると他の環境で困るな。
419 :
名無し~3.EXE :2009/02/20(金) 20:09:50 ID:r1VR7SXs
そのうちWSHと同じく普及しないまま放置されるだろうね。 bashやcshなんかはオブジェクト指向なんぞ無視で、 仕様もシンプルで、使い捨てのスクリプトを書くのに適している。 非職業プログラマにも使いやすい。 しかし、Windows PowerShellはそうでもない。 仕様を複雑にしたり、たかがシェル言語にオブジェクト指向を導入したりして WSHで失敗してるのに、同じ失敗を何度でも繰り返すんだから、MSも救いようがないね。
使いやすいものを使ってもいいんだぜ。
>>418 エイリアスを変換して出力するスクリプトを書けばいいじゃない
>>419 オブジェクト指向を導入したんじゃない、.netを導入したらオブジェクト指向も付いてきただけだ
と言ってみるテスト
オブジェクト指向は、作る(設計)にはちょっとしたこつが必要だけど
使う分にはむしろお手軽じゃね?
知ったような口でいい加減なことを吐けるのは使ったことのない者の特権なのさ
424 :
422 :2009/02/21(土) 00:59:16 ID:9PlS8Aat
>>423 前半のは冗談として、
オブジェクト指向だから不便な所ってたとえばどこがある?
確かに、ちょっと凝った事すると、C#の方が楽できそうな気がするが、
それはオブジェクト指向だからというわけではないしな。
スクリプト組むまでもないバッチ作業には非常に向いてるし、今までのコマンドラインアプリとの相性も悪くないよ。
shスクリプトは使ったこと無いから知らんけど、今までのバッチファイルと比べると格段に便利になってる
バッチファイルほど見よう見まね度というか初期投資の低さがないように思えるな。 プリインストールされてないのはしょうがないにしても関連付けさえできてないし。 かといってWin7になれば本格普及するかといえば微妙な気はする。
関連付けは意図的にしていない リスクを理解した上でしたい人は自分でどうぞってこと デフォルトで実行ポリシーがRestrictedなのと同じ
>>425 そうでしたか、てっきり
>>426 正直、普及する、しないに関係なく、標準装備してくれるのが一番重要。
その中で、使いたい人が使いたいときに使えればそれで良いと思う。
単なるバッチ処理ツールなんだから、バッチ処理しない人には必要ない物なのかも知れない。
powershellはcmdに比べて(文字数的に)お手軽じゃないしな
( これは結構真面目な話で、psh見たいなエイリアスやシンボリックリンク作っておかないと、本当にめんどくさいぞ。
スタートメニューで検索できるようになったといっても、Power DVDとか地雷あるし。)
標準装備と言えば、Vistaでtelnet.exeが標準装備されなくなったらしいけどどうして?
「あの」 ハイパーターミナル使えって事? ping、ipconfig (ifconfig)、telnetはネットワーク障害時に欠かせないツール。
winrm/winrsに置き換えたからじゃない?
>>429 おお、そんな物があったのか。勉強になった。サンクスです。
でもtelnet.exeはtelnetクライアントじゃなくてTCPクライアントだっちゅーの(死語)
SSL使って通信できるようになったのは良いけど、sshではないのね…いい加減スレ違なきがするのでここで退散します。
WSH はシェルがないわけだが
セキュリティ的にあれだからじゃないの? tftp.exeとかもなかったような。 まぁDVDとか使わずにすぐ追加でインストールできるからあんまり気にしてないけど。
>>428 telnetは標準で無効にされてるだけ。
コントロールパネルの「Windowsの機能の有効化または無効化」で有効に出来る。
>>427 関連付けしようと思ったらフォルダオプションか、レジストリを弄るの?
Powershell自体には関連付けの機能が用意されてないように見える。
>>435 >関連付けしようと思ったらフォルダオプションか、レジストリを弄る
そう
V2CTP3インストールするとpowershell_ise.exeに関連付けされる
今はまだ1.0だよ、2.0はベータにもなってない ぶっちゃけコマンドが追加されるだけだから、気にしなくても大丈夫
>>438 ありがとうございます。
コマンドが追加される程度なんですね
本を購入して勉強します
実際に使うのではなく、勉強という感じならPowerShellインアクションのほうがお勧めだな どっちとももってるけど
俺は「プログラマブルPowerShell」 クックブックは逆引き用だから、勉強には向かないと思う。 あと、1.0 だと Excel2007 を COM オブジェクトとして使おうとしても実質使えないに近い。 2003 だと大丈夫なんだけど。 Office2007 が入ってる環境で勉強するなら、2.0 でやらないとはまる。
442 :
437 :2009/02/22(日) 13:32:18 ID:zXD63G1Q
皆さんレスありがとうございます。 やはりクックブックは向かないみたいですね。 自分は2008とかHyper-V、SCVMMの管理や自動化に使いたいと思っているので 1.0で基礎を押さえて2.0で応用を勉強するのがベストかもしれませんね
仮想化の運用管理ならVMwareもXenのCitrixもPowerShellべったりだから安心していいと思うよ
>>443 なるほど それは知らなかったです。
VMwareはPerlでコントロールできるのは知っていたのですが、
PowerShellでもOKなんですね。勉強しますね。
PowerGUI PowerPackも合わせてお使いになられるとお得です
>>445 それらのツールも落としてインストールしました。ありがとうございます
>>260 powershell.exe の起動オプション補完機能強化
- の後に 0 文字以上のアルファベットとを入力しても各オプション名に補完できるようにした
powershell -<tab>
powershell -ex<tab>
デフォルトの help および man 関数の -Nameパラメータでコマンド名またはトピック名の補完(パラメータを明示する必要はない)
help -Name <tab>
man about<tab>
デフォルトの help および man 関数の -Categoryパラメータでカテゴリ名の補完
help -Category <tab>
man -cat cm<tab>,al<tab>,gl<tab>
switch 構文のオプション名を補完できるようにした
switch -<tab> -r<tab> -f<tab>
補完ネタ募集中
Windows7ではPowerShellを標準で乗っけてほしいなぁ。 そしたら潔くそっちいくのに、と未だにWSHメインの俺が言ってみるテスト。
今更なこと言う前に本家ブログなりWin7の記事なり読みに池と
キーボード操作でクリップボードのテキストを貼り付けることできた function TabExpansion ($line,$lastWord) { # Ctrl-V 入力した後 Tab キー if ( $line[-1] -eq 22 ) { $textbox=new-object System.Windows.Forms.TextBox; $textbox.Multiline=$true; $textbox.Paste(); write-output $textbox.Text } } やっぱWindows Script Programmingの人はすごいわ 直接クリップボード弄ることばかり考えてTextBox経由って発想はなかった
>>452 Textbox経由は便利。
Excelのセルをコピーして、テキストとして張り付けたりもできる。
>>453 ただこれだと挿入はできないんだ、行末にマウスを使わずにテキスト貼り付けができるってだけで
SendKey使うのもやってみたんだけど、Tab 押した時点でキャレットより後ろの文章は削除される仕様だから意味なし
STAで起動すればいいじゃん
PS > $result = Get-Date PS > $result.GetType() こうすればうまくいくけど、変数に入れずに直接 PS > Get-Date.gettype() 式が '(' の後に必要です。 発生場所 行:1 文字:18 + Get-Date.gettype() <<<< こうやるとうまくいかないのはどうして?
>>456 (get-date).gettype()とやるべし。
>>457 おお、ありがとう。
括弧で括ってやらないと全体をコマンドかなにかとみなしてしまうのかな。
>>458 コマンドラインをどう解釈しているのかわからんから、そのあたりは何ともねぇ。
コマンドレットが返すオブジェクトは「(コマンドレット)」。一方、オブジェクトのメソッドが返す
オブジェクトは「オブジェクト.メソッド()」だけで表せる。
PS H:\> (get-date).tostring().length
18
ドットはコマンド名に使えるから、 Get-Date.gettype() が Get-Date.gettype というコマンドの引数に () を渡していると解釈されて () には中に式が無いから「式が '(' の後に必要です。」とエラーを吐くってだけだよ function get-hoge.huga { $args } get-hoge.huga (10) get-hoge.huga () get-hoge.huga(10) get-hoge.huga()
[] をファイル名に含むフォルダに移動できないんだけど、どうやれば回避できるの? ちなみにバージョンは2.0 CTP2 C:\>mkdir "[a]" Directory: Microsoft.PowerShell.Core\FileSystem::C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 09/03/11 (水) 16:37 [a] C:\>cd "[a]" Set-Location : Cannot find path '[a]' because it does not exist. At line:1 char:3 + cd <<<< "[a]"
[] はファイルグロブだから`でエスケープしないと駄目 cd ``[a``] cd "``[a``]" cd '`[a`]'
cd したいだけなら ?a まで入力してタブ補完した方が楽だと思う
>>461 "["と"]"をエスケープして、
cd '`[a`]'
とやるのが基本だが、"-l"を使って、
cd -l [a]
とやってもいい。
とかく"["と"]"は悩ましい。
WSHから、他のアプリケーションにキー入力を送って自動化のようなことをやってたのですが、 PowerShellで同じことはできますか?
WScript.Shellは今までどおり使えるよ notepad.exe $p = Get-Process notepad $w = New-Object -ComObject WScript.Shell sleep 1 $w.AppActivate($p.Id) $w.SendKeys("hello") とかまあそんな感じで
>>466 ありがとうございます。
PowerShell独自のブックレットがあるというより、やはりWScript.Shell経由なんですね。
IDかっこいいですね。
>>468 ありがとうございます。
コマンドレットのことを勘違いしてました。
function Find-Alias ($x) { dir alias: | where {$_.Definition -eq "$x"} | fl -p name } はきちんと動くのに、 function Find-Alias { dir alias: | where {$_.Definition -eq "$args"} | fl -p name } としたら動かないのはなぜなんでしょうか? たとえば function myecho ($x) { echo $x } function myecho { echo $args } はどちらも変わらないんですが。。
>>471 $argsは配列だ。$_.Definitionは配列じゃない。だから、$_.Definition -eq $argsは使えない。
echoはWrite-Outputのエイリアス。Get-Help Write-Outputをやってみると、
構文
Write-Output [-inputObject] <PSObject[]> [<CommonParameters>]
PSObject[]は配列だ。だから、echo $argsはいける。
>>472 丁寧にありがとうございます!
$args は Object[] で、$xに代入した時点で String 型になってるみたい?ですね。
うーん難しい…。まだ完全には解っていませんので、もう少し勉強します。
失礼しました。ありがとうございました。
>>471 下の例で出力がどちらも変わらないのは引数が一つの時だけだよ
$argsの要素にはその関数に渡された引数が一つずつ入ってる
$args[0] のように添え字をつければ $x と同じになるよ
Powershell 2.0って、XPではまだStart-Jobとか使えない。これってやはり、「早くVistaに乗り 換えろ、ボケ!」というMSの主張を含んでいるんだろうか?
>>477 XP向けにリモーティング機能を実装すると他の機能を切り捨てざるを得なくなるので後回し
PowerShell v1.0 is available on Microsoft Update
ttp://richardsiddaway.spaces.live.com/blog/cns!43CFA46A74CF3E96!2185.entry Microsoft have added PowerShell v1.0 as an optional update that is available through the update mechanisms.
PowerShell 1.0 through MU is only offered:
・As an optional update
・If you don’t have any other version of PowerShell installed (including V2 CTPs) on your machine
・.NET 2.0 is installed on the machine
・OS is one of: XP-SP3, W2K3-SP2, Vista-RTM, Vista-SP1
さすがに必須にはできなかったか、まあでもよくやった、感動した!
自動更新で入るって事はVistaならSP3くらいで標準搭載かね しかしおまえら静かだな、俺有頂天なんだが
もちろん怒りで有頂天よ。
483 :
477 :2009/03/26(木) 18:59:04 ID:1Rf9hrTc
>>483 XP向けのPowerShell 2.0のリリースに特に明確な期限はないが
win7向けのそれはWin7のリリースまでに完成させないといけない
だから"今"XP向けに注力している時間はないし、元よりリリースはWin7より数ヶ月遅れると言ってる
>>107
PowerShell V1を使っているのですが、 unixで言うところの、バックエンドプロセスってどうやって立ち上げるのでしょう。 hogehoge & で、サーバプロセスを複数立ち上げたいのですが、どうやってやればよいのかわかりません。
487 :
486 :2009/04/04(土) 09:32:19 ID:LKacd8cK
テトリスもどっかにあったな
とあるプロセス(たとえばIE)のユーザ名ってどうやって取得すればいいですか? (Get-Process iexplore).StartInfo.username とかじゃあダメみたいだし。。 XP + .net3.0 です。よろしくお願いします。
492 :
491 :2009/04/06(月) 15:04:22 ID:aHV4rUBO
すみません、自己解決しました。 Get-WmiObject win32_process を使えばできました。
なんだかいまいちこれの便利さが分からない。 起動が少し重いし、インストールしたけどほとんど触ってないや。
ほとんど触ってないんだったら分かるはずがないさ。
おっ?なんか使ったらパワーが出てきた!
そんな冷たいこと言わないで こんな場面では便利さを感じた的な御意見を拝聴させていただければ
DOS窓ぐらいキビキビ動作してくれたら言うことないんだけども あと大量のテキスト置換なんかもPerlの方が速いか それ以外は便利さしか感じない
高速化のスクリプト流しておくとかなり違うよ
どういう風にテキスト置換やってるのか分からないが とりあえずGet-Contentは-ReadCount:0指定して変数に代入してから中身弄った方がいい
巨大テキストファイルを扱うなら、.NETフレームワークのStreamReaderを使うほうがいい。 正規表現にマッチする行を数えるなら、 function global:countem([string]$s1, [string]$s2){ if(!(Test-Path $s1)){return 'That path failed.'} $e = [System.Text.Encoding]::GetEncoding("Shift-JIS") $sr = New-Object System.IO.StreamReader((Resolve-Path $s1), $e) $c = 0 while($l = $sr.readline()){ if($l -match $s2){$c++} } $sr.close() return $c } みたいな関数を作っておく。
正規表現使った置換はPowerShellの中では多分Regex使うのが一番早いんじゃないかね $r = [regex]'^(\s+)(.*)$' $r.Replace( (type large.txt), '$2' ) みたいなの
Connectに昨日一日で大量にバグ修正報告されてる そろそろβの話が出てくるかー?
>>260 Ctrl+D の後に Tab で現在の日時等補完
<Ctrl+D><tab><tab><tab><tab><tab>...
>>> [DateTime]::Now → 2009/04/19 18:08:34 → 20090419 → 04192009 → 20090419180834 → 04192009180834 → 2009/04/19 → 2009年4月19日 18:08 → 2009/04/19 18:08 → ...
Ctrl+P の後に Tab でコマンドラインバッファの手動ポップ (<command>;<tab>と同じ)
<Ctrl+P><tab>
Ctrl+V の後に Tab でクリップボードの内容を貼り付け
<Ctrl+V><tab>
Ctrl+Z の後に Tab で現在の入力行の最後の一単語を切り取り、クリップボードにコピーする機能追加
Get-ChildItem *.txt<Ctrl+Z><tab> # *.txt を切り取り
Get-ChildItem <Ctrl+V><tab> # 切り取った *.txt を貼り付け
Ctrl+X の後に Tab で現在の行の切り取り、クリップボードにコピーする機能追加
<command1> <Ctrl+X><tab> # 現在の入力行を切り取り
<command2>; <Ctrl+V><tab> # 切り取った行を貼り付け
Ctrl+X の後に任意の一文字を入力し、Tab を押すと入力行の後ろからその一文字までを切り取る機能追加
Get-ChildItem -Filter *.txt<Ctrl+Z>-<tab> # - (ハイフン)の後、Filter *.txtまでを切り取り
Get-ChildItem -
Get-ChildItem -Path C:\ -<Ctrl+V><tab> # 切り取った Filter *.txt を貼り付け
>>505 乙です。
<Ctrl+V><tab>がイイ!!
会社のPC、申請したらあっさりインストール許可下りて即日利用可能になった ちょろいもんだぜ
>>507 上司「わが社のアドミン君はがんばり屋だな〜。そういえば庶務のネットワークの調子が(ry
そうだ、早速アドミン君に頼もう」
>>505 わたしは<Ctrl+X><tab>がイイ!スクリプト作成に大助かりです。
要望というわけではないですが、 echo "hoge"|te<tab> などとスペースを空けずに
入力したとき、 echo "hoge"|tee となってほしいところが echo "hoge|tee" となり、
引用符の場所が変わってしまいます。
スペースを空けない自分が悪いのはわかっていますが、この辺をうまく汲み取って頂けると
嬉しく思います。
>>509 引用符使わずに echo hoge|te<tab> で万事解決
なんとかならなくはないけどさー
[]を含むファイルをリネームするのはどうすりゃいいんだ エスケープしてもダメだ ren -path 'A`[1`].jpg' 'A.jpg' Rename-Item : 指定されたパス C:\A`[1`].jpg のオブジェクトは存在しません。 みたいになる
すまん過去スレに同じのがあったわ moveでやるしかないのね
>>509 弄ってみたけど、完全に修正するのは無理っぽいね
echo "hoge"|tee- まで入力してTabを押した時に
echo "hoge"|Tee-Object" となるようにすることは出来るけど
結局バックスペースキー押すんなら最初からスペース空けるか引用符使うなよって話になる
さて、Win7RCには少なくともベータ相当のV2が入ってるはずだが・・・
516 :
509 :2009/04/30(木) 23:24:20 ID:F0Tol7Ab
>>514 バックスペース1回で済むのならもう充分です。
(矢印キーで何文字も戻って引用符を直すより全然楽ですから…)
よろしければどこを修正すればいいのかご教示頂けないでしょうか。
>>516 最新のファイルでいうと1904行目、
if ( $lastWord -ne $null -and $lastWord.IndexOfAny('/\') -eq -1 ) {
の上辺りに
$LastWord = $line.Split("(] ;\/=+.,>")[-1] -replace "^(`"|')?(.*)$",'$2'
って書き加えとけば多分大丈夫
これ変更したところで困る人なんてまずいないだろうからその内追加分含めて修正しまっさ
518 :
509 :2009/05/01(金) 23:07:57 ID:9GJVDPKG
>>517 うまくいきました、ありがとうございます!(最新ファイルだと1950行目?でした)
改めてソースを拝見したのですが、凄すぎて眩暈が…。
本当に感謝感激いたしております。ありがとうございました<(_ _)>
2つの配列を比較してマッチングした要素だけを取り出したいのですが、なかなかうまくいきません。 皆さんの知恵をお借りできませんでしょうか。 実際にはテキストファイルから読み込んでいますが、2つの配列が存在するとします。 $test = @("win2k3001.sv","win2k3002.sv","win2k3003.sv","win2k3004.sv","win2k3005.sv") $test2 = @("win2k3002.sv","win2k3003.sv","win2k3006.sv","win2k3008.sv") ここから、$testと$test2の配列の共通の要素だけを出力したいのです。 しかし、下記の式に代入するとエラーメッセージが返ってきます。 $leng1 = $test.length $leng2 = $test2.length for ($i =0 ,$i -le $test.length ; i++){ for ($ii =0 ,$ii -le $test2.length ; ii++){ if ( $test[i] -eq $test2[ii]){ echo $test[i]; } }} <出力されるエラーメッセージ> 配列インデックス式が存在しないか、または無効です。 発生場所 C:\Documents and Settings\tosi\デスクトップ\TEST5.PS1:11 文字:22 + if ( $test[i <<<< ] -eq $test2[i]){ echo $test[i]; } 直接、配列の要素を指定して以下のように実行してやると結果は返ってくるのですが、for構文と組み合わせると失敗してしまいます。 if ($test[1] -eq $test2[0]){ echo $test[1]}; どうか、うまく解決できる方法をご教授ください。よろしくお願いします。
>>519 >>519 なんか色々と無茶苦茶だぞ・・・
i と ii は変数なんだからいつでも必ず頭に$を付ける必要があるし
for 文の構成は for ( 初期化文 ; 繰り返し条件 ; 繰り返し処理 ) { 処理内容 }
であって、カンマで区切ったりしない
正しく書くならこうでしょう
for ($i =0 ; $i -le $test.length ; $i++){
for ($ii =0 ; $ii -le $test2.length ; $ii++){
if ( $test[$i] -eq $test2[$ii]){ echo $test[$i]; }
}}
PowerShell らしく書くなら
$test | % { $test2 -eq $_ }
もしくは
Compare-Object $test $test2 -IncludeEqual -ExcludeDifferent | % { $_.InputObject }
でいいと思うけども
ドルが抜けとる。 i -> $i ii -> $ii データが小さければ、この方法でも良いけど。 大きければハッシュを使うなり工夫した方が良いよ。
>>520 Compare-Object なんて便利なコマンドレットがあるのね。勉強になったわ。
523 :
519 :2009/05/02(土) 20:27:41 ID:KDVSD8i0
>520 >521 レスありがとうございます、大変参考になりました! おかげでプログラムが無事に動きました。 ; で区切るのと、$が抜けていたのに気付かなかったのが恥ずかしいです… Perl程度しか経験していなかったので、最後の方法は勉強になりました。 そんなにたくさんのデータを扱うわけではないので、これで充分です。 ありがとうございました。
>>260 名前空間変数表記でパスを補完
${fu<tab>
${function:cl<tab>
スペース以外の任意の文字列に続けて Ctrl+L でヒストリのコマンドの一部(※)に補完
ls -Force -Recurse -Filter *.txt | ? { $_.LastWriteTime -lt [DateTime]::Today } ; echo PowerShell
ls<Ctrl+L><tab><tab>
?<Ctrl+L><tab><tab>
ec<Ctrl+L><tab>
(※) ヒストリ上のコマンドを | 、 ; 、| と ; で区切った文字列
Ctrl+K の後に任意の一文字と Tab でスペースのある位置の直後にその文字を挿入(デフォルトでは丸括弧)
1 - 1 - 1 - 1<Ctrl+K><tab><tab><tab><tab>
1+1 | {$_*2}<Ctrl+K>%<tab>
(※) 任意の一文字が ( { [ の場合は行末に対応する括弧を補完
Ctrl+K を二回入力した後任意の一文字でその文字の前に $ を追加
function:\a:<Ctrl+K><Ctrl+K>{<tab>
echo PowerShell; ls PowerShell; Get-Process<Ctrl+K><Ctrl+K>{<tab>
}. の後に<tab>で ScriptBlock 型のメンバー名に補完
{ 1+1 }.inv<tab>
コマンド名補完で、エイリアス→関数→フィルター→コマンドレット→スクリプト→パスが通ってるフォルダにあるファイル
の順番に補完されるようにした
コマンドをスペースで区切った最後のトークンに二重引用符が2つある場合に
コマンド名に補完しようとすると一番後方の二重引用符が消える問題修正
長い間消し忘れていた古いコメント削除
Vistaなんだけど、PowerShell入れても、 既存のバッチスクリプトの動作が変になるとか、 そういう心配は全然ナッシン?
うん
528 :
名無し~3.EXE :2009/05/09(土) 20:13:37 ID:G7BvCbwe
えっと、.netベースってことは日本語も使えるの?>>PowerShell cygwin環境の場合、ツールの日本語対応はあきらめてたんだけど、こっちはいけるのかな?
PowerShell自体は日本語使えるけど 日本語対応してない外部ツールが日本語使えるようになったりはしないよ
コマンドラインからdirすると Mode LastWriteTime Length Name ---- ------------- ------ ---- ----- 2008/01/16 12:21 1727 Get-Which.ps1 ----- 2008/10/26 21:35 296 profile.ps1 ----- 2008/01/16 11:29 2471 Use-Clipboard.ps1 になって、スクリプトからdir実行すると LastWriteTime : 2008/01/16 12:21:57 Length : 1727 Name : Get-Which.ps1 LastWriteTime : 2008/10/26 21:35:02 Length : 296 Name : profile.ps1 LastWriteTime : 2008/01/16 11:29:27 Length : 2471 Name : Use-Clipboard.ps1 になるんだけど何で? 出来ればスクリプト中からでも前者の形式で出したいんだけど。
dir | Format-Table
やっぱり日本語版は「Windows力貝」になるのかな
残念それは中国語版だ
窓能殻 じゃないのか…
CodeZineの連載が.NETなライブラリ呼ぶだけみたいになってきてるな。 それがPSの目指すところだとするとちょっと嫌だ。
Win7rcのISEってコード補完利かないのな。 駄目じゃん。
>>535 目指すところを見たいなら本家ブログ見ろって
非開発者に.NETを開放したのも一つの功績ではあるが
>>536 自分で実装できないことは無いが、素直にPowerGUI使え
ちょっとはパーサー使ってみるかってことで エイリアスとパラメータを展開するようにしてみたけど そもそもCLIとメモ帳しか使わない俺に隙は無かった
EDLIN未だについてるんだな。
ちょっとおもしろい > diff 1,2,3 1,2,4 InputObject SideIndicator ----------- ------------- 4 => 3 <= > diff 1,2,3 1,2,4 -IncludeEqual InputObject SideIndicator ----------- ------------- 1 == 2 == 4 => 3 <=
Get-WmiObjectで指定可能な全てのユーザー名の列挙ってWMI使ってできる? いや別にWMIでやらなくちゃいけないわけではないんだけど
Import-CSVのCSVファイル弄る時の便利さは神懸かっとるな PowerShellのお陰で結婚できましたってくらいに
Windows7ももうすぐ。 そうしたら一気に普及するかな。
PowerShell 普及してほしいね。もうバッチファイルや VBScript は消えてほしい。
全角文字がずれるのは、もう直りましたか?
ISE使えでFA
PowerShellはデフォルト設定でスクリプトが無効、起動も遅い バッチやWSHは無くならない
>デフォルト設定でスクリプトが無効 これはいいことじゃないか。WSHの悪夢を忘れたのか? 起動?瞬時に起動するけど。 それにバッチやWSHを置き換えるものじゃないし。 PowerShell、バッチ、WSH、etc組み合わせて使うだろフツー。
>>550 WSHにはお世話になってないから分からないが
PSには.netが扱えるから要らなくね?
PSがコンソール開かない.pswみたいな拡張子も用意してくれよ WSHはそれがきっちり用意されていたのがよかった
>>550 セキュリティ設定を変更するリスクを知らない一般ユーザには
PowerShellスクリプトは存在しないのと同じということなんだが
セキュリティなんてグループポリシーで雁字搦めだろJK
555 :
名無し~3.EXE :2009/06/06(土) 09:23:02 ID:sXWBcVWQ
このJKって女子高生の略なの?
556 :
名無し~3.EXE :2009/06/06(土) 09:35:19 ID:MLCoy+BQ
パワーシェルのコンソールって壁紙設定出来ないの?
うちのPSのショートカットは ウインドウサイズの幅80、高さ10に設定してる。 電卓として使ってるよ。 1+1 とか書いてEnter スクリプトなんかつかわねーぜ
バッチファイルに powershell -command "〜" 使うと何気に便利だな。 奇天烈なfor文を駆使するコードから開放されるからありがたい。 rubyと違ってパス区切りにエスケープ無しで \ を使えるのもありがたい。 複数行を簡単に渡す方法ってないのかな。
-
>>553 正直、わかんない。
その辺の.netプログラムとどっちが危険なの?
プリコンパイルされていない分、アンチウィルスで発見しにくいとか?
>>558 複数行ってのが文字列リテラルの話ならヒアドキュメントでできるよ
>>553 実行ポリシーの変更なんて一行でしょ
さすがにそれすらできない人はシェルなんて使わない方がいい
>>560 ネットで拾ってきた.NETとPSスクリプトのどちらが危険かなんてその
分類だけでは言えない。
究極、多くの人が使ってる(検証してる)、信頼できる人がつくってる、
くらいで判断するしかない。
まぁシェルは短いのならソース全部読んで判断すればいいという話
powershell -command - < hoge.ps1 restrictedでも実行可
>>561 こうやれといえば出来るだろう
同じくこうやれといえばためらいなくUACだって切るのが普通の人
でもそれがどんな意味かはわかってない
??? ためらい無く実行ポリシー変更するならスクリプト実行になんの障害も無いじゃん 分けもわからず実行ポリシー変更しちゃうから危険だよねってことならcmd.exeとかWSHは問題外じゃん 実行ポリシーUnrestrictedにしてダウンロードしたPSスクリプト実行してみ
PS使いこなせない人の・・・・
PS1ファイルには0バイト以上のデータを書き込むことにより任意のコードを実行できてしまう脆弱性がある 例) hoge.ps1 -------- get-childitem \ -Recurse
0バイトでも?
>>566 Windowsにはマウスをクリックすることにより任意のコードが実行できてしまう脆弱性があるんだぜ・・・
noopてNOP?
ゲーム作ってる人、いる?
none
ちょっと作ってくる。
火吹山の魔法使いよろ
やっとキー入力まで来た。
とりあえずここまで。 --押して離す.ps1 1/2 cls $sikaku = "□", "■" $r = $host.UI.RawUI $k = 0..255 for ($i=0; $i -lt 256 ; $i++ ) { $k[$i] = 0 } $f = $true while ( $true ) { if ( $r.KeyAvailable ) { $a = $r.ReadKey("NoEcho,IncludeKeyDown,IncludeKeyUp") $v = $a.VirtualKeyCode if ( $k[$v] -eq 0 -and $a.keydown ) { $k[$v] = 1 $f = $true } else { if ( $k[$v] -eq 1 -and -not $a.keydown ) { $k[$v] = 0 $f = $true } } }
--押して離す.ps1 2/2 if ( $f ) { $coordinate = New-Object System.Management.Automation.Host.Coordinates 0, 0 $r.CursorPosition = $coordinate Write-Host " 0 1 2 3 4 5 6 7 8 9 A B C D E F" for( $y = 0; $y -lt 16; $y++ ) { $s = " " if ($y -lt 10 ) { $s = $s + [char](0x30+$y) } else { $s = $s + [char](0x40+$y-9) } for( $x = 0; $x -lt 16; $x++ ) { $s = $s + $sikaku[$k[$y*16+$x]] } Write-Host $s } Write-Host "ESCキーを押すと終了します。" $f = $false } if ( $k[0x1b] -eq 1 ) { break } } --
うお、ISEの文字列置換って正規表現オプションもあったのか UIやぼったくて完全スルーだった
外部コマンドの起動 外部コマンドの起動&終了待ち 標準出力の取り込み 各種パラメータを指定して起動(ShellExecute相当) 等々の起動関連の使い方のまとまってるサイトってどっかにない?
終了待ち以外は大して悩むところではないと思うが # 外部コマンドの起動 cmd.exe & 'C:\Program Files\Internet Explorer\iexplore.exe' C:\Program` Files\Internet` Explorer\iexplore.exe # 外部コマンドの起動&終了待ち notepad.exe | Out-Null # 標準出力の取り込み $output = cmd /c dir # 各種パラメータを指定して起動 ping -n 5 172.0.0.1
notepad.exe | Out-Null 初めて知った。
Out-Null じゃなくてもいいけどね、パイプ通せば
in actionだと| sortになってったな
スクリプトでなく、普通にシェルとして使ってる人って居る?
いるよ
MS「そうかそれは良かった、これで心置きなくコマンドプロンプトと PSのコマンドプロンプトライクな関数やエイリアスを廃止してやるぜ ゲハハハハ」 って言われても普通に使えちゃうレベルに使える?
>>587 エイリアスが完全になくなると困る (デフォルト廃止ならまだ何とか…)
lsがGet-ChildItemでは7倍以上の差があるし (Tab保管?それでも面倒くせ)
Vistaへの強制配布はまだなの?
PowerShell由来であるgciってエイリアスは消さないだろw sl でディレクトリ移動して gci でファイルリスト表示して ni .\名前 -t d でディレクトリ作成 cpi でコピーして ri でファイル/フォルダ削除して gc でファイル内容表示か… これなら何とかなりそうな…? …あ、でも more 削除されるw
自分で定義すればすむんだからいみない仮定な気がする 俺は普通にシェルとして使ってるよ
どこからがスクリプトでどこまでがシェルなのか良くわからんが powershell.exe起動して何かするってのはよくやるね
とりあえずファイルに起こすならスクリプトで、プロンプトからそのまま使うならシェルじゃない? ファイルに起こすならフルスペルのがかえって読みやすいくらいだけど シェルとして使うのにエイリアス無しはキツ過ぎる …ところで、PSって同一cmdletに対して複数エイリアスがあったりするよね 大概DOS由来、UNIX由来、PSのcmdletの略称に由来の2〜3個かな? そういうのって、どのエイリアス使ってる?
Alias gci Get-ChildItem Alias ls Get-ChildItem Alias dir Get-ChildItem Alias fairu-mirumiru Get-ChildItem
>593 そのエイリアスは無いわーw
おお、PowerGUI Script Editorで -Encoding<space>でAsciiとか選べるようになってるじゃん!GJ! やっと自分でpowershell.exeのタブ補完弄らなくても良くなるのか・・・
ファイルに落せるなら落したあとでcatすればいいじゃんと思うのは俺だけか。
暇なんで作ってみた function Get-Web ($uri) { (New-Object System.Net.WebClient).DownloadString($uri) }
ついでに質問 (New-Object System.Net.WebClient).DownloadString($uri) みたいなのを、 New-Object System.Net.WebClient | invoke-member DownloadString($uri) とか gci | invoke-member Length とかみたいにする方法ないですか?
>>601 $argsとInvoke-Expression使えば出来なくはないけど、ちゃんと引用符でくくらないとメソッドの呼び出しは正しく解釈してくれないぞ
括弧でキャレットが行ったり来たりさせるのがめんどくさいだけなら
(New-Object System.Net.WebClient).onegaitabsankakkowotukete と入力してTabキーを押せばそうしてくれるようにしておけばいい
New-Object System.Net.WebClient | invoke-member DownloadString $uri とかにすれば引用符いらないんじゃね
通貨newって書かせろ new-objectとかなげーよ
確かになんでデフォルトエイリアスにしなかったんだろうね
どっかに理由が書いてあった気がする
プロンプトで打つことがあんまりなさそうだからじゃね? デフォルトエイリアスは全体的にプロンプト向けな気がする
new って動詞じゃないよね? そこが違和感ある
Create-Object Create-Instance コード保管がないと、困難が異端後撃ちたくないねw
newは将来予約語にするかもしれないからって話だったような
Connect-WithCustomers | Get-Feedback | Process-Feedback | Sort Importance | Enable-Change だ、そうだ
$fullnames = New-Object ( [System.Collections.Generic.List``1].MakeGenericType( [String]) ); function using ( $name ) { foreach ( $fullname in [Reflection.Assembly]::LoadWithPartialName($name).GetTypes() ) { $fullnames.Add($fullname); } } function new ( $name ) { $fullname = $fullnames -like "*.$name"; return , (New-Object $fullname[0]); } using System.Windows.Forms $a = new button なんていうお馬鹿テクを思いついたわけさ
615 :
名無し~3.EXE :2009/07/02(木) 00:06:05 ID:6ARzc+LU
>gci -r -force c:\ | ? {$_.Attributes -band [IO.FileAttributes]::Compressed } フラグのチェックってもうちょっと何とかなんないの? $_.Attributes -match "Compressed" あるいはもうちょっと厳密に $_.Attributes -match "\bCompressed\b" あたりが限界か。-matchだと遅そうだな。
短くしたいだけなら $_.Attributes -eq 2048
要するに $_.Attributes -band com まで入力したら後はタブを押すだけで $_.Attributes -band [IO.FileAttributes]::Compressed と展開されるようになるべきだ、と
618 :
名無し~3.EXE :2009/07/04(土) 20:55:12 ID:lpB6WdN7
バッチファイル、cmdからPowerShellのコードを呼び出すにはどうすればいいですか。 たとえば greet.ps1 "hello, ps world" というのを書いて pathext=%pathext%;.ps1 して greet で実行できるようにしたいです。
>>618 powershell -command <実行させる文字列>
試しに、
powershell -command "dir"
とかやってみたら?
それだとできるんだけど長すぎるので… poweshell -command "%1" なんて関連付ければできるのかな。
とりあえず試してみるといいと思うよ
2.0から折角-Fileが付いたのにフォルダオプションから関連付けをISEからpowershell.exeに変更したら powershell.exe "%1" になってしまうという悲劇が待っていそうな悪寒 ちゃんと間に -File 入れるようになってるんだろうか
最近のMSの宣伝は、どっかズレてるからなぁ。
>>624 については、MSがどうこうというよりも
あの記者はいつも知ったかぶって適当なこと書いてる印象が…。
628 :
名無し~3.EXE :2009/07/13(月) 13:00:10 ID:z6wunx4E
末尾に全角ブランクのあるフォルダ名のフォルダをカレントディレクトリにしたいんですけど、 方法無いですか? Set-Locationではダメみたいですが。
629 :
名無し~3.EXE :2009/07/13(月) 14:16:18 ID:z6wunx4E
あとパスの途中に、末尾に全角ブランクのあるフォルダ名があると、 ほとんどうまく処理できないみたいなんですが、仕様でしょうか?
末尾に全角スペースって何に使うのよ フォルダ名変えたほうが利口だと思う
>>629 仕様でしょうか? って言われてもそんなのMSの人間しか答えられないぞ。
まぁそれはともかく
エクスプローラで、末尾に全角スペースついた'test 'ってフォルダ作って
PS C:\Temp> cd 'test '
Set-Location : 指定されたパス C:\Temp\test のオブジェクトは存在しません。
発生場所 行:1 文字:3
+ cd <<<< 'test '
+ CategoryInfo : 無効な引数: (:) [Set-Location]、PSArgumentException
+ FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.SetLocationCommand
確かにおかしいな。バグっぽい気がする。
mkdir 'test ' ってやっても、末尾にスペースのないフォルダが出来るし。
どちらもコマンドプロンプトでは成功する。
632 :
名無し~3.EXE :2009/07/13(月) 16:47:09 ID:z6wunx4E
>>630 サーバの管理。
誰がどんなフォルダを作ってもアクセスできないと困る。
.NET Framework自体が末端の全角スペースに対応していないので PowerShellに限らず、ほぼ全ての.NETアプリケーションで 末端が全角スペースのファイルは扱えないんだよね。 一部のソフトは、独自に対応してるみたいだけど。
糞すぎる仕様だな
今試してみたら、 .NET 3.5 SP1だとダメだけど、 .NET 4.0βだと大丈夫だった。 PowerShellで使われる.NETが4.0になったら直りそうだ。
まあまた3年後の話だな
お題 カレントディレクトリにある 拡張子txtのファイル hoge_001.txt 〜 hoge_999.txt を一括でhogera_001.txt 〜 hogera_999.txtにリネームせよ。 ワンライナーでお願い。
なるべく短く見やすく分かりやすく。
000の例外とか気にしないなら ls hoge_[0-9][0-9][0-9].txt | ren -NewName { $_.Name.Insert(4,"ra") }
640 :
名無し~3.EXE :2009/07/14(火) 08:23:50 ID:gx5T8pRc
>>633 >>635 貴重な情報、ありがとうございました。
管理には使えない場合があるみたいですね。
当分の間、自動処理にはvbsと併用することにしました。
641 :
名無し~3.EXE :2009/07/14(火) 17:44:42 ID:WAY5ATTl
.Netオブジェクトって重い? .NetオブジェクトのPowerShellで書いたスクリプトと同じことを comオブジェクトのvbsでやらせると、かなり速く感じる。
>>637 大ざっぱに
ls hoge*.txt | ren -newName { $_.Name.Replace("hoge","hogera") }
ロード時の重さはいかんともしがたいのゥ
>>641 .NET自体のオーバーヘッドもさることながら、
PowerShellのスクリプトを実行する場合、内部的には
1) スクリプトのコンパイル
2) 実行
のフェーズに分かれていて、1)のコンパイルが非常に遅いという噂がある
これは、スクリプトを事前コンパイルすることで対処できるみたいなので、
特定のスクリプトを頻繁に使うなら試してみたらどうか
ngen で検索すると情報が出てくる
>>644 このスレはいいですね。
2chと言えば、素人に毛の生えたような方が、
他人をバカにすることにより自分のポジションを慰め、
それ以上の情報のかけらも得られないスレも多いのに。
数少ないPowerShellの情報交換の場としてすごく参考になります。
>>641 .netのオブジェクトそのものは、GUIを除けば、あまり重くない。
ls しただけで相当もっさり。 手癖でとりあえず打っちゃってファイルが1000個くらいあるとかなりストレス。 シングルコア性能が後10倍くらい速くなればそれなりに使えそう。
フォルダ分けして整理しなさい
>>648 PS C:\Windows\system32> dir | Format-Table | Out-Host
と
PS C:\Windows\system32> dir | Format-Table | Out-File C:\Temp\test.txt
で相当速度が違うから、体感には画面表示の遅さがかなり効いてると思う。
ngenしたらまず起動速度が速くなったことに感激した。
何回目のループだよw
ちょっと教えてくれ。 ググってもいまいち俺の求めてる物がなかったので、、、 cmdだとバッチファイル.bat作って、中身を mysql -u root -p***** みたいに書いておくとプロンプトが立ち上がるでしょ? これを.PS1でやりたいんだが、どうすればいいんでしょ? PSが立ち上がったが、CMDが立ち上がってるような状態にしかならなくて困ってます。 お知恵をくださいませ〜
XPにWindowsUpdateからPS入れたけど、 起動速いね。 NGENも何もしてない。 ノートパソコンでメモリ1.5G、CPUはCore2DUO。 以前他のCore2DUOのデスクトップマシンで試したときは起動に2〜3秒かかったと思ったんだけど。
ttp://d.hatena.ne.jp/sirocco/20090511/1242070398 $OutputEncoding を シフトJISにすりゃいいだけだけど
BOMなしだとそれでも文字が欠けたりするね
> Set-Content -Encoding UTF8 -Value これはUTF8です -Path utf8.txt
> $OutputEncoding = [Text.Encoding]::Default
> type .\utf8.txt | nkf -s
これはUTF8です
> [Text.Encoding]::UTF8.GetBytes("これはUTF8です")|Set-Content -Encoding Byte -Path utf8.txt
> $OutputEncoding = [Text.Encoding]::Default
> type .\utf8.txt | nkf -Ws
これはUTF8で
普通にGet-Type使えばいいだけだとは思うが
>>654 >PSが立ち上がったが、CMDが立ち上がってるような状態
この意味がわからない。mysqlが走らないってこと?
プロンプトの背景色の話だったら、PowerShellのショートカット以外から起動した場合に黒になるのは正常だが。
>>656 BOMが無いとGet-Contentがエンコーディングの自動検出出来ないみたいだね
> [Text.Encoding]::UTF8.GetBytes("これはUTF8です")|Set-Content -Encoding Byte -Path utf8.txt
> $OutputEncoding = [Text.Encoding]::Default
> type -Encoding UTF8 .\utf8.txt | nkf -s
これはUTF8です
>>657 説明下手で申し訳ないです。
MySQLは起動しますが、マウスでのコピペがDOSプロンプト風に戻ってるのがこまってるところです。
powershellを導入するきっかけになったのが、いちいちメニューを出さないでマウスで文字が選択できて、
右クリックで貼り付け出来る所だったので、それが出来ないと悲しい限りです。。。
>プロンプトの背景色の話だったら、PowerShellのショートカット以外から起動した場合に黒になるのは正常だが。
なるほど、黒画面が正常なのですね。
>>659 >メニューを出さないでマウスで文字が選択できて右クリックで貼り付け出来る所
これは普通のコマンドプロンプトでも、プロパティのダイアログを開いて
[編集オプション]-[簡易編集モード]にチェックをいれておけばすむ話では?
あんまりPCとか詳しくないんですけど、 これを勉強すれば例えば、 WinMxをシェルで操作したり、 DVD Decrypter・DGIndex・TMPGEncを操作して 寝ている間にアニメやドラマの全話数分エンコードする とか出来たりするんでしょうか?
できない
すみません。質問の仕方を間違えてしまいました。 これを使えばMicrosoftのOfficeSoft以外の 例えば拡張子がexeの普通のフリーソフトとかを 操作出来たりするのでしょうか? VLCMediaPlayerを起動して、 フォルダ内の全ての動画ファイルを順に再生 その際、全てのファイル再生において 最初の1:00と最後の1:30はOPとEDなので 再生しないようにするとか・・・。
COMインターフェースを用意してるものは操作できる。 例えばExcelのセルを配列とみなして値ぶっ込んだりとか。 用意してないものはほぼできない。 ウィンドウ検索してメッセージ送って操作するといったことはできなくもないが 非常に面倒でAutoHotKeyでも使った方がはるかにまし。
分かり易い回答有難うございます。 最後に一つだけ。 COMインターフェースとやらを 用意しているのかどうかの確認はどうやるのでしょうか?
>>669 それが自分で調べられない人には無理じゃないかな?
各ソフトの開発者向けマニュアルをじっくり読むしかないねぇ レジストリにある程度は記録されてるけど、全部じゃないし、使い方が載ってるわけでもないし
>>672 >VBSで出来るならPowerShellでも出来る道理なんですよね?
当然だけど同じことがしたいなら、VBSとPowerShellの両方をよく理解してないとできないぞ…。
676 :
名無し~3.EXE :2009/07/31(金) 00:25:47 ID:si70LVvp
Ctrl-Cやプロセスの終了でスクリプトを終了させられた場合でも、何かしらの終了処理を行わせる方法(シグナルのトラップ?)はあるでしょうか?
Ctrl-Cはあるけどプロセス終了にはない
筆者乙
何が出ても近くの市立県立図書館で借りっぱにするだけ
貧乏人乙
むたぐちって確かねらーなんだよな
ビジュアルなCD(Set-Location)を作りたい。 コマンドを打つとフォルダ選択ダイアログが出てフォルダを選択するとカレントディレクトリがそこになる。 function Set-Location-Super{ $sh = New-Object -ComObject Shell.Application $folder = $sh.BrowseForFolder(0, "フォルダを選択してください", 0) if($folder -eq $null){ }else{ Set-Location $folder.Self.Path } } Set-Alias cd2 Set-Location-Super これをprofile.ps1に入れて使ってみたが、ダイアログが後ろに隠れる。 どうしましょ? .NETの方のフォルダ選択を使わなかったのは何か理由があったはず。 特定のOSで動かないとかそんなような理由だった気がする。忘れた。
0じゃなくコンソールのhwndを指定すればいいんじゃないの?
ちっからちからー♪かい、かい、かい! PowerShellの歌を創ってみました。
>>683 結局、COM使ったら Linux系じゃ動かない気がするが…
PS版 ファイラーを作っても良いかもしれんね
687 :
681 :2009/08/04(火) 00:30:45 ID:Y0Szt/Es
>>678 図書館が近くにない田舎者なので買ってみました。
内容が散漫で「これ一冊でサーバ管理業務がこなせる」ようにはならないと思います。
>>686 それならSystem.Windows.FormsのFolderBrowserDialogを使えばいいと思う。
そういう発想もあるのか てっきり2003で動かないとかそういう話かと思ったが
某フォントビューアを使おうと思ったらシェアだったから レンダリングをブラウザに○投げする奴を作ってみた "<html><title>フォント一覧</title><body><h>フォント一覧</h><table border=`"1`">" [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") $fonts = New-Object -TypeName System.Drawing.Text.InstalledFontCollection $fonts.Families | %{ $fn=$_.Name "<tr><td>$fn</td><td>" "<font face=`"$fn`">The quick brown fox jumped over the lazy dog. <br>0123456789 亜唖亞あいうえお</font>" "</td><tr>" } "</table></body></html>" 使い方 ./fontviewer.ps1 > fonts.htm; fonts.htm GAC Version Location --- ------- -------- True v2.0.50727 C:\WINDOWS\assembly\GAC_MSIL\System.Drawing\2.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll なんてゴミが混ざるけど気にしない
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
そういえば標準出力を捨てる時って ls > $null とか ls > "" と書くことが出来るけど、空の文字列を渡すと自動的に ls | Out-Null あたりに読み替えてるのかね つか、ls > $null はともかく ls > "" (がエラーにならないの)って見た目インパクトあるな
読み取り専用属性外す ls *.txt | clear-itemproperty -value "ReadOnly" エラー。なにがいけないの?
そもそも -Value なんてパラメータが Clear-ItemProperty にない
解決! 読み取り専用属性(ReadOnly)を解除する Get-ChildItem *.txt | Set-ItemProperty -Name Attributes -Value "Normal" ls *.txt | sp -n attributes -va "normal"
読み取り属性以外も消されると困るならちゃんと書いた方がいいと思うけど ls *.txt -Force | ? { $_.Mode -like "??r??" } | % { $_.Attributes = $_.Attributes -bxor [System.IO.FileAttributes]::ReadOnly } そういえばビット演算の代入演算子なかったんだね
テキスト嬲るならPowerShellとPerlどっちがいい?
テキストならPerlじゃね
そこであえてawk
XMLとCSV以外の対応はまあ、普通にふつー、だからな
電卓代わりに使ってます。 PS > 1234*456/3 187568 PS > こんな感じに入力して187568をまた計算で使いたい時、うまいやり方があるのでしょうか? 直前の実行結果のようなシェル変数とかがあれば PS >$$$*57 10691376 PS > こんな感じに出来るのですが
$r = 1234*456/3 $r $r + 100
>>705 新しいプロンプトが現れる度に実行される関数があるだらう?
延びに延びたけど、
>>73 って公式本だったんだな
in Action 2 邦訳マダー?
やっとXP/2003向けにも2.0RC来そう
PS1の時もVistaに間に合わなかったし、 ちょっとここの開発チーム遅すぎだな…。
RC来たけど、やっぱりSP3にしとかにゃならんか めんどくさくて全然やってないな
とりあえず俺が報告したバグは直ってた しかしISEは結局垢抜けないままだなー
PowerShellのスクリプトの中で外部コマンドを実行するときに、 そのコマンドラインを引数と一緒に標準出力に出したりとかってできるの?
外部コマンドだけでいいんならそのコマンドをに引数渡して実行するだけのバッチファイル作って それを呼び出すのが手っ取り早いんでない
ファイルhoge.batを作り、中身を %1 %2 %3 %4 %5 %6 %7 %8 %9 にして、パスの通ったディレクトリに放り込んでおく。 「hoge <実行したいコマンドライン>」で引数が8個までなら実行できる。
>>715 同じことはPowerShellなら関数を作るだけでできるね。
ただ、それを毎回呼び出さないといけない。
Makefileの各ターゲットで実行するコマンドみたいに、
外部コマンドを実行しながら標準出力にそのままコマンドと引数を垂れ流してくれるような動作がほしい。
バッチファイルの標準の動作みたいな。
>>717 ひとまず外部コマンドに対してできればいいんだよね?
具体的な話をすると
md C:\batch
gcm *.exe | % { Set-Content -Value ($_.Name + " %*") -Path "C:\batch\$($_.Name -replace '\.exe$').bat" -Encoding Ascii }
これで既にパスが通ってるディレクトリの実行ファイルに対しては対応するバッチファイルを作れるから
後は profile.ps1 の中で
$env:Path = 'C:\batch;' + $env:Path
としておけばいいんでない?ということなんだけども
テキストエディタとしてのISEのスレはそれなりに需要あるかな 標準でやっとこさあれだけのものが使えるようになったってのは、それなりに大きいことだと思う
>>260 - で始まる演算子の後と、 $_ を左辺値に使った場合でも定数補完が有効になるようにした
ls | ? { $_.Att<tab> -band a<tab>
>>> ls | ? { $_.Attributes -band [System.IO.FileAttributes]::Archive
Ctrl+W の後に Tab で .NET/WMI のクラス名や WMI の名前空間をフルネームに展開
[arraylist<Ctrl+W><tab>
>>> [System.Collections.ArrayList]
New-Object button<Ctrl+W><tab>
>>> New-Object System.Windows.Forms.Button
Get-WmiObject product<Ctrl+W><tab>
>>> Get-WmiObject CIM_Product
gwmi -Namespace ms<Ctrl+W><tab> -Class Batt<Ctrl+W><tab>
>>> gwmi -Namespace ROOT\CIMV2\ms_409 -Class CIM_Battery
おそらく今回で1.0向けに弄るのは最後
というかこの更新自体弄ったのは数ヶ月前だけども
ちょいとわかる人教えて欲しい exeファイルを実行するとき、「"」を含むパラメータを渡したいんだが方法はあるだろか。 手元でやったところでは、"が消えてしまって困ってる。 hoge.exe "hoge.aaa"#xxx "hoge.bbb"#yyy とか実行したいんだけど、 hoge.exe hoge.aaa#xxx hoge.bbb#yyy が実行されちゃってる。
>>722 PowerShellからのアプリ呼び出しは
PowerShellの解釈 => C言語などのアプリの引数解釈の2段階になるので、両方の注意が必要
まず、アプリhoge.exeがVC++などで記述されてるとして(引数の解釈はコンパイラによって異なるので)、
アプリ自体は
hoge.exe \"hoge.aaa\"#xxx \"hoge.bbb\"#yyy
のような感じでパラメタを渡す必要がある。
これをPowerShellから呼び出すにはパラメタをシングルクォートで囲めばよい、はず
PS C:\>.\hoge.exe '\"hoge.aaa\"#xxx' '\"hoge.bbb\"#yyy'
でいけるんじゃないかと思うけど
724 :
722 :2009/09/25(金) 01:38:18 ID:jBItlDOl
だめでした いろいろ試したけどもダメそうなんで、 System.Diagnostics.Process 使いました。
New-Object Microsoft.PowerShell.Host.ISE.ISEEditor powershell_ise.exe なら ISEEditor クラスは作成できるけど ウインドウを表示するための Application クラスが作成できない New-Object System.Windows.Application 逆に powershell.exe -sta だと ISEEditor クラスが作成できない(powershell_ise.exe で読み込んでいるアセンブリは読み込んだ状態) ISEEditor は System.Windows.Window の派生クラスだから これができれば色々弄ったりできるんだけど 難儀だなぅ
727 :
722 :2009/09/28(月) 10:22:56 ID:Oq1bEKYP
$file = "hoge.exe" $arguments = "`"hoge.aaa`"#xxx `"hoge.bbb`"#yyy" $info = new-object System.Diagnostics.ProcessStartInfo $info.filename = $file $info.arguments = $arguments $info.useShellExecute = $false [System.Diagnostics.Process]::start($info).waitForExit() こんな感じでっす
729 :
722 :2009/09/30(水) 10:35:04 ID:VuL+3+pF
> 728 $file = "hoge.exe" $arguments = "`"hoge.aaa`"#xxx `"hoge.bbb`"#yyy" &$file $arguments ではだめなので、そういうわけでもないようです。 奥が深い。
一番使いやすくなければならない外部コマンド呼び出しで手間取ってどうするんだよw mkvextract tracks MOVIE_nn.mkv 1:VIDEO_nn.264 2:AUDIO_nn.aac するときに1:の部分で手間って 結局、テンポラリをリネームして逃げたな System.Diagnotice.Processを使う方法は思いつかなかった
>>729 $arguments と書いているから
コマンド 引数1 引数2 引数3・・・ のような形になることを期待してるんだろうけど
&$file $arguments では スペースで区切られたひとつなぎの文字列を渡してるだけだよ
やるならこう
Invoke-Expression "$file $arguments"
あ、ごめん#が入ってるから
$arguments = '`"hoge.aaa`"#xxx `"hoge.bbb#`"yyy'
Invoke-Expression "$file $arguments"
みたいにする必要もあった
やっぱ
>>723 のから\取り払って使った方が分かりやすいと思うよ
hoge.exe '"hoge.aaa"#xxx' '"hoge.bbb"#yyy'
あ、すごい2.0RCではWrite-Progressとかで日本語が二重に表示される問題直ってる
これは素人でも使っとけみたいなの有りますか
とりあえず Sort-Object と Select-Object -First 1 の組み合わせだけ覚えておけばいいよ もしくは Where-Object
>>734 ・電卓代わり。 1+1とか入力してEnter押せば計算結果が表示される
・プログラムを強制終了
例)Excelを強制終了
Excelが起動しているか確認
ps -n excel
Excelのプロセスを殺す
kill -n excel
・カレントディレクトリ(フォルダ)のファイル一覧をテキストに出力
ls -n > list.txt
・環境変数一覧を表示
ls env: | sort -p name
・環境変数PATHを分解して表示
$env:path.split(";")
psのせいでcmdでlsする頻度が高くなったような気がする
>>737 Windows入れたら最初に入れるアプリが大抵cygwinなオレは、
lsがいつもある環境だからPowerShell組み込みの互換コマンドの必要性があまりない。
使えば便利そうなんだけど、いまいちまともに使ってないんだなぁ。
SFUのlsもなかなかいいです
>>734 #現在のディレクトリ内のもっとも古いファイルまたはディレクトリを見つける。
(dir * -r | sort lastwritetime)[0]
#1000日後の日付を求める
[datetime]::now.adddays(1000)
SUAとかいう名前になってなかった?
>>739 ちょ、後から出たXP版は英語のままなのに・・・
そういえば1.0用のchmヘルプは結局各国語版でないのか
なるほど、Windows7とServer 2008 向けに開発してるから、 各国語用の対応は、古いOS用には提供が遅れるんだね。 RC版をインストールする時には、以前のものをアンインストールして からインストールしないと動作がおかしくなるかもしれないので注意。 PowerShellはOSの修正プログラムとして提供されてるんで、 製品版になると、WindowsUpdateで自動更新の対象になるのかな。
職場のVISTAと自宅のXPに2.0入れたが、両方とも日本語版だよ、ISEもヘルプも ただオフィスソフトなみにメモリ食うなぁ
>>747 あれ、俺の場合は英語だわ、なんか英語に設定しちゃってたかな
インストーラの差し替えがあったような感じはないんだけど
750 :
名無し~3.EXE :2009/10/12(月) 15:27:43 ID:PqlaexLC
pdfファイルを開いて、後で閉じたいんですが、どうやればいいんでしょう? よろしくご教示下さい。
>>748 Microsoft Connect に登録してる?
>>750 Adobe Readerの話?
オーソドックスにpidを調べて、killしたら?
753 :
名無し~3.EXE :2009/10/12(月) 15:50:34 ID:PqlaexLC
>> 752さん、 はい。adobe reader です。 Get-Process *acro* でpidを調べようと思ったのですが、 複数PDF文書を開いても、それぞれのプロセスができるわけでは ないみたいで、思った文書だけ閉じる方法が分かりませんでした。 $a = New-Object -comobject acroexch.app とかやれば、acrobat reader が起動できて、 そこから文書を開けば、その文書だけについて いろいろやれるのかと思ったのですが、 うまく行かないのです。(T_T)
ieかwebbrowserでpdf開けば、個別に閉じられるよ
755 :
名無し~3.EXE :2009/10/12(月) 16:32:37 ID:PqlaexLC
>> 754 さん なるほど、ieで開くという手がありましたか。 普段、Acrobat Reader で開くようにしていたので、気がつきませんでした。 下記のようにして、うまく行きました。 ps > $ie = New-Object -com "InternetExplorer.Application" ps > $ie.Visible = $true ps > $ie.Navigate2("C:\hoge.pdf") ps > $ie.quit() たぶん、ie 起動時のオプションとかでもっとスマートにはできると思うので、 調べてみます。 ありがとうございました。 ということで、やりたかったことは一応できるようになったのですが、 acrobat reader (かPDF文書そのもの)をオブジェクトとして生成して コントロールすることはできないのでしょうか。 興味が残ります。
FormにAcroPDF.PDFを貼り付ける
>複数PDF文書を開いても、それぞれのプロセスができるわけでは >ないみたいで、思った文書だけ閉じる方法が分かりませんでした。 acrord32.exe /n で別プロセス
>>753 Adobe Acrobat 9.0 TypeLibraryがCOMオブジェクトとしてシステムに公開されてるので、
これを操作したら細かく扱えるかもしれないよ?
Visual Studioで参照設定に加えたら細かく調査できると思う。
そこから改めてPowerShellに置き換えたらいいんじゃないかな。
ドキュメント化されてないようなインターフェイスはそうやるのが一番。
ドキュメントはAdobeのサイトにあるだろ
>>761 ja-JP_Core_XP_x86_KB968930.exe を落としてるけど、
Connectに参加してると中身が違うバイナリになってるってこと?
ISE上でF1キー押した時に見れるヘルプ以外はちゃんと日本語化されてるけど・・・
763 :
名無し~3.EXE :2009/10/12(月) 17:58:30 ID:PqlaexLC
750です。 みなさんありがとうございます。 いただいたアドバイスを元に試してみたいと思いますが、 まだcom とかがよくわかっていないレベルなので、少し時間がかかりそうです。 遅くなりそうなので、一旦お礼を申し上げて、しばらく勉強しようと思います。
>>762 おれのはヘルプも全て日本語だぞ
> ja-JP_Core_XP_x86_KB968930.exe を落としてるけど、
それで合ってると思う
一緒にダウソできるリリースノートに既知の問題でヘルプ表示のローカライズなんたらって書いてあった気がする
>>764 あ、WINDOWSフォルダ以下を検索したら見つけた
C:\WINDOWS\Help\WindowsPowerShellHelp.chm
これが日本語化されたヘルプやね
俺の環境だとなぜかこっちのヘルプを開くようになってた
C:\WINDOWS\Help\MUI\0411\WindowsPowerShellHelp.chm
やっぱ日本語はええどすなー
あーそっか、以前CTP3の時にC:\WINDOWS\Help\MUI\0409にあった英語のヘルプを 0411にフォルダ名変更してCTP3のISEから開けるようにしたせいでCTP3を アンインストールしてもこのフォルダとヘルプが削除されなくて 今回RC版のISEは律儀にC:\WINDOWS\Help\MUI以下のヘルプを探してからC:\WINDOWS\Help内を探すから CTP3の時の英語版のヘルプが開かれていたわけね・・・orz
>>754 おもしろいな。その発送はなかった
>>763 ちなみに、正攻法は
System.Diagnotice.Processを使って
さらに
>>757 で個別のプロセスで起動する。 (これは知らなかった)
あとは、生成したSys(ry).ProcessのProcessIdとかそれっぽいプロパティにアクセスすればpidが取得できる
正攻法は Process.CloseMainWindow メソッド (System.Diagnostics) だろ
Win7のcmd窓って刷新されたの? いい加減他のフォント使いたいぜ
>>769 コマンドプロンプトのフォントって昔から変えれなくね?
普通にStop-Process コマンドレットだろ
複数ファイルの同時バッチ処理ってどうしてる? 一番簡単なのは dir *.hoge { .\hogera.exe $_ } だと思うけど これだと hogera.exeがシングルスレッドの時にすごく効率が悪い だから、複数のファイルを同時に処理したいが、その手っ取り早い方法が思いつかない 誰かいい案ないですか?
hoge.exeを複数用意しとけばいんじゃない
>>772 Makefileを使えば複数の依存関係を別プロセスでやってくれる。
Makefile相当のことをやってくれるPowerShelのスクリプトも開発されている。
オレが自分で作ったものも手元にある。
>>774 dir | parallel { ... }
な汎用的な関数を作ろうとしてるが、スクリプトブロックを非同期で実行する方法がわからん。
逆にそれさえできればどうにかなるんだがなぁ…
プロセスの非同期起動は割と簡単にいきそうだから、あきらめてそれを使うか…
makefile使うくらいならほかの方法を考えたい
>>773 えっ?
とりあえず、途中まで張っておく function plr { param([System.Management.Automation.ScriptBlock] $proc) $items = @($input) # なぜか最後にからの要素がつく $procs = ${env:NUMBER_OF_PROCESSORS} #なぜか1要素多めに格納される? $blocks = ($items.Length-1) / $procs for ($i = 0; $i -le $blocks; $i++) { for($j = 0; $j -le $procs; $j++) { #下を非同期に実行できれば…プロセスなら簡単なんだけど $items[$i*$blocks + $j] | % $proc } #スクリプトブロックの終了確認…プロセスなら簡単なんだけど sleep 1 } }
なんだ実行ファイルじゃなくてスクリプトブロックの同時実行か、2.0でStart-Job使うよろし
>>777 なんかあっさり解決しそうでワロタw
MS Downloadを探してもPS1しか見つからないと思ったら、MS Connectってところにあった。わかりにくいぞw
それと、PS2はいつの間にかCTPからRTMに変わったのね。
これで勝つるw
System.Collection.Queryを使う予定だけど、なんかそれ用のコマンドレットも見つかりそうな気がする。
おらなんかwktkしてきたぞ。 午後の授業がめんどくせーw
779 :
名無し~3.EXE :2009/10/15(木) 19:13:08 ID:cxoBTWoE
>>780 なんでインプットボックスとメッセージボックスが無いん?
System.Windows.MessageBoxはインスタンス生成して使うような使い方はしないし インプットボックスに相当するものがWPFにはないからじゃない?
PowerShellからお手軽にインプットボックスは出来ないつーこと? なんだかなぁ
$j = Start-Job -ArgumentList @({}) -ScriptBlock { Get-Member -InputObject $args[0] } Receive-Job $j なぜか System.Stringになる。ScriptBlockは引数として渡せないの?
[Microsoft.VisualBasic.Interaction]::InputBox() でできるんだから別に困らんが?
>>785 PSからお手軽にWPFを利用しようというのがWPSなのに
インプットボックスなどのよく使うアイテムが
単純なコマンドレットとして用意されてないことが問題。
それをいったら、WPSがなくってもPSからWPFだってFormsだって呼び出せるから
WPSなくても困らない。
いちいちVBをロードするのが、、、只でさえ重いのに
Start-Job に渡すスクリプトブロックの中にスクリプトブロックを渡せないかな? $present = {...} # 渡したいスクリプトブロック $jobScript = { & $present } # これを処理したい $closure = $jobScript.GetNewClosure() # よくわからないけど、それっぽいもの Start-Job { & $present } # -> 親の変数を継承しないらしく、$presentが見つからないとどやされる Start-Job $jobScript # -> 上に同じ Start-Job $closure # -> 上に同じ Start-Job -ArgumentList @($present) { & $args[0] } # $presentを勝手に実行してるらしく、$args[0]に実行結果が入ってる。 Start-Job -InputObjecct $present { & $input } # スクリプト ブロックは、入力を使用せずに評価できません。 # というエラーが出る。 (つまりどういう事なんだ?) $present | Start-Job -InputObject { & $input } # $present.ToString()の結果が$inputに入ってる。文字列に強制的にキャストされたのかも。
一応は、これで出来るよ $a = new-object -comobject MSScriptControl.ScriptControl $a.language = "vbscript" $a.addcode("function getInput() getInput = inputbox(`"Message box prompt`",`"Message BoxTitle`") end function" ) $b = $a.eval("getInput")
>>783 PowerShellはコマンドプロンプト、バッチファイルの置き換えを
目的に開発されてるんだから、GUIなんて無くて当たり前。
そういうのは普通に.NETでアプリを書けということ。
VBSのがつおいな
VBS終わったな
実測せずにMicrosoft.VisualBasic.dll読み込むから遅いといっても全く説得力がない 手段が目的じゃないならRead-Host使えばいい
>>793 Read-Host いいねぇ
メッセージボックスは何か方法ある?
>>794 -Confirmパラメータを持つコマンドレットはそれを指定すれば実行のはい/いいえの選択はできる
ひとつひとつにつけるのが面倒なら$ConfirmPreferenceの値をLowかMidiumに設定する(詳しくはabout_Preference_Variables)
PowerShell 2.0なら任意の関数でも$PSCmdlet.ShoulProcess()で同じことができるようになった(about_Functions_Advanced)
文字列を表示したいだけなら文字列を引用符で囲むだけ(文字と背景の色を変えたいならWrite-Host)
XP向け2.0ってもう直ぐ出る?
>>797 昨今のMSの態度を考えれば、XP向けが出る可能性はほとんど無いような気が……。
正式版はまだでも、RTMでてるから 個人ならそれ使えばいいんでないの? 正式版が出ても、全てのXPにインストールされるとは限らないし… (未だにIE7以前が駆逐されてないように)
実際にリリース候補出してて、Win7版完成したので数ヵ月後にリリースしますって言ってる現状で なぜ可能性はほとんどないになるのかさっぱりだ
>>800 君が何を言ってるかさっぱりだ。
XP版の話をしているのに7版がありますって言われても。
XP版は出るだろ。他より遅れて。
>>801 君が何を言っているかさっぱりだ。
XP版の話をしているのにWin7版の話をしていると思うなんて。
>>803 それは君の文章がへたくそだからだと思うよ。
806 :
名無し~3.EXE :2009/10/20(火) 09:20:40 ID:lhcp1Yvs
>>804 それは君の頭がへたくそだからだと思うよ。
808 :
797 :2009/10/21(水) 03:43:11 ID:xg49Ddsj
XP向けが出るという話は知ってます。 RC版が公開されてるのも知ってます。 RTMが公開されるのは知らないです。(URL教えてください!) win7に合わせてリリース?なのかどうかは知らないけど 22日にパーティー云々とblogにありました。
ついでにそのコメント欄読んでみ
810 :
797 :2009/10/23(金) 16:02:10 ID:hBnB5ont
今日の時点で一、二週間以内に xp,vista,2k3用のが出るらしいです。
-join演算子と-split演算子がいい。鼻血でそう。
Win7発売されたのに一向に盛り上がらないねここ
これさぁ、ダブルクリックで実行したり、エクセルとか他のプログラムから呼んで実行したりとかは、できねーの??
>ダブルクリックで実行したり セキュリティの関係上、「わざと」初期設定では出来ないようにしています。
初期設定変更すると出来る裏技があるの??
>>813 どっちもできるよ。
System.Diagnotice.CodeDomとかからは扱えないけど
System.Management.Automationとかそれっぽい奴を使えばできるはず。つうか、ググレカス
Excelで直接.netできるようになったのか知らんけど、
簡単なことなら標準入出力で通信すればいいんじゃね?
そう言えば、いつの間にか*.psc1に関連づけされてるけど、これって何?署名済みスクリプトファイル?
>>815 ヘルプ嫁に聞け
Get-Help about_signing
Get-Help about_scripts
Get-Help about_execution_policies
デフォルトでのセキュリティの確保 PowerShellのファイルの関連付け PowerShellでは、 .ps1拡張子を持つファイルがデフォルトでnotepad.exeに関連付けられます。 これは、攻撃者がどうにかしてスクリプトをコンピュータに持ち込み、ユーザーがこのスクリプトを うっかりダブルクリックした場合、スクリプトが実行されるのではなくメモ帳で開かれることを意味します。 デフォルトでのスクリプト実行の禁止 PowerShellは、デフォルトではスクリプトを実行しないようにインストールされます。 その場合は、対話型のコマンドラインインタープリタとしての使用に限られます。 スクリプトを実行するには、PowerShellの実行ポリシーを変更して、スクリプトの実行を 明示的に許可しなければなりません。
ありがと
あああ、出来ない… ISEから実行できるが、ショートカット作ると想定した動作しない、なんで? ↓ test.ps1------------- $age = read-host "Please enter your age:" $a = new-object -comobject wscript.shell $b = $a.popup($age,0,"Test Message Box",1)
ユーザーが安易にダブルクリックをして意図せず実行してしまうことがないようにしよう、というのは理解できるんだけど cmd.exeや「ファイルを指定して実行」する場合は自分でps1スクリプトパスを入力するんだから、意図せず実行する余地はないわけで これらに対する関連付けもデフォルトで無効になってるのはやりすぎだと思うんだよなー 根本はPowerShellじゃなくて前者と後者の関連付け設定が一緒くたになってるWindowsの問題なんだろうだけど もし別々に設定できるならその辺までしっかりやっといて欲しかったな 関係ないけど2.0からは右クリックのコンテキストメニューにPowerShellスクリプトの実行が加わってるよ
823 :
821 :2009/10/25(日) 20:57:10 ID:y+ME4mPZ
>>821 はショートカットで出来る方法ありませんか?
ISEに直接書き込むんじゃなくて test.ps1に保存したものをISEで開いて実行するのは出来てますか?
なんだろう。 デスクトップにtest.ps1を作って 右ドラッグでショートカット作成。 ショートカットのプロパティを開いて リンク先 C:\Users\●●●●\Desktop\test.ps1 の左側に powershell と入力し、 powershell C:\Users\●●●●\Desktop\test.ps1 にする。 OKで閉じる。 そうするとショートカットのアイコンが変わる。 ダブルクリックすると入力プロンプトが出てくる。
>>826 恐縮です、
>>821 はISEから実行するつと、Please enter your age を表示させれます
"Test Message Box" に値を返せます
ショートカットからだと、プロンプトが出るのみで、何も起こりません
>>822 間違って実行しないようにするんなら、テキストファイルのアイコンじゃなくて、PowerShellのアイコンにすれば気がつくし
その理論なら、実行ファイル(*.exe)はdebugとかリソースエディタに関連づけするべきだし今までのバッチファイルもテキストエディタで開くように修正パッチを配るべき。
結局、バッチファイルがpowershellの実行ポリシーを書き換えて、
スクリプトを生成して、実行するなり、標準入力へ流し込めば、現在の設定関係なしに実行できてしまうんだから実行ポリシーって意味ないよね。
逆に、直接信用ならないところから落としてきた実行ファイルが、
NTFSのフラグをみて、実行時にダイアログ出すように
powershellのスクリプトファイルでもそうした方がシンプルだと思うんだよな。
テキストのスクリプトファイルに証明書を添付するのはおもしろいと思うけど、
数回しか使わないようなスクリプトを書いた場合、直接実行できないというのは不便きわまりない。
個人でCAを設定して立ち上げるのはめんどくさいし、他の環境に持って行ったら再利用できない。
うちだと ショートカットダブルクリックで Please enter your age:: が出てくる。 >プロンプトが出るのみで、何も起こりません プロンプトが出っぱなし? プロンプトが一瞬出て消える?
PowerShell "C:\xxxxxxxxxxxxxxxxx\test.ps1" ぱすに空白を含んでいる場合、 PowerShell -File "C:\xxxxxxxxxxxxxxxxx\test.ps1" とやったらうまくいった。
>>829 > うちだと
> ショートカットダブルクリックで
> Please enter your age::
> が出てくる。
検証アリガト
-noexit 入れてたのでプロンプト出っぱなし、-noexit 消したらドス窓みたいの出てすぐプロンプトも確認出来ないで消える
>>831 おおお、thnx
空白含んでたので、ダブルクオートで囲ったがエラーだったので、シングルクオートで囲った
-File 付けたらエラーで、さらにダブルクオートに戻したら、、デケターーー!!
皆さま有難うございました<m(__)m>
>>828 やーさすがに一段目後半の内容はPowerShellでどうにかする問題ではないと思うよ?
実行ポリシーについては、バッチファイルから実行ポリシーの書き換えのような操作ができる、
つまり管理者権限を握っている時点でセキュリティもへったくれもないよねってのがMSの見解
ちなみにネットから落としてきたものかどうかの確認はPowerShellもZone.Identifierを使って行ってる
署名を手軽に管理・編集するコマンドは欲しいねー、署名とかろくにしたことねーやw
Scripting.FileSystemObjectを事実上使い物にならなくされたWSHの二の舞を避けるために 何でこっちが気を回さなければならんのだ
thx 早速、ダウンロード中
適用されませんになってインスコできねぇ。
外部プログラムから標準出力の文字列を受け取る定石的な方法ってある? 何も考えずに $str = hoge.exe したらStringの行ごとの配列が代入されて使い物にならない $str = hoge.exe | Out-String したら、2回開業されて空行だらけになるし… そのままString型として取得できないかなぁ
840 :
名無し~3.EXE :2009/10/28(水) 09:13:36 ID:BoDfFSXm
>>839 $str = [string]::join("`n", (hoge.exe))
ではダメか?
841 :
838 :2009/10/28(水) 11:09:08 ID:rKNC0ZAH
環境書いてなかたorz vista ult x64 sp2 phenom 9550 ram 8GB
質問です。宜しくお願いします。
環境変数TEMPをPowerShell側(CUI)で変更しましたが、システムプロパティ側(GUI)で確認すると反映されません。
設定直後も、OS再起動後も反映されません。PowerGUIで設定しても状況は同じでした。
実際OS側でアクセスしてるのも、システムプロパティ側で設定してるフォルダの様です。ファイルの更新日時が
変更されてます。対して、PowerShell側で設定したフォルダには何も入ってない状態です。(設定して約6時間経過後確認)
1.PowerShell側はg:\temp(途中色々試してますが最終的な値)。システムプロパティ側はd:\tempのまま全く変わらない。
尚d:\tempは、システムプロパティ側(GUI)で過去に設定した値です。
http://img.wazamono.jp/pc/src/1256693863552.jpg 2.PowerGUI側ではg:\temp。システムプロパティ側ではd:\temp。PowerGUIでもシステムプロパティの値が変更されない。
http://img.wazamono.jp/pc/src/1256696415458.jpg OSはVISTA sp2です。PowerShell2.0(1.0を削除して2.0入れたつもりなんだけど・・・2.0で動いてるのか不明)
OS再インストール後の設定を、CUIで短時間に済ませたいと思い3日前からPowerShellを弄ってます。
>>842 システムプロパティの値はレジストリに入ってる値を変更しないとダメだよ
レジストリのどのキーに格納されてるか とか
powershellでどうすればいいか はぐぐれ
844 :
842 :2009/10/28(水) 12:10:54 ID:XAjJ/yfL
>>843 そういう手順が抜けてたのですね・・・まだまだ精進が足りないようです。
お昼食べたら調べてみます。ありがとうございます。
>>838 プレリリース ビルドから最終リリースへのアップグレードはサポートされていません。
Windows Management Framework、Windows PowerShell、または WinRM のプレリリース (CTP、ベータ リリース、
またはリリース候補 (RC)) バージョンからこの最終リリースへのアップグレードはサポートされていません。
プレリリース バージョンをアンインストールしてから、このパッケージをインストールする必要があります。
これじゃないか?
>>842 自プロセスの環境変数を設定しても、
システムや親プロセスには適用されない。
>>843 レジストリを直接設定するよりも、
シェルオブジェクト経由か何かの
ほうがいいのでは。
そういうの、なかったっけ?
>>846 なるほど。たしかにあった
[Environment]::SetEnvironmentVariable("temp", "C:\foo", [EnvironmentVariableTarget]::Machine)
みたいな感じでできる
RCの頃よりバージョン番号下がってる不思議@XP
849 :
名無し~3.EXE :2009/10/29(木) 00:48:18 ID:dH8Wu+F1
PowerGUIむちゃくちゃ使いやすいな。 それに比べてWin7についてくるエディタしょぼい
ISEはフォントがどうにもな 変更できるにはできるけどGUIのダイアログとかもないし
PowerShellのコンソールの文字がXPでビリビリ振動してるんだが Vistaや7でもそうなの?何か気持ち悪い
それは使ってるモニターが寿命なんじゃなかろうか
和んだw
ISEのキャレットのデスクトップ上の座標を取得することってできるんかな Add-TypeでGetCaretPos関数読み込んで使ってみたけど毎回 0,0
2.0がWindows7に標準搭載されてるのになんで公開されないんだ
857 :
名無し~3.EXE :2009/11/11(水) 16:15:05 ID:rFbHStmH
ISE抜きにしてもPowerShellは随分デバッグ機能に力入れてるな いやいいことだけども
クラスの継承はできないのけ?
そりゃまあクラス定義自体できないし Add-MemberやNew-Module使えば似たようなことはできるけど
>>860 VBA思い出した。アレは最悪な環境だったな
862 :
名無し~3.EXE :2009/11/14(土) 10:15:27 ID:4AciAAP1
クラスのようなものを作るだけなら、適当なグローバル変数、例えば、$global:__class__を連想配列として、<クラス名>をkeyとして、 <クラス定義>をvalueとして登録すればいい。 面倒なのはクラスの継承か……[scriptblock]同士を足すことができないようだ。
New-Module と Import-Module を使うと $module1 = New-Module -ScriptBlock { function hoge {"hogehoge"}; } $piyo = New-Module -AsCustomObject -ScriptBlock { Import-Module $module1; function fuga {"fugafuga"}; } PS > $piyo.hoge() hogehoge PS > $piyo.fuga() fugafuga とかまあそんな感じ
クラスの継承って言葉が出てくるならAdd-TypeでC#なりなんなりのコード読み込ませる方が馴染むとは思うよ
>>864 PSでC#のソースを生成してAdd-Typeする関数を定義するのですね。わかりますん。
>>865 生成するというか、派生クラスの定義は自分で書くんじゃない?
(C#とかみたいな)クラスの継承がしたいけどやり方がわからない(というかできない)ということかと思ったから
だったらAdd-Type使えばクラスの定義だけ自分が(.NETの)クラスの継承の仕方わかってる言語で書けるから
その方が手っ取り早いと思うよ、ということだったんだけども
リフレクションで無理やりクラス作ってるサイトがあった気がする
868 :
名無し~3.EXE :2009/11/18(水) 13:20:21 ID:NP3L9uA6
XP版だが、 start-job { dir } みたいなことをやると、ジョブが終了しないようだ。しかも、このジョブから結果を受け取れない。 ジョブの外側のものを読み書きできないのか?と思いきや、start-job { ps }は問題なく機能する。 どうなっているんだろう?
>>868 Start-Job {dir} に関しては値受け取れるよ
# 当方の環境は2003ですが…
たぶん、処理が完了する前にReceive-Jobしてるとか
そのまま入力待ちになってるとかじゃないかな?
Start-Job {dir} | Receive-Job じゃなくて
Start-Job {dir} | Wait-Job | Receive-Job してみたら?
>ジョブの外側のものを読み書きできないのか? それに関しては、「できない」 &{ $a = "hoge" $j = Start-Job { echo $a ; $a = "moge"; echo $a } Wait-Job $j Receive-Job $j echo $a } してみて まあ、別のスレッドで処理してるわけだから、メモリを保護するために当然の機構ではあると思うんだけど…
>>788 で報告したことの繰り返しになるけど
ジョブに何か渡したいならArgumentListで渡せば良いんだけど
スクリプトブロックに関してはなぜか渡せないんだよ。
InputObject(pipe)に渡す方法もあるけど、こいつもスクリプトブロックは渡せない
XMLか何かにシリアル化してわたすかな…
872 :
名無し~3.EXE :2009/11/18(水) 19:28:34 ID:NP3L9uA6
>>869 start-job { ps } のほうは処理が終了していなくても、途中結果を受け取れる。
途中結果を受け取れるものとそうでないものがあるんだろうか?
排他機構がないので、安全策が取られているのか?
このあたりが不透明で困る。
バックグラウンドジョブはスレッドじゃなくてプロセス起こして実行してるよ(フルサイズのリソース消費するわけじゃないけど)
プロセス間の値の受け渡しもCLIXML形式でやってるけど、
CLIXMLをデシリアライズする時スクリプトブロックは文字列になっちゃうみたいだね
ひとまず文字列で渡して[scriptblock]::create(文字列)とかInvoke-Command "{" + 文字列 + "}"
とかで対処して暇なときにConnectにでも投げればいいんじゃないかと
>>872 ジョブが終了しないんじゃなくて、単に時間が掛かってるんじゃない?
Start-Job {ls} だと [Environment]::CurrentDirectory が返すフォルダを見に行くから
そこにファイルが大量にあったりすると結構時間掛かる
874 :
名無し~3.EXE :2009/11/19(木) 09:22:13 ID:psUdTuDF
>>873 単に時間がかかっているのではないようだ。ディレクトリが空でも終わらない。
Windows7を使っていますが、PowerShellのバージョンがなぜか1.0です。 2.0にすることはできるのでしょうか?
>>875 入ってるバージョンは2.0だよ。
ディレクトリが1.0なだけ
$psversiontable
CTPの時まであった1.0の時とどこが変わったかについて公式のドキュメントないんだろか
ちゃんと矢印キーで履歴が見れるようになって欲しい。 Add-History駄目過ぎて泣ける。
よく分からんけどF7キーの機能を↑↓でしたいの?
zshなんかみたいにプロファイルごとにコマンドの履歴とりたいんだけどなぁ できないよね?
zshのプロファイルってのがよく分からんけども、今の履歴を保存して次回起動時に読み込みたいなら Get-History | Export-Csv ファイル名 とした後に Import-Csv ファイル名 | Add-History もしくは Get-History | Export-Clixml ファイル名 とした後に Import-Clixml ファイル名 | Add-History
886 :
882 :2009/11/24(火) 09:37:32 ID:Ace3emad
>>886 あ〜なるほどそういう意味か
↑↓とF7キーで辿れる履歴は doskey /exename=powershell.exe /history になってるぽいね
とりあえずは #[TAB] とか #パターン文字列[TAB] とか #履歴Id番号[TAB] で対処するしかなさそうだね(Ver2.0)
Vista 以降だと GetConsoleHistoryInfo と SetConsoleHistoryInfo っていう API があるみたいだから これを Add-Type 経由で使えばなんとかなりそうだけど、あいにく XP だわ まー探せば似たような非公開の API はあるんだろうけど
889 :
名無し~3.EXE :2009/11/25(水) 00:29:57 ID:HSCfC10/
PowerShell全体的にはいいんだが、もう少しな感じがする。 手軽さがちょっと足りないような。 エスケープ文字とかは¥でよかったんじゃないかなぁ。 まぁもう治せないだろうけど。 従来のコマンドよりは進化してるから十分ではあるが。 やや堅ぐるしい印象ではある。
\はパス区切りで使われちゃってる。 パスが \ 区切りであることを前提とするアプリケーションがたくさんあるため いまさら / のみに変えることは出来なかった。
>>889 手軽さが足りないのは同意だな。
あと、ファイル名に[]が含まれる場合
$f = dir
dir $f
とすると、そのファイルが取り除かれる。これらのファイルを処理したければ
$f | dir
すれば良いんだが、これに気がつくまで半年もかかったぞ
892 :
名無し~3.EXE :2009/11/25(水) 09:09:42 ID:PNNpyvV7
>>889 パスを扱うことが多いので、「D:\hoge\fuga」を「D:\\hoge\\fuga」と書かなければいけないのは不合理になるだろう。
>>891 「[」と「]」は何かと悩ましい。
それらが名前に含まれるディレクトリの中でのファイルの処理には手間がかかる。例えば、
md '[test]'
cd '.\`[test`]'
echo $null > test.txt
move # ←ここでタブキーを押してもファイル名が補完されない。
とりあえずインストールしたよ。 tcshから乗り換える意味があるかな?( ・ω・)y─┛〜〜
>>893 そもそもWindowsでtcsh使うこと自体がかなりの変人。
メインストリームへようこそ。
ところでPowerShellのcmdletは自分で追加できるのかな。 自分で作った実行形式じゃないプログラムを、プラグインみたいにして使いたいんだけど。
896 :
名無し~3.EXE :2009/11/25(水) 15:13:52 ID:PNNpyvV7
>>895 雛型としてはこんな感じ
cmdlet <コマンドレット名>{
param(
[Parameter(Position=0, Mandatory=$false, ValueFromPipeline=$true)]
[<型>]<仮引数>
)
begin{}
process{<ここに処理内容を記述する>}
end{}
}
(表示上の都合で、タブの代わりに全角スペースを使った。)
おお、凄い。早速、過去の資産を移植しますわ。
>>896 そういうこともできるようになったのか!2.0スゲー
…functionと何がちがうん?
PS対応のCLIアプリケーションをリリースする場合どうなるんだ?
899 :
名無し~3.EXE :2009/11/25(水) 21:27:28 ID:PNNpyvV7
>>898 cmdlet <コマンドレット名> -supportsshoudprocess
などとやると、-whatifや-confirmなどが使えるようになったりとか、他にもいろいろあるはず。
900 :
名無し~3.EXE :2009/11/25(水) 21:28:19 ID:PNNpyvV7
綴りを間違えた。 -supportsshouldprocess だ。
>>899 2.0 CTP2 までは cmdlet 使ってたけど、今は function のはずだよ・・・?
902 :
名無し~3.EXE :2009/11/25(水) 23:36:34 ID:HSCfC10/
もう少しbashとかcsh風が良かったんだよな。 まぁWindows系で柔軟性のあるshellがいままで無かったから基本、歓迎ではあるんだけど。 取っ付き安い憎いは、よく使ってる環境に依存するからそのうちなれるのかもしれん。
シェルスクリプトってどれも珍妙な構文ばっかりだからな PSよりbashのがより合理的なようには見えない
904 :
名無し~3.EXE :2009/11/26(木) 12:26:39 ID:2zpvfb/t
>>901 うむ、アップデートして確認したら確かにそうなっていた。
間違ってもUNIXライクに使えるようにした何かではないからねぇ・・・ あくまでWindows上のリソースを手軽に扱うことに最適化したシェル/スクリプト環境だから それにしたって履歴の仕様はお粗末だけど
906 :
名無し~3.EXE :2009/11/27(金) 01:33:17 ID:ZKRIFMJ1
あとあれだな、変数の自動昇格しちゃうのが解りずらいかも(int->double) まぁUnixのシェルよりはずいぶんと言語に近いものなんだけど。 コマンド体系ってIBMのオフコンとかメインフレームのノリに近い感じなんだけどね
cmd, vbs, psと厳格度が上がるのはいいけど お手軽度がどんどん下がって使いづらい…
908 :
名無し~3.EXE :2009/11/28(土) 00:20:05 ID:IfHIYMJX
>>907 そうか?
cmdは手軽だった。
vbsはファイルシステムもいったんオブジェクトを作ってアクセスする必要があった。あまり手軽な感じはしなかった。
psがちょうどその間くらいで、そこそこ使いやすいと思うが……
俺達が若い頃は、csh使って1行でドンだけ複雑な処理ができるかって競い合ったもんじゃわ( ・ω・)y─┛〜〜
910 :
名無し~3.EXE :2009/11/28(土) 11:52:44 ID:QYj4568x
手軽さが足りない原因はsed,grep,awkとか シンプルだけど強力なコマンドがないからじゃね。 まぁ自分で作れってのはあるのかもしれんが、標準でそういうのがないからちょっと遠回りになるんだよな
PowerShell(の標準環境)にUNIX的な手軽さを求めるのは間違いだって Windows自体がテキストで全てを扱うような構造でも文化でもないんだから
dir | sort -descending UNIXシステムではこのsortコマンドは次のようになります ls -l | sort -n -k 5 コマンドは簡潔ですが実に不可解です。 このように設定する必要があるのはlsコマンドの出力が非構造化文字列だからです。
913 :
名無し~3.EXE :2009/11/28(土) 13:53:53 ID:QYj4568x
Unixみたく非互換バージョンが乱立しなければ、 オプション指定のショートバージョンがあってもいいとおもうけどね。
そこあたりはエイリアスで勝手のどうぞってことだろな
dir | sort -des でも可。 dir | sort -d だと -debug オプションと区別がつかないから -des まで入力しないといけない。
916 :
名無し~3.EXE :2009/11/28(土) 14:32:42 ID:QYj4568x
そんなんがあったんか。知らんかった。 推論してくれるのか。 でもまぁ代表的なオプションは一文字に割り当ててくれてもいいと思う。 マイナーなオプションはいらんけど
917 :
名無し~3.EXE :2009/11/28(土) 16:49:34 ID:IfHIYMJX
>>910 テキストファイルを扱うことでは確かに手軽じゃないね。
Powershellのウリはオブジェクトが流れるパイプだ。テキストエディタでやることを効率化するより、エクスプローラでやることを効率化するような
使い方がよさそう。例えば、ディレクトリの中にある最も古いファイル|ディレクトリを探すとか。
918 :
名無し~3.EXE :2009/11/28(土) 19:50:38 ID:QYj4568x
ごく簡単なものは、PSのみでいいんだけど、 やや複雑になってきたら、VBとかC#で作ったほうが早くねー?ってなって 結局プログラム作るんだよな。
俺はGUI画面でフローをマウスで設計して、それをスクリプトに落とすというプログラムを書いてるんだけどね。まあ高機能なバッチファイルさ( ・ω・)y─┛〜〜
>>910 For-Eachは十分sedやawkと同じことが出来ると思うんだけど。
結局は構文への慣れなんじゃないかなぁ。
見やすくしようとするとどうしてもタイプ数増えちゃうってのはあるかもしれない。
>>918 1. やや複雑になってきたら、
2. VBとかC#で作ったほうが早くねー?ってなって
3. しかしそのままPSでごり押しする
ことのほうが多い
結果的にできたスクリプトは.NET Frameworkの積み木だったりする
2に気付くのはだいたいPS上でクラスを何個か作ったあたりだな
922 :
名無し~3.EXE :2009/11/28(土) 23:21:41 ID:SUj1Beez
言語だとコンパイルは必要だけど、開発環境が楽ってのがある 自分的には結果どっちが近道か言われたら言語のほうだった。 開発系中心の人と構成管理中心の人で差があるんでないの? どちらも自動化を目指している点は共通だが、 PowerShellはどちらかいうと構成管理なんだろうね
まあunixでもスクリプトを使っているのは、立ち上がる時の様々な設定だったりデーモン類だからな。 バックアップツールとか。 研究者は結構、使っていて、解析プログラムなんかを処理毎に小分けして、最後にスクリプトで繋ぐっていうのが普通だな。 色々と再利用できるからね。
バッチ処理で夜中にデータベース処理とかする場合も基本的にスクリプト。 isqlとかbcpとかftpとかjavaで組んだプログラムとかを実行させる部品群。 そいつらをGUIツールでワークフローとして管理して実行してる。
925 :
名無し~3.EXE :2009/11/30(月) 23:34:36 ID:slDn71Ai
PowerShellとはあんま関係ないかもだけど、シェル上で動作する高機能エディタつけてほしいな。 Notepadじゃさ。貧弱すぎる インストール不要で標準てのは意味があると思うんだけどな。
>>925 かつてのEDLINと較べれば極めて高機能
ISE使えばいいじゃない タブUIで正規表現使えてスクリプトで拡張可能で十分じゃない、フォント以外は。
ISE上で作業するとかはだめ?
929 :
名無し~3.EXE :2009/11/30(月) 23:41:02 ID:slDn71Ai
EDLINはエディタと呼びたくないw フルスクリーンエディタで、正規表現やらなんやらで素早くできそうなやつ。 メモ帳ふざけすぎでしょ、置換とかも超ー遅いしw
Vista以降のメモ帳は置換が高速化されてるはずだけど。 ISEに無反応ってことはPowerShellのバージョン1?
あらまWindows7には標準でPowerShell付いてるじゃん。
932 :
名無し~3.EXE :2009/12/01(火) 00:10:18 ID:M4ul/5ka
Win7だからバージョン2だけど。 ISEは使っていない。 バージョン1の頃からPowerGUIてのを使ってる。 理由はISEと比べたらPowerGUIのほうがはるかに使いやすいから。 ただコマンドベースって手先の道具としてはキーボードオンリーのほうが相性が良いというか。 ちゃちゃっと操作するにはGUIはうざすぎる。
>>930 へー、メモ帳のそんなところも改良されてんだねぇ
>>932 ISEのUIはキーボードだけで操作できるようになってるよ
スクリプトペイン閉じてコマンドペインをエディタ代わりにってこともできなくはない
ちょっとした複数行のコマンド編集するのにはその方が楽なこともある
男は黙ってedit 嘘ですごめn(ry
というか、Windowsにマトモなテキストエディターを搭載したら 独禁法で訴えられるからつけたくてもつけられないんじゃね? あと、やたら起動に時間がかかるメモ帳とかもごめんだし… 新しくまともなテキストエディタをつけろというのは同意。 notepadはUndo/Redoが一回しかできないとか地味に怖いところあるし。 一番よく使うツールなんだから、せめて正規表現での置換、強調表示、いくつかの文字コードのサポート、 sed/awkみたいなテキストプロセッサー的な簡易マクロ、 (特に日本仕様では)文字種変形、オートインデント、(特に日本だと必須)migemoインクリメントサーチっぽいもの、 アウトライン解析、あとは、KDEのKateやKWrite程度の機能を持ったごく一般的なテキストエディタを標準装備してくれればいいのに。 ちょっと贅沢を言うと、JScriptやらをつかってのマクロが使えれば.netを経由して何でもできるようになるよね。しかも割と簡単に。
シェル上で動作するってどういう意味? powerguiでは駄目なん?あれ凄い出来だと思うなぁ。 MSが買ってしまわないか心配。
vimを買収しろ
>>939 むしろ、たいていの人はそれがごく当然として受け取るから
元々そういうものだと感じてしまうのでは?
たとえばnotepadはXP(2000かも)あたりから置換ができるようになったけど
98/Meについてるnotepadには置換ができないことを知ってる人はどれだけいるんだろうか?
たぶん、ちょっとした追加機能に気づいても、「あれ?こんなことできたんだ、何で今まで使わなかったんだろう」で終わると思う。
#XP全盛期の頃にme機でどれだけ苦しめられたことか…
notepadで改ページできない限りダメだわ
実は9x系のメモ帳はなぜか16ビットアプリ
VisualStudioExpressEditionが Windows標準エディタっつうことで いんじゃね。
いつのバージョンからか忘れたけど、地味に文字コードが指定できるようになったのは知ってる。2000だっけ?
いつのバージョンからか忘れたけど、地味に行番号とルーラが表示出来るようになったのと htmlとかのタグが色分けされるようになったのと正規表現での検索・置き換えが出来るようになったのと アウトライン表示が出来るようになったのは知ってる。
946 :
名無し~3.EXE :2009/12/01(火) 21:01:34 ID:3mZCrRT/
個人的にはviが理想だな、そうなるとsedとかUnix的なツールほしくなるんだよね。 viのあのコマンドモードのように、心地よさがあるものがほしい。
>>946 viあるところにemacsあるわけで、宗教戦争になりかねないから
そういうのはvimなり後で個人で入れればいいと思う。
viか。エスケープキー押しまくりだからな。
949 :
名無し~3.EXE :2009/12/02(水) 00:04:54 ID:7u92E6lC
標準エディタがメモ帳が嫌なんだよね。 キータッチ間違わなければCOPY CON FILE.BATとかも使うよ
PowerGUIはスクリプトエディタとしては申し分ない出来だね あれで補完機能をPowerShellスクリプトで好きに弄れたら文句はないんだけど 結局powershell.exeしか使わない俺
9xのメモ帳はCtrl+Sが使えないのが痛い。XPでこれができることに感激した。
Vimを使えるようにした。 生まれ変わったようだ。 快適。
>>952 下、Emacsとは全く関係ないよ
IntelliPadっていうOslo用のエディタのコードネームがそうだったってだけ
ついでにいうとPowerShellとも全く関係ない
>VimをインストールしてPowerShellから使用する 何のことかと思ったら呼び出すだけかいw
956 :
名無し~3.EXE :2009/12/04(金) 22:18:31 ID:m1SItZEu
呼び出すだけじゃぁねぇ。 手先の道具としては、VSは重装備すぎるから、単一のテキストファイル内で安易に利ファクタリングできるとか。 スクリプトなどでそういう思考のものって無いですよね
957 :
名無し~3.EXE :2009/12/05(土) 06:56:41 ID:yS4qGMCE
BashみたいにC+pで前にヒストリを表示できるようにするにはどうすればいいの?
bashでいうところの .bashrcみたいなものはありますか?
profile.ps1
>>957 C+p なら ↑
C+r は知らない。
961 :
名無し~3.EXE :2009/12/10(木) 09:49:27 ID:9q6dd50G
962 :
名無し~3.EXE :2009/12/11(金) 23:53:35 ID:1sEROKpx
PowerShell v2ってドキュメントってmanレベルは英語しかないの?
963 :
962 :2009/12/11(金) 23:56:05 ID:1sEROKpx
もしかしてXP板は英語のManなのか。 家のVISTAは日本語ででるな。
2003も日本語だな
>>963 CTP版使ってた頃ヘルプファイルの入ったフォルダいろいろ弄くったのそのままにしてない?
966 :
962 :2009/12/12(土) 00:32:15 ID:R3lISQz+
V1をインストールしてからV2をインストール下と思う。 もう1回入れなおせば治るかしら。。
正常なら C:\WINDOWS\system32\windowspowershell\v1.0\ja フォルダに 日本語のドキュメントが入ってるし、enフォルダとかは存在しないはず あと考えられるとしたらそもそもインストーラが日本語版のものを選んでないとか?
968 :
962 :2009/12/12(土) 00:54:24 ID:R3lISQz+
会社のPCだから後日確認してみます。アドバイスありがとう。
あーそういえば自分も会社のPCはまだ1.0のままだな
2.0あるのって7と2008だけ? 2003とXPとVISTAは無いよね?
やりたいことはファイルの連結なんだけど、 cat (Get-Content)って、UNIXのcatと挙動が全然違う。 cat 1.dat ,2.dat > test.dat と打つとわけのわからんファイルtest.datが出来上がる。 どうも渡されたファイルをテキストファイルと見なして、エンコードをUTF-16に 変換しているようだ。
973 :
名無し~3.EXE :2009/12/12(土) 08:46:12 ID:0H8NrB80
>>972 ` Get-Content コマンドレットは、ファイルに格納されているテキストなど、パスで
` 指定された場所にある項目の内容を取得します。一度に 1 行の内容を読み込み、そ
` れぞれの行のオブジェクトを返します。
確かに、無理にエイリアスに割り当てない方がよかったコマンドもあるかもな。
テンプレ用のFAQ的なものを書いてみるテスト とりあえず文字列 と ` と [ ] と パスおよびファイル名の関係から(PowerShell 2.0) 基本はヘルプの about_Escape_Characters about_Quoting_Rules about_Wildcards about_Parsing "FileSystem Provider" 辺りを参照 ヘルプファイルは %SystemRoot%\Help\WindowsPowerShellHelp.chm 辺りにあるはず ファイル名に [ ] がある場合、標準のファイル操作系コマンドはそれをワイルドカードとして認識する(※)ので、抑制する必要がある 例えば file[01].txt を Get-ChildItem に渡す場合は $path = "file````[01````].txt" # 文字列を"" で囲う場合は [ ] の前にそれぞれ4つ ` が必要 Get-ChildItem $path 他には Get-ChildItem file````[01````].txt # コマンドの引数としての文字列は既に""で囲われているのと同じ状態 Get-ChildItem 'file``[01``].txt' # '' の場合は ` は2つ もしくは -LiteralPath パラメータにファイル名を渡せばファイル名をそのまま書くだけですむ Get-ChildItem -LiteralPath file[01].txt ただし -LiteralPath はワイルドカードを展開しないので一つの文字列で単一のファイル名しか処理できない(配列として複数の文字列は渡せる) Get-ChildItem file````[??````].txt # file[ と ].txt の間に何か2つ文字があるファイルを列挙 Get-ChildItem -LiteralPath file[??].txt # エラー (※)ただし Rename-Item は現状 [ ] が入ったファイルを扱えないので Move-Item とかで代替するよろし 後は他の人よろ
ヘルプ系コマンド 常套手段的な about_うんちゃらの一覧がほしければ Get-Help about_ すれば出てくる。実態は C:\WINDOWS\system32\windowspowershell\v1.0\ja にあるテキストファイル。 コマンド一覧がほしければ Get-Command オブジェクトのメンバーがほしければ、$object | Get-Member もちろん、こんな使い方もできる > Get-Member -Static -InputObject "String"
「’」も悪さすような気が 全角なのに何故?
979 :
名無し~3.EXE :2009/12/15(火) 00:25:38 ID:Ps4mQ4Sj
PowerShellからWindowsのスケジューラっていじれるの?
New-Object -ComObject schedule.service
982 :
名無し~3.EXE :2009/12/15(火) 19:38:54 ID:SOju+QFA
>>981 おお、まさにこれを探してました。ありがとう
スレ立つまで保守ついでに1.0→2.0でのコマンドレット地味な改善点挙げてみるとか Get-Alias : -Definition コマンド名 でそのコマンドのエイリアスを列挙 Select-String : -Encoding パラメータ追加、出力されるオブジェクトがパターン文字列のグループ化対応 Get-EventLog : -After / -Before で期間指定 Select-Object : -ExpandPoperty プロパティ名 で ls | % { $_.Name } とかと同じことができるようになった