2017-10-19 4 views
0

Je travaille sur un script pour copier un dossier d'un chemin UNC vers un serveur local. Je suis en cours d'exécution à distance mon script par une session interactive et en utilisant -ScriptBlock Invoke-Command comme ceci:PowerShell ne parvient pas à copier à partir du chemin UNC

Invoke-Command -ComputerName MyServer -ScriptBlock $Script 

C'est le script pour faire la copie:

$script { 
try { 

New-PSDrive -Name MyDrive -PSProvider FileSystem -Root \\uncpathserver\e$\SourceCode\ -Credential Contoso\me 

Copy-Item -Path \\uncpathserver\e$\SourceCode\* -Destination E:\Inetpub\Target -Recurse -Force 
} 
catch { 
Write-Host "Failed to copy!" 
} 
} 

Il échoue et jeter mon attraper le bloc à chaque fois. Je n'arrive pas à comprendre ce qui me manque pour que ça marche - cela semble si simple et j'espère que je ne manque pas quelque chose d'évident.

EDIT:

j'ai pu le faire fonctionner maintenant simplement d'exécuter le script de mon PC local au lieu de partir d'un serveur. J'appelle maintenant la copie de fichier du bloc $ script maintenant. C'est ce que le nouveau code ressemble:

$MyServers= @("server-01", "server-02") 

foreach ($server in $MyServers) 

{ 
    $TargetSession = New-PSSession -ComputerName $server -Credential 
    contoso\me 
    Copy-Item -ToSession $TargetSession -Path C:\Source\TheCode\ - 
    Destination "E:\InetPub\wherethecodegoes" -Recurse -Force 

    } 

Tout le reste que je fais dans mon bloc de script $ (qui a été omis ici pour cause de dépannage) travaille A-OK. Je dois saisir mes informations d'identification pour chaque serveur, mais en raison de la petite taille des serveurs avec lesquels je travaille, ce n'est pas un problème.

+1

Supprimez le bloc catch pour pouvoir voir quelle est l'erreur. – zdan

+0

Impossible de trouver le chemin \\ uncpathserver \ e $ \ SourceCode \ car il n'existe pas existe est l'erreur que j'obtiens. – jnunham

+0

Avez-vous essayé un 'net use' à la place? –

Répondre

0

Ressemble à un 'kerberos double hop' problème.

réponse courte

éviter le problème. À partir de votre système, configurez deux PSdrives. Ensuite, copiez \\uncpathserver\e$\SourceCode\ à \\RemoteIISserver\E$\Inetpub\Target\

longue réponse

de votre système (système A), vous exécutez un script à distance (sur le système B) qui copie d'un dossier distant (du système C).

Cela devrait fonctionner, mais ce n'est pas le cas. C'est parce que lorsque vous (spécifiquement, votre compte) de System A, se connecte à distance à System B, puis demande System C pour quelque chose, «Système C» ne vous fait pas confiance. Un rapide google du problème montrera une myriade de façons autour de ce problème, cependant;

  • Toutes les méthodes sont en sécurité (par exemple: CredSSP)
  • Toutes les méthodes fonctionnent sur votre version de Windows (ce qui est ...?)
  • Toutes les méthodes travailleront avec PowerShell

Une méthode secure qui fonctionne avec PowerShell utilise la délégation. Cela peut être un peu décourageant pour l'installation, et je vous suggère de lire attentivement à ce sujet.

## Module 'ActiveDirectory' from RSAT-AD-PowerShell Windows feature required. 
$ServerA = $Dnv:COMPUTERNAME    
$ServerB = Get-ADComputer -Identity ServerB    
$ServerC = Get-ADComputer -Identity ServerC    

Déléguer le 'Serveur B' pour accéder au 'Serveur C';

# Set the resource-based Kerberos constrained delegation 
Set-ADComputer -Identity $ServerC -PrincipalsAllowedToDelegateToAccount $ServerB 

# Confirm AllowedToActOnBehalfOfOtherIdentity.Access is correct (indirectly). 
Get-ADComputer -Identity $ServerC -Properties PrincipalsAllowedToDelegateToAccount 

Attendez environ 15 minutes pour 'serveur B' pour la synchronisation-up (ou tout simplement le redémarrer). Vous pouvez forcer ceci avec ce qui suit (Note: $Cred devrait contenir vos informations d'identification);

Invoke-Command -ComputerName $ServerB.Name -Credential $cred -ScriptBlock {    
    klist purge -li 0x3e7    
} 

Exécutez un test-hop; L'inconvénient est que vous devez configurer chaque cible distante distante (chaque 'Server C') de cette façon. Mais l'avantage est que c'est sécurisé.