CIAO
Ho creato questo script:
codice:
# Creazione di un account sulla macchina locale.
Clear-Host
# Analizza i dati immessi da un utente.
do {
# Prede i dati da un utente.
$UserName = Read-Host "Nome utente da creare"
$FullName = Read-Host "Nome completo utente"
$Password = Read-Host "Password utente" -AsSecureString
$Password1 = Read-Host "Verifica password utente" -AsSecureString
$GroupName = Read-Host "Inserire il gruppo di appartenenza dell'utente"
# Converte in chiaro le due password criptate.
$Password = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password))
$Password1 = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password1))
# Verifica che tutti i dati immessi siano corretti.
if (
# Verifica se il nome completo dell'utente e la sua password sono conformi.
($FullName -eq "") -or ($Password -eq "") -or ($Password -ne $Password1) -or
# Controllo sull'esistenza del nome utente in una macchina locale.
((([adsi]"WinNT://$$env:computername,computer").children | ? {$_.psbase.schemaClassName -eq "User"} | Select -expand Name) -ccontains $UserName) -or
# Controllo sulla validita' del nome utente.
(($Username.length -lt 1) -or ($UserName -match '^\s|\s$|^(\.|\s)+$|.{21,}|[\\/"\[\]:\|<>\+=;,\?\*@]')) -or
# Controllo sull'esistenza di un gruppo su una macchina locale.
((([adsi]"WinNT://$([Environment]::MachineName),computer").children | ? {$_.psbase.schemaClassName -eq "Group"} | Select -expand Name) -notcontains $GroupName)
) {
Write-Host
Write-Host "Immissione dati errata o nome utente '$UserName' gia' esistente o gruppo locale '$GroupName' non esistente. Prego, ripetere."
Write-Host
}
}
until (
# Verifica se il nome completo dell'utente e la sua password sono conformi.
($FullName -ne "") -and ($Password -ne "") -and ($Password -eq $Password1) -and
# Controllo sull'esistenza del nome utente in una macchina locale.
((([adsi]"WinNT://$$env:computername,computer").children | ? {$_.psbase.schemaClassName -eq "User"} | Select -expand Name) -cnotcontains $UserName) -and
# Controllo sulla validita' del nome utente.
(($Username.length -ge 1) -and ($UserName -notmatch '^\s|\s$|^(\.|\s)+$|.{21,}|[\\/"\[\]:\|<>\+=;,\?\*@]')) -and
# Controllo sull'esistenza di un gruppo su una macchina locale.
((([adsi]"WinNT://$([Environment]::MachineName),computer").children | ? {$_.psbase.schemaClassName -eq "Group"} | Select -expand Name) -contains $GroupName)
)
# Impostazione della password di un account utente che sta per essere creato.
( ([adsi] "WinNT://$env:computername").Create("User", $UserName) ).SetPassword($password)
# Impostazione del nome completo di un account utente che sta per essere creato.
( ([adsi] "WinNT://$env:computername").Create("User", $UserName) ).InvokeSet("FullName", $FullName)
# Addiziona un account utente, che sta per essere creato, al gruppo desiderato.
( [adsi] "WinNT://$env:computername/$GroupName,group" ).Add( ( ([adsi] "WinNT://$env:computername").Create("User", $UserName) ).AdsPath )
# Creazione di un account e salvataggio delle informazioni relative al suo profilo.
( ([adsi] "WinNT://$env:computername").Create("User", $UserName) ).SetInfo()
ma ottengo questo errore:
codice:
Eccezione durante la chiamata di "Add" con "1" argomento/i: "Impossibile aggiun
gere o rimuovere un nuovo membro dal gruppo locale perché il membro non esiste.
"
In D:\Users\xxx\Documents\Creazione_account_locali.ps1:60 car:60
+ ( [adsi] "WinNT://$env:computername/$GroupName,group" ).Add <<<< ( ( ([adsi]
"WinNT://$env:computername").Create("User", $UserName) ).AdsPath )
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI
Come mai?
GRAZIE
CIAO