C#Powershell AddScript无效

时间:2016-08-19 07:01:03

标签: c# .net powershell scripting automation

  

我修改了以下示例中的代码,以便于阅读和澄清(所以不要提及没有异常处理等)

目标:
我正在尝试使用C#中的Powershell将GPO链接到ActiveDirectory OU(使用System.Management.Automation dll)

输入字符串(稍后将在.AddScript中使用)

import-module grouppolicy;New-GPLINK -name Workstations -target "OU=Workstations,OU=Computers,OU=TestBuilding,OU=Buildings,OU=Demo,DC=FABRICAM,DC=COM" -LinkEnabled YES -Server MYSERVER.FABRICAM.COM

应该发生魔法的代码..

Integration.PowerShell.Classes.Singleton.Instance.AddScript(script); <== The input string
Integration.PowerShell.Classes.Singleton.Instance.Invoke();

对于那些想要查看单身人士的人

using System.Management.Automation.Runspaces;
using WindowsPowerShell = System.Management.Automation.PowerShell;

internal class Singleton
{
    private static WindowsPowerShell windowsPowerShellRunspace;
    public static WindowsPowerShell Instance
    {
        get
        {
            if (windowsPowerShellRunspace == null)
            {
                Runspace runSpace = RunspaceFactory.CreateRunspace();
                runSpace.Open();

                windowsPowerShellRunspace = WindowsPowerShell.Create();
                windowsPowerShellRunspace.Runspace = runSpace;
            }

            return windowsPowerShellRunspace;
        }
    }
}

结果

代码在流或异常中没有任何错误执行...但实际上没有发生任何事情。 PowerShell实例在Windows2008R2上运行

  

注意:我还在服务器上的powershell控制台中执行了代码,在那里工作正常......

更新

  

似乎我在我的流中遇到了错误..猜我错过了它,不过,这里有例外:

The 'New-GPLINK' command was found in the module 'GroupPolicy', but the module could not be loaded. For more information, run 'Import-Module GroupPolicy'.

1 个答案:

答案 0 :(得分:0)

找到解决方案(感谢帖子:Stack post'jamone'):

要使用CLR 2.0混合模式程序集,您需要修改App.Config文件以包含:

<?xml version="1.0"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

关键是useLegacyV2RuntimeActivationPolicy标志。这会导致CLR使用最新版本(4.0)加载混合模式程序集。没有它,它将无法工作。

请注意,这仅适用于混合模式(C ++ / CLI)程序集。您可以加载所有托管的CLR 2程序集,而无需在app.config中指定它。