vbscriptでSQLクエリを実行しています。クエリは次のとおりで、各サーバーで使用可能なドライブに関する情報を提供します
VBScript コード (少し再構成):
Strquery = "DECLARE @Totaldbspacegb BIGINT;" & _
"DECLARE @Totaldriveusedspacegb INT;" & _
"DECLARE @Totaldrivefreespacegb INT;" & _
"DECLARE @Svrname VARCHAR(255);" & _
"DECLARE @Sql VARCHAR(400);" & _
"DECLARE @Forcast6monthsgb NUMERIC(38, 6);" & _
"DECLARE @Forcast12monthsgb NUMERIC(38, 6);"
Strquery = Strquery & "; DECLARE @Avggrowthingb NUMERIC(38, 6);" & _
"CREATE TABLE #Temp1(Yer INT NULL, Mnth INT NULL," & _
"Sumdbinmb NUMERIC(38, 6)NULL, Id INT IDENTITY(1, 1) NOT NULL);" & _
"CREATE TABLE #Temp4(Totaldriveusedspacegb INT, Totaldrivefreespacegb INT);"
Strquery = Strquery & "; SELECT @Totaldbspacegb = SUM(Size) FROM Sys.Master_Files"
Strquery = Strquery & "; SELECT @Totaldbspacegb = @Totaldbspacegb * 8. / 1024.0 / 1024"
Strquery = Strquery & "; SET @Svrname = '" & Strserver & "';"
Sql = " Powershell.Exe - C ""Get-WmiObject -Class Win32_Volume -Filter ''DriveType = 3''| select name,label,capacity,freespace | foreach{$_.name+''!''+$_.label+''|''+$_.capacity/1048576+''%''+$_.freespace/1048576+''*''}"""
Strquery = Strquery & "CREATE TABLE #Output(Line VARCHAR(255)); INSERT INTO #Output"
Strquery = Strquery & "; EXEC Xp_Cmdshell '" & sql & "';"
Strquery = Strquery & "; SELECT * FROM #Output;"
結果の (フォーマットされた) SQL コード:
DECLARE @Totaldbspacegb BIGINT;
DECLARE @Totaldriveusedspacegb INT;
DECLARE @Totaldrivefreespacegb INT;
DECLARE @Svrname VARCHAR(255);
DECLARE @Sql VARCHAR(400);
DECLARE @Forcast6monthsgb NUMERIC(38, 6);
DECLARE @Forcast12monthsgb NUMERIC(38, 6);
;
DECLARE @Avggrowthingb NUMERIC(38, 6);
CREATE TABLE #Temp1(Yer INT NULL,
Mnth INT NULL,
Sumdbinmb NUMERIC(38, 6)NULL,
Id INT IDENTITY(1, 1) NOT NULL
);
CREATE TABLE #Temp4(Totaldriveusedspacegb INT,
Totaldrivefreespacegb INT
);
;
SELECT @Totaldbspacegb = SUM(Size)
FROM Sys.Master_Files;
SELECT @Totaldbspacegb = @Totaldbspacegb * 8. / 1024.0 / 1024;
SET @Svrname = '...';
CREATE TABLE #Output(Line VARCHAR(255));
INSERT INTO #Output;
EXEC Xp_Cmdshell 'Powershell.Exe - C "Get-WmiObject -Class Win32_Volume -Filter ''DriveType = 3''| select name,label,capacity,freespace | foreach{$_.name+''!''+$_.label+''|''+$_.capacity/1048576+''%''+$_.freespace/1048576+''*''}"';
;
SELECT *
FROM #Output;
このクエリを実行すると、管理スタジオから実行中に.vbsファイルで実行中に出力が得られ、クエリが正常に実行されているかどうかを確認する方法として、レコード数がnullになります。vbscriptで実行されていないpowershellコマンドが原因です。
助けてください