2014年11月14日金曜日

サーバーマネージャーでサーバーの一覧を読み込むことができなかったエラー[WindowsServer2012]

WindowsServer2012のサーバーマネージャーで「サーバーマネージャーでサーバーの一覧を読み込むことができませんでした。」というエラーが発生した場合の対処について



ダイアログに出ているServerList.xmlファイルを確認したところ、NULL文字(?ちゃんと確認してない)が格納されていた。

今回の場合、対象のサーバーが他になかったため、
ダイアログに出ているServerList.xmlファイルを空にして保存したら改善した。



2014年9月17日水曜日

2014年9月4日木曜日

応答なしダイアログが表示される迄の時間を変更する(WindowsVista,7)

画面アプリケーションで時間がかかる処理を実行していると「応答なし」ダイアログが表示され、
落とそうと思えば落とせてしまう問題がある。

コードを修正して対応するのが本筋だが、対象アプリが多かったり、時間などのリソース不足が要因でそこまで手が出せないようなケースもあります。

そこで、取りあえずの逃げの対応として、「応答なし」ダイアログが表示されるまでの時間を延ばす方法があります。


【参考】
http://social.technet.microsoft.com/Forums/ja-JP/3edbe74c-3eda-45f0-bb9b-41fb6b4aff94


【手順】
1.レジストリエディタを開く(Regedit)
2.[HKEY_CURRENT_USER]→[Control Panel]→[Desktop]
3.少なくともWin7ではデフォルトでキーがないので、キーを追加する
 HungAppTimeout
 データ型:文字列型(REG_SZ)
4.値を好きなミリ秒にする。


2014年9月1日月曜日

【VBS】InternetExplorerを操作する(URL表示・Form操作・イベント実行・JavaScript実行)

定例的にブラウザを使って実施する作業をスクリプトで自動化する。

InternetExplorerオブジェクトを使うと、Tokenを使用して画面遷移の制限をかけているWebシステムの自動化をしやすい。
JavaScriptで入力チェック+Hiddenで区分値ゴリゴリ変更してるシステムって面倒くさい。。。




以下、スクリプトコード
※コメント補足やURLなどの固有情報は、投稿時に追記・変更しているので、このまま動く保証はなし。

'====================================================================
Option Explicit

'【1】InternetExplorerオブジェクトを作成
Dim objIE Set objIE = CreateObject("InternetExplorer.Application")

'【2】作成したIEウィンドウサイズ調整
objIE.Width = 600
objIE.Height = 800

'【3】IEの表示位置調整
objIE.Left = 1200
objIE.Top = 100

'【4】IE表示設定
'True:表示する
objIE.Visible = True

'【5】指定URLへ移動(表示)
objIE.Navigate "URL"
'例)
'objIE.Navigate "http://www.google.co.jp"

'【6】ページの読み込みが終わるまで待機
Do Until objIE.Busy = False
   '250ミリ秒待機
   WScript.sleep(250)
Loop'

'★
'この時点でIEは目的のURLが表示されている


'【7】BODYのHTMLを取得(デバッグ用:ちゃんとResponseを受信したか確認)
'Dim strBody
'strBody = objIE.Document.Body.InnerHtml
'WScript.echo strBody


'★
'操作

'【8】Form操作:コントロールに値セット
objIE.Document.フォーム名.コントロール名.value = "test"

'【9】コントロールのイベント実行
objIE.Document.フォーム名.コントロール名.FireEvent ("イベント")
'イベント: onchange, onblur, onkeydown, onfocus, onclick....

'【10】JavaScript実行
Dim pw As HTMLWindow2
Set pw = objIE.Document.parentWindow
pw.execScript "関数()"



'★終わりに
'IE終了
objIE.Quit

'オブジェクトの破棄
Set objIE = Nothing



'====================================================================


前回の投稿では、このスクリプトの実行時に発生した「エラーを特定できません」のエラーへの対処をメモ済み。

2014年8月27日水曜日

VBS+IEでNavigate後、エラーを特定できませんエラー

VBSでIEを操作して自動的にForm送信しようとしていたところ、
80004005「エラーを特定できません」 エラーが発生してしまった。

正確には、Navigate後にHTMLを取得しようとしている「IEObj.Document.body.innerHTML」の行で発生。
なお、IEにはアクセスしたいURLの内容が表示されていた。



ただ、このResponseのFormを操作してRequest送信することが目的なので、
ちゃんとInnerHTMLを取得できないと困る。

さて、ググってもあまり有益な情報が掴めず、
目的のURLは信頼済みサイトに登録しているので、削除してみたりしたが、効果はなし。

諦めようとしていたところ、、、
何の気なしに「管理者として実行」してみたらエラーが発生しなくなった。


