我正在努力将 Windows 2012 服务器大组中的某些文件从一个物理驱动器移动到另一个物理驱动器。这些服务器上的驱动器号和大小都相同。基本上,我们在每台服务器上都有一个共享,我想将这些数据和共享移动到具有更多可用空间的另一个驱动器上。我正在尝试开发一个脚本来完成以下操作:
- 缩小现有分区
- 使用新的可用空间创建并格式化新分区
- 将文件从现有共享/驱动器复制到新创建的分区
- 从现有驱动器中删除共享(实际驱动器正在共享)
- 在新驱动器上重新创建共享
- 为新驱动器分配已分配给旧驱动器的驱动器号。
- 记录任何失败
这是我整理的代码。正如标题所述,我无法让 New-SMBShare 在此脚本中正确运行。我没有收到错误,但脚本完成时驱动器未共享。我试图从 Powershell ISE 中执行脚本,如果我单独运行相同的命令,则共享将按预期创建。在脚本中运行时,什么会导致命令失败。
我偶尔也会遇到以下情况:Format-Volume : Cannot perform the requested operation when the drive is read only
每次运行此命令时我都会遇到这种情况,所以我不确定为什么会间歇性地发生这种情况。有时似乎在运行格式化命令之前上一个命令尚未完成。
最后,我也不太确定记录任何错误甚至成功消息的最佳方法。出于这个原因,我考虑过使用 Robocopy 而不是 Copy-Item,但如果有人知道使用 Copy-Item 实现此目的的好方法,我很乐意在这里分享。
#Stopping service to prevent "Format Disk" dialog box from appearing on screen
Stop-Service ShellHWDetection
#Create New 90GB Partition from W Drive
Resize-Partition -DriveLetter W -Size (1772GB)
Get-Disk | where size -GT 1.5TB | New-Partition -UseMaximumSize -DriveLetter K
Get-Partition -DriveLetter K | Format-Volume -FileSystem NTFS -NewFileSystemLabel "PC_Images" -Confirm:$false
#Restart ShellHWDetection service
start-service ShellHWDetection
#Copy files from "I drive" PC_Images share to new partition
Copy-Item -Path I:\* -Destination K:\ -Recurse -erroraction silentlycontinue
#Remove existing PC_Images share and recreate on new partition
Get-SMBShare -Name PC_Images | Remove-SMBShare -Confirm:$False
New-SMBShare -Name PC_Images -Path K:\ -ChangeAccess Everyone
#Change drive letter on new share to I
Set-Partition -DriveLetter I -NewDriveLetter X
Set-Partition -DriveLetter K -NewDriveLetter I
任何帮助,将不胜感激
答案1
我弄清楚了我的主要问题。我的脚本在创建共享后更改了驱动器号,从而删除了共享。如果我在创建共享之前更改驱动器号,它就会按预期工作。但我仍然不确定为什么我会定期收到只读错误。
答案2
我遇到了与只读废话类似的问题,并使用以下命令解决它(您可以将 New-Partition 直接传送到 Format-Volume 并省略 Get-Partition):
New-Partition … | ForEach-Object { Start-Sleep -s 3; $_ | Format-Volume … }