我有一个 powershell 脚本,用于将用户和计算机列表转储到 csv 文件中;它工作得很好,我不想过多地碰它。它使用 ActiveDirectory cmdlet、Get-ADComputer 和 Get-ADUser cmdlet。
我以前使用过调用 powershell 脚本的 vb excel (2007) 宏。例如:
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 调用命令以在命令失败后保持 shell 打开,我可以输入:
get-module -ListAvailable
并且 ActiveDirectory 模块不在列表中。环境变量显示它在与常规 powershell 窗口相同的位置查找模块(包括在我的用户文件夹下,因此它在我的上下文中运行)。AD 模块显示在常规 powershell 窗口的 -ListAvailable 下。
我尝试修改 import-module 命令以尽可能直接地处理实际的 AD 模块,但我无法加载它。
有人能想到一种方法来让 AD 模块显示在从 Excel 2007 中的 VB 宏启动的 powershell 会话中吗?
答案1
如果您转到 .bat -> .ps1,这会更容易。对于习惯使用 vba 和 powershell 的人来说,制作一个 bat 文件来调用 powershell 应该很容易。
使 .bat 与 powershell 一起工作。弄清楚 .bat 需要什么才能工作可能足以向它展示在 vba 代码中需要更改什么,否则只需在 vba 中使用 .bat 就可以了。