В настоящее время я не могу решить эту проблему и надеюсь, что есть решение.
Мне нужно выполнить запрос SQL на одном из наших серверов, где я проверяю создание пользователя. Основная проблема в том, что мне нужно выполнить этот запрос через vbs, соответственно в сценарии powershell, запущенном vbs.
Мой код ps выполняется, но я не могу получить вывод через vbs.
Это код ps:
$command = function Invoke-SQL {Param( [string]$SqlCommand );
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8';
$E = Get-OdbcDsn -Name SQL_UserCheck;
$driver = $E.DriverName;
$server= $E.Attribute.Server;
$database = $E.Attribute.Database;
$connectionString = "Server=$server; integrated security = true";
$connection = new-object system.data.SqlClient.SQLConnection($connectionString);
$command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection);
$connection.Open();
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command;
$dataset = New-Object System.Data.DataSet;
$adapter.Fill($dataSet) | Out-Null;
$connection.Close();
$dataSet.Tables | Format-List;
}
Invoke-SQL -SqlCommand "DECLARE @tracefile VARCHAR(256)
SELECT @tracefile = CAST(value AS VARCHAR(256))
FROM ::fn_trace_getinfo(DEFAULT)
WHERE traceid = 1
AND property = 2
SELECT NTUserName, SessionLoginName, SPID, TargetLoginName, StartTime, ServerName
FROM ::fn_trace_gettable(@tracefile, DEFAULT) trc
INNER JOIN sys.trace_events evt ON trc.EventClass = evt.trace_event_id
WHERE trc.EventClass IN (108, 109, 110) AND ObjectName ='sysadmin'
ORDER BY trc.StartTime";
Это моя попытка поместить все это в .vbs
pscommand = "<powershellscript from above>"
cmd = "powershell.exe -noprofile -command " & pscommand
Set Shell = CreateObject("Wscript.Shell")
Set executor = shell.Exec(cmd)
executor.StdIn.Close
strStarter = executor.StdOut.ReadAll
WScript.Echo strStarter
Но по какой-то причине вывод остается пустым. Я уже проверил кавычки и заменил их все на "" вместо ". Я также проверил это с помощью WScript.Echo" "и все" были правильно переданы.
К сожалению, я не из идей и не имею ни малейшего понятия, с чего начать.
В конце мне нужно получить это из VBS в виде одной строки или массива, чтобы я мог поместить их в пакеты свойств.
Спасибо заранее за всевозможную помощь.