none
Access is denied '-2147024891 (80070005)' RRS feed

  • Вопрос

  • Добрый день! 

    Я пытаюсь запустить из макроса Word-а Powershell скрипт с помощью следующего кода:

    Sub Powershell_Run()

    sCmd = "powershell -file ""C:\Users\i351063\Desktop\Scripts\NewAttempt.ps1"""
    Set xShell = CreateObject("Wscript.Shell")
    Set xShellExec = xShell.Exec(sCmd)

    End Sub

    Возникает ошибка доступа (указана в заголовке), дебаггер указывает на строчку Set xShellExec = xShell.Exec(sCmd).

    Подскажите, пожалуйста, что с этим делать, где заблокирован доступ?

    Заранее спасибо.

    8 октября 2018 г. 8:06

Все ответы

  • Вам необходимо сначала снять ограничение на выполнение пользовательских командлетов. Для этого в приглашении powershell вводится команда:

    set-executionpolicy unrestricted

    Либо можно воспользоваться таким кодом (https://social.technet.microsoft.com/wiki/contents/articles/2115.how-to-use-vbscript-to-run-a-powershell-script.aspx):

    Option Explicit
    Dim oShell, appCmd
    Set oShell  = CreateObject("WScript.Shell")
    appCmd      = "powershell -noexit &'" & Replace(WScript.ScriptFullName, ".vbs", ".ps1") & "'"

    oShell.Run appCmd, 4, false

    8 октября 2018 г. 10:15
  • Спасибо за ответ, однако этот метод не помог. Политика выполнения - unrestricted, но вываливается все то же окошко и строчка Set xShellExec = xShell.Exec(sCmd) подсвечена. 

    Из командной строки все выполняется, то есть проблема в том, что именно из ворда не получается вызвать командную строку. Может, какие-то настройки офиса непосредственно?

    UPD: Если воспользоваться предложенным Вами кодом, то ошибка звучит как "Run-time error '70': Permission denied", на строчке oShell.Run appCmd, 4, false
    8 октября 2018 г. 11:12
  • Я у себя немного попробовал поиграться. Я создал файл c:\Downloads\NewAttempt.ps1:

    Echo "Hello, World!"
    Write-Host Wait 10 seconds
    #Сделать пауза на 10 секунд
    Wait-Event -Timeout 10
    Write-Host Pass 10 seconds

     Далее создал макрос в Word 2016:

    Sub Mac1()
       
        strCommand = "Powershell -File ""C:\Downloads\NewAttempt.ps1"""
        Set WshShell = CreateObject("WScript.Shell")
        Set WshShellExec = WshShell.Exec(strCommand)
        strOutput = WshShellExec.StdOut.ReadAll
        MsgBox strOutput

    End Sub

    Больше ничего не делал. После выполнения макроса у меня появилось диалоговое окно макроса с сообщениями, которые я задал в сценарии PowerShell.

    Никаких ошибок не было.

    8 октября 2018 г. 13:24
  • Проделала ровно тоже самое, просто скопировав Ваш код, та же директория.

    Увы, ошибка - доступ запрещен. 

    8 октября 2018 г. 14:56
  • Я думаю, что возможны две причины: либо политика не unrestricted. Можно проверить, вызвав командлет get-executionpolicy

    либо все-таки дело в разрешениях файловой системы.

    Еще посмотрите следующую статью:

    https://support.microsoft.com/ru-ru/help/4036837/run-time-error-70-permission-denied-generate-guid-with-office-vba

    • Изменено MikAndr 9 октября 2018 г. 7:36
    9 октября 2018 г. 7:23