使用Powershell在“环境”选项卡中为终端服务器客户端分配登录脚本

使用Powershell在“环境”选项卡中为终端服务器客户端分配登录脚本,powershell,environment,rdp,wmic,Powershell,Environment,Rdp,Wmic,您好,我希望使用Powershell为用户配置文件设置登录脚本参数。我本来打算用WMICUserAccount来做这件事,但发现这是不可能的。如下图所示,该方法中不存在该方法: class Win32_UserAccount : Win32_Account { uint32 AccountType; string Caption; string Description; boolean Disabled; string Domain; strin

您好,我希望使用Powershell为用户配置文件设置登录脚本参数。我本来打算用WMICUserAccount来做这件事,但发现这是不可能的。如下图所示,该方法中不存在该方法:

    class Win32_UserAccount : Win32_Account
{
  uint32   AccountType;
  string   Caption;
  string   Description;
  boolean  Disabled;
  string   Domain;
  string   FullName;
  datetime InstallDate;
  boolean  LocalAccount;
  boolean  Lockout;
  string   Name;
  boolean  PasswordChangeable;
  boolean  PasswordExpires;
  boolean  PasswordRequired;
  string   SID;
  uint8    SIDType;
  string   Status;
};
我更愿意将其作为powershell中的语句来执行,但如果不可能,则可以作为脚本来执行 我想为Win Server 2008 R2设置图中所示的参数

通过组策略维护该设置,参考:。组策略设置最终由注册表设置处理。可能会帮助您找到要更改的注册表设置,但我没有幸运地在那里找到它。您会注意到,许多设置都是HKCU设置,这意味着它们只能在用户登录时设置。这对你来说可能有问题。该页面是注册表中可以设置程序启动的所有位置的良好参考

我个人建议用这个来代替。下面是一个在cmd或PowerShell中创建的示例:

schtasks -create -tn "Run command prompt" -tr "C:\WINDOWS\system32\cmd.exe" -sc ONLOGON

该设置通过组策略维护,引用:。组策略设置最终由注册表设置处理。可能会帮助您找到要更改的注册表设置,但我没有幸运地在那里找到它。您会注意到,许多设置都是HKCU设置,这意味着它们只能在用户登录时设置。这对你来说可能有问题。该页面是注册表中可以设置程序启动的所有位置的良好参考

我个人建议用这个来代替。下面是一个在cmd或PowerShell中创建的示例:

schtasks -create -tn "Run command prompt" -tr "C:\WINDOWS\system32\cmd.exe" -sc ONLOGON

这花了很长时间,但最终得到了答案的伎俩是使用。我还尝试使用ADSI,但只能让它设置登录本地的登录脚本。以下是Elijiah如何通过注册表设置本地用户的环境变量的代码

# adds user
$objComputer = [ADSI]"WinNT://127.0.0.1"
$objUser = $objComputer.Create('user', $username)
$objUser.SetPassword($password)
$objUser.PSBase.InvokeSet('Description', "user " + $userName)
$objUser.PSBase.InvokeSet('userflags', 512)
$objUser.SetInfo();
# set password not to expire
wmic USERACCOUNT WHERE "Name = '$username'" SET Passwordexpires=FALSE
#set logoff script
$ou = [adsi]"WinNT://127.0.0.1"
$user = $ou.psbase.get_children().find("test")
$user.PSBase.InvokeSet("TerminalServicesInitialProgram", "C:\logoff.bat")
$user.setinfo()
#add to group
net localgroup $groupname $username /add
net localgroup "Remote Desktop Users" $username /add
#remote login
cmdkey /generic:TERMSRV/127.0.0.1 /user: $username /pass: $password
#add logoff script
#launch remote desktop
mstsc /v:127.0.0.1 | Out-Null
cmdkey /delete:TERMSRV/127.0.0.1
#load hive
reg load HKU\%username% "C:\Users\$username\NTUSER.dat"
#set environment valiables
Set-ItemProperty -Path HKU:\$username\Environment -Name SERVERTYPE -Type STRING -Value DIR
#Unload hive
reg unload HKU\$username  

这花了很长时间,但最终得到了答案的伎俩是使用。我还尝试使用ADSI,但只能让它设置登录本地的登录脚本。以下是Elijiah如何通过注册表设置本地用户的环境变量的代码

# adds user
$objComputer = [ADSI]"WinNT://127.0.0.1"
$objUser = $objComputer.Create('user', $username)
$objUser.SetPassword($password)
$objUser.PSBase.InvokeSet('Description', "user " + $userName)
$objUser.PSBase.InvokeSet('userflags', 512)
$objUser.SetInfo();
# set password not to expire
wmic USERACCOUNT WHERE "Name = '$username'" SET Passwordexpires=FALSE
#set logoff script
$ou = [adsi]"WinNT://127.0.0.1"
$user = $ou.psbase.get_children().find("test")
$user.PSBase.InvokeSet("TerminalServicesInitialProgram", "C:\logoff.bat")
$user.setinfo()
#add to group
net localgroup $groupname $username /add
net localgroup "Remote Desktop Users" $username /add
#remote login
cmdkey /generic:TERMSRV/127.0.0.1 /user: $username /pass: $password
#add logoff script
#launch remote desktop
mstsc /v:127.0.0.1 | Out-Null
cmdkey /delete:TERMSRV/127.0.0.1
#load hive
reg load HKU\%username% "C:\Users\$username\NTUSER.dat"
#set environment valiables
Set-ItemProperty -Path HKU:\$username\Environment -Name SERVERTYPE -Type STRING -Value DIR
#Unload hive
reg unload HKU\$username  

谢谢,这很有帮助。然而,我需要在每个用户的基础上这样做,即不是所有用户都有相同的脚本,而这不能在任务上完成。我也找不到注册表设置。请注意,如果您需要更改不同的用户HKCU,您可以转到regedit highlight over HKUsers File>Load Hive并选择users NTUser.dat fileInterest,谢谢您提供的信息。这种使用注册表的方法似乎有两个缺点。1) 这些设置不是集中存储的,因此更改意味着更新每台计算机。2) 用户必须至少登录电脑一次,才能存在其个人资料。是否值得进一步探索?使用计划任务方法,我可以创建一个exe或powershell脚本,查看刚刚登录的用户,并根据用户的身份采取不同的操作。根据实施情况,我认为这可以解决上述两个缺点。让我知道这对Explorer是否有帮助我也遇到过同样的问题,即在用户未至少登录一次的情况下将NTusers.dat装入机箱。我曾经提到过,这只是为了在本地服务器上创建用户(我们正在为一家公司做这个项目,而不是为了给我们一个活跃的目录或使用他们的长篇大论)。所以我所做的就是让rdp登录和注销。首先,您需要设置CrediteCals以自动登录“cmdkey/generic:TERMSRV/127.0.0.1/user:$username/pass:$password”,然后设置RDP“mstsc/v:127.0.0.1”,然后在登录后使用“code”cmdkey/delete:TERMSRV/127.0.0.1“code”进行删除。这就引出了我的问题。我创建了一个.bat文件,用于在启动后注销
但我需要要将其分配给用户apon LoggonThank,这非常有用。然而,我需要在每个用户的基础上这样做,即不是所有用户都有相同的脚本,而这不能在任务上完成。我也找不到注册表设置。请注意,如果您需要更改不同的用户HKCU,您可以转到regedit highlight over HKUsers File>Load Hive并选择users NTUser.dat fileInterest,谢谢您提供的信息。这种使用注册表的方法似乎有两个缺点。1) 这些设置不是集中存储的,因此更改意味着更新每台计算机。2) 用户必须至少登录电脑一次,才能存在其个人资料。是否值得进一步探索?使用计划任务方法,我可以创建一个exe或powershell脚本,查看刚刚登录的用户,并根据用户的身份采取不同的操作。根据实施情况,我认为这可以解决上述两个缺点。让我知道这对Explorer是否有帮助我也遇到过同样的问题,即在用户未至少登录一次的情况下将NTusers.dat装入机箱。我曾经提到过,这只是为了在本地服务器上创建用户(我们正在为一家公司做这个项目,而不是为了给我们一个活跃的目录或使用他们的长篇大论)。所以我所做的就是让rdp登录和注销。首先,您需要设置CrediteCals以自动登录“cmdkey/generic:TERMSRV/127.0.0.1/user:$username/pass:$password”,然后设置RDP“mstsc/v:127.0.0.1”,然后在登录后使用“code”cmdkey/delete:TERMSRV/127.0.0.1“code”进行删除。这就引出了我的问题。我创建了一个.bat文件,用于在启动后注销
但我需要将其分配给用户apon loggon