2016-12-09 1 views
0

OK pardon mein Skript noobness, ich habe ein PowerShell-Skript, die einen Ordner für bestimmte Dateien Erweiterung suchen und sie auf eine FTP-Site hochladen und erstellt eine Protokolldatei.FTP-Upload und REname

Dies funktioniert gut, aber es gibt eine neue Anforderung, die Dateierweiterung nach dem Upload umzubenennen. Ich verstehe, dass ich WebRequest anstelle von WebClient verwenden muss, aber ich habe damit zu kämpfen. Wie kann ich das erreichen? Hier ist das aktuelle Skript:

$LogFile='C:\test\log.txt' 

$TimeStamp= get-date -Format yyyyMMdd"_"HHmmss 
$ScriptrunTime= get-date 

Add-Content $LogFile ' ' 
Add-Content $LogFile '------------------------------------------------------' 

Add-Content $LogFile ' ' 

$msg= '----------- Script run time: ' + $TimeStamp +'  -----------' 
Add-Content $LogFile $msg 

Add-Content $LogFile ' ' 

$FTP="ftp://username:[email protected]/folder/" 

$webclient = New-Object System.Net.WebClient 

$webclient.Proxy = [System.Net.WebRequest]::DefaultWebProxy 

$Source ='C:\source' 

try{ 

$data = @(dir -file $Source\*.tmp | select fullname, name) 

$msg='Source: ' + $Source 
Add-Content $LogFile $msg 

Add-Content $LogFile ' ' 
$msg='Target: ' + $FTP 
Add-Content $LogFile $msg 

Add-Content $LogFile ' ' 
$msg='There are ' + $data.Count + ' files to upload' 
Add-Content $LogFile $msg 

foreach($item in $data){ 


Add-Content $LogFile ' ' 

$UploadFile=$ftp+$item.Name 
$UploadFileName=$item.FullName 


try 
{ 
    $msg="Uploading $UploadFile" 
    Add-Content $LogFile $msg 

    $webclient.UploadFile($UploadFile, $UploadFileName) 


    Add-Content $LogFile ' ' 
    Add-Content $LogFile "Upload completed" 

    Add-Content $LogFile ' ' 

    Add-Content $LogFile ' ' 
    Add-Content $LogFile "Delete file" 



    } 
    catch 
    { 
    $ErrorDesc=$_.Exception.Message 

    Add-Content $LogFile ' ' 
    $msg='Error occured: '+ $ErrorDesc 
    Add-Content $LogFile $msg 
} 

Add-Content $LogFile ' ' 

} 
} 
catch 
{ 

$ErrorDesc=$_.Exception.Message 
Add-Content $LogFile ' ' 
$msg='Error occured: '+ $ErrorDesc 
Add-Content $LogFile $msg 
} 

$TimeStamp= get-date -Format yyyyMMdd"_"HHmmss 
$ScriptrunTime= get-date 
Add-Content $LogFile ' ' 
$msg='----------- Script end time: ' + $TimeStamp +'  -----------' 
Add-Content $LogFile $msg 
+2

Könnten Sie die Datei vor dem Upload mit Move-Item nicht umbenannt, um es zu einem Bereitstellungsbereich (zugleich) bewegen, laden Sie die neu-Datei umbenannt, dann löschen Sie alle in der Bereitstellungsbereich? – VendableFall

+1

Warum ändern Sie einfach die Erweiterung vor dem Hochladen auf FTP? –

+0

Mögliches Duplikat von [Datei auf FTP mit PowerShell umbenennen] (http://stackoverflow.com/questions/12070808/rename-file-on-ftp-with-powershell) –

Antwort

0

Die WebClient.UploadFile Methode erfordert nicht, dass die address und fileName Parameter in eine Datei mit dem gleichen Namen verweisen. Sie können also die Dateiendung ändern, während Sie sie hochladen. die neue Erweiterung Unter der Annahme ext:

$UploadFile = $ftp + [IO.Path]::ChangeExtension($item.Name, "ext"); 

$webclient.UploadFile($UploadFile, $UploadFileName);