У меня есть сценарий 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?