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.
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.
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.
Essayez d'ouvrir Powershell en tant qu'administrateur, ce qui peut parfois poser problème