脚本可以在Powershell中工作,但不能在C#中工作

巴西

在PowerShell ISE中运行时,此脚本有效(它在Active Directory中设置给定用户的“远程桌面服务配置文件”设置):

Get-ADUser FirstName.LastName | ForEach-Object {
    $User = [ADSI]"LDAP://$($_.DistinguishedName)"
    $User.psbase.invokeset("TerminalServicesProfilePath","\\Server\Share\HomeDir\Profile")
    $User.psbase.invokeset("TerminalServicesHomeDrive","H:")
    $User.psbase.invokeset("TerminalServicesHomeDirectory","\\Server\Share\HomeDir") 
    $User.setinfo()
}

但是,当我尝试从C#应用程序运行它时invokeset,我调用的每个程序都出现错误

使用“ 2”个参数调用“ InvokeSet”的异常:

“未知名称。(HRESULT的异常:0x80020006(DISP_E_UNKNOWNNAME))

这是代码,它在我的PowerShell课程里面

public static List<PSObject> Execute(string args)
{
    var returnList = new List<PSObject>();

    using (var powerShellInstance = PowerShell.Create())
    {
        powerShellInstance.AddScript(args);
        var psOutput = powerShellInstance.Invoke();


        if (powerShellInstance.Streams.Error.Count > 0)
        {
            foreach (var error in powerShellInstance.Streams.Error)
            {
                Console.WriteLine(error);
            }
        }

        foreach (var outputItem in psOutput)
        {
            if (outputItem != null)
            {
                returnList.Add(outputItem);
            }
        }
    }

    return returnList;
}

我这样称呼它:

var script = $@"
                Get-ADUser {newStarter.DotName} | ForEach-Object {{
                    $User = [ADSI]""LDAP://$($_.DistinguishedName)""
                    $User.psbase.invokeset(""TerminalServicesProfilePath"",""\\file\tsprofiles$\{newStarter.DotName}"")
                    $User.psbase.invokeset(""TerminalServicesHomeDrive"",""H:"")
                    $User.psbase.invokeset(""TerminalServicesHomeDirectory"",""\\file\home$\{newStarter.DotName}"") 
                    $User.setinfo()
                }}";

PowerShell.Execute(script);

其中newStarter.DotName包含(已经存在的)AD用户的帐户名。


我尝试Import-Module ActveDirectoryC#脚本顶部包含,但没有任何效果。我还调用$PSVersionTable.PSVersion了正常运行的C#脚本和脚本,并且都返回了正在使用的版本3。


将属性名称更新为

msTSProfilePath
msTSHomeDrive
msTSHomeDirectory
msTSAllowLogon

我在C#中收到此错误:

使用参数“ 0”调用“ setinfo”的异常:“为目录服务指定的属性语法无效。

并在PowerShell中查询这些属性时不执行任何操作(没有错误,但也没有输出)


有谁碰巧知道是什么原因造成的?

非常感谢

加布里埃尔·卢西(Gabriel Luci)

更新的答案:这些属性似乎在2008年以后不存在。尝试以下方法:

  • msTSAllowLogon
  • msTSHomeDirectory
  • msTSHomeDrive
  • msTSProfilePath

有关完整说明,请参见此线程中的答案。

原始答案:

来自Abhijith pk的评论可能是答案。您需要运行Import-Module ActiveDirectory,就像需要在命令行PowerShell中进行操作一样。

如果您曾经Import-Module ActiveDirectory在PowerShell命令行中运行过,您将知道需要一段时间才能加载。在C#中运行时将是相同的。因此,如果要在应用程序中运行多个AD命令,最好将Runspace对象作为静态对象保持活动状态并重用它,这意味着您只需加载ActiveDirectory模块一次。

这里有有关如何在C#中执行此操作的详细信息:https : //blogs.msdn.microsoft.com/syamp/2011/02/24/how-to-run-an-active-directory-ad-cmdlet-from- net-c /

特别是,这是代码:

InitialSessionState iss = InitialSessionState.CreateDefault(); 
iss.ImportPSModule(new string[] { "activedirectory" }); 
Runspace myRunSpace = RunspaceFactory.CreateRunspace(iss); 
myRunSpace.Open();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用户脚本可在Chrome上的Tampermonkey中工作,但不能在Firefox上的Greasemonkey中工作

来自分类Dev

为什么我的JS脚本可以工作,但不能使用相同的C#?

来自分类Dev

Python串行可以在Shell中工作,但不能在脚本中工作吗?

来自分类Dev

为什么sed命令可以交互工作,但不能在我的脚本中工作?

来自分类Dev

Linq / Lambda代码可在VB中工作,但不能在C#中工作

来自分类Dev

选择查询在Access2010中工作正常,但不能在C#代码中工作

来自分类Dev

Java脚本中的多个功能本身可以单独工作,但不能在一个脚本中工作

来自分类Dev

Bash脚本可以在家里调用,但不能在脚本目录中调用

来自分类Dev

代码可以在控制台/便签本中工作,但不能在Greasemonkey脚本中工作吗?

来自分类Dev

代码可以在控制台/便签本中工作,但不能在Greasemonkey脚本中工作吗?

来自分类Dev

Shell命令可在Shell中工作,但不能在Shell脚本中工作

来自分类Dev

wget 在终端中工作但不能在 shell 脚本中工作

来自分类Dev

正则表达式虽然在Javascript中工作,但不能在C#中工作

来自分类Dev

HTTP请求可以在cURL中工作,但不能在urllib2.request中工作吗?

来自分类Dev

为什么jQuery hover可以在jsfiddle中工作,但不能在我的html布局中工作?

来自分类Dev

代码可以在Java中工作,但不能在Python中工作吗?

来自分类Dev

replace可以在str中工作,但不能在dtype对象中工作

来自分类Dev

Termcolor似乎可以在IDE中工作,但不能在CMD中工作

来自分类Dev

客户端证书可以在curl中工作,但不能在Python中工作

来自分类Dev

为什么jQuery hover可以在jsfiddle中工作,但不能在我的html布局中工作?

来自分类Dev

代码可以在Java中工作,但不能在Python中工作吗?

来自分类Dev

为什么 php 可以在 127.0.0.1 中工作,但不能在 localhost 中工作

来自分类Dev

为什么此布局可以在预览中工作,但不能在我的设备上工作?

来自分类Dev

ng样式可以初始工作,但不能在变量更新中工作

来自分类Dev

陷阱不能在shell脚本中工作?

来自分类Dev

2d数组的malloc可在GCC中工作,但不能在Visual C ++中工作

来自分类Dev

我有一个使用OpenCV的python脚本,代码可以在python 2.7中工作,但不能在python 3.7中工作,我不确定为什么

来自分类Dev

为什么相同的代码可以在Eclipse中工作,但不能在IntelliJ中编译

来自分类Dev

Google脚本可作为2个单独的脚本工作,但不能在同一函数中使用

Related 相关文章

  1. 1

    用户脚本可在Chrome上的Tampermonkey中工作,但不能在Firefox上的Greasemonkey中工作

  2. 2

    为什么我的JS脚本可以工作,但不能使用相同的C#?

  3. 3

    Python串行可以在Shell中工作,但不能在脚本中工作吗?

  4. 4

    为什么sed命令可以交互工作,但不能在我的脚本中工作?

  5. 5

    Linq / Lambda代码可在VB中工作,但不能在C#中工作

  6. 6

    选择查询在Access2010中工作正常,但不能在C#代码中工作

  7. 7

    Java脚本中的多个功能本身可以单独工作,但不能在一个脚本中工作

  8. 8

    Bash脚本可以在家里调用,但不能在脚本目录中调用

  9. 9

    代码可以在控制台/便签本中工作,但不能在Greasemonkey脚本中工作吗?

  10. 10

    代码可以在控制台/便签本中工作,但不能在Greasemonkey脚本中工作吗?

  11. 11

    Shell命令可在Shell中工作,但不能在Shell脚本中工作

  12. 12

    wget 在终端中工作但不能在 shell 脚本中工作

  13. 13

    正则表达式虽然在Javascript中工作,但不能在C#中工作

  14. 14

    HTTP请求可以在cURL中工作,但不能在urllib2.request中工作吗?

  15. 15

    为什么jQuery hover可以在jsfiddle中工作,但不能在我的html布局中工作?

  16. 16

    代码可以在Java中工作,但不能在Python中工作吗?

  17. 17

    replace可以在str中工作,但不能在dtype对象中工作

  18. 18

    Termcolor似乎可以在IDE中工作,但不能在CMD中工作

  19. 19

    客户端证书可以在curl中工作,但不能在Python中工作

  20. 20

    为什么jQuery hover可以在jsfiddle中工作,但不能在我的html布局中工作?

  21. 21

    代码可以在Java中工作,但不能在Python中工作吗?

  22. 22

    为什么 php 可以在 127.0.0.1 中工作,但不能在 localhost 中工作

  23. 23

    为什么此布局可以在预览中工作,但不能在我的设备上工作?

  24. 24

    ng样式可以初始工作,但不能在变量更新中工作

  25. 25

    陷阱不能在shell脚本中工作?

  26. 26

    2d数组的malloc可在GCC中工作,但不能在Visual C ++中工作

  27. 27

    我有一个使用OpenCV的python脚本,代码可以在python 2.7中工作,但不能在python 3.7中工作,我不确定为什么

  28. 28

    为什么相同的代码可以在Eclipse中工作,但不能在IntelliJ中编译

  29. 29

    Google脚本可作为2个单独的脚本工作,但不能在同一函数中使用

热门标签

归档