Excel VBA que chama o cmdlet Powershell ActiveDirectory, mas o Módulo não carrega?

2

Eu tenho um script powershell que uso para despejar listas de usuários e computadores em arquivos csv; funciona muito bem e eu não quero tocar muito. Ele usa o cmdlet ActiveDirectory e os cmdlets Get-ADComputer e Get-ADUser.

Eu usei macros do vb excel (2007) que chamam scripts de powershell antes. Exemplo:

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

Agora, refiro especificamente o comando import-module lá porque há uma diferença entre o VBA do PowerShell e o PowerShell fora do vba ... o módulo ActiveDirectory não pode ser encontrado. Se eu adicionar -noexit ao comando powershell invoking para deixar o shell aberto após o comando falhar, eu posso digitar:

get-module -ListAvailable

E o módulo ActiveDirectory não está na lista. A variável de ambiente mostra que está procurando nos mesmos locais por módulos como uma janela regular do PowerShell (incluindo sob minha pasta de usuário, portanto, ela está sendo executada no meu contexto). O módulo AD mostra abaixo de -ListDisponível em uma janela normal do PowerShell.

Eu tentei modificar o comando import-module para endereçar o módulo do AD real da forma mais direta possível, e não consigo carregá-lo.

Alguém pode pensar em uma maneira de fazer com que o módulo AD apareça em uma sessão do PowerShell iniciada a partir de uma macro VB no Excel 2007?

    
por surfrock66 12.02.2015 / 00:23

1 resposta

0

Isso é mais fácil se você for .bat - > .ps1 Fazer um arquivo bat para chamar o powershell deve ser fácil para alguém acostumado a trabalhar com vba & powershell.

Faça o trabalho .bat com o powershell. Descobrir o que é necessário para que o .bat funcione pode ser suficiente para mostrar o que precisa mudar no código vba, caso contrário, basta usar o .bat na vba e tudo deve ser bom.

    
por 02.12.2015 / 14:33