ナニコノオチ

2014年5月19日月曜日

WindowsTimeサービスを使用しての時刻同期(サーバー/クライアント両方)

WindowsTimeサービスを使用して時刻同期する方法について。

【ケース】
・外部NTPサーバーと時刻同期しているサーバーAと
 サーバーAをNTPサーバーとして時刻同期するサーバーBを構築する。
・サーバーAは既に外部NTPサーバーと同期設定できているものとする。


【手順:NTPサーバー構築@サーバーA】
0.参考
下記参考URLの情報をまとめただけです。
http://blog.syo-ko.com/?eid=1050
http://d.hatena.ne.jp/hidepon_mory/20071106/1207896724


1.ローカルグループポリシーエディターでの作業

 1-1.ローカルグループポリシーエディターを起動
   [スタート]
    →[ファイル名を指定して実行]
    →[gpedit.mscと入力]
    →[Enter]

 1-2.[Windows NTP サーバー]を有効にする

   1-2-1.左側ペイン
       [コンピューターの構成]
        →[管理用テンプレート]
        →[システム]
        →[Windows タイム サービス]
        →[タイム プロバイダー]
       へ移動する 

   1-2-2.右側ペイン
       [Windows NTP サーバーを有効にする]を開き、[有効]にする


2.レジストリエディタでの作業

 2-1.レジストリエディタを起動を起動
   [スタート]
    →[ファイル名を指定して実行]
    →[regeditと入力]
    →[Enter]
 
 2-2.Enabledを1にする
   1-2-1.左側ペイン
       [HKEY_LOCAL_MACHINE]
        →[SYSTEM]
        →[CurrentControlSet]
        →[Services]
        →[W32Time]
        →[TimeProviders]
        →[NtpServer]
       へ移動する 

   1-2-2.右側ペイン
       [Enabled]を開き、[1]にする。
       ※10進数でも16進数でも[1]

 2-2.AnnounceFlagsを5にする
   1-2-1.左側ペイン
       [HKEY_LOCAL_MACHINE]
        →[SYSTEM]
        →[CurrentControlSet]
        →[Services]
        →[W32Time]
        →[Config]
       へ移動する 

   1-2-2.右側ペイン
       [AnnounceFlags]を開き、[5]にする。
       ※10進数でも16進数でも[5]


3.WindowsTimeサービスを再起動する
 コマンド(net stop / net start)や、[管理ツール]→[サービス]から
 [WindowsTimeサービス]を再起動する。


9.補足
 9-1.[2.レジストリエディタでの作業]を実施しないと時刻同期されない。
   9-1-1.後述のNTPクライアント側作業完了後、
       NTPクライアントから時刻同期コマンド[w32tm /resync]を実行すると、、、
       ・[時刻データが利用できなかったため、コンピュータは同期をとり直しませんでした]と返ってくる。
       ・タスクバー右端から[日付と時刻]ダイアログを開き、
        [インターネット時刻]タブを開くと、
        [サーバーA と同期中にエラーが発生しました。
         タイムサンプルは拒否されました。
         ピアの階層がホストの階層よりも少なくなっています。]
        と表示される。

 9-2.セキュリティ関連
    ファイアウォールやウィルス対策ソフトなどでポート制限を掛けている場合、
    ポート空けの作業が必要。
    サーバーだけでなく、ルーターなどのネットワーク機器が間にある場合も同様。



【手順:NTPクライアント構築@サーバーB】

0.参考
http://blog.goo.ne.jp/derstoss/e/ae416b550c30403ac0afe815d3bf982e


1.コマンドプロンプトでの作業

 1-1.コマンドプロンプトを起動
   [スタート]
    →[ファイル名を指定して実行]
    →[cmdと入力]
    →[Enter]

 1-2.NTPサーバーとの乖離状況を確認。
    コマンドプロンプトで以下コマンドを実行
    [w32tm /monitor /computers:サーバーA]

    →NTPの行で乖離状況を確認する。

 1-3.時刻同期設定
    コマンドプロンプトで以下コマンドを実行
    [w32tm /config /manualpeerliset:サーバーA /syncfromflags:manual /update]

    →正常終了を確認

 1-4.再度、NTPサーバーとの乖離状況を確認。
    コマンドプロンプトで以下コマンドを実行
    [w32tm /monitor /computers:サーバーA]

    →NTPの行で乖離状況を確認する。

1-5.時刻同期されたことを確認
    コマンドプロンプトで以下コマンドを実行
    [w32tm /query /peers /verbose]

    →[最終正常同期時刻]の行で時刻同期されたことを確認する。



以上

2014年5月9日金曜日

WindowsServer2003のタスクスケジュールを2008に移行する

WindowsServer2003で運用中のシステムをWindowsServer2008に単純移行する案件にて、
タスクスケジュールが複数登録されていたため、一括移行できないか調べた際のメモ。

移行先が2012でも(多分)対応可能。


■前置き
1)2003では、タスクスケジュールは.jobファイルで保持されている。2008では、.xmlで保持されている。
2)単純に2003で取得した.jobを、2008でインポートしようとするとエラーになる。
3)運用中のタスクが多くある場合、いちいち手動登録していられない。


■参考
1)TechNet
http://social.technet.microsoft.com/Forums/en-US/55e5bded-5236-4440-9bed-10e9ed542874?forum=windowsserver2008ja

2)TechNetの回答でリンクがあった海外サイト
http://msmvps.com/blogs/it-is-etc/archive/2011/04/11/migrate-scheduled-tasks-from-2003-to-2008.aspx


■手順
※参考の2)にある手順で実施。

1)2008のマシンでコマンドプロンプトを開く。
2)下記コマンドを実行
 【schtasks /query /s 2003のIP /tn "タスク名" /XML > C:\temp\exp_task.xml】
3)出力されたxmlファイルを2008でインポート

※1)2)がエクスポートに該当


■補足
1)ユーザーアカウントは要注意。
2008側で先に作っておく必要がある。
また、2003と2008でマシン名が異なる場合なども同様。
※インポート時、OKボタンを選択した際にエラーになる。

2)別ドメインからのアクセスはエラーになる?
テスト環境で試した際、ドメインA参加のWindows7から、
ドメインB参加のWindowsServer2003に向けてコマンドを実行すると
「アクセスが拒否されました」のエラーになった。

そこで、ドメインB参加のWindowsServer2008からコマンド実行すると
問題なくxmlファイルが出力できた。

原因追及はしていない。しない。



いじょっ!

2014年2月12日水曜日

Windows用GREPバッチを作ってみた

いつもは秀丸さんでGREPしています。

今回、GREPしたい対象のファイル、及びそのレコード数が膨大にあったため、
レコード数上限やリソース消費などに不安があり、GREPバッチをサクッっと作ってみた。
自動化が目的ではないのでマクロはなし。

PATH通した場所にBATファイルを集めておくと楽ですよねー、と。


GREP.BAT
@ECHO OFF

SET TARGET_CHARACTOR=
SET TARGET_PATH=
SET TARGET_EXTENSION=
SET OUTPUT_FILE=


ECHO ----------------------------------------------------
ECHO GREP文字列
ECHO ----------------------------------------------------
set /p TARGET_CHARACTOR="%TARGET_CHARACTOR%"

ECHO ----------------------------------------------------
ECHO 対象ファイルパス(E:\XXX)
ECHO ※カレントの場合は「.」
ECHO ----------------------------------------------------
set /p TARGET_PATH="%TARGET_PATH%"

ECHO ----------------------------------------------------
ECHO 対象ファイル拡張子(*.XXX)
ECHO ----------------------------------------------------
set /p TARGET_EXTENSION="%TARGET_EXTENSION%"

ECHO ----------------------------------------------------
ECHO 出力ファイル(XXXXX.txt)
ECHO ----------------------------------------------------
set /p OUTPUT_FILE="%OUTPUT_FILE%"

findstr /s /i "%TARGET_CHARACTOR%" %TARGET_PATH%\*.%TARGET_EXTENSION% > .\%OUTPUT_FILE%.txt


PAUSE

2014年1月27日月曜日

常に管理者として実行する方法

「管理者として実行する」には、起動するファイルを右クリックして「管理者として実行する」を選択する必要があるが、正直面倒臭い。

常に「管理者として実行する」方法をメモ。


【やり方】
1)対象ファイルのショートカットを作成
2)ショートカットファイルで「プロパティ」を開く
3)「互換性」タブ
   → 「特権レベル」パネル
     → 「管理者としてこのプログラムを実行する」にチェックを入れる
4)3)が入力できない場合は、
  「ショートカット」タブ
   → 「詳細設定」ボタン
     → 表示されたウィンドウ内の「管理者として実行」にチェックを入れる


【例】
1)<省略>対象ファイルのショートカットを作成
2)<省略>ショートカットファイルで「プロパティ」を開く
3)「互換性」タブ
   → 「特権レベル」パネル
     → 「管理者としてこのプログラムを実行する」にチェックを入れる

  ※画像は選択できないケース




4)3)が入力できない場合は、
  「ショートカット」タブ
   → 「詳細設定」ボタン
     → 表示されたウィンドウ内の「管理者として実行」にチェックを入れる




で、ショートカットファイルをデスクトップやツールバーに入れておけば楽チン。