Назад | Перейти на главную страницу

Powershell New-SMBShare не работает должным образом в скрипте

Я работаю над перемещением некоторых файлов с одного физического диска на другой в большой группе серверов Windows 2012. Буквы и размеры дисков на этих серверах одинаковы. В основном у нас есть общий ресурс на каждом сервере, и я хочу переместить эти данные и поделиться на другой диск, на котором больше свободного места. Я пытаюсь разработать сценарий для выполнения следующих задач:

  1. Уменьшить существующий раздел
  2. Создайте и отформатируйте новый раздел, используя новое свободное пространство
  3. Скопируйте файлы с существующего общего ресурса / диска во вновь созданный раздел
  4. Удалите общий ресурс с существующего диска (общий диск уже используется)
  5. Восстановить долю на новом диске
  6. Назначьте новому диску букву диска, которая была назначена старому.
  7. Регистрируйте любые сбои

Это код, который я собрал. Как указано в заголовке, я не могу заставить 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

Любая помощь будет оценена

Я столкнулся с аналогичной проблемой с ерундой только для чтения и решил ее примерно следующим образом (вы можете передать New-Partition напрямую в Format-Volume и опустить Get-Partition):

New-Partition … | ForEach-Object { Start-Sleep -s 3; $_ | Format-Volume … }

Я понял проблему по своему основному вопросу. Мой сценарий изменяет букву диска ПОСЛЕ того, как я создал общий ресурс, который удаляет общий ресурс. Если я изменю букву диска перед созданием общего ресурса, он будет работать должным образом. Я все еще не уверен, почему я периодически получаю ошибку только для чтения.