Я создаю сценарий развертывания веб-приложений в PowerShell, и для одной задачи я пытаюсь создать и восстановить базу данных из файла резервной копии Sql-Server.Совместное использование временных файлов между пользователями
Файлы в конечном итоге находятся на рабочем столе пользователя, поэтому, когда я инструктирую Sql-Server для его восстановления, он жалуется на «Доступ запрещен». при чтении резервной копии.
RESTORE DATABASE [Acme] FROM DISK = 'C:\Users\matthew\Desktop\my-database.bak' WITH REPLACE
Реагирует с
Msg 3201, Level 16, State 2, Line 2 Не удается открыть устройство резервного копирования 'C: \ Users \ мэттью \ Desktop \ My-database.bak'. Ошибка операционной системы 5 (Доступ запрещен.).
Перемещение файла в общедоступной области, как C:\Temp
работ, как указано в следующем ответе: Why can't I read from .BAK files on my Desktop using SQL Express in Windows Authentication Mode
Однако C:\Temp
не стандартный временный каталог Windows. Поскольку я использую PowerShell, я использую библиотеки .NET, например, используя GetTempPath
. Это заканчивается указывая на
C: \ Users \ мэттью \ AppData \ Local \ Temp
, который до сих пор та же проблема разрешения.
Существует ли стандартный способ получения временного каталога, к которому может обратиться любой локальный пользователь?
EDIT: для пояснения пользователь matthew
и пользователь, который восстанавливает резервную копию, отличаются.
Пользователи должны всегда иметь доступ на запись в свою папку 'Temp'. Я бы исследовал, почему это не так. –
Какой пользователь выполняет задачу восстановления? Если это другой пользователь, чем matthew, вы можете захотеть поместить файл резервной копии в другое место, которое является общедоступным (или, по крайней мере, доступным для группы, членом которой является пользователь восстановления). 'C: \ Users \ Public \ Documents' или' C: \ Users \ Public \ Downloads' приходят на ум. Создание временного каталога 'C: \ Temp' также не является чем-то необычным. –
Понятие «стандартный каталог Windows» является разновидностью. Не похож на Linux «Стандарт иерархии файлов», где есть четкий стандарт. Люди использовали c: \ temp как временную директорию с MS-DOS 2.0, поэтому она в значительной степени стандартная, как она есть. Единственная ошибка, которую я вижу, - это если C: не является SystemDrive. Но если вы работаете в ИТ-организации, где настольные компьютеры Windows происходят из общего образа (ов), тогда это решение. В качестве альтернативы вы можете использовать $ env: HOMEDRIVE или $ env: SYSTEMDRIVE, чтобы определить, на каком диске искать \ TEMP (или посмотреть на оба). –