Как выбрать сервер для запуска команды ADSI? - PullRequest
0 голосов
/ 18 января 2020

Недавно я пытался настроить новый пользовательский скрипт с использованием powershell. При этом я пытался настроить tsprofiles с помощью ADSI. Когда он запускается сам по себе (после того, как пользователь настроен), он работает отлично, однако при запуске в сочетании со сценарием настройка профилей завершится неудачно. Ниже приведена соответствующая часть сценария

$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, поскольку у нас есть несколько основных контроллеров домена.

1 Ответ

1 голос
/ 18 января 2020

Почему ADSI, а не командлеты AD?

Я собираюсь предположить, что ответом на вышеупомянутое является то, что у вас нет RSAT на вашей рабочей станции. Однако, вам вам также не нужно устанавливать это. Просто установите sh удаленный сеанс для любого D C или другого хоста, на котором включен RSAT, и передайте командлет на вашу рабочую станцию ​​через явное PowerShell remoting , что является очень распространенной вещью.

В любом случае, работа с MS Terminal Services через ADSI не является спецификацией PowerShell c и не является чем-то новым. Существуют летние примеры кода VBScript, во всем Интернете показывающие этот точный вариант использования, и, таким образом, то же самое можно сделать с любым сценарием. Вы бы сделали этот параметр на уровне домена, и репликация D C позаботится обо всем остальном.

Поиск с использованием вашего любимого движка, скажем ' 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
...