powershell - 我将如何选择要在其上运行 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 的服务器,因为我们有多个主域控制器。
解决方案
为什么选择 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
推荐阅读
- python - 整数的十进制表示小于整数本身?
- python - Python中如何对单词进行分类和统计
- angular - angular 7helli 中服务和模型之间的区别
- clojure - 如何在 Clojure 中真正打乱序列?
- android - 尝试为 Android 构建 Ionic 4 应用程序,但即使我已经设置了 gradle、路径和变量,也找不到它们
- android - 无法使用从脚本作为 AOSP 5.1 中的服务运行的 logcat 登录文件
- .htaccess - HTAccess RewriteRule 停止直接调用文件夹后?
- php - 如何用条形替换桌面菜单下拉菜单的单词
- android - 如何连接到 API 级别 29 上的特定 Wifi 连接?
- python - 如何重复请求任务