2011年11月15日火曜日

Powershellでネットワーク設定を行う

  • このエントリーをはてなブックマークに追加


ネットワーク設定を自動化したい場合は、Powershellスクリプトで簡単に実現することができます。

基本的にWin32_NetworkAdapterConfigurationというWMIオブジェクトを使います。Win32_NetworkAdapterConfigurationを使用することによって、各ネットワークアダプターの情報を取得したり、静的なIPアドレス、ディフォルゲートウェイ、DNSなどの設定を行ったりすることができます。

Powershellコマンドプロンプトで下記のコマンドを実行すると、すべてのネットワークアダプターの関連情報が表示されます。

Get-WmiObject Win32_NetworkAdapterConfiguration

そして、Get-WmiObject Win32_NetworkAdapterConfiguration | Get-Memberを実行すると、ネットワークアダプターというオブジェクトのProperty、操作できるMethodなどの情報も表示されます。これらの情報は、Powershellスクリプトを書く時に非常に役に立つと思います。

win32_network

 

簡単にPowershellスクリプトを作成してみました。

$description = "Intel(R) 82567LM Gigabit Network Connection"
$ip = "192.168.1.100"
$subnet = "255.255.255.0"
$gateway = "192.168.1.254"
$dns = @("192.168.1.1";"192.168.1.2")

$adapter = Get-WmiObject Win32_NetworkAdapterConfiguration | Where {$_.Description -eq $description}
$adapter.EnableStatic($ip,$subnet)
$adapter.SetGateways($gateway)
$adapter.SetDNSServerSearchOrder($dns)

上記のコードを一個の.ps1ファイル(例:ConfigureNetwork.ps1)として保存します。Powershellコマンドプロンプトを「管理者として実行」で起動し、ConfigureNetwork.ps1を実行すればいいです。

【コード解説】

$adapter = Get-WmiObject Win32_NetworkAdapterConfiguration | Where {$_.Description -eq $description}

この一行は設定しようとするネットワークアダプターを特定するためのコードです。ネットワークアダプターは”説明($description)”というPropertyで判断されます。$descriptionは下記の図の青い部分になります。

description

ほかにもいろいろ条件を指定して判断することもできます、わかりやすい属性を選ぶと良いでしょう。

Windows Server 2012 Hyper-V Cookbook

新品価格
¥4,330から
(2012/12/20 20:55時点)

Windows PowerShellクックブック

新品価格
¥4,200から
(2012/12/20 21:06時点)

サーバ/インフラエンジニア養成読本 仮想化活用編 [クラウドな現場で役立つ知恵と知識が満載!] (Software Design plus)

新品価格
¥2,079から
(2012/12/20 20:58時点)

WSH オブジェクト

  • このエントリーをはてなブックマークに追加


WSHの基本オブジェクト

 1つ目は、WSHに標準的に付属しているオブジェクトだ。多くのスクリプトは、これらの基本オブジェクトを単独、ないし組み合わせて利用することにより実現されている。

  • WScriptオブジェクト
     ほかのオブジェクトを呼び出したり、標準入出力を扱ったり、スクリプトの実行を制御したり、コマンドライン引数を読み込んだりできるWSHのトップレベル・オブジェクト。

  • FileSystemObjectオブジェクト
     ファイルやフォルダのコピー、移動、削除などを自由自在に行えるオブジェクト。サイズや更新日時などのプロパティの値も取得できる。
     またこのオブジェクトを使うことで、テキスト・ファイルに文字列を書き込んだり、読み出したりすることができる。

  • WshShellオブジェクト
     アプリケーションを起動させたり、終了させたりするためのオブジェクト。また、実行中のアプリケーションに対し、任意のキー・コード(キーを押したという情報)を送出することができる。つまり、このオブジェクトを使えば、キーボード操作を自動化できる。コンソール・アプリケーションでは、その出力内容も取得できる。
     ほかにも、レジストリの操作や、ショートカットの作成などが可能である。

  • WshNetworkオブジェクト
     ネットワーク・ドライブやネットワーク・プリンタをリストアップしたり、作成、削除したりできるオブジェクト。

  • WshControllerオブジェクト
     ネットワーク上のほかのPC上でスクリプトを実行することができるオブジェクト。

WSH Objects

2011年10月28日金曜日

Subversionサーバー シェルスクリプトでデータをバックアップ

  • このエントリーをはてなブックマークに追加


フルバックアップ

#!/bin/bash

