首页 > 解决方案 > 我将如何选择要在其上运行 ADSI 命令的服务器?

问题描述

最近,我一直在尝试使用 powershell 设置一个新的用户脚本。为此,我一直试图让它使用 ADSI 设置 tsprofiles。当它自己运行时(在设置用户之后)它运行完美,但是,当与脚本一起运行时,设置配置文件将失败。以下是脚本的相关部分

$DistinguishedName  = (Get-AdUser -Identity $UserName).DistinguishedName
$user = [ADSI] "LDAP://$distinguishedName"
$user.psbase.Invokeset("terminalservicesprofilepath","$tsProfilePath$username")
$user.psbase.Invokeset("TerminalServicesHomeDirectory","$homeDirectory$username")
$user.psbase.Invokeset("TerminalServicesHomeDrive","$homeDirectoryDrive")
$user.setinfo()}

任何帮助将不胜感激。我的一个想法是它可能正在设置运行 ADSI 的服务器,因为我们有多个主域控制器。

标签: powershellactive-directory

解决方案


为什么选择 ADSI,而不是 AD cmdlet?

我将假设,对上述内容的回应是您的工作站上没有 RSAT。但是,您也不需要安装它。只需与启用 RSAT 的任何 DC 或其他主机建立远程会话,并通过显式 PowerShell 远程处理将 cmdlet 代理到您的工作站,这是非常常见的事情。

无论如何,通过 ADSI 处理 MS 终端服务并不是特定于 PowerShell 的,也不是什么新东西。有多年前的 VBScript 代码示例,在整个网络上都显示了这个确切的用例,因此任何脚本都可以完成同样的事情。您将在域级别进行此设置,而 DC 复制将负责所有其他工作。

使用您最喜欢的引擎进行搜索,例如 ' powershell adsi connect to server ' 或 ''powershell' .psbase.Invokeset("terminalservicesprofilepath' adsi ' 或 ' adsi set terminalservicesprofilepath ' 将向您展示许多示例:

# Connect to a domain
$domainname = "SomeDomainName" #or use $env:userdomain
[ADSI]$domain = "WinNT://$domainname"

或利用预建的东西

嘿,脚本专家!如何为 Active Directory 中的用户编辑终端服务器配置文件?

# QueryAndModifyTerminalServerProperties.ps1

function SetTSProperties()
{
    $ou = [adsi]"LDAP://ou=mytestou,dc=nwtraders,dc=com"
    $user = $ou.psbase.get_children().find($userDN)
    $user.psbase.invokeSet("allowLogon", 1)
    $user.psbase.invokeSet("TerminalServicesHomeDirectory", $hDirValue)
    $user.psbase.invokeSet("TerminalServicesProfilePath", $ppValue)
    $user.psbase.invokeSet("TerminalServicesHomeDrive", $hdValue)
    $user.setinfo() 
} #end SetTSProperties

function QueryTSProperties()
{
    $ou = [adsi]"LDAP://ou=mytestou,dc=nwtraders,dc=com"
    $user = $ou.psbase.get_children().find($userDN)
    foreach ($property in $aryTSProperties)
    {
        "$($Property) value: $($user.psbase.invokeget($Property))"
    } #end foreach
} #end QueryTSProperties

$userDN = "CN=My User"
$hDirValue = "\\Hamburg\TSUsers\Home\TestUser"
$hdValue = "t:"
$ppValue = "\\Hamburg\TSUsers\Profiles\TestUser"
$aryTSProperties = "allowLogon", "TerminalServicesHomeDirectory",
"TerminalServicesHomeDrive", "TerminalServicesProfilePath"

SetTSProperties
queryTSProperties

推荐阅读