全4件 (4件中 1-4件目)
1
powershellで別プログラムを動かしたいとき、単に記述するstart-processを使う方法があります。その別プログラムの出力結果をpowershellで利用したいとき、1.なら$Dir=cmd /c dirみたいに変数に入れればいいのですが、2.はちょっとやっかい。どうすればいいかググってみたので、powershellに移し替えてみました。$p=new-object system.diagnostics.process$pi=$p.startinfo$pi.FileName ="c:\windows\system32\ipconfig.exe"$pi.UseShellExecute = $false$pi.RedirectStandardOutput = $true$pi.CreateNoWindow = $true$p.start()$ipconfig=$p.StandardOutput.ReadToEnd()これで変数$ipconfigにipconfigの結果が入ります。どう考えても、$ipconfig=ipconfigのが早いんだけど、これはこれで使い道があるはず。あ、プログラムに引数を入れる場合は$pi.arguments="/?"#ヘルプ表示の場合みたいな感じ。
2020.09.26
コメント(0)
大抵のプログラミング言語だと、二つの変数を交換するとき一時的に使用する変数が必要になります。Cなどint a=3;int b=5;int temp;temp=a;a=b;b=temp;みたいな感じ。powershellはこれが1行でできちゃう。powershell$a,$b=$b,$a簡単! 交換だけでなく、たくさん動かすなら$a=1;$b=2;$c=3;$d=4$b,$c,$d,$a=$a,$b,$c,$d"$a,$b,$c,$d" #2,3,4,1みたいにすればOK。お、配列もいける。$list = 0, 1, 2, 3, 4$list[0], $list[3] = $list[3], $list[0]$list -join "," #3,1,2,0,4これ、pythonもおなじことができるようです。あ、rubyもできた!スクリプト言語はこうじゃなきゃ。気になってもうちょっとググってみた。あれ、C#もいけるじゃん。いまどきは、こういうの常識なのかな。ええい、ひとまとめでこれでどうだ。
2020.09.23
コメント(0)
ブラウザの自動操縦といえばselenium(WebDriver)みたいだけど新顔(ヘッドレス)が登場したらしい。決定版になるか?
2020.09.15
コメント(0)
powershellの関数(未確認だけどクラスも)は先に定義しておかなければ呼び出すことができません。これは「仕様」です。でも、プログラムするとき、最初に全体の構造を書いてあとから細かな関数なんかを書くほうが見通しが良くなります。逆に、長大な関数定義の後でメインルーチンがあると可読性もよくありません。最後まで読まないとなんのスクリプトかわからないからです。多くのプログラム言語は関数をどこに書いてもOKですが、powershellがそうでないのはなぜなのでしょう。powershellスクリプトが本格的なプログラム(C++とかC#とか)を書く前段のプロトタイプ言語プロトタイピング言語(2002/12/08修正)としても使われることを考えると、この「仕様」は更になぞです。シェル言語だからそんなもんだという話もあろうかと思うのですが、バッチやunix系シェルとの互換性が決して良いとは言えないpowershellがこんな制限を引きずっていることは甚だ不満です。例えば、コマンドインタプリタとしてbasicを利用していた8ビット時代のパソコンですら、関数を後ろに書くことができました。OS/2で第二シェルとして使われたREXXなんかはもっと本格的なプログラム言語でした。文句ばかり言っていてもきりがないので、対策。$SKIP=$true;iex ((gc $MyInvocation.InvocationName|%{ if ($SKIP -and ($_ -notmatch "^####FuncDef\s*$")){return} $SKIP=$false $_})-join "`r`n")$a=foobar|Write-Host #エラーになるfunction foobar{ "foobar"}$b=hogefuga|Write-Host #正常動作####FuncDeffunction hogefuga{ "hogefuga"}####FuncDef以降の行に書いた関数を先に読み込むというものです。$aへの代入ではfoobarが定義されていないのでエラーになりますが、$bに代入されるhogefugaは####FuncDef以降に定義されているので、ちゃんと機能します。
2020.09.13
コメント(0)
全4件 (4件中 1-4件目)
1


