2015年1月31日土曜日

Windows標準コマンドでdiffする

Linuxなら迷うこと無くdiffコマンドがあるので問題ないが、Windowsの場合どうすれば良いか悩んでしまうことがある。フリーソフトがインストールできる環境ならまだしも、インターネットに繋がないサーバーとなると、OS標準のコマンドで実施する必要があるので調べてみた。

Windowsバッチファイル

実はコマンドがあってfc (File Compare)を使えば良い。オプションを確認してみよう。

C:\>fc /?
2 つのファイルまたはファイル セットを比較し、相違点を表示します。
FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn]
   [ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2
FC /B [ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2
 
  /A         相違する各部分の 1 行目と最後の行だけを表示します。
  /B         バイナリの比較を実行します。
  /C         英字の大文字と小文字を区別しません。
  /L         ファイルを ASCII テキストとして比較します。
  /LBn       連続する最大不一致行を指定行数に設定します。
  /N         ASCII の比較で行番号を表示します。
  /OFF[LINE] オフライン属性が設定されたファイルをスキップしません。
  /T         タブをスペースに変換しません。
  /U         Unicode テキスト ファイルとしてファイルを比較します。
  /W         連続した空白 (タブとスペース) を 1 つのスペースに圧縮して比較します。
  /nnnn      不一致発見後に確認する、一致すべき連続行数を指定します。
 
  [ドライブ1:][パス1]ファイル名1
             比較する最初のファイルまたはファイル セットを指定します。
  [ドライブ2:][パス2]ファイル名2
             比較する 2 番目のファイルまたはファイル セットを指定します。
見ての通りいろいろオプションはあるが、お勧めは/n付けて相違行番号を出すとわかりやすいと思う。
(実行例)
c:\>fc /n test.txt test2.txt
ファイル test.txt と TEST2.TXT を比較しています
***** test.txt
***** TEST2.TXT
    5:
    6:  hoge4
*****

PowerShell

Compare-Objectを使う。さらに標準でdiffとcompareでエイリアスに登録されているので、以下コマンドで実行することができる。

PowerShell的にはあくまでオブジェクトの比較になるので、一度cat(Get-Contentのエイリアス)でテキストを読み込ませてから比較する必要がある。SideIndicatorは=>となっていれば引数の右側、<=になっていれば引数の左側に差異があることを表している。
PS C:\> diff (cat '.\test.txt') (cat .\test2.txt)
 
InputObject                                                 SideIndicator
-----------                                                 -------------
                                                            =>
hoge4                                                       =>

2015年1月28日水曜日

バッチファイルの遅延環境変数の展開

バッチファイルの遅延環境変数の展開について知らなかったため、先日バッチファイル作成時にハマってしまった。調べればもっとわかりやすいサイトもあるが、自分でもスクリプト作って調査・確認をしたので備忘として残しておく。

環境変数の展開というバッチファイルの罠

バッチファイルは1行1行読み込みながらコマンドを解釈して処理を実行する。変数がある場合は、1行読み込んだ際に値を代入して処理をする。しかし、if文やfor文の場合は、if文の中身も含めて一気に変数に値を代入する(環境変数が展開される)という、バッチファイルならではの癖がある。

例を出そう。以下は1~10までを足し算するバッチファイルである。
rem 1~10までを足し算する
@echo off
set i=0
for /l %%X in (1,1,10) do (
set /a i=%i% + %%X
echo %i%
)
echo %i%
pause
exit 0
結果は55が最後に表示されることを期待するが、以下の通りうまくいかない。
0
0
0
0
0
0
0
0
0
0
10
続行するには何かキーを押してください . . .
なぜかというとfor文の()の中身は、for文開始時に変数iが0で展開されてしまうから。わかりやすく書くと、以下を実行していることと同一になってしまう(ループの最後は%%Xは10が入るので、それが変数iに代入されて終わる)。
rem 1~10までを足し算する
@echo off
set i=0
for /l %%X in (1,1,10) do (
set /a i=0 + %%X
echo 0
)
echo %i%
pause
exit 0

遅延環境変数の展開を有効化する

問題を解決するためには、以下2点を対応すれば良い。

  1. 最初に"setlocal enabledelayedexpansion"を書いて、遅延環境変数の展開を有効化
  2. 遅延環境変数は"%"ではなく"!"で囲む

試してみよう。
rem 1~10までを足し算する
@echo off
rem 遅延環境変数
setlocal enabledelayedexpansion

set i=0
for /l %%X in (1,1,10) do (
set /a i=!i! + %%X
echo !i!
)
echo %i%
pause
exit 0

結果。
1
3
6
10
15
21
28
36
45
55
55
続行するには何かキーを押してください . . .
以上の通り、想定される55の結果が表示された。

シェルスクリプトでreadを使った際に、入力した文字を表示させない方法

小ネタだが、スクリプト実行時に特定のユーザーID、パスワードを使って処理を実施したい場合があるとして、その際に単純にreadで入力をさせてしまうと、TeraTerm等のログ保存を使っている場合、ログにパスワードが平文で表示されてしまう。

その対策として、sttyコマンドで入力文字のechoをOFFにしてしまえば良い。
# username入力を求める(これは表示される)
echo -n "username:"
read _user
echo

# password入力を求める(これは表示されない)
stty -echo
echo -n "password:"
read _pass
stty echo
echo

2015年1月24日土曜日

インフラエンジニアの仕事で使える素材集

設計図やネットワーク構成図、あるいは提案書を書く際に使えるインフラ機器の素材集。ただのオートシェイプで表現するよりも"らしく"なるので便利。

VMware PowerPoint Icons and Images - 2Q12

◆URL
https://communities.vmware.com/thread/400678

◆評価
非常に綺麗な高品質な素材となっており、この素材を使って報告書等を作ると、大した内容を書いていなくてもそれっぽいものになるので活用させてもらっている。

仮想化製品ベンダーのアイコンだけあって、仮想環境を表現するにはうってつけの図はもちろんのこと、一般的なサーバー、ネットワーク機器、ストレージの構成図を書く際に必要となる図や、マニアックな周辺機器(NIC、HBA、Tape Driveなど)まで、広く揃っていて、使い勝手かものすごく良い。

難点を言えば正面から見た図ではなく、斜め45度に傾いた立体感のある図が多いので、他素材と合わせる際は統一感を出しづらいかもしれないので注意。

AWSシンプルアイコン

◆URL
http://aws.amazon.com/jp/architecture/icons/

◆評価
Amazon Web Services使うならこれ。

AWSで使われているそれっぽい図のための素材が用意されている。最近の流行りと勝手に思っているシンプルなデザイン。この前少しだけAWSを使う機会があったので使ってみたが、これを使うだけでいかにもAWSを使いこなしている感が出て良い感じ。

AWS以外に使えるかというとAWS特有のサービスの図が多いので難しいかもしれない。また、独特なデザインなので他の素材との相性はイマイチかも。

Microsoft Azure, Cloud and Enterprise Symbol / Icon Set for Visio, PowerPoint, PNG

◆URL
http://www.microsoft.com/en-us/download/details.aspx?id=41937

◆評価
AWSシンプルアイコンと同様、流行りのシンプルなデザイン。2014年12月にVersion 2.0になっており、以前に比べると画像点数が大幅に増えている(Xboxの図まである!)。

欠点はAWSシンプルアイコンと同様、これを使ったらこれだけでドキュメントを作らないと統一感が出ないこと。

CISCO ネットワーク トポロジー アイコン

◆URL
http://www.cisco.com/web/JP/product/topology_icons.html

◆評価
昔からある素材で、インフラエンジニアなら誰でも知っていると思われる独特の色とデザイン。シンプルだが、悪く言うとのっぺりしたデザインなので、ちょっと地味に見えてしまうかも。設計書や構成図に使うのは問題ないが、提案書に使うには少しインパクトが弱い(他のパワーポイントのデザインに負けてしまいがち)。

HP製品写真ライブラリ

◆URL
http://h50146.www5.hp.com/info/newsroom/library/

◆評価
HPの実物の製品写真でありCGでは無い。HPの製品使って提案書等のドキュメントを作るなら使えそうだが、真正面から撮った写真ではないことと、白い余白の背景を含む画像なので、使う前にちょっとした画像の加工が必要になる。

IBM Systems フォト・ライブラリー

◆URL
http://www-06.ibm.com/systems/jp/photo/

◆評価
IBM版はこちら。使い方はHPと同様。


2015年1月22日木曜日

PowerCLIで仮想マシンのCPU・メモリ制限を「制限なし」に設定する方法

制限の有効化

仮想マシンのCPU・メモリの制限に対して、PowerCLIで有効化することは簡単で、以下のコマンドで実施可能。
Get-VM -Name "VM_NAME" | Get-VMResourceConfiguration | Set-VMResourceConfiguration -CpuLimitMhz 2048
Get-VM -Name "VM_NAME" | Get-VMResourceConfiguration | Set-VMResourceConfiguration -MemLimitMB 2048

確認コマンドは以下の通り。「制限なし」の場合は"-1"と表示される。
Get-VM -Name "VM_NAME" | Get-VMResourceConfiguration  | ft VM,CPULimitMh,MemLimitMB
VM                                              CpuLimitMhz                    MemLimitMB
--                                              -----------                    ----------
VM_NAME                                             -1                            -1


制限の無効化(「制限なし」にする)

しかし、「制限なし」に設定する場合はどのようにすれば良いのか悩んでしまう。"0"では普通に設定が通ってしまうし、"-1"でいけるかと思いきやエラーとなってしまって先に進めない。
Get-VM -Name "VM_NAME" | Get-VMResourceConfiguration | Set-VMResourceConfiguration -CpuLimitMhz -1
Set-VMResourceConfiguration : 2015/01/22 20:42:58    Set-VMResourceConfiguration        Invalid value passed to the CpuLimitMhz parameter.発生場所 行:1 文字:86+ Get-VM -Name JEPOS-TEST01 | Get-VMResourceConfiguration | Set-VMResourceConfiguration <<<<  -CpuLimitMhz -1    + CategoryInfo          : InvalidArgument: (:) [Set-VMResourceConfiguration]、Invalid    Argument    + FullyQualifiedErrorId : Core_SetVmResourceConfiguration_TryValidateParameterList_I   nvalidValue_CpuLimitMhz,VMware.VimAutomation.ViCore.Cmdlets.Commands.SetVMResourceCo  nfiguration
結果的に以下のように対応すれば良いことがわかった。PowerCLIのコマンド集にも明記されていないので注意しよう。$nullがミソ。
Get-VM -Name "VM_NAME" | Get-VMResourceConfiguration | Set-VMResourceConfiguration -MemLimitMB $null

2015年1月20日火曜日

自己署名証明書のSSLサーバ証明書を使う際にブラウザーのエラーを消す方法

日本ベリサイン(今はシマンテック・ウェブサイト・セキュリティという名前になっていることを今回知った)等の公的なサーバ証明書発行期間だと、2年間で20~40万円も費用がかかる。インターネットに公開するシステムであれば、当然公的なサーバ証明書を使うべきだが、社内からのアクセスしか無いシステムの場合は、自己署名証明書で済ませるという場合が多いと思う。

自己署名証明書はベリサインのように「信頼されたルート証明機関」ではないので、毎回毎回ブラウザがご丁寧に警告を出してくる。利用者観点で考えると、毎回同じ警告が出てくるのは嫌だと思うので、この警告を出さないように対応を実施した方が良い。

SSLサーバ証明書の理解

SSLサーバ証明書は以下3点を見て、サイトの安全性を確認する。

  1. ブラウザでアクセスしたURLと証明書のCommon Nameが一致していること
  2. 証明書が信頼された証明機関から発行されていること
  3. 証明書の有効期限が切れていないこと

自己証明書の場合、「2」の信頼された証明機関から発行されていないので当然エラーとなるので、自分で自己証明書を信頼されたものとして端末にインストールしてあげる必要がある。

対応方法

対応は全て端末側で行う必要がある。端末数が多い場合は、DNSやActive Directoryのグループポリシーを利用して設定負荷を軽減した方が良い。

1. URLとCommon Nameを一致させる

DNSによる名前解決やhostsファイルへ登録すれば良い。

2. 証明書の端末へのインストール

「コントロールパネル」→「インターネットオプション」→「コンテンツ」タブ→「証明書」ボタンを選択すると、「証明書」のダイアログボックスが表示される。「信頼されたルート証明機関」タブを選択して、「インポート」ボタンを押すと「証明書のインポート ウィザード」が表示されるので、予め作っておいた自己署名証明書をインポートしてあげればOK。

ちなみに、「個人」とか「信頼された発行元」といったインポート場所もあるが、自己署名証明書はCAから署名がされていない証明書なので、上記にインポートしてしまうとエラーになる。なので、「ルート証明機関」と見なしてインポートしてあげる必要がある。

3. 証明書の有効期限

自己証明書を作成する際に気を付ける。面倒なら最初から10年とか長い期間有効な証明書を作ると良い。どうせ自己署名証明書なので、定期的に作りなおす必要性は個人的には無いと思っている。


2015年1月16日金曜日

ExcelでDiffする

インフラエンジニアとなればスイッチのconfigを比較するなどでDiffツールは日常的に使っていると思うが、あくまでもDiffはテキストに対して実施するものと普通は考えているはず。

WinMergeというDiffツールにプラグインを入れれば、Excelファイルの内容もDiffできることがわかった。ダウンロード先は以下。


WinMergeをインストールして、プラグインのReadme読んで所定のフォルダにプラグイン入れればDiffができるようになる。

書式(罫線・網掛けなど)の違いはさすがに比較できないが、記載されているテキストはDiffできるので、Excelドキュメントの修正箇所洗い出しに便利になりそう。


2015年1月15日木曜日

いろんなスクリプトでYYYYMMDDの日付の文字列を作る方法

本日日付のディレクトリを作成したり、バックアップファイルのファイル名の末尾に日付を付けたりする際に、20150115のように、本日の日付からYYYYMMDDの文字列を作りたくなることが多い。

各スクリプト言語でやり方は決まっているので、まとめておく。

Windowsバッチファイル

その①
set TODAY=%DATE:/=%
その②
for /f usebackq %%l in (`echo %date:~-10,4%%date:~-5,2%%date:~-2,2%`) do set TODAY=%%l

PowerShell

$today = Get-Date -Format "yyyyMMdd"

Linuxシェルスクリプト

_today=`date +"%Y%m%d"`

Excel数式

=TEXT(TODAY(),"yyyymmdd")

Excel VBA

Cells(1, 1) = Format(Date, "yyyymmdd")


2015年1月13日火曜日

BIG-IPのモニター(ノード監視)でHTTP(HTTPS)を使ってみる

BIG-IPに限らず多くの負荷分散機では、分散対象ノード(サーバー)のヘルスチェック機能を有していて「モニター(Monitor)」と呼ばれる。ヘルスチェックにてノードダウンを検知した場合は、そのノードに通信を転送しないようにする(分散対象から外す)ことで、業務通信の正常性を担保する機能となる。

モニターには大きく以下の方式がある(カッコ内はBIG-IPデフォルトで存在するモニター名称)。
  • L2 Monior (icmp_gateway) ; pingによる応答有無を確認
  • L3 Monitor (tcp) : 特定ポートに対するTCPコネクション確立可否を確認
  • L4 Monitor (http) : http(それ以外のプロトコルも可)で特定のコマンドを送り、正常性を表すメッセージ応答有無を確認

今回、httpでもモニター設定が必要となり慌てて設定方法を検証したので、備忘として残すことにする。

設定方法

BIG-IPにログインし、「Profile」→「Monitor」→「Create」を選択する。「Parent」に"http"を選択すると以下項目が標準で登録されている。

Send : GET /\r\n
Receive : <空白>

上記は"http://<負荷分散対象ノード>/"のHTMLファイルをGETするコマンドを送ることを意味する。"\r\n"は改行コードを表す。このコマンドを送るとHTMLの中身の文字列が返ってくるが、「Receive」が空白の場合は、応答がとりあえずあればノードは生きていると見なしてしまう。

確かにこれでも監視としては機能するが、L3 Monitorと何ら機能差異が無いので、もう少しチューニングしてみることにする。

文末に記載したF5のKBに調度良いものがあったので、参考に以下を試してみる。これで良い感じはするが、何となくSendに対するRecieveがどのようになっているか直に確認してみたくなった。

Send : GET /index.html HTTP/1.1\r\nHost: host.domain.com\r\nConnection: Close\r\n
Receive : HTTP/1.1 200 OK

HTTPの応答メッセージの確認方法

というわけで、実際にWebサーバーへのコマンド送信を実施し、その応答を確認してみるため、Telnetクライアントを使って確認してみることにした。

TelnetクライアントはWindowsには標準でインストールされていないので、「プログラムと機能」から追加した後、コマンドプロンプトで以下を実行してみる。なお、確認につかっているURLは警視庁のサイトだが、比較的シンプルなサイトを選んだだけであって他意はない。

◆コマンド①:HTMLファイルの中身を表示させる
telnet www.keishicho.metro.tokyo.jp 80
GET /kankatu/event/event.htm  ←入力文字は表示されないのでコピペすると楽

--------出力結果
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<style type="text/css">
~以下略
--------出力結果ここまで


◆コマンド②:HTMLファイルの状態(ヘッダ情報)を表示させる
telnet www.keishicho.metro.tokyo.jp 80
HEAD /kankatu/event/event.htm HTTP/1.0  ←入力文字は表示されないのでコピペすると楽
☆←もう一回Enter

--------出力結果ここから
HTTP/1.1 200 OK   ←HTTP/1.0でコマンドを送ってもHTTP/1.1で返ってくる謎
Date: Tue, 13 Jan 2015 14:11:14 GMT
Server: Apache
Last-Modified: Tue, 13 Jan 2015 05:03:41 GMT
ETag: "c6953e0-5431-50c818be66540"
Accept-Ranges: bytes
Content-Length: 21553
Connection: close
Content-Type: text/html



ホストとの接続が切断されました。
--------出力結果ここまで


◆コマンド③:両方表示させる
telnet www.keishicho.metro.tokyo.jp 80
GET /kankatu/event/event.htm HTTP/1.0  ←入力文字は表示されないのでコピペすると楽
☆←もう一回Enter

※出力結果は省略

◆コマンド④:HTTP1.1で接続
HTTP1.1の場合は、③のようにEnterを2回実施するだけでは、"400 Bad Request"が返ってくるため、コマンドは2行必要になる。

telnet www.keishicho.metro.tokyo.jp 80
GET /kankatu/event/event.htm HTTP/1.1  ←入力文字は表示されないのでコピペすると楽
Host:www.keishicho.metro.tokyo.jp ←"Host:"の後にはどんな文字列でもOKっぽいが、アクセスするURLと合わせると無難

※出力結果は省略(③と同じ)

参考

https://support.f5.com/kb/en-us/solutions/public/13000/600/sol13622.html

2015年1月11日日曜日

WindowsにTelnetクライアントを入れる

最近のWindowsには初期状態でTelnetクライアントが入っていないので入れる必要がある。

入れる方法は「コントロールパネル」→「プログラムと機能」→「Windowsの機能の有効化または無効化」から「Telnetクライアント」を入れれば良い(Windows 8.1の場合。Windowsのバージョンによって若干文言は異なる可能性がある)。OSの再起動は不要。

2015年1月9日金曜日

共有フォルダアクセス時にパスワードを聞かれなくする方法

Windowsで別サーバーの共有フォルダをアクセスしようとした際にユーザー名とパスワードを聞かれないようにする方法。スクリプトなどでも共有フォルダアクセス時にユーザー名とパスワードを平文で書いてしまうとセキュリティ上よろしくないので、その回避策としても使える。

方法

コントロールパネルからも辿っていけるようだが、いつも見つけるのに苦労するので、「ファイル名を指定して実行」から以下コマンドを入力することにしている。

control keymgr.dll

「資格情報マネージャー」が表示されるので、「Windows資格情報」にサーバー名(IPアドレス)、ユーザー名、パスワードを入れて資格情報を保存すれば、共有フォルダアクセスをしてもパスワードを求められなくなる。


2015年1月6日火曜日

VMwareでのハードウェアクロックとソフトウェアクロックの関係

そもそもハードウェアクロックとシステムクロックとは

サーバーの電源が落ちたとしても、ある程度時間を刻むことができないと、次回起動時のOSの時間のずれが大きくなり、動作に支障をきたす可能性がある。したがって、外部電源に頼らずに、システムボード上のボタン電池にて時刻を刻む機能があり、それがハードウェアクロックとなる。

一方、システムクロックは、電源ON中の状態で利用するクロック。逆に言うと、ハードウェアクロックはOS起動時は利用されることは原則無く、システムクロックが利用されるということになる。

VMwareでのクロックの種類と管理主体

仮想環境では以下のような4階層構造となる。

[a. VM:システムクロック] ←仮想マシンのOSが持つ時間
[b. VM:ハードウェアクロック] ←仮想マシンのBIOSが持つ時間
------------------------------
[c. ESX:システムクロック] ←ESXのハイパーバイザーが持つ時間
[d. ESX:ハードウェアクロック] ←ハードウェアが持つ時間(通常は内蔵電池で時間を維持)

同期タイミング

同期タイミングは以下の通り。

[a. VM:システムクロック] ←VM起動時にb→aに同期、VM停止時にa→bに同期
[b. VM:ハードウェアクロック] ←VM起動時にc→bに同期
------------------------------
[c. ESX:システムクロック] ←ESX起動時にd→cに同期、ESX停止時にc→dに同期
[d. ESX:ハードウェアクロック] ←通常は内蔵電池で時間を維持

注目すべきは、以下の点。

  • VMにおけるハードウェアクロックは仮想BIOSが持つ時間
  • VM停止後のハードウェアクロック情報はBIOSは保持せず消失
  • VM起動時にESXのシステムクロックをVMのハードウェアクロックとして同期する



PowerCLIのTips集 (随時追加)

VMwareのAPIをPowerShellベースのスクリプトで叩くことができるPowerCLI。運用自動化を行う上では必須ツールとなる。

PowerCLIのTipsを取り留めなく書いていく。なお、バージョンは5.1以降を推奨。

ESX設定確認系コマンド

# ESX時刻確認
# Get-EsxCliを使うとDCUIのesxcliコマンドと同じことができる
# システムクロック
Get-VMHost | select Name,{($_ | Get-EsxCli).system.time.get()}
# ハードウェアクロック
Get-VMHost | select Name,{($_ | Get-EsxCli).hardware.time.get()}

# ESXサーバ物理NIC帯域の確認コマンド
Get-VMHostNetworkAdapter -VMHost *  | ft -AutoSize VMHost,Name,BitRatePerSec



仮想マシン設定確認系コマンド

# 仮想マシンのNIC一覧&MACアドレス取得
Get-VM | Get-NetworkAdapter | ft Parent,Name,Type,NetworkName,MacAddress

# 仮想OSのCDドライブ状況
# CDドライブがマウントされていたりするとvMotionができない場合があるので事前確認する
Get-VM | Get-cddrive | select parent,isopath,hostdrive

# スナップショット有無の確認コマンド
# スナップショットの消し忘れ確認などに便利
Get-Snapshot -vm * | ft -AutoSize VM,Name

# VMwareToolsのバージョン確認
# 元ネタ: http://blog.jgriffiths.org/?p=534
get-vm | % { get-view $_.id } | select Name, @{ Name="ToolsVersion"; Expression={$_.config.tools.toolsVersion}},@{ Name="ToolStatus"; Expression={$_.Guest.ToolsVersionStatus}}

# 仮想マシンのディスク使用量取得
# 割り当てディスク量ではなく、仮想OSの使用量がわかる
ForEach ($VM in Get-VM ){($VM.Extensiondata.Guest.Disk | Select @{N="Name";E={$VM.Name}},DiskPath, @{N="Capacity(MB)";E={[math]::Round($_.Capacity/ 1MB)}}, @{N="Free Space(MB)";E={[math]::Round($_.FreeSpace / 1MB)}}, @{N="Free Space %";E={[math]::Round(((100* ($_.FreeSpace))/ ($_.Capacity)),0)}} | ft -autosize)}

移動系コマンド

# 「検出された仮想マシン」フォルダから出す(全VMが対象)
get-vm | Move-Inventory -Destination "vm"

# 「検出された仮想マシン」フォルダへ全VMを入れる
get-vm | Move-Inventory -Destination "検出された仮想マシン"

# 仮想マシンのフォルダ情報確認
get-vm | ft name,folder

# 仮想OSのStorage vMotion
Move-VM -VM "TEST_VM" -Datastore "DataStoreA" -DiskStorageFormat "Thin"


Windowsパッチ一括適用バッチファイル

インターネットやWSUSがある環境であれば苦労しないが、社内システムでWSUSも無い環境の場合はWindowsパッチ適用を月1回手動で当てるといった対応を強いられる場合がある。1個や2個当てる分には耐えられるが、これが10個とか当てる場合、気が遠くなるような作業になる(大げさかもしれないが少なくとも効率は悪い)。

というわけで、超簡単なパッチ一括適用バッチファイルを作ってみた。パッチをpatchするbatということで、patch_patch.batと名付けた。

patch_patch.bat

以下をバッチファイルとして保存し、msuファイルと同一フォルダに置いて管理者として実行すればOK。最後に再起動を忘れないように。

---------------------
@echo off
rem 使い方:*.msuファイルと同じフォルダにて本バッチを実行

rem 開始確認
set /p YORN="パッチ適用を開始します。 (y or n):"
if not '%YORN%'=='y' (
   echo "処理を中止"
   GOTO END
)

rem 適用
for /r %%i in (*.msu) do (
    echo C:\Windows\System32\WUSA.EXE %%i /quiet /norestart
    C:\Windows\System32\WUSA.EXE %%i /quiet /norestart
)

:END

pause
---------------------

2015年1月5日月曜日

Excel利用時にF1キーを無効化する

Excelのセル編集を行う場合はF2キーを押すが、間違ってその隣のF1キーを間違って押してしまってヘルプウィンドウが表示されて、イラッとする「Excelあるある」をどうにかする方法を考えた。

ヘルプなんて昔のOfficeのイルカと同じくらい使わない機能なのだから、Excel起動時はF1キーを殺す無効化してしまえば良いのだ。

無効化方法

以下内容のテキストファイルを拡張子「.reg」にして保存した後、「右クリック」→「結合」を実施する。その後、Excelを再起動することで反映される。

---------------------
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\14.0\Excel\DisabledShortcutKeysCheckBoxes]
"F1Key"="112,0"
---------------------

※文字コードはUnicodeにして保存すること
※上記はOutlook 2010の例。他のバージョンの場合は"14.0"の部分を以下に変更する。
 Outlook 2007:11.0
 Outlook 2010:14.0
 Outlook 2013:15.0


Outlookのメール折り返し文字数を132文字以上にする(1000文字にする)

OutlookのGUIではメール本文の折り返し文字数を132文字以上に指定できない。個人的にはメールの折り返しは自分で決めてEnter押した方が便利だと思うし、逆にURL等長い文字列を打ちたい時に非常に不便。

レジストリに値を追加することで132文字以上を指定できる。以下内容のテキストファイルを拡張子「.reg」にして保存した後、「右クリック」→「結合」を実施する。その後、Officeを再起動することで反映される。

---------------------
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\MailSettings]
"PlainWrapLen"=dword:000003e8
---------------------

※文字コードはUnicodeにして保存すること
※上記はOutlook 2010の例。他のバージョンの場合は"14.0"の部分を以下に変更する。
 Outlook 2007:11.0
 Outlook 2010:14.0
 Outlook 2013:15.0

2015年1月1日木曜日

Ciscoのスイッチでping・tracerouteを停止する方法

知らないと止めれないタイトルの件。以下キーで止まる。

[Ctrl] + [Shift]を押して、さらに[6]を押す。

Ctrl+Cで止まらないので、とりあえず、もう1個TeraTerm立ち上げて無かったことにするのはもうやめよう。

スリープ再開後にセンサーによる画面自動回転が動作しない

MicrosoftからKB2875155が出されていたが、2013年7月31日以降、内容が更新されていない。Microsoftさんもどうしようもないあきらめた事象なのか、そもそもあまり発生しない事象かは不明だが、少なくとも私のWindowsタブレットでは発生している。

http://support.microsoft.com/kb/2875155/ja

回避策

KB2875155に書いてある方法は随時「Sensor Monitoring Service」サービスを再起動せよというもの。たしかにサービス再起動したら直る。仕方がないので、以下の適当バッチファイルを作って暫定対処することを考える。

@echo off
net stop SensrSvc
net start SensrSvc
pause

スリープ後にどうしても画面の自動回転を有効にしたい時は、上記バッチファイルを「管理者として実行」にて叩く運用にする。

さらに自動化するには、タスクスケジューラ使ってスリープ復帰のイベントログをトリガーにしてサービス再起動のバッチファイルを自動で叩くよう登録すれば良い気はするが、そもそもWindowsタブレットを縦で使うタイミングはPDF等を見るときだけなので、手動運用でしばらく回避してみることにする。