アーカイブ

Archive for the ‘PowerShell’ Category

PowerShellでgit logから統計情報を取得する。

2017年9月23日 1件のコメント

Git-Hubだとダッシュボードからプロジェクトに対するコミット数やら追加・削減したライン数なんかが見えるんだけれど、BacklogなんかのGitをつかっているとそういったものがない。

で、git logのオプションを使えば、そのあたりの情報が取れるよってのを教えてもらったので、それっぽいものを書いてみた。


"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のヘルプページが一番参考になりました。

https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E5%B1%A5%E6%AD%B4%E3%81%AE%E9%96%B2%E8%A6%A7

 

カテゴリー:Git, PowerShell, 未分類 タグ:

VMWare ESXi でホストしているVMのIPアドレスの一覧を取得する。

2012年5月25日 コメントを残す

僕が管理している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
}

カテゴリー:インフラ, PowerShell タグ: ,

GitHub for Windowsを入れてみる。

2012年5月22日 1件のコメント

GitHubのWindows向けクライアントが公開されたということで、とりあえずものは試しとインストールしてみました。とりあえずさわりだけ。

ちなみに、興味だけでアカウントは持っていたのですが、コミットするのも今回が初めてです(汗。

Big Skyさんのページがとてもわかりやすいです。

GitHub が Windows 向けクライアントを公開!

インストールと初期設定

http://windows.github.com/ にアクセスして、右上の「download 1.0 」からセットアップモジュールをダウンロードしてインストールします。セットアップモジュールを実行すると、ClickOnceのインストールが始まります。

image

インストールが終了すると、メトロアプリっぽいUIのクライアントが起動するので、GitHubのアカウントをサインアップするか、すでに持っているGitHubアカウントでログインします。

image image

image

リポジトリの追加

とりあえず何か突っ込んでみましょう。+addをクリックして新たにリポジトリーを作成するか、すでに作成済みのリポジトリーをエクスプローラーからGit for Windowsにドロップするとリポジトリーが追加されます。

+addボタンをクリックして、ファイルを追加してみましょう。

image

リポジトリー名を日本語にしたら、「repository name cannot have special characters」と怒られてしまったので、とりあえず英語で作成しておきます。

image image

リポジトリーが作成できると、ダッシュボードに表示されます。対象のリポジトリーの上でコンテキストメニューを開くと、エクスプローラーやWebブラウザーでリポジトリの場所を開いたり、Gitを操作するシェルを開いたり、リポジトリーの詳細を表示することができます。なんとシェルはPowreShell(posh-git)を使えます!!

imageimage

利用するShellの変更は、ダッシュボードの設定から、「option」画面に移動して設定することができます。この画面では、「SCAN FOR REPOSITORIES」ボタンをクリックすることで、実行中のコンピューターにあるローカルリポジトリを検索することもできるみたいです。

imageimage

初めてのコミット

作成したリポジトリーをエクスプローラーで開き、ファイルを追加すると自動的にGit for Windows側にも表示されるので、Commitしたい場合は、コメントを入力してCOMMITボタンをクリックするだけです。

image

続いて、GitHubにpublishしてみましょう。同じく「publish」ボタンをクリックすると、GitHub側に公開されます。

プロキシサーバーの設定

もしProxyサーバー経由の場合は、PowreShellからプロキシサーバーの設定を行います。ダッシュボードのコンテキストメニューから「open a shell here」を選択するか、プログラムメニューから「Git Shell」を起動して次のコマンドで設定できます。

> git config http.proxy http://proxyserver:port

特定期間の電源投入、電源断、スリープをイベントログから抽出する

2012年5月17日 コメントを残す

とある事情で、特定期間(特定月)の電源投入、電源断、スリープに入った時間を調べたくて、使っているスクリプトを公開してみる。本当は日付ごとの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 "出力が終わりました。"

この頃ちゃんとつけているか、管理職の抜き打ち検査が多くて。。。
 
#PowerShell関連のエントリーが増えてきたのでカテゴリを追加しました。
カテゴリー:インフラ, PowerShell タグ:

PowerCLIを使ってVMを管理する。

2012年3月9日 1件のコメント

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からダウンロードしてインストールしておきましょう。

image

image

VMWare VIXコンポーネントが必要なので一緒にインストールされるそうです。”OK”をクリックしましょう。

image

PowerShellの既定の状態では、ポリシーの設定で外部スクリプトの実行が制限されています。このためPowerCLIを動作させるには、PowerCLIインストール後にポリシーをRemoteSignedよりも緩くしてくださいということです。”Continue”をクリックしましょう。

image image

image image

image image

image

初期設定

インストール終了後にPowerCLIを実行するとこんな画面になります。

image

スクリプトの実行がシステムで無効になっているため、ファイル 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を起動しなおしてください。こんな画面になります。

image

つないでみる

せっかくなので、繋いでみましょう。サーバーへの接続には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

実行すると、こんな表示が出てタスクの進捗を教えてくれます。

image

VMから切断するには、Disconnect-VIServerコマンドレットです。

PowerCLI > Disconnect-VIServer –Server XXXX -Confirm:$False

 

いやー、やっぱりPowerShellは楽でいいですね。VMWareにはPerlのCLIもあるんですが文字列処理をしなくていいのでほんと楽です。PS1ファイルにスクリプトを保存しておけば停電対策もばっちり。

カテゴリー:インフラ, PowerShell タグ: ,