FULL_BK_DIR="/usr/local/svnbk/full"
LOGFILE="/var/log/svn-fullbk.`date "+%Y"`"
REPOS_PATH="/var/svn"
DATETIME=`date "+%Y/%m/%d %T"`

if [ ! -d $FULL_BK_DIR ]
then
        mkdir -p $FULL_BK_DIR
fi

echo $DATETIME "****** The full backup of repository is starting!" >> $LOGFILE
FILE=`which svn-backup-dumps`
if [ "$FILE" == "" ]
then
        echo $DATETIME "The svn-backup-dumps script is required!Please install subversion-tools package!" >> $LOGFILE
        echo >> $LOGFILE
        exit 1
fi

svn-backup-dumps -z $REPOS_PATH $FULL_BK_DIR >> $LOGFILE 2>&1
if [ $? -ne 0 ]
then
        echo $DATETIME "◆Error:Failed in full backup!!" >> $LOGFILE
        echo >> $LOGFILE
        exit 1
fi

echo $DATETIME "****** The backup is done" >> $LOGFILE
echo >> $LOGFILE
exit 0

 

差分バックアップ

#!/bin/bash

INCRE_BK_DIR="/usr/local/svnbk/incremental"
LOGFILE="/var/log/svn-incremental.`date "+%Y%m"`"
REPOS_PATH="/var/svn"
DATETIME=`date "+%Y/%m/%d %T"`
CNT_REVISIONS=100

if [ ! -d $INCRE_BK_DIR ]
then
        mkdir -p $INCRE_BK_DIR
fi

echo $DATETIME "****** The incremental backup of repository is starting!" >> $LOGFILE
FILE=`which svn-backup-dumps`
if [ "$FILE" == "" ]
then
        echo $DATETIME "The svn-backup-dumps script is required!Please install subversion-tools package!" >> $LOGFILE
        echo >> $LOGFILE
        exit 1
fi

svn-backup-dumps -c $CNT_REVISIONS -z $REPOS_PATH $INCRE_BK_DIR >> $LOGFILE 2>&1
if [ $? -ne 0 ]
then
        echo $DATETIME "◆Error:Failed in incremental backup!!" >> $LOGFILE
        echo >> $LOGFILE
        exit 1
fi

echo $DATETIME "****** The backup is done!" >> $LOGFILE
exit 0

Hyper-v 親ディスクの容量を拡張してもいいですか?

  • このエントリーをはてなブックマークに追加


今まで、Hyper-vサーバーのローカル領域を節約するのとOS等のインストールの手間を減らすために、検証環境構築時にHypver-vの親ディスク、差分ディスクによる仮想マシンの作成をやっていました。特に問題なく動いていたので、非常に役に立ちました。

しかし、この間、とんでもないことをしてしまいました。その結果、差分ディスクを利用して作った仮想マシンがすべて起動できなくなりました。悔しくてなりません。

とんでもないことって何?それは、多くの仮想マシンのCドライブの空き容量がほとんどなくなり、Cドライブの容量を拡張しようと思って、勝手に親ディスクのサイズを増やしたってことです。何の証拠もなくただ単にうまくいくだろうと思ってやってしまいました。そのため、親ディスクを拡張してはいけないという教訓を得ました。

 

親ディスクを拡張した後に、仮想マシンを起動しようとすると、以下の様なエラーが表示されました。

image

ディスクの検査をしてみると、”差分チェーンが壊れています。”ということがわかりました。

image

 

いろいろ調べみたが、残念ながら、解決法は見つかりませんでした。諦めるしかなかった。。。

しかし、調べている途中で、VhdTool.exeというツールを見つけました。

ディスクの作成や変更、チェーンの修復などができるらしい。

2011年10月12日水曜日

整数のバイナリ表示を取得

  • このエントリーをはてなブックマークに追加


image

ビット演算子を用いて、整数のバイナリ表示を得る

Version 1

void PrintBinary(int x,int d){
    char buffer[33];
    int index=0;
    for(;d>0;d--){
        buffer[index++]='0'+(x&1);
        x>>=1;
    }
    while (index >0 )
        printf("%c",buffer[--index]) ;
    return;
}

 

Version 2

void PrintBinary(int x,int d){
    char buffer[33];
    int index=0;
    while (d >0) {
        if (x & 1)
            buffer[index++]='1';
        else
            buffer[index++]='0';
        x >>= 1;
        d--;
    }
    while (index >0 )
        printf("%c",buffer[--index]) ;
    return;
}