2013年04月の記事一覧

|

≪2013 年03月の全記事一覧へ 2013 年05月の全記事一覧へ≫

--------(--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2013-04-27(Sat)

Windows Server 2012のタスクスケジューラーからWSHを起動

Windows Server 2012のタスクスケジューラーからWSHを起動したいのですが、ちょっと動作が???です。

基本的にはタスクスケジューラーの[操作]タブの[プログラム/スクリプト]に、実行したいWSHのファイル名を登録すればOKですが、今回は以下の2点で注意が必要です。
1. WSHの中で32ビットでしか動作しないBASP21を使った処理がある
2. WSHから同じディレクトリの別WSHを呼び出す

1.については、32ビットのWSHを起動させるためタスクスケジューラーの[操作]タブを以下のように設定します。
[プログラム/スクリプト]欄:%SystemRoot%\SysWOW64\wscript.exe もしくは cscript.exe
[引数の追加(オプション)]欄:実行するWSHファイル名

2.については、別WSHを呼び出すためにタスクスケジューラーの[操作]タブを以下のように設定します。
[開始(オプション)]欄:WSHファイルがあるディレクトリ名


1.についてはこれで問題なく32ビットでWSHが起動されますし、この状態で別WSHを呼び出せば当然これも32ビットで起動します。
ところが、なぜか2.がうまくいきません。
タスクの実行ユーザーをビルトインAdministratorにした場合は問題ないのですが、それ以外の場合には権限的に問題ないユーザーでも別WSHの起動ができません。


実際のコードの肝心な部分は以下のようになっています。
■最初に起動するWSH
Dim WSHShell
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "xxxxxxxx.vbs", SW_HIDE, Flase
Set WSHShell = Nothing


いろいろなパターンで確認してみた結果、正しく動作するパターンもあります。
■NG
Dim WSHShell
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "testsub.vbs", SW_HIDE, Flase
Set WSHShell = Nothing

■OK
Dim WSHShell
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "testsub.vbs", SW_HIDE, True
Set WSHShell = Nothing

■NG
Dim WSHShell
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "testsub.vbs", SW_HIDE, Flase
WSHShell.Run "………", SW_HIDE, Flase
Set WSHShell = Nothing

■OK
Dim WSHShell
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "testsub.vbs", SW_HIDE, Flase
WSHShell.Run "………", SW_HIDE, True
Set WSHShell = Nothing


どうも最後に実行したWSHShell.Runの第2引数がFalse(終了を待ち合せない)の場合の動作がおかしいようです。
ちなみにこれは、64ビットで動作させても同じ結果になりましたが、タスクスケジューラー以外で実行した場合には全く問題はありません。


※全く関係ないのですが、Windows Server 2012ではATコマンドが無くなったのですね。


もう少し確認してみますが、ちょっと困りました・・・
スポンサーサイト
2013-04-07(Sun)

SQL Server の定義情報を出力

SQL Serverの定義情報を簡単に確認するために、以下のWSHを作成しました。
未確認ですが、SQL Server 2005以降で動作すると思われます。

※実際には出力するテキストの整形や出力対象DBやテーブル選択、またプログラムにコメントも入っていますが、とりあえず出力を単純なCSVに変更しプログラムの肝心の部分のみ掲載しています。

Const ODBC_DSN = "Driver=SQL Server; Server=.\SQLEXPRESS"
Const OUT_FILE = "./SQL.txt"

Dim objCon
Dim objFs
Dim objFile

Call OpenDB()
Call ReadDB()
Call CloseDB()

Sub OpenDB()
Set objCon = WScript.CreateObject("ADODB.Connection")
objCon.Open ODBC_DSN,"",""
Set objFs = WScript.CreateObject("Scripting.FileSystemObject")
Set objFile = objFs.OpenTextFile(OUT_FILE, 2, True)
End Sub

Sub ReadDB()
Set rsDB = WScript.CreateObject("ADODB.Recordset")
strSql = "SELECT name FROM sys.databases WHERE name <> 'master' AND name <> 'tempdb' AND name <> 'model' AND name <> 'msdb'"
rsDB.Open strSql, objCon, 0, 1, 8
Do Until rsDB.EOF
Call ReadTable(rsDB("name"))
rsDB.MoveNext()
Loop
rsDB.Close
End Sub

Sub ReadTable(strDBName)
Set rsTable = WScript.CreateObject("ADODB.Recordset")
strSql = "USE " & strDBName & "; SELECT name, object_id FROM sys.tables"
rsTable.Open strSql, objCon, 0, 1, 8
Do Until rsTable.EOF
objFile.WriteLine "■" & rsTable("name")
Call ReadColumn(strDBName, rsTable("object_id"))
rsTable.MoveNext()
objFile.WriteLine ""
Loop
rsTable.Close
End Sub

Sub ReadColumn(strDBName, strTableID)
Set rsColumn = WScript.CreateObject("ADODB.Recordset")
strSql = "USE " & strDBName & ";"
strSql = strSql & " SELECT c.name ColumnName, t.name TypeName, c.length Length, c.isnullable IsNull, IsNull(d.definition, '') DefaultValue, IsNull(i.keyno, 0) KeyNo FROM syscolumns c"
strSql = strSql & " LEFT JOIN sys.types t ON c.xtype = t.user_type_id"
strSql = strSql & " LEFT JOIN sys.default_constraints d ON d.object_id = c.cdefault"
strSql = strSql & " LEFT JOIN sys.sysindexkeys i ON i.id = " & strTableID & " AND i.indid = 1 AND i.colid = c.colid"
strSql = strSql & " WHERE c.id = " & strTableID
strSql = strSql & " ORDER BY c.colid"
rsColumn.Open strSql, objCon, 0, 1, 8
Do Until rsColumn.EOF
strBuff = rsColumn("ColumnName") & "," & rsColumn("TypeName") & "," & rsColumn("TypeName") & "," & rsColumn("DefaultValue") & "," & rsColumn("IsNull") & "," & rsColumn("KeyNo")
objFile.WriteLine strBuff
rsColumn.MoveNext()
Loop
rsColumn.Close
End Sub

Sub CloseDB()
objCon.Close
objFile.Close
Set objCon = Nothing
Set objFile = Nothing
Set objFs = Nothing
End Sub


 
プロフィール
Author:OMEGAT
FC2ブログへようこそ!
カレンダー
03 | 2013/04 | 05
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 - - - -
FC2カウンター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
忍者AdMax
検索フォーム
カテゴリ
ブロとも申請フォーム

この人とブロともになる

amazonお奨め商品



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。