Я пишу скрипт Powershell для полной сборки Windows 7. У меня есть функция, которая добавляет пользователей, которые мне нужны, но она не устанавливает Домашний каталог, что приводит к сбою в работе более поздней части моего сценария (настройка рабочих столов пользователей), поскольку каталоги «еще не существуют».
Вот основная часть функции:
[CmdletBinding()]
Param(
[Parameter(Position=0,
Mandatory=$True,
ValueFromPipeline=$True)]
[string]$userName,
[Parameter(Position=1,
Mandatory=$True,
ValueFromPipeline=$True)]
[string]$password,
[string]$computerName = $env:ComputerName,
[string]$description = "Created by PowerShell"
)
$computer = [ADSI]"WinNT://$computerName"
$user = $computer.Create("User", $userName)
$user.setpassword($password)
$user.put("description",$description)
$user.SetInfo()
} #end function New-LocalUser
Есть ли где-нибудь там, чтобы добавить что-то вроде $ user.put("HomePath", "\Users\automotive\Desktop"), например, чтобы это не нарушало последующую часть моего скрипта.
Вот код, который я использую в своем скрипте Users.cmd:
Вот код в моем .cmd файле:
SETLOCAL
SET Profile=C:\Users
SET user=cars
SET password=cars
SET PSEXEC="C:\Program Files\SysinternalsSuite\PsExec.exe"
SET wmic=%windir%\System32\Wbem\WMIC
FOR /F "tokens=2* delims= " %%I IN ('REG QUERY ^"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList^" /v ProfilesDirectory^|find /i ^"ProfilesDirectory^"') DO (SET ProfilesDirectory=%%J)
@echo ProfilesDirectory: %ProfilesDirectory%
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v ProfilesDirectory /t REG_SZ /d "%Profile%" /f
REG ADD "HKCU\Software\Systinternals\PsExec" /v EulaAccepted /t REG_DWORD /d 1 /f
NET USER /add %user% %password% /comment:"Account for User" /expires:never /homedir:%Profile%\%user%
NET LOCALGROUP Administrators /add %user%
%PSEXEC% -h -u %user% -p %password% "%wmic% QUIT"
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v ProfilesDirectory /t REG_SZ /d "%ProfilesDirectory%" /f
Я вызываю это с помощью этой команды, а затем мои команды для создания нового рабочего стола.
\Windows\System32\cmd /c c:\Users\Administrator\Desktop\Users.cmd -wait
Remove-Item \Users\cars\Desktop -recurse -force
Copy-Item E:\"Desktop Cars" C:\Users\cars Desktop -recurse
Команды DOS работают нормально, пока не доберутся до
%PSEXEC% -h -u %user% -p %password% "%wmic% QUIT"
За этим следует все это красным цветом, прежде чем он доберется до последней команды REG ADD -
C:\>"C:\Program Files\SysinternalsSuite\PsExec.exe" -h -u cars -p cars "C:\Windows\System32\Wbem\WMIC QUIT"
cmd.exe :
At C:\Users\Administrator\Desktop\Desktops.ps1:3 char:22
+ \Windows\System32\cmd <<<< /c c:\Users\Administrator\Desktop\Users.cmd -wait
+ CategoryInfo : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com
The system cannot find the file specified.
Connecting to local system...Starting PsExec service on local system...Connecting with PsExec service on ccm2756...Starting C:\Windows\
System32\Wbem\WMIC QUIT on ccm2756...
PsExec could not start C:\Windows\System32\Wbem\WMIC QUIT on ccm2756:
После этого он добавил учетную запись и команды для изменения рабочего стола, но файлы рабочего стола пользователя "используются", пока я не перезагружаю систему.