使用循环和阵列的Powershell驱动器配置

时间:2019-02-20 17:39:12

标签: powershell

我创建了一个powershell脚本来进行一些OS驱动器配置,但是它相当长,我想将其缩短很多。我对Powershell很体面,但不喜欢循环或数组。我确定我可以添加一些for循环来缩短它。查看示例可以帮助我。很抱歉长代码,但是它起作用了。

#PS Script to online drives, initialize, create volume, and format the volume.

# Online the 5 HDD's

set-disk -Number 1 -IsOffline $False
set-disk -Number 2 -IsOffline $False
set-disk -Number 3 -IsOffline $False
set-disk -Number 4 -IsOffline $False
set-disk -Number 5 -IsOffline $False

# Makes a read only drive writeable

set-disk -number 1 -isReadOnly $False
set-disk -number 2 -isReadOnly $False
set-disk -number 3 -isReadOnly $False
set-disk -number 4 -isReadOnly $False
set-disk -number 5 -isReadOnly $False

# Initializes the disks

Initialize-Disk -number 1 -PartitionStyle GPT
Initialize-Disk -number 2 -PartitionStyle GPT
Initialize-Disk -number 3 -PartitionStyle GPT
Initialize-Disk -number 4 -PartitionStyle GPT
Initialize-Disk -number 5 -PartitionStyle GPT

# Creates a new volume and assigns the specific drive letter

New-Partition -DiskNumber 1 -DriveLetter D -UseMaximumSize
New-Partition -DiskNumber 2 -DriveLetter E -UseMaximumSize
New-Partition -DiskNumber 3 -DriveLetter F -UseMaximumSize
New-Partition -DiskNumber 4 -DriveLetter G -UseMaximumSize
New-Partition -DiskNumber 5 -DriveLetter K -UseMaximumSize

# Formats the drive with 64KB, sets it as NTFS and Labels it. 

Format-Volume -DriveLetter D -FileSystem NTFS -NewFileSystemLabel SQL -AllocationUnitSize 65536 -Force -Confirm:$false
Format-Volume -DriveLetter E -FileSystem NTFS -NewFileSystemLabel Data -AllocationUnitSize 65536 -Force -Confirm:$false
Format-Volume -DriveLetter F -FileSystem NTFS -NewFileSystemLabel Logs -AllocationUnitSize 65536 -Force -Confirm:$false
Format-Volume -DriveLetter G -FileSystem NTFS -NewFileSystemLabel TembDB -AllocationUnitSize 65536 -Force -Confirm:$false
Format-Volume -DriveLetter K -FileSystem NTFS -NewFileSystemLabel Backups -AllocationUnitSize 65536 -Force -Confirm:$false

3 个答案:

答案 0 :(得分:1)

这是简化事情的一种方法... [咧嘴]

$DiskPrepInfo = @'
DiskNumber, DriveLetter, Label
1, D, SQL
2, E, Data
3, F, Logs
4, G, TempDB
5, K, Backups
'@ | ConvertFrom-Csv

foreach ($DPI_Item in $DiskPrepInfo)
    {
    # you may want to add a "Start-Sleep -Seconds [long enuf to finish]" between each of these
    Set-Disk -Number $DPI_Item.DiskNumber -IsOffline $False
    Set-Disk -Number $DPI_Item.DiskNumber -IsReadOnly $False
    Initialize-Disk -Number $DPI_Item.DiskNumber -PartitionStyle GPT
    New-Partition -DiskNumber $DPI_Item.DiskNumber -DriveLetter $DPI_Item.DriveLetter -UseMaximumSize
    $FV_Params = @{
        DriveLetter = $DPI_Item.DiskNumber
        FileSystem = 'NTFS'
        NewFileSystemLabel = $DPI_Item.Label
        # it's tempting to use "64KB" here [*grin*] 
        AllocationUnitSize = 65536
        Force = $True
        Confirm = $False
        }
    Format-Volume @FV_Params
    }

这未经测试! [ grin ]不仅我没有要测试的磁盘……我没有那些cmdlet。它们不包含在win7ps5.1中。

答案 1 :(得分:0)

感谢您的答复。我最终写了这篇,它奏效了:

$drives = @()
  $drives = @("1:D:SQL","2:E:Data","3:F:Logs","4:G:TempDB","5:K:Backup")
  foreach ( $drive in $drives) {
  $volume,$letter,$label = $drive.split(':')
  set-disk -Number $volume -IsOffline $False
  set-disk -number $volume -isReadOnly $False
  Initialize-Disk -number $volume -PartitionStyle GPT
  New-Partition -DiskNumber $volume -DriveLetter $letter -UseMaximumSize
  Format-Volume -DriveLetter $letter -FileSystem NTFS -NewFileSystemLabel "$label" -AllocationUnitSize 65536 -Force -Confirm:$false
}

答案 2 :(得分:0)

$DiskPrepInfo = @'
DiskNumber, DriveLetter, Label
1, D, SQL
2, E, Data
3, F, Logs
4, G, TempDB
5, K, Backups
'@ | ConvertFrom-Csv

foreach ($DPI_Item in $DiskPrepInfo)
    {
    # you may want to add a "Start-Sleep -Seconds [long enuf to finish]" between each of these
    Set-Disk -Number $DPI_Item.DiskNumber -IsOffline $False
    Set-Disk -Number $DPI_Item.DiskNumber -IsReadOnly $False
    Initialize-Disk -Number $DPI_Item.DiskNumber -PartitionStyle GPT
    New-Partition -DiskNumber $DPI_Item.DiskNumber -DriveLetter $DPI_Item.DriveLetter -UseMaximumSize
    Format-Volume -DriveLetter $DPI_Item.DiskNumber -FileSystem NTFS -AllocationUnitSize 65536 -NewFileSystemLabel $DPI_Item.Label -Confirm:$false
    }