Удаленное выполнение сценария Powershell - MSAccess не запускается - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь выполнить скрипт Powershell удаленно, который запустит файл accdb через MSAccess.Я могу заставить скрипт PowerShell успешно выполняться, но MSAccess не запускается, так как я знаю, что файл test.accdb, который у меня есть, не обновляется.Чего мне не хватает в моем коде, чтобы можно было запустить MSAccess?Или это невозможно?

Мой код выполняется в среде Windows 2012 R2 в IIS и выполняется с помощью учетной записи службы, которая имеет права администратора на компьютере.Если я запускаю код, зарегистрированный под этой учетной записью службы, он работает без проблем.Если я выполняю его удаленно, выполняется только часть кода

Мой код для приложения .NET выглядит следующим образом (работает под учетной записью службы).Я изменил некоторые личные данные, но они не влияют на код.

    internal static HttpStatusCode ExecuteRemoteCommand()
    {
        WSManConnectionInfo connectioninfo = new WSManConnectionInfo();
        connectioninfo.ComputerName = "testcomputer";
        using (Runspace runspace = RunspaceFactory.CreateRunspace(connectioninfo))
        {
            runspace.Open();
            using (PowerShell ps = PowerShell.Create())
            {
                ps.Runspace = runspace;
                var re = ps.AddScript(@"\\testcomputer\test\StartTest.ps1");
                var results = re.Invoke();
            }
        }

        return HttpStatusCode.Created;
    }

Мой код Powershell выглядит следующим образом:

try {

    $msAccess = "C:\Program Files (x86)\Microsoft Office\Office14\msaccess.exe"
    $fileLocation =  "C:\test\DBT.accdb"
    Start-Process -FilePath $msAccess -ArgumentList $fileLocation -Verb RunAs -WindowStyle Hidden -WorkingDirectory "C:\test" 
    $today = Get-Date
    "SUCCESS: " + $today > "c:\test\TestExecutionSuccess.txt"

}
Catch
{
    $_.Exception.Message > "c:\test\TestExecutionError.txt"
}

В обоих случаях, тот, где я запускаю скрипт локально, и тот, где я выполняю его удаленно, создается файл TestExecutionSuccess.txt.

Однако, ТОЛЬКО в локальномВ тестовом прогоне обновлен файл DBT.accdb.

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

С руководством ArcSet я думаю, что смог выяснить, в чем проблема. Его ответ привел меня на путь выяснения, какая версия PowerShell была запущена. Оказалось, что код C # работает под управлением Powershell x64 вместо 32-разрядной версии x86. Офисная установка 32-битная, и поэтому я не смог запустить MSAccess.

Я не мог понять, как запустить версию Powershell для x86 из кода C #, но я запустил запуск MSAccess в пакетный файл, а затем выполнил пакетный файл из своего кода powershell. Не супер чистый, но это сработало. Доступ теперь работает правильно.

Вот код командного файла:

cd "C:\Program Files (x86)\Microsoft Office\Office14"
MSACCESS.EXE C:\test\DBT.accdb

и новая версия скрипта PowerShell:

try {

    $msAccess = "C:\Program Files (x86)\Microsoft Office\Office14\msaccess.exe"
    $fileLocation =  "C:\test\executeTest.bat"  
    cmd.exe /c $fileLocation
    $today = Get-Date
    "SUCCESS: " + $today > "c:\test\TestExecutionSuccess.txt"

}
Catch
{
    $_.Exception.Message > "c:\test\TestExecutionError.txt"
}
0 голосов
/ 03 июня 2019

Итак, давайте поговорим о проблемах

1: Вы можете запустить код и открыть Excel, когда вы запускаете код под своей учетной записью, вошедшей в систему.

2: Вы можете запустить коди откройте Excel, когда вы запускаете код под своей учетной записью службы, вошедшей в систему.

3: вы можете код, но Excel не будет загружаться, если вы не вошли в систему пользователя.

Почему?

Это про Интерактивный флаг.Когда вы вошли в систему, вы можете загрузить графический интерфейс с помощью COM.Если вы не вошли в систему пользователя, вы не сможете загрузить графический интерфейс.

Вот более подробное объяснение от Microsoft Interactive User

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...