or1ko's diary

日々を書きます

PowerShell

日付や時刻ではなく時間を扱う方法

日付や時刻ではなく時間を扱う方法TimeSpanを使う > [TimeSpan]"12:34" Days : 0 Hours : 12 Minutes : 34 Seconds : 0 Milliseconds : 0 Ticks : 452400000000 TotalDays : 0.523611111111111 TotalHours : 12.5666666666667 TotalMinutes : 754 TotalSecon…

ファイアウォールの送信の規則をすべて無効化する方法

管理者でPowerShellのコンソールを起動し、下記を実行する。 ファイアウォール設定は、エクスポートしておいてからやる。 Get-NetFirewallRule -Direction Outbound | ? { $_.Enabled -eq $True } | % { Set-NetFirewallRule -Enabled False -Name $_.Name }…

すべてのプロパティが$nullのPSCustomObjectの判定

$null -eq ($target.psobject.Propeties.Value | Where-Object { $_ -ne $null} | Select-Object -First 1})PSCustomObjectにpsobjectというプロパティがあることを知った。

PSCustomObjectの比較

プロパティ名が同じでも -eq で比較するとFalseになる。 プロパティだけ取り出して、Compare-Objectで比較する。 $a = [PSCustomObject]@{ a = "a" } $b = [PSCustomObject]@{ a = "a" } $c = [PSCustomObject]@{ a = "c" } $np = $a | Get-Member -Type Not…

Thunderbirdのメールデータを取得する方法

Import-Module -Name PSSQLite $database = "C:\Users\<ユーザ名>\AppData\Roaming\Thunderbird\Profiles\<ランダムな文字列>.default\global-messages-db.sqlite" # 全件取得したい場合はlimit 1を削除する $query = "select * from messages INNER JOIN me…

3秒間ごとにコピーするスクリプト

指定したフォルダ($src)から指定したフォルダ($dest)にコピーするスクリプト。 ただし、ファイルやフォルダを一つコピーするたびに3秒待つ。 また、フォルダの更新日付はコピーした日付となる。 $src = "<コピー元のフォルダパス>" $dest = "<コピー先のフォ…

月ごとのデータをよこ軸に集計する方法

たまに下記のような、月ごとのデータを name mouth count Tom 5 2 Jhon 6 3 Tom 6 3 下記のように変換して、 月の遷移を確認したくなることがある。 name 5 6 Tom 2 3 Jhon 0 6 そういう場合は、Group-Objectを使うと便利 PS > $table = [PSCustomObject]@{n…

WebページからBodyのテキストを取得する方法

PowerShellでスクレイピング 後編 HTMLをパースする - PowerShell Scripting Weblog下記の記事で見つけた。 Invoke-WebRequestの結果は、 IEで解析されBody要素のDOMを扱えるとのことなので、 下記の通りすると、できる $contents = Invoke-WebRequest $url …

Invoke-RestMethodの文字化け対策

gooラボ 形態素解析APIを試してみる - pierre3のブログ上のブログに記載されてました。 Invoke-RestMethodは諦めて、下記のようにInvoke-WebRequestを使うようです。 $res = Invoke-WebRequest -Method Post $url -Body $body $con = [System.Text.Encoding]…

Excelファイルの操作(ImportExcel)

以前よりCOMを使ったexcelの操作方法は知っていたのだが、 覚えられるほど簡単ではなかったのであまり使かうことはなず、 csvファイルで出力し、手作業でxlsやxlsxファイルに変換することが多かった。先日、PowerShellGetの存在をしり、ImportExcelという モ…

csvの2つ以上の列が同じ行を除去する方法

get-uniqueでプロパティを指定できたら良かったのですが、 できないので、一度、重複判定するための列を追加して、 sort-objectを-uniqueを呼び出して、除去する。

ConvertTo-*コマンドの動作

ConvertTo-で始まるPowerShellのコマンドはいくつかあるので、動作確認結果。 ConvertTo-Xmlはちょっとだけ期待はずれ。 最初はcsv。 > ([PSCustomObject]@{id=1;name="Jhon"},[PSCustomObject]@{id=2;name="Tom"}) | ConvertTo-Csv #TYPE System.Management…

Xmlを手軽に処理するならPowerShell

xmlのデータを集計など処理したい場合はPowerShellがおすすめ。 [xml]を使えば、解析してスクリプト上で簡単に扱えるようになる。例えば、下記のような呼び出し方。 xmlファイルのhoge.fooという値にアクセスできる。 [xml]$(Get-Content *.xml -Encoding ut…

配列のshuffle

以前、shuffleをPowerShellで実装したが冗長だっため、再び調べてみたら、すごく簡単な方法が見つかった。配列のshuffle - or1ko's diary下記のページに記載されている。 Get-Randomどうも -Count パラメータを指定すると、入力をshuffleするようだ。 PS > 1…

同時に10個までのjobを実行するように制御する方法とパイプラインについて

$ 1..100 | % { while ($(get-job -state running) -gt 10) { sleep-job 1 } start-job { # 実行したい処理を記載する } } PowerShell 3.0のworkflowのparallelが使えると思っていたのですが、 どうも並列化させたい個数は指定できないようです。 また、para…

PowerShellでいらいらすること8つ

PowerShellは非常に便利なツールなので、ついつい使い倒そうとしてしまうが、 そういって失敗し、イライラすることがよくある。それらを下記に列挙する。1. 日本語がいまいち PowerShellはShift-JISとEucがデフォルトで読めないし書けない。UTF-8にシステム…

配列のshuffle

予め用意した集団から適当に幾つかの値を取り出したい時に、配列をシャッフルしてn件取り出したくなる。 そこで、調べてみたところPowerShell及びC#の標準APIには配列をシャッフルするメソッドがないみたいだ。 じゃぁ、誰か作ってるだろうと思ってまた調べ…

2つリストのzip関数

PowerShellでHaskellのData.List.zip関数みたいなものがないかなと思っていたら、下記のページで見つけた。 function zip2($a, $b) { 0 .. ($a.count - 1) | % {, ($a[$_], $b[$_])} }PowerShell – Build a Zip Function, zipping two lists together こんな…

起動中のプロセスの引数を取得する方法

PowerShellの標準のコマンドレットには、Get-Processというものがあるが、この戻り値から取得できるプロセスのオブジェクトをたどっても、実行の際に渡された引数を取得できないみたいだ。StartInfoメンバがそれっぽいのだけれども、 下記のコマンドを試して…

Reduce系コマンド

以前、Reduceっぽいコマンドとして、ForEach-Objectコマンドをあげたが、PowerShellを日頃使っていくなかで、他にもいくつかみつけた。 Measure-Object : 合計とか求めるコマンド 以下みたいに使う。Count以外は指定しないと計算しない。 PS C:\> 1..10 | Me…

get-content hoge.txt | をリダイレクトの変わりに使うのは注意

PowerShellを使っているときに、 プログラムにテキストを標準入力で与えるため、 下記のようなコマンドを実行した。 get-content input.txt | python test.py そしたら、異常にメモリを食いだし、 パソコンが遅くなったので、 しかたなく、プロセスを終了さ…

Unixのwhich

PowerShellでUnixのwhichに相当する機能は、Get-Commandだった。環境変数Pathに設定してあるだけなのに、Get-Commandで取れることにはびっくりした。今まで、"start"とかはMS-DOSと同じようにただ実行されているだけなのかと思っていたけれど、一度、Command…

WASP : コマンドでGUIを操る

iPadを買ってから、2chを見始めようになって、さらにダメ人間へと一歩踏み出したわけだが、 (iPad、2chをみるのにこれほど適したものはない。2tchに感謝) PowerShellのスレを見てたら、WASPというものの存在をしった。 Windows Automation Snapin for Power…

profileの作成方法

ref:Where is profile located in Windows 7 powershell? - Vista Forums 上のページから、抜粋。 > new-item -itemtype file -path $profile -force -forceが怖かったので、引数除いてつくった。

モナド

モナドか、 いつか、あの力の秘密、 解き明かしてみたいな。

CmdLetを分類2の2(動詞)

とりあえず、この二つで分類終了。 PS C:\Users\ori> Get-Command -CommandType Cmdlet | Group-Object Verb | Sort-Object Count -Descending | % { $_.Group | % -Begin {$s=""} { $s += "| " + $_.Name + " | " + (get-help $_).Synopsis + "|`n" } { "-"…

CmdLetを分類2の1(名詞)

前回も思ったけど今回はさらにスパムっぽいな...。前回のCmdLetを名詞で分類したものをさらに、見やすくしようとはてなで表で表示するにした。動詞で分類するのは、次のエントリー。下記で生成した文字列を、貼付け。 PS C:\Users\ori> Get-Command -Command…

Cmdletを分類1

CmdLetを、Nounプロパティで分類してみた。 PS C:\Users\mono> Get-Command -CommandType Cmdlet | Group-Object Noun | Sort-Object Count -Descending Count Name Group ----- ---- ----- 9 Object {Compare-Object, ForEach-Object, Group-Object, Measur…

インストールされているHotFix一覧を表示する

PowerShellのコマンドレットを眺めてたら、 Get-HotFixなるコマンドを発見。以前、Get-WmiObject うんたらかんたらとして、 Hotfix一覧を取り出したのに...。PowerShellのコマンドレットは、全体的にリモート コンピュータに適用することが考えられているよ…

PowerShellでのMap、Filter、Reduce

便利なことに、短い文字がエイリアスで割り当てられてる Mapは%。%自体はForEach-Objectの別名。 例 > # カレントフォルダ以下のファイル名一覧 > Get-ChildItem -Recurse | % { $_.FullName } Filterは?。?も同じくWhere-Objectの別名 例 > # カレントフォ…