【发布时间】:2011-09-04 11:59:59
【问题描述】:
我为 PowerShell 1.0(现在使用 2.0)编写了一个在我的 Active Directory 上执行搜索的脚本。代码如下:
$filter = "some filter"
$rootEntry = New-Object System.DirectoryServices.DirectoryEntry
$searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.SearchRoot = $rootEntry
$searcher.Filter = $filter
$searcher.SearchScope = "Subtree"
$colResults = $searcher.FindAll()
调用 DirectorySearcher 实例的 FindAll() 方法后,我打印结果以查看我得到了什么。
问题是,如果我启动 PowerShell.exe 并在提示符下调用脚本,我就能看到结果。但是,如果我尝试使用 cmd.exe 使用相同的过滤器调用它,我看不到任何结果。 FindAll() 返回一个空的结果集。
我在 Windows 2003 Server 上运行它。它没有随 PowerShell 1.0 一起提供,所以我下载了它并将其安装在服务器上。它确实有 .Net Framework 2.0。
有什么建议吗?
非常感谢。
【问题讨论】:
-
如果服务器有 SP2 则支持 PowerShell 2.0。见support.microsoft.com/kb/968929
-
是的,谢谢,我尝试安装 PowerShell 2.0,但它说我需要 .Net Framework 2.0 SP1。我宁愿不必在客户服务器上安装任何东西,但我会记住这是一个选项。
-
所以我升级到 2.0 看看是否能解决问题。但我仍然得到相同的结果。
-
我只是从 PowerShell 中调用它。我很少使用 cmd.exe 了。我的评论是现在没有理由使用 v1.0。
-
好的,我知道了。您是否知道是否有一些上下文或环境设置阻止 DirectorySearcher 获取结果?我的意思是,我没有在任何地方指定 AD 服务器的 IP 地址或凭据,所以从 cmd.exe 调用脚本时是否有可能使用不正确的值?
标签: scripting powershell active-directory cmd powershell-2.0