首先,模块在PowerShell v2.0规则!在2.0版本中,这是仅次于remoting的第二个我最喜欢的特性。而且,随着CTP3的发布,模块变得更好、更快、更强……毕竟,我们可以重建他。我们有技术…哦,等等,话题不对!
无论如何,我完全计划深入研究一些新特性,就像我对events所做的那样。但是,首先我想分享我前几天经历的一个有趣的小模块怪癖。
基本上,我正在将我的脚本转储到一个模块中。这个脚本相当复杂,有一组用于设置执行环境的代码。换句话说,就是模块应该做的事情。
其中一些环境执行代码加载了所需的类型或单元。我努力将这些命令转移到新生成的模块清单文件中。但是,由于某些原因,忘记了脚本中加载的命令Quest.ActiveRoles.ADManagement管理单元。
没什么大不了的,对吧?可能没有,但在我使用Import-Module非常奇怪的事情发生了。基本上,当我试图从模块执行一个函数时,我得到了一个错误。出现故障的命令正在使用Get-QADObject从Active Directory检索一些信息。为了解决这个问题,我决定只执行cmdlet而不使用任何花哨的过滤忍者代码,然而,PowerShell友好地解释道:
Get-QADObject不能识别为cmdlet、函数、可操作程序或脚本文件。
啊....好吧……然后我检查以确保Quest.ActiveRoles.ADManagementsnapin被加载使用Get-PSSnapin。毕竟,我刚刚导入的模块应该已经加载了Quest.ActiveRoles.ADManagement管理单元。果然,snapin被加载了。接下来,我执行以下命令,以查看在PowerShell控制台中是否可以使用Quest cmdlet。
get命令* qad系统*
没有什么结果!无法访问cmdlet。换句话说,模块的核心概念现在正带着邪恶的笑容盯着我!来自Quest管理单元的cmdlet是被隔离的,这是由于模块试图防止全局作用域被冲突的函数、变量、别名等所污染。在这种情况下,唯一的问题是,任务管理单元是不合适的,从我的控制台会话,除非我首先删除它,然后添加它回来。
游手好闲的人……我将需要在另一篇文章中深入探讨这个问题,我相信这可能是一个更大的问题。
如果你喜欢这篇文章,可以看看泰森的其他文章:
- 有趣的PowerShell 2.0事件!
- 创建一个自定义404页面来处理ASP的链接重定向。净的web应用程序
- 微软停止对Windows 3的支持。X(作为嵌入式系统)
- 京都寺庙夜景-由谷歌提供!
- 重新访问了我对PowerShell中的SSH的追求!
- 如何使用PowerShell读取证书和CRLs
如果你愿意,你也可以看看泰森的最新出版物:
- Windows PowerShell释放(2nd版)
- Windows Server 2008发布(是的,我确实帮助了这本书)