SQL - Запрос через Powershell, вывод через .vbs - PullRequest
0 голосов
/ 18 февраля 2020

В настоящее время я не могу решить эту проблему и надеюсь, что есть решение.

Мне нужно выполнить запрос 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 в виде одной строки или массива, чтобы я мог поместить их в пакеты свойств.

Спасибо заранее за всевозможную помощь.

...