Powershell nos da suficiente potencial para poder gestionar el sistema operativo, entre otras cosas el poder trabajar con
los discos duros. Veamos un ejemplo practico, tengo una máquina virtual (física también vale)
a la que le añado un disco RAW y quiero inicializarlo, formatearlo y
etiquetarlo en un script.
Lo primero que necesitamos es saber el número de disco que
se ha generado al añadir el nuevo disco, para ello desde el PowerShell
ejecutamos el comando Get-Disk.
Como se ve existe un disco con el numero 1 offline y de tipo
RAW.
Lo primero que deberemos hacer es inicializar el disco en formato
MBR, para ello usamos el cmdlet Initialize-Disk -Number 1 -PartitionStyle MBR tal como se ve en la imagen.
Una vez inicializado debemos crear la partición y después formatearlo,
para lo primero ejecutamos el comando New-Partition -DiskNumber 1 -UseMaximumSize
En el ejemplo anterior no le hemos asignado la letra de
unidad que queremos ya que lo que vamos a hacer es montar este disco sobre una
carpeta, si quisiéramos asignarle una unidad podíamos haberlo hecho al
formatear la unidad añadiendo el flag –AssignDriveLetter.
Ahora nos queda montarlo sobre una carpeta de sistema, como
ejemplo hemos creado una carpeta sobre el disco C:\ llamada Datos, para montar
esta unidad sobre esta carpeta ejecutamos el comando Add-PartitionAccessPath -DiskNumber 1 -PartitionNumber 1 -AccessPath "C:\Datos"
Si vamos al explorador veremos cómo nos ha cambiado el icono
de esta carpeta indicándonos que es un punto de montaje.
Obviamente podemos utilizar estos cmdlets para crearnos un
script que lo haga todo, incluso localizar el disco que acabamos de asignar.
Aquí os dejo un ejemplo de un script que busca el primer disco RAW disponible lo inicializa y formatea con la siguiente unidad disponible, permite pasarle como parametro el label del nuevo disco.
Aquí os dejo un ejemplo de un script que busca el primer disco RAW disponible lo inicializa y formatea con la siguiente unidad disponible, permite pasarle como parametro el label del nuevo disco.
# - Script que busca un disco libre lo inicializa, lo formatea, le pone la etiqueta que
# - le pasamos como parametro -Label y lo monta en la siguiente unidad libre.
[CmdletBinding()]
Param (
[Parameter (Mandatory=$True, Position=1)]
[String]$Label
)
# -- Variables a usar
$NDisco=""
# -- Convierto a mayusculas la etiqueta pasada (mania mia)
$Label=$Label.ToUpper()
# -- Comprueba si hay discos disponibles
$NDisco=@(Get-Disk | where {$_.PartitionStyle -eq "RAW"} |Sort-Object Number)
if ($NDisco.count -gt 0 )
{
# - Hay más de un disco.
# -- Inicializo.
Initialize-Disk -Number $NDisco[0].Number -PartitionStyle MBR
# -- Creo la partición
$Particion=New-Partition -DiskNumber $NDisco[0].Number -UseMaximumSize -AssignDriveLetter
# -- Formateo la partición
Start-Sleep -Seconds 3
$Particion | Format-Volume -FileSystem NTFS -NewFileSystemLabel $Label -Confirm:$false
# -- Ya está
Write-Host "Disco creado"
}
else {
Write-Host "No hay discos disponibles"
}
# - le pasamos como parametro -Label y lo monta en la siguiente unidad libre.
[CmdletBinding()]
Param (
[Parameter (Mandatory=$True, Position=1)]
[String]$Label
)
# -- Variables a usar
$NDisco=""
# -- Convierto a mayusculas la etiqueta pasada (mania mia)
$Label=$Label.ToUpper()
# -- Comprueba si hay discos disponibles
$NDisco=@(Get-Disk | where {$_.PartitionStyle -eq "RAW"} |Sort-Object Number)
if ($NDisco.count -gt 0 )
{
# - Hay más de un disco.
# -- Inicializo.
Initialize-Disk -Number $NDisco[0].Number -PartitionStyle MBR
# -- Creo la partición
$Particion=New-Partition -DiskNumber $NDisco[0].Number -UseMaximumSize -AssignDriveLetter
# -- Formateo la partición
Start-Sleep -Seconds 3
$Particion | Format-Volume -FileSystem NTFS -NewFileSystemLabel $Label -Confirm:$false
# -- Ya está
Write-Host "Disco creado"
}
else {
Write-Host "No hay discos disponibles"
}