2

У меня есть сценарий PowerShell, который я использую для выгрузки списков пользователей и компьютеров в CSV-файлы; это прекрасно работает, и я не хочу трогать это много. Он использует командлет ActiveDirectory, а также командлеты Get-ADComputer и Get-ADUser.

Ранее я использовал макросы vb excel (2007), которые вызывают скрипты powershell. Пример:

Sub test()
'
' test Macro
'
    Set objShell = CreateObject("Wscript.Shell")
    PSCommand1 = "Import-Module ActiveDirectory; "
    objShell.Run "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command """ & PSCommand1 & """", 1, True
'
End Sub

Теперь я специально ссылаюсь на команду import-module, потому что есть одно различие между powershell VBA и powershell вне vba ... модуль ActiveDirectory не может быть найден. Если я добавлю -noexit в команду powershell invoking, чтобы оставить оболочку открытой после сбоя команды, я могу набрать:

get-module -ListAvailable

И модуля ActiveDirectory нет в списке. Переменная окружения показывает, что модули выглядят в тех же местах, что и обычное окно powershell (в том числе и в моей пользовательской папке, поэтому она работает в моем контексте). Модуль AD отображается в -ListAvailable в обычном окне PowerShell.

Я попытался изменить команду import-module для непосредственного обращения к фактическому модулю AD, и я не могу загрузить его.

Может кто-нибудь придумать, как заставить модуль AD отображаться в сеансе powershell, запущенном из макроса VB в Excel 2007?

1 ответ1

0

Это проще, если вы идете .bat -> .ps1 Создание файла bat для вызова powershell должно быть легко для тех, кто привык работать с vba & powershell.

Заставьте .bat работать с powershell. Выяснить, что нужно для работы .bat, может быть достаточно, чтобы показать, что нужно изменить в коде vba, в противном случае просто используйте .bat в vba, и все должно быть хорошо.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .