読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

コマンドを特定のユーザーで実行したい。

「runas」コマンドが使えます。 PS C:\> runas /user:<ドメイン>\<ユーザー名> "<コマンド> <引数>"実行するとパスワードが要求されます。正しいパスワードを入力すると、指定のユーザーでコマンドが実行されます。ちなみに、現在実行しているスクリプトの実…

任意のプログラムを別プロセスで起動する

任意のプログラムを別プロセスで起動する関数を書きました。 startが使えるのかなと思ったけど、PowerShellではサポートされていない様子。 なので.NetのProcessクラスを利用して新規にプロセスを立ち上げています。 function fork( $file, $arg, $dir=$null…

正規表現を使ってみる

Power Shellでも正規表現が使えます。 正規表現にマッチするか評価する。 「-match」演算子を使います。 PS C:\> "abc" -match "^a" True PS C:\> "xbc" -match "^a" False 後方参照 後方参照用の文字列は、自動変数「$Matches」に格納されます。「$Matches[…

スクリプトブロックと変数のスコープ

以下のコマンドの結果をみて、「ローカル変数はスクリプトブロック内でもアクセス可能なんだな」と認識していたのですが、 PS C:\> function call( $proc ) { &$proc } PS C:\> $a = 100 PS C:\> call { echo $a } 100$aに値を代入すると、期待と異なる結果…

今日の謎

昨日書いたInjectでMapしようとしたんですが。 PS C:\> Inject 1,2,3 @() { $args[0] += $args[1]*2; $args[0] } 12配列を渡したはずなのに、なぜかIntに変換されとる!どっかで暗黙の型変換が行なわれているっぽいなー、と思って型を出力するコードを追加。 …

Inject

rubyでよく使うInject関数を書いてみました。配列のメソッドではなく、ただの関数ですが。 function Inject( $enumerable, $init, $proc ) { foreach ($i in $enumerable ) { $init = &$proc $init $i } return $init }実行結果です。 PS C:\> Inject 1,2,3 …

メソッド呼び出し時には「()」が必須です。

Power Shellの関数を呼び出す場合、引数の「()」は不要(正確には使えるけど解析モード切替の意味になる)ですが、 PS C:\> function Pow( $x, $y ) { [System.Math]::Pow($x,$y) } PS C:\> Pow 2 5 32 PS C:\> Pow 2, 5 "Pow" の引数 "0" (値 "System.Object[…

ビット演算でorを取りたい

「-bor」演算子を使います。「|」じゃないので注意な! PS C:\> $a = 0x001 PS C:\> $a = $a -bor 0x002 PS C:\> echo $a 3以下は全て外れです。 PS C:\> $a = 0x001 PS C:\> echo $a 1 PS C:\> $a |= 0x002 用語 '=' は、コマンドレット、関数、操作可能なプ…

CSVファイルを解析する

@IT - .NET TIPS CSVファイルを読み込むには?を参考に、PowerShellでCSVファイルを解析する関数を書きました。 引数のファイルを「Microsoft.VisualBasic.FileIO.TextFieldParser」で解析して、 各行をスクリプトブロック(proc)にコールバックします。 [Sys…

ローカルのマシン名を得る

「System.Environment」の値を参照すればOK PS C:\>[System.Environment]::MachineName | echo foo.comそれにしても、いまだに PS C:\>echo [System.Environment]::MachineName [System.Environment]::MachineNameとかやってしまう。なかなか慣れない。

スクリプトブロック

Power Shellでは、「{}」で括った一連の処理を「スクリプトブロック」として、変数に格納することができます。格納した処理は、「&」として、任意のタイミンクで呼び出すことが可能です。 PS C:\> $proc = { echo "aaa" } # スクリプトブロックを作成して変…

今日のへま

今日のへま。 PS C:\> function Join( $str1, $str2 ) { return "${str1}:${str2}" } PS C:\> Join( "aaa", "bbb" ) | echo aaa bbb: # あれ? "aaa:bbb"になるハズなんだが? PS C:\> Join "aaa", "bbb" | echo aaa bbb: # あれ?Power Shellでは、カンマで区…

文字列内変数展開の罠

Power Shellでは、「"」で括られた文字列内の変数は、自動的に展開されます。 PS F:\> $name = "foo" PS F:\> echo "My Name is $name" My Name is foo機能的には、「Rubyみたいに"#{}"で囲む必要ないんだー、へー、」というだけなんですが、ここにちょっと…

解析モード

Power Shellのスクリプト解析には、「コマンドモード」と「式モード」があります。 式モード スクリプトを「最上位レベル言語として解析」します。 「2+2」や「"aaa"」などは式として(一般的な感覚からして普通に)評価されます。 コマンドモード シェル内で…

パイプラインで遊ぶ

コマンドとコマンドをパイプライン(|)でつなぐことで、「最初のコマンドの実行結果を次のコマンドに渡してさらに処理させる」ことができます。以下はパイプラインの単純なサンプル。「psで取得したサービス一覧をftでテーブル形式にフォーマットして表示」し…

Power Shellスクリプトの基本

Power Shellスクリプトの基本的な書き方まとめ。 形式 拡張子は「.ps1」。 スクリプトの中身は、基本的にはPower Shellコマンドの羅列でOK。 「#」 以降がコメント。 例えば、「hello world.」を表示するだけのスクリプト(echo.ps1)であれば、以下のような感…

.Netのクラスライブラリを使ってみる。

Window Power Shellでは、.NET Frameworkのクラスライブラリを利用可能です。 「$ = New-Object コンストラクタ引数...>」でクラスのインスタンスが作成され、変数に代入されます。 「$ = New-Object -typeName -argumentList コンストラクタ引数...>」でもO…

Windows Power Shellをインストールしてみた。

Windowsでちょっとしたスクリプトを書くなら「Windows Power Shell」が流行らしい。ということで、ローカルマシンにインストールしてみました。 ダウンロード&インストール Microsoft TechNet - Windows PowerShell でのスクリプティングからインストーラを…