2013/01/01

備忘録一覧

Windowsサーバ
・ディスク容量を取得する(VBS)
・日付(今日と昨日)を求める(バッチ)
・日付(先月末日)を求める(バッチ)
・曜日毎に処理を変えたい(バッチ)
・直近のファイルを残して古いファイルを削除させたい(バッチ)
・プリンタのカウンタ値(総ページ数)を取得する(perl)
・ある決められた容量のファイルを作りたい(Windowsコマンド)
・WindowsサーバのCPU、メモリ、HDD、使用時間の使用率を把握する(SNMP)
・Windowsのネットワークを簡単に切り替える(バッチ)
・Windowsのシステム情報を取得する(勉強用)
・PerlからOLEを使用してExcelを操作する(再掲載)
・Windowsでgrep(みたいなこと)を行う場合
・リモートデスクトップで「ターミナルサービスの最大数を超えています」のメッセージが出た時の対処方法
・インストールされているアプリケーションの一覧を取得する(VBS)
・インストールされている修正アプリ(パッチ、HotFix)の一覧を取得する(VBS)

UNIX系サーバ
パーティション容量をssh経由で取得する(perl)

| | コメント (0) | トラックバック (0)

2012/02/16

Windowsサーバでうるう秒に対応する備忘録

Windowsサーバで時刻同期の仕方を分かっていない管理者はいないと思いますが、もしいる場合は下記のリンクを参考に基本をおさえてください。まぁ、うるう秒は今回が初めてではないので、対応済な管理者がほとんどだと思うけどw

http://www.atmarkit.co.jp/fwin2k/operation/winntp01/winntp01_01.html

で、私なりのWindowsサーバでの「うるう秒」に対応する結論を備忘録として記載します。

①時刻同期はWindows標準のstepモードではなく、slewモードにする
②①の際、レジストリを変更し5分程度のズレがあってもslewモードを実施するようにする(ドメイン構成かワークグループ構成かで時刻ズレ時の対応が変わるため。また、レジストリ値はOSによって変更になる可能性があるのでググる)
slewモードだとBIOSの時刻との同期が実施されなくなってしまうため、再起動や停止時には"net time \\localhost /set /y"等で強制的に同期を実施してBIOSの時刻同期も行うように設定する(これをしないと、リブートの度にBIOSの時刻に同期されてしまい時刻ズレの現象が発生します)

上記の設定が面倒な場合は、うるう秒後の最初の時刻同期を、Oracleなど時刻が後戻りしてはマズイアプリを停止状態にしてから行うようにすると可(たとえば定期リブート時など)。

| | コメント (0) | トラックバック (0)

2011/07/08

インストールされている修正アプリ(パッチ、HotFix)の一覧を取得する(VBS)

 アプリの一覧取得のソースでWin32_Priductの部分をWin32_QuickFixEngineeringに変更し、取得できる情報をここで調べて、出力の部分をいい感じに変更してください♪

| | コメント (0) | トラックバック (0)

2011/07/07

インストールされているアプリケーションの一覧を取得する(VBS)

 PCやサーバ管理でどんなアプリケーションがインストールされているかを把握するのも重要な仕事です。それなりの管理ツールでサーバの状態を把握できたり出来ますが、そんなツールは結構高いので、承認を得るのも一苦労。そんな時はちょっと機能不足ですが、とりあえず自前でツールを作成して確認しましょう。

 これもVBSからWMIを使用しています。

 ソースを見てお分かりのように、これはHDD容量取得ツールをちょっとだけ改造したものです。今回はWMIのWin32_Productクラスから取得しています。Win32_Productにどんな情報があるのか興味があるのであれば、下記のサイトを参考にしてください。
http://msdn.microsoft.com/en-us/library/aa394378%28v=vs.85%29.aspx

 また、残念ながらこのツールでは全てのアプリを出力してくれません。だいたい7~9割くらいでしょうか。マイクロソフトも公式にこんなFAQを公開するより、WMIを修正してくれると良いんですけどね・・・・・・。なおFAQのリンクのレジストリから取得する方法も残念ながら完璧ではありません。あくまでも参考程度に。完璧にしたいのであれば、専門のツールを購入しましょう。

| | コメント (0) | トラックバック (0)

2011/06/30

リモートデスクトップで「ターミナルサーバーの最大接続数を超えています」が出た時の対応

 緊急時に自宅から会社のサーバにVPN経由のリモートデスクトップで接続する際、たまに『ターミナルサーバーの最大接続数を超えています』のメッセージが出て入れないときがあります。

 これは、ターミナル接続の最大数が2台までなのに対して、誰かがきちんとログオフしないで「×」で閉じてしまった時に、接続のセッションが残ったままになってしまうためです。

 バッチなどを実行中で処理を継続したままにしたい時にはしょうがないですが、たいていの場合はよく知らないで「×」で閉じて不用意にセッションを残したままにする人が多いです。で、この際の対処ですが、以下のようにしてリモートデスクトップを起動します。

----------------------------------------------------
mstsc /admin
----------------------------------------------------

 注)リモートデスクトップのバージョンが古い場合は、/adminを/consoleに代えて実行してみてください。

 こうすることでコンソールモードでリモートデスクトップに接続が出来ます。接続後、ターミナルサービスマネージャを確認し、セッションが残っている接続をチェックしログオフしてあげてセッションを切断すると、他のユーザが普通のモードでも入れるようになります。(たまに本当に接続中のユーザがいる場合があるので、そのユーザはログオフさせないように注意。大抵の場合、接続してるユーザ名で誰か判別できると思うので、その際は電話で緊急時なのを説明しログオフするようにお願いしましょう)

 緊急対応が終わった後日、接続を残していたユーザには生温かく「リモートデスクトップ接続時はきちんとログオフするように」言っておきましょう♪

| | コメント (1) | トラックバック (0)

2011/06/27

Windowsでgrep(みたいなこと)を行う場合

 UNIX系OSを触った経験があれば、一度はgrepコマンドを使ったことがあると思う。Windowsではgrepコマンドそのものはないが、似たような事が出来るコマンドが用意されている。それが『findstr』コマンドです。

 コマンドの詳細などはググれば沢山出てくるので省略するが、私の主な使い方をちょっとだけ紹介。

①CSVとして保存された多くのメッセージログから、ある決まったIDの行を抜き出し、ID番号.logに保存
findstr /i /c:"ID番号をここに記述" *.log > ID番号をここに記述.log

②コマンドの結果をログに出力して、エラー判定を行う(例:コマンドの結果をresult.logに書き出し、結果に"OK"が含まれていれば正常終了かどうか判断する)

findstr /c:"ok" result.log
if %errorlevel% == 1 goto error
rem ↑OKが含まれていればerrorlevel は 0となり、含まれていなければ 1となる

:error
rem エラー処理を記述

 一つのファイルから文字を検索することもできるけど、複数ファイルにまたがるテキストを検索することができるのがfindstrコマンドの魅力。また、パイプラインで渡された文字列も検索対象に出来る。あと、perlとは比較にならないかも知れないけど、正規表現も使えるのはうれしいところ。ただし、/Cと一緒に正規表現を使いたい場合は/Rも一緒に付けること。でないとリテラルとして判断してしまう。また、複数の条件を指定したい場合は/Cを何度も記述できる!

| | コメント (0) | トラックバック (0)

2011/06/23

ActivePerlからOLEを使用してExcelを操作(再掲載)

 以前、ブログで取り上げた記事を再掲載。なぜならExcel2007以降でSaveAsの仕様が変わってうまくセーブできなくなったからその部分を修正。そのメモとして♪

   

| | コメント (0) | トラックバック (0)

2011/06/22

Windowsシステム情報を取得する(perl,XML,XSLT)

 以前、自分のシステム情報を取得するスクリプトを作ってみた。ホスト名やIPアドレス、メモリ量やサービス一覧、インストールプログラムを各々調べるのが面倒だったので、コマンド一つでまとめるもの。

 出力はCSVでも良かったけど、勉強も兼ねてXMLで出力。そして、XSLTも作ってブラウザでも確認できるようにしてみました。

 まぁ、ソースはstrictじゃないし、いろいろ機能が不足しているけど、とりあえずメモとして上げておく。

Systeminfoをダウンロードする(sysinfo.zip)

| | コメント (0) | トラックバック (0)

2011/06/20

Windowsのネットワークをバッチ(コマンド)で切り替える

 ネットワークの違う部署でPCを接続する際、いちいちネットワークのプロパティを変更するのが面倒になる。

 そんな時に接続する場所のネットワーク接続設定をバッチで作っておいて、そのバッチを実行することでネットワークの切替を楽にするのが下記のスクリプト。ネットワーク切替のフリーソフトなんか出てるけど、そんなものは必要ありません。バッチで可能です。

 4F会議室.bat や DHCP.bat などと名前を付けておくと切替時に悩まなくてすみます♪

 なお、実行する前は『netsh dump > netsh_backup.txt』などと設定を保存しておくと吉。もしネットワークがおかしくなったら『netsh -f netsh_backup.txt』と実行して設定を戻せます。 詳細はこちらを参考にすると良いでしょう。

| | コメント (0) | トラックバック (0)

2011/06/19

WindowsサーバのCPU、メモリ、HDDの使用率を把握する(SNMP)

 サーバを運用する上でCPU、メモリ、HDDの状態を把握するのも重要な事です。VBSでHDDの容量なんかを把握するのは前回記載しましたが、今回はSNMPでCPU、メモリ、HDDの使用率や起動時間(UpTime)を把握するためのメモです。

 まずは、WindowsサーバでSNMPによる管理をする為には必須なツールがあります。

snmp-informant

 Windowsサーバの管理をしていて、このツールを知らないとモグリと言われても仕方ないくらい有名なツールです。このツールをインストールすることで、Windowsサーバの様々な数値をSNMPで取得することが可能になります(フル機能版は有償ですが、スタンダード版は無償です)。

取得できる値の例は以下の通り。
# Item OID instance remarks
1 CPU 1.3.6.1.4.1.9600.1.1.5.1.5 6.95.84.111.116.97.108  
2 Memory 1.3.6.1.4.1.9600.1.1.2.3    
3 DriveSpace 1.3.6.1.4.1.9600.1.1.1.1.5 2.67.58 C:\
1.3.6.1.4.1.9600.1.1.1.1.5 2.68.58 D:\
1.3.6.1.4.1.9600.1.1.1.1.5 2.69.58 E:\
1.3.6.1.4.1.9600.1.1.1.1.5 2.70.58 F:\
4 UpTime 1.3.6.1.4.1.9600.1.1.6.1    
indispensable:SNMP-Informant
 perlなどからSNMPにアクセスする際、OIDは上の値のOIDとInstanceを繋げた状態で取得して下さい。例えばCドライブの使用率を取得する際は「1.3.6.1.4.1.9600.1.1.1.1.5.2.67.58」で取得すればOKです。

 自前のツールで監視するのも良いですが、Sitescope、What'sUp、patrolclariceなどの監視ソフトで監視するのが一般的です(少々高いけど、運用が楽になるので買う価値は十分あります。異常値を検知したら管理者のメーリングリストに知らせるなどをするのが標準機能でありますしね)。※

 ※監視対象のサーバには以下の設定が必要です。
  ①SNMPサービスのインストール(②、③はこれを入れないと設定できない)
  ②コミュニティ名の設定(例:publicなど)
  ③監視サーバもしくはSNMP取得するPCへの接続許可設定(IPアドレス登録)

 ちなみに個人的お勧めは起動時間(UpTime)の監視。なぜかというと、例えば正常値を900~3,153,600としておく事でリブートした場合は0に戻るの為、予期しないリブートを検知出来たり、3,153,600(1年間)を超えて稼働している場合、497日問題をチェックできるから。なお、予期せぬリブートはPING監視でも把握できるけど、PING監視間隔によっては検知できない場合もあるのでUpTimeでのチェックが必須です。

| | コメント (0) | トラックバック (0)