PowerShellでgit logから統計情報を取得する。
Git-Hubだとダッシュボードからプロジェクトに対するコミット数やら追加・削減したライン数なんかが見えるんだけれど、BacklogなんかのGitをつかっているとそういったものがない。
で、git logのオプションを使えば、そのあたりの情報が取れるよってのを教えてもらったので、それっぽいものを書いてみた。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"repository"; | |
git remote -v ; | |
"" | |
"branch" | |
git branch | where {$_.startswith("*")}; | |
git log –pretty=format:%h,%ae,%ad –date=short –since =1.month ` | |
| convertfrom-csv -header hash, user, date ` | |
| group date, user -NoElement ` | |
| select ` | |
@{ Name="User"; Expression = { $_.Name.Split()[1].Trim(",")}}, ` | |
@{ Name="Date"; Expression = { $_.Name.Split()[0].Trim(",")}}, ` | |
Count ` | |
| Sort User , Date; | |
cd |
確認したいリポジトリに移動したあと、このスプリクトを実行すると、こんな感じに表示されます。個人のリポジトリだとつまらない、、、
Git-Hub使っている人には需要はありませんが、git logのオプションがいろいろ見れて楽しかったです。いくつか見たけれど、git logのヘルプページが一番参考になりました。
VMWare ESXi でホストしているVMのIPアドレスの一覧を取得する。
僕が管理しているESXiが、気づいたらすでに7台になっています。いつの間にこんなに増えたのやら。
どのESXiにどんな用途のサーバーを置いているか管理はしているものの、新しいVMが欲しくなった時なんかは、実際に配置されているVMの一覧や、各VMのCPUやハードディスクの割り当て状況、IPアドレスがいくつかを一気に確認したくなるわけです。
複数の環境を統合管理できるvCenterなんかを使っていれば簡単なのかもしれないけれど、使えるのはESXiだけということでスクリプトを作ってみました。PowerShellで。$hostListと$use,$passwordは環境に応じて変えてもらえば動く。。。のかな?
#Add-PSSnapin VMware.VimAutomation.Core
$hostList = @("192.168.0.10", "192.168.0.12", "192.168.0.13")
$user = "root"
$password = "*********"
$csvFile = "C:\temp\vmlist.csv"
function Main() {
"VM情報の取得を開始します。"
$report = @()
foreach ($vmHost in $hostList) {
$vmHost + "を調査中"
$report += Get-VmList $vmHost
}
$report | sort Host,IPAddress | epcsv $csvFile -Encoding Default
$csvFile + "に出力しました。"
}
function Get-VmList($vmHost) {
$server = Connect-VIServer -Server $vmHost -User $user -Password $password
$vmReport = @()
$vms = get-vm -server $server;
foreach ($vm in $vms) {
$vmReport += Get-VmInfo($vm)
}
Disconnect-VIServer -server $server -Confirm:$FALSE
return $vmReport
}
function Get-VmInfo($vm) {
$addresses = @()
foreach ($nic in $vm.Guest.Nics) {
$addresses += $nic.IPAddress
}
$addressList = [string]::join(",", $addresses)
$report = New-Object -typename System.Object
$report | Add-Member -MemberType noteProperty -name Host -value $vm.Host
$report | Add-Member -MemberType noteProperty -name Name -value $vm.Name
$report | Add-Member -MemberType noteProperty -name NumCpu -value $vm.NumCpu
$report | Add-Member -MemberType noteProperty -name Memory -value $vm.MemoryMB
$report | Add-Member -MemberType noteProperty -name UsedSpaceGB -value $vm.UsedSpaceGB
$report | Add-Member -MemberType noteProperty -name Powerstate -value $vm.Powerstate
$report | Add-Member -MemberType noteProperty -name IPAddress -value $addressList
return $report
}
GitHub for Windowsを入れてみる。
GitHubのWindows向けクライアントが公開されたということで、とりあえずものは試しとインストールしてみました。とりあえずさわりだけ。
ちなみに、興味だけでアカウントは持っていたのですが、コミットするのも今回が初めてです(汗。
Big Skyさんのページがとてもわかりやすいです。
インストールと初期設定
http://windows.github.com/ にアクセスして、右上の「download 1.0 」からセットアップモジュールをダウンロードしてインストールします。セットアップモジュールを実行すると、ClickOnceのインストールが始まります。
インストールが終了すると、メトロアプリっぽいUIのクライアントが起動するので、GitHubのアカウントをサインアップするか、すでに持っているGitHubアカウントでログインします。
リポジトリの追加
とりあえず何か突っ込んでみましょう。+addをクリックして新たにリポジトリーを作成するか、すでに作成済みのリポジトリーをエクスプローラーからGit for Windowsにドロップするとリポジトリーが追加されます。
+addボタンをクリックして、ファイルを追加してみましょう。
リポジトリー名を日本語にしたら、「repository name cannot have special characters」と怒られてしまったので、とりあえず英語で作成しておきます。
リポジトリーが作成できると、ダッシュボードに表示されます。対象のリポジトリーの上でコンテキストメニューを開くと、エクスプローラーやWebブラウザーでリポジトリの場所を開いたり、Gitを操作するシェルを開いたり、リポジトリーの詳細を表示することができます。なんとシェルはPowreShell(posh-git)を使えます!!
利用するShellの変更は、ダッシュボードの設定から、「option」画面に移動して設定することができます。この画面では、「SCAN FOR REPOSITORIES」ボタンをクリックすることで、実行中のコンピューターにあるローカルリポジトリを検索することもできるみたいです。
初めてのコミット
作成したリポジトリーをエクスプローラーで開き、ファイルを追加すると自動的にGit for Windows側にも表示されるので、Commitしたい場合は、コメントを入力してCOMMITボタンをクリックするだけです。
続いて、GitHubにpublishしてみましょう。同じく「publish」ボタンをクリックすると、GitHub側に公開されます。
プロキシサーバーの設定
もしProxyサーバー経由の場合は、PowreShellからプロキシサーバーの設定を行います。ダッシュボードのコンテキストメニューから「open a shell here」を選択するか、プログラムメニューから「Git Shell」を起動して次のコマンドで設定できます。
> git config http.proxy http://proxyserver:port
特定期間の電源投入、電源断、スリープをイベントログから抽出する
とある事情で、特定期間(特定月)の電源投入、電源断、スリープに入った時間を調べたくて、使っているスクリプトを公開してみる。本当は日付ごとのTimeGeneratedの最小、最大をとりたかったんだけれど、GroupとMeasure-objectの使い方がいまいちわからずExcelにお願いしてます。
$targetYear = 2012
$targetMonth = 5
$csvFile = "C:\temp\log.csv"
write "$targetYear 年 $targetMonth 月の電源投入、電源断、スリープ状況を、$csvFile に出力します。"
$dayFrom = New-Object DateTime($targetYear, $targetMonth, 1)
$log = Get-EventLog System |
where { $_.TimeGenerated -ge $dayFrom} |
where { ($_.EventId -eq 1074) -or ($_.EventId -eq 42) -or ($_.EventId -eq 1) } |
select Index, TimeGenerated, Message
sort Index
$log | select
$log | epcsv $csvFile -Encoding Default
write "出力が終わりました。"
PowerCLIを使ってVMを管理する。
vSphererとPowerCLI
VMWareの仮想化ソリューションvSphererには、無料で使えるESXiという製品があります。ESXiも他の製品と同じくvSphere ClientというGUIツールから管理を行うのですが、無料ゆえの悲しさか対象のサーバーで稼働中のVMをすべてサスペンドとか、特定のVMをすべて起動すると言った管理系の自動化機能が不足しています。このあたりを補ってくれるのが、コマンドラインインターフェイスのPowerCLIです。
PowerCLIはPowerShellを利用してvSpherer上の仮想PCを操作するコマンドラインインターフェイスで、仮想サーバーへの接続、切断(Connect-VIServer、Disconnect-VIServer)、VMの起動、停止、サスペンド(Start-VM、Stop-VM、Suspend-VM)、VMの作成、削除、移動(New-VM、Remove-VM、Move-VM)、VMの編集(Set-*)、スナップショットの管理(Get-Snapshot、New-SnapShot、Set-SnapShot、Remove-SnapShot)といったコマンドレットが用意されっています。
インストール
現在の最新版はvSphere PowerCLI 5.0.1です。VmWareのダウンロードページからダウンロードできます。
前述のとおり、PowerShell上で動作するのでPowerShellをインストールしていない場合は、別途Microsoftからダウンロードしてインストールしておきましょう。
VMWare VIXコンポーネントが必要なので一緒にインストールされるそうです。”OK”をクリックしましょう。
PowerShellの既定の状態では、ポリシーの設定で外部スクリプトの実行が制限されています。このためPowerCLIを動作させるには、PowerCLIインストール後にポリシーをRemoteSignedよりも緩くしてくださいということです。”Continue”をクリックしましょう。
初期設定
インストール終了後にPowerCLIを実行するとこんな画面になります。
スクリプトの実行がシステムで無効になっているため、ファイル C:\Program Files (x8
)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironmen
.ps1 を読み込めません。詳細については、「get-help about_signing」と入力してヘ
ルプを参照してください。
発生場所 行:1 文字:2
. <<<< "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Script
\Initialize-PowerCLIEnvironment.ps1"
+ CategoryInfo : NotSpecified: (:) []、PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
インストール時にポリシーをRemoteSinged以上に変更しろと言っていたので、PowerCLIを再度管理者として起動して、次のコマンドを実行します。
PS C:\Windows\system32> Set-ExecutionPolicy RemoteSigned
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシー
を変更すると、about_Execution_Policies のヘルプ
トピックで説明されているセキュリティ上の危険にさらされる可能性があります。実行
ポリシーを変更しますか?
[Y] はい(Y) [N] いいえ(N) [S] 中断(S) [?] ヘルプ (既定値は "Y"): y
設定が終わったら、通常のユーザーでPowerCLIを起動しなおしてください。こんな画面になります。
つないでみる
せっかくなので、繋いでみましょう。サーバーへの接続にはConnect-VIServerコマンドレットを利用します。
Connect-VIServer –Server XXXXX –User XXX –Password XXX
テスト証明書で運用している場合は、黄色でこんなメッセージが出ると思いますが、とりあえず無視で。
警告: There were one or more problems with the server certificate:
* The X509 chain could not be built up to the root certificate.
* The certificate’s CN name does not match the passed value.
ホストしているVMの一覧を見てみましょう。コマンドレットはGet-VMです。
PowerCLI > Get-VM
Name PowerState Num CPUs Memory (MB)
—- ———- ——– ———–
VMSERVER1 PoweredOn 1 3072
VMSERVER2 PoweredOn 1 3072
VMSERVER3 PoweredOff 1 3072
VMSERVER4 PoweredOff 1 3072
4台ホストしていて2台稼働中なようです。PowerShellなので、パイプしてフィルタできます。稼働中のVMだけ抜き出すにはこんな感じ。
PowerCLI > Get-VM | Where { $_.PowerState -eq "PoweredOn" }
Name PowerState Num CPUs Memory (MB)
—- ———- ——– ———–
VMSERVER1 PoweredOn 1 3072
VMSERVER2 PoweredOn 1 3072
さらにフィルターしたVMをサスペンドさせたければ、オブジェクトをさらにパイプしてSuspend-VMを実行します。
PowerCLI > Get-VM | Where { $_.PowerState -eq "PoweredOn" } | Suspend-VM -Confirm:$False
Name PowerState Num CPUs Memory (MB)
—- ———- ——– ———–
VMSERVER1 Suspended 1 3072
VMSERVER2 Suspended 1 3072
実行すると、こんな表示が出てタスクの進捗を教えてくれます。
VMから切断するには、Disconnect-VIServerコマンドレットです。
PowerCLI > Disconnect-VIServer –Server XXXX -Confirm:$False
いやー、やっぱりPowerShellは楽でいいですね。VMWareにはPerlのCLIもあるんですが文字列処理をしなくていいのでほんと楽です。PS1ファイルにスクリプトを保存しておけば停電対策もばっちり。