2014年8月13日水曜日

◆嵌る

ここ数ヶ月、火を噴いている突発的な仕事のお手伝いで忙しく、PowerShellともご無沙汰。

だいぶ老化が進んでいるのでちょっと使っていないとすぐに忘れる。
なんとか過去の投稿を見たりして思い出していかないと・・・。


以下のような何の変哲もないコマンドを打ったところ、
image

結果がこんな感じに表示された。
image

?、なんで?

これは、
image

ちゃんと表示される。
image

scriptpropertyだから?なんて思って「types.ps1xml」なんかを見てみても特に「CPU」が特別という事は無い。

しば~らく考えたが、全く持って検討も付かない。

ふと、こんな感じに入力してみたら、
image

あれ、表示された。
image

あ~、そう。
いや~、素人丸出し?

こいつの結果って、
image

こうなっちゃってるのね・・・。
image

あ~、もう、ヘッダーが見えない時点で気づこうよ(笑)

全く持って余計なところで時間をくってしまったが、やりたかったのは以下のようなスクリプト。
image

むか~し、以下で書いたことはあるのだが、どうも今まで有効に使ってこなかった気がする。
PowerShell: ◆カスタマイズした条件を使ってグルーピングする(Group-Object)

ハッシュテーブル化する方法は便利そうなので、忘れないようにしたい。
っと言っても忘れるのだが・・・。(笑)

----

ちなみに、そもそも今回の嵌りは画面の表示サイズとバッファサイズをずらしたのがいけないのだと思います。

image

2014年8月7日木曜日

◆Windows Automation Snapin for PowerShell(メモ)

WASPなんてのが有ったのでメモしておく。

以下のようなWindow操作関連のコマンドレットを提供してくれるようです。

Get-WindowPosition
Remove-Window
Select-ChildWindow
Select-Control
Select-Window
Send-Click
Send-Keys
Set-WindowActive
Set-WindowPosition

一応インストーラも付いてくるのですが、Windows7環境ではなぜか旨くいかなかったので(3.0が必要?)、展開された「WASP.dll」をマイドキュメントにある「WindowsPowerShell」フォルダに「Module\WASP」フォルダを作ってあげてその中に入れてあげると良さそう。

使うときは「ipmo WASP」とやってあげればOK。

2014年7月4日金曜日

◆拡張子毎にファイルをフォルダに振り分ける

  PowerShellの紹介とかサンプルでよく出てきそうなやつ。

以下のようなごちゃごちゃのファイルを拡張子毎にフォルダを作って振り分けてコピーする。

image

001
002
003
004
005
006

$outDir = "d:\Desktop\out1"
dir "d:\Desktop\imp1" | group extension | %
{
 
$outDirEx = Join-Path $outDir $_.Name.Substring(1
)
 
if(!(Test-Path $outDirEx)){mkdir $outDirEx
} 
 
$_.Group | %{copy $_.FullName $outDirEx }
}

結果

image

2014年7月1日火曜日

◆演算子を連結して実行する

PowerShellの演算子は連結して実行できたりする。

PS>"a,b,c,d,e" -split ','
a
b
c
d
e
PS>"a,b,c,d,e" -split ',' -notlike 'c'
a
b
d
e
PS>"a,b,c,d,e" -split ',' -notlike 'c'-replace 'b','{0}'
a
{0}
d
e
PS>"a,b,c,d,e" -split ',' -notlike 'c'-replace 'b','{0}'-join '-'
a-{0}-d-e
PS>("a,b,c,d,e" -split ',' -notlike 'c'-replace 'b','{0}'-join '-') -f 'bbb'
a-bbb-d-e

最後のフォーマット演算子(-f)はなぜか括弧が必要だった。
(優先順位が違うのだろうか)

2014年6月30日月曜日

◆Profileのスクリプト実行をバイパスする

Profileに記述したスクリプトを実行したくないときが稀にある。

そんなときは、起動パラメータを指定すると良い。

>PowerShell –NoProfile

頻繁に使う場合は、スクリプトの先頭に以下を追加しておく。

>Add-Type -AssemblyName PresentationFramework
>if([System.Windows.Input.Keyboard]::IsKeyDown('Ctrl')) { return }

Profile以外でも使えそうな機能なので覚えておくと良さそう。

ただし、この機能はSTAを要求するようなのでPowerShell3.0以降で使うのが良いかも。

2014年5月19日月曜日

◆メーラーを使ってメール送信

ウィルス対策ソフトによって「Send-MailMessage」がブロックされる場合、仕方が無いのでメールソフト経由で送信する。

もしかするとOUTLOOKあたりならCOMでも用意されているかも知れないが、今回はSendKeyを使った力技で。

こんなものでも使える局面はあるかもしれない。

001
002
003
004
005
006
007
008
009
010

add-type -AssemblyName System.Windows.Forms
$subject = 'メール送信のテストです'
$body = '本文です'
$to = 'minminnana@hoge.co.jp'
$mail = "mailto:$to&subject=$subject&body=$body"
Start-Process -FilePath $mail 
Start-Sleep -Seconds 2

#outlookの送信キー
[System.Windows.Forms.SendKeys]::SendWait("%S")

2014年5月2日金曜日

◆EFSでファイル暗号化

日々のPC利用において頭の痛いことの一つにパスワードの管理がある。
クラウドの普及に伴って、管理すべきパスワードの数は増加の一途。
大体は共通のパスワードを使いまわしたりするのだが、怪しげなサイトにも使ったりすると非常に危険。

私も以前、GmailのIDをのっとられた事があるので、それからは個別のパスワードを使用している。

ただし、当然いくつものパスワードを記憶できるわけも無く・・・。
結局メモする事になる。

素のまま置いておくのはさすがに気がひけるので暗号化を試してみる。

会社内とかの使用に限定するのであれば、OSの機能で暗号化するのが簡単だ。

暗号化したいファイルのプロパティから指定するだけ。
image

暗号化すると以下のように緑色で表示される。
image

ファイルサーバーに置いたファイルも、ドメイン内ならば暗号化したときと同じユーザーでログインすればどのクライアントからも使用できる。

PowerShellからも以下のように簡単に暗号化できる。

PS>(Get-Item  d:\Desktop\test.txt).Encrypt()