У меня есть script, который должен копировать файлы на регулярной основе (каждый час). Я могу открыть исходную и целевую папку с помощью Windows Explorer и скопировать файл без проблем.
Однако, если я попробую то же самое в PowerShell, я получаю доступ к пути, которому отказано в ошибке. Я проверил разрешения на общий ресурс, и у меня есть полный доступ. Почему это происходит с помощью PowerShell?
Команда Copy-Item:
Copy-Item \\idmststtrm2\tns_admin$\tnsnames.ora -Destination \\bts13r2b\tnsnames -Force
Ошибки:
Copy-Item : Access to the path '\\bts13r2b\tnsnames\tnsnames.ora' is denied.
At line:1 char:1
+ Copy-Item \\idmststtrm2\tns_admin$\tnsnames.ora -Destination \\bts13r2b\tnsnames ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (\\idmststtrm2\tns_admin$\tnsnames.ora:FileInfo) [Copy-Item], UnauthorizedAccessException
+ FullyQualifiedErrorId : CopyFileInfoItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand
Copy-Item : Access to the path '\\bts13r2b\tnsnames\tnsnames.ora' is denied.
At line:1 char:1
+ Copy-Item \\idmststtrm2\tns_admin$\tnsnames.ora -Destination \\bts13r2b\tnsnames ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Copy-Item], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.CopyItemCommand
Изменения:
Когда я выполняю Get-ChildItem
по пути назначения, я могу видеть содержимое папки.
Результаты получения элемента:
get-item \\idmststtrm2\tns_admin$\tnsnames.ora
Directory: \\idmststtrm2\tns_admin$
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 3/10/2017 8:49 AM 14143 tnsnames.ora
get-item \\bts13r2b\tnsnames\tnsnames.ora
Directory: \\bts13r2b\tnsnames
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 3/8/2017 9:51 AM 15991 tnsnames.ora
get-item \\bts13r2b\tnsnames
Directory:
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 3/21/2017 11:14 AM tnsnames
Пробовал использовать xcopy:
xcopy \\idmststtrm2\tns_admin$\tnsnames.ora \\bts13r2b\tnsnames\tnsnames.ora
Access is denied.
Попробуйте открыть powershell как администратор, иногда это вызывает эту проблему.
У вас есть правильная идея, но что, если вы попробуете использовать “Административный доступ” для доступа к другой системе.
Созданы некоторые стандартные переменные: $Source
и $Target
. Теперь мы используем Get-ChildItem
и переключатель -Path
, чтобы захватить требуемый файл или каталог. Затем мы используем Copy-Item
и переключатель -Force
для отправки файла на другой сервер. Этот метод должен работать, но будет описывать другой метод.
Я предполагаю, что он будет выглядеть примерно так.
$Source = "\\idmststtrm2\c$\app\oracle\product\11.2.0\dbhome_1\network\admin\tns_admin$\tnsnames.ora"
$Target="\\bts13r2b\c$\app\oracle\product\11.2.0\dbhome_1\network\admin\tnsnames"
Get-ChildItem -Path $Source | Copy-Item -Destination $Target -Force
Другой вариант – убедиться, что вы сначала имеете доступ на запись к обоим общим каталогам. Как только это подтвердится, мы запускаем следующее:
$Source="\\idmststtrm2\tns_admin$\tnsnames.ora"
$Target="\\bts13r2b\tnsnames"
Get-ChildItem -Path $Source | Copy-Item -Destination $Target -Force
#(Get-Acl $Source).Access #Verify $Source Access
#(Get-Acl $Target).Access #Verify $Target Access
Сообщите нам, если это сработает.
Эта проблема связана с правами доступа к сетевому ресурсу. Хотя права доступа были установлены правильно, разрешения NTFS отсутствовали. Системному администратору необходимо будет обеспечить, чтобы оба набора разрешений позволяли учетной записи записывать в папку. Как только это было правильно обновлено, script смог выполнить копию общего сетевого ресурса.