【问题标题】:C# Powershell InteropC# Powershell 互操作
【发布时间】:2010-10-19 14:09:29
【问题描述】:

系统管理员正在编写一些常用的内务 Power Shell 脚本。主要用于 AD 管理(更新交换细节、在安全组中调动人员等)

我想使用 C# 中的这些脚本(我打算将其编写为库,供网站使用)。

我看过这个code project article,它看起来很有趣,是一个很好的起点。

有人对 Power Shell 互操作有任何经验吗?在我一头扎进尖峰之前,谁能想到任何主要的陷阱?

额外信息:

我很清楚存在后勤方面的挑战,尤其是在 CI 和版本控制方面。

最初的计划是使用目录服务,通过 Web API 和 CmdLets 公开服务。不幸的是,我们在目录服务方面遇到了困难(例如,大集合的截断结果)。

与此同时,我认为我应该使用系统管理员的脚本进行调查,而不是使用不一致的组合。为什么要重新发明轮子?

我已经编写了我的域模型。我打算实现存储库模式,这样我就可以抽象出 AD / Exchange 集成,以便将来实现不同的实现。

【问题讨论】:

    标签: c# powershell interop active-directory exchange-server


    【解决方案1】:

    对于从已编译程序运行脚本的常见问题,我认为这种方法没有很多陷阱。我发现最大的问题往往是

    1. 阻止人们移动脚本
    2. 确保人们不会在脚本中添加未反映在调用程序中的隐藏依赖项。

    但我确实认为您应该考虑另一种开发模式。与其让程序引用脚本,不如将所有逻辑添加到已编译的库中。这可以很容易地链接到程序中并通过 CmdLet 暴露给 PowerShell。我发现这是在程序中的脚本之间维护共享代码的一种更简单的方法。

    【讨论】:

      【解决方案2】:

      过去几个月我一直在 C# 应用程序中运行 PowerShell 代码,它运行良好,你可以用它做一些非常有趣的事情。这就是说 JaredPar 提到在应用程序外部的脚本文件中包含 PowerShell 脚本可能会很痛苦。我将所有的 PowerShell 代码放在一个库中,并将其发送到需要的地方,并且运行良好。

      【讨论】:

        【解决方案3】:

        如果脚本依赖于系统或用户配置文件,那么您需要首先将配置文件显式点源到您的运行空间中。

        更高级别的控制(例如,从一个命令到另一个命令的会话,...访问调试输出)需要更高级/低级/复杂的工作。

        除此之外,一切正常。

        【讨论】:

        • Richard,我不知道您所说的点源配置文件是什么意思。请问你能扩展一下吗?
        • ".PSscript" 将脚本文件的内容包含到当前范围内,就像对配置文件所做的那样。
        猜你喜欢
        • 2013-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-19
        • 1970-01-01
        • 2020-03-21
        • 2010-12-14
        相关资源
        最近更新 更多