Cuantas veces habeis metido una maquina a dominio y luego se os ha olvidado arrastrarla a la OU correspondiente?
He hecho el siguiente script para sustituir la interfaz de Windows en esta tarea.
Si se ejecuta el script en una maquina que ya pertenezca a un dominio, ofrece la opción de crear un fichero con las credenciales encriptadas.
Esto genera un fichero (domain.int.cred) en la misma carpeta que los scripts, y así os ahorrais meter las credenciales cada vez.
He hecho el siguiente script para sustituir la interfaz de Windows en esta tarea.
Para ejecutar el script powershell uso el siguiente bat
powershell -noprofile -executionpolicy "Unrestricted" .\join-domain.ps1Este es el script powershell:
$domain="domain.int" $OUs="OU=Workstations,OU=USA,DC=domain,DC=int", "OU=Workstations,OU=Europe,DC=domain,DC=int", "OU=Workstations,OU=Asia,DC=domain,DC=int" $credfile="$domain.cred" $partofdomain=(gwmi "Win32_ComputerSystem").partofdomain if($partofdomain -eq $true) { write-host "El equipo ya es miembro de un dominio!" $choice=read-host "`nQuieres aprovechar para almacenar las credenciales en un fichero para poder meter maquinas a dominio de una manera desatendida?(y/n)" if ($choice -eq "y") { read-host "dominio\usuario"|out-file $credfile read-host "contraseña" -assecurestring|ConvertFrom-SecureString -key(1..16)|out-file $credfile -append } } else { #region Import the Assemblies [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null $MyForm = New-Object System.Windows.Forms.Form $Icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + "\powershell.exe") $MyForm.Icon = $Icon $MyForm.Text = "SistemasWin | Join-Domain: $domain" $MyForm.Size = New-Object System.Drawing.Size(455,70) $MyForm.StartPosition = "CenterScreen" $MyForm.BackColor = [System.Drawing.Color]::SeaShell $Myform.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle $Myform.topMost=$true $objLabel1 = New-Object System.Windows.Forms.Label $objLabel1.Location = New-Object System.Drawing.Point(5,5) $objLabel1.Size = New-Object System.Drawing.Size(30,20) $objLabel1.Text = "OU:" $MyForm.Controls.Add($objLabel1) $objComboBox1 = New-Object System.Windows.Forms.ComboBox $objComboBox1.Location = New-Object System.Drawing.Point(30,5) $objComboBox1.Size = New-Object System.Drawing.Size(350,20) $objComboBox1.Name = "OUs" $objComboBox1.items.addrange($OUs) $objComboBox1.text=$OUs[0] $objComboBox1.FlatStyle="Flat" $objComboBox1.Font = New-Object System.Drawing.Font("Arial",7,0,3,0) $MyForm.Controls.Add($objComboBox1) $buttonselect = New-Object Windows.Forms.Button $buttonselect.Location = New-Object System.Drawing.Point(385,5) $buttonselect.Size = New-Object System.Drawing.Size(50,20) $buttonselect.BackColor = [System.Drawing.Color]::MistyRose $buttonselect.text="Join!" $MyForm.Controls.Add($buttonselect) $buttonselect.Add_Click({ switch ($buttonselect.text) { "Join!"{ if (!(test-path -path $credfile)){$cred=get-credential} else{ $storedcreds = get-content ($credfile) $username=$storedcreds[0] $password = ConvertTo-SecureString $storedcreds[1] -key (1..16) $cred = New-Object System.Management.Automation.PSCredential ($username, $password) } add-computer -domainname $domain -credential $cred -OUPath $objComboBox1.text -passthru if ($? -eq $true){$buttonselect.text="Restart!"} } "Restart!"{ $MyForm.hide() $MyForm.dispose() restart-computer } }#end switch }) # Activates/draws the form. $myForm.Add_Shown({$myForm.Activate()}) [void] $MyForm.ShowDialog() }#end partofdomainHe añadido la opción de meter la maquina de una manera “mas desatendida” ahorrando el paso de meter las credenciales.
Si se ejecuta el script en una maquina que ya pertenezca a un dominio, ofrece la opción de crear un fichero con las credenciales encriptadas.
Esto genera un fichero (domain.int.cred) en la misma carpeta que los scripts, y así os ahorrais meter las credenciales cada vez.
Comentarios
Publicar un comentario