2017-09-14 1 views
1

Je n'arrive pas à exécuter ce script correctement dans le planificateur de tâches de Windows Servers 2012 R2, lorsque je l'exécute à partir de PowerShell ISE, il s'exécute correctement et copie les fichiers dans les 3 serveurs mappés Cependant, à partir de Task Scheduler, il ne copie que les fichiers sur le dernier lecteur mappé et le dossier bkup. J'espère que vous les gars peuvent me aider à obtenir la bonne configuration, voici le code:Script PowerShell pour déplacer des fichiers vers plusieurs lecteurs réseau

param (
$src = "C:\Users\user\Documents\SRC_FOLDER", 
$bkup = "C:\Users\user\Documents\BKUP_FOLDER", 
$SHARE1 = "\\SERVER1\SHARE\1", 
$SHARE2 = "\\SERVER2\SHARE\2", 
$SHARE3 = "\\SERVER3\SHARE\3" 
) 

$mappedUnits = $bkup, $SHARE1, $SHARE2, $SHARE3 

foreach ($mappedUnit in $mappedUnits) 
{ 
    Get-ChildItem $src | Copy-Item -Destination $mappedUnit -Recurse -Force 
} 

#Get-ChildItem $src | Remove-Item 

Planificateur de tâches est configuré pour fonctionner en tant que Domain Admin (a également essayé un compte d'administrateur local) et en tant que plus de privilèges, il fonctionne tous les 10 minutes, il appelle powershell (avec le chemin d'accès complet à .exe), avec des arguments: -ExecutionPolicy Unrestricted -File "MOVE-FILES.ps1" et l'option Démarrer dans est défini sur le chemin du script.

J'ai essayé plusieurs types de configuration et c'est le dernier qui, comme je l'ai dit, cela fonctionne manuellement lors de l'exécution, mais pas de Planificateur de tâches.

+0

Alors, je l'ai enlevé les 2 premiers lecteurs réseau (l'un qui fonctionne et qui ne font pas) et à gauche que SERVEUR1, ce n'est pas la copie des fichiers par le Planificateur de tâches, mais il fait manuellement. Je suis allé dans SERVER3 et regardé les autorisations pour le partage, mais ils sont similaires à SERVER1. – hectormtnezg

Répondre

1

J'ai trouvé la solution à mon problème, je devais appeler un nouveau PSDrive et lui attribuer des informations d'identification. Je vais poster la réponse à tous ceux qui cherchent quelque chose de similaire:

[string][ValidateNotNullOrEmpty()] $userPassword = "password" 
$username = "user" 
$password = ConvertTo-SecureString -String "password" -AsPlainText -Force 
$computers = gc "C:\path\to\file\machines.txt" 
$source = "C:\path\to\source" 
$destination = "path\to\destination\server" 
$bkup = "path\to\backup\folder" 
$creds = new-object -typename System.Management.Automation.PSCredential ` 
     -argumentlist $username, $password 
foreach ($computer in $computers) 
{ 
    if (test-Connection -Cn $computer -quiet) 
    { 
     New-PSDrive -Name Y -PSProvider filesystem -Root "\\$computer\$destination" -Credential $creds 
     Copy-Item $source -Destination Y:\ -Recurse -ErrorAction SilentlyContinue -ErrorVariable A 
     if($A) { write-Output "$computer - File copy Failed" | out-file "C:\File Transfer\BIOS_Copy.txt" -Append } 
     Remove-PSDrive Y 
    } 
    else 
    { 
     Write-Output "$computer is offline" | Out-File "C:\File Transfer\BIOS_Copy_error.txt" -Append 
    } 
} 

Get-ChildItem $source | Copy-Item -Destination $bkup -Force 

Get-ChildItem $source | Remove-Item -Force 

Je suis sûr que je peux faire faire sans l'écrire dans le fichier en cas d'erreur, mais je vais le laisser juste au cas où.

En outre, l'inconvénient est que le mot de passe est en clair et toute personne ayant accès au script sera en mesure de le voir.

0
$SHARE1 = "\\SERVER1\SHARE\1", 
$SHARE2 = "\\SERVER2\SHARE\2", 

manquant entre guillemets à la fin

+0

Désolé, c'était une faute de frappe de ma part. – hectormtnezg