web-dev-qa-db-fra.com

PowerShell: Copy-Item échoue bien que le même processus fonctionne avec l'Explorateur Windows

J'ai un script qui doit copier des fichiers régulièrement (toutes les heures). Je peux ouvrir les dossiers source et destination à l'aide de l'Explorateur Windows et copier le fichier sans problème.

Cependant, si j'essaie la même chose dans PowerShell, l'erreur est refusée. J'ai vérifié les autorisations sur le partage et j'ai un accès complet. Pourquoi cela échoue-t-il avec PowerShell?

Commande Copy-Item:

Copy-Item \\idmststtrm2\tns_admin$\tnsnames.ora -Destination \\bts13r2b\tnsnames -Force

Les erreurs:

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

Modifications:

Lorsque j'exécute un Get-ChildItem sur le chemin de destination, je peux voir le contenu du dossier.

Résultats de get-item:

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   

Essayé avec xcopy:

xcopy \\idmststtrm2\tns_admin$\tnsnames.ora \\bts13r2b\tnsnames\tnsnames.ora

Access is denied.
4
Geoff Dawdy

Ce problème est dû aux autorisations écrites sur un partage réseau. Bien que les autorisations de partage aient été définies correctement, les autorisations NTFS étaient manquantes. Un administrateur système devra s'assurer que les deux ensembles d'autorisations permettent au compte d'écrire dans le dossier. Une fois que cela a été mis à jour correctement, le script a pu effectuer une copie sur le partage réseau.

2
Geoff Dawdy

Vous avez la bonne idée, mais que se passe-t-il si vous essayez d'utiliser le «partage administratif» pour accéder à l'autre système. 

Création de certaines variables standard: $Source et $Target. Nous utilisons maintenant Get-ChildItem et le commutateur -Path pour récupérer le fichier ou le répertoire dont nous avons besoin. Ensuite, nous utilisons Copy-Item et le commutateur -Force pour envoyer le fichier à l'autre serveur. Cette méthode devrait fonctionner, mais décrira une autre méthode.

Je suppose que cela ressemblerait à quelque chose comme ça.

$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

Une autre option consiste à vous assurer que vous avez d’abord accès en écriture aux deux répertoires partagés. Une fois que cela est vérifié, nous lançons les opérations suivantes:

$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

Dites nous si cela fonctionne. 

0
Zach Olinske

Essayez d'ouvrir Powershell en tant qu'administrateur, ce qui peut parfois poser problème

0
jaismeensandhu