J'écris un script Powershell pour créer une version complète de Windows 7. J'ai une fonction qui ajoute les utilisateurs dont j'ai besoin, mais elle ne définit pas le répertoire de base, ce qui fait qu'une section ultérieure de mon script (définition du bureau des utilisateurs) échoue car les répertoires "n'existent pas".
Voici la partie principale de la fonction:
[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
Y a-t-il quelque chose là-dedans pour ajouter quelque chose qui s'apparente à $ user.put ("HomePath", "\ Users \ automotive \ Desktop") par exemple pour qu'il ne casse pas la dernière partie de mon script.
Voici le code que j'utilise dans mon script Users.cmd:
Voici le code dans mon fichier .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
Je l'appelle avec cette commande, suivie de mes commandes pour créer le nouveau bureau.
\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
Les commandes DOS s'exécutent bien jusqu'à ce qu'il arrive à
%PSEXEC% -h -u %user% -p %password% "%wmic% QUIT"
Tout cela est suivi en rouge avant que la dernière commande REG ADD ne soit transmise -
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:
Après cela, il a ajouté le compte et les commandes permettant de modifier le travail du Bureau, mais les fichiers du Bureau de l'utilisateur sont "en cours d'utilisation" jusqu'au redémarrage du système.