1

リモート FTP サーバー上のファイルを から に移動する必要がありTestますTested。ファイルは常に です.csvが、タイムスタンプが付けられると名前が変わります。PSFTP モジュールを使用して、次のように記述しました。

$FtpServer = "ftp://myftpserver.com/"
$User = "myusername"
$PWD = "mypassword"
$Password =  ConvertTo-SecureString $Pwd -AsPlainText -Force

$FtpCredentials = New-Object System.Management.Automation.PSCredential ($User, $Password)

Set-FTPConnection -Credentials $FtpCredentials -Server $FtpServer -Session MyFtpSession -UsePassive 

$FtpSession = Get-FTPConnection -Session MyFtpSession

$ServerPath = "ftp://myftpserver.com/Test"
$fileList   = Get-FTPChildItem -Session $FtpSession -Path $ServerPath -Filter *.csv
$archivefolder = "ftp://myftpserver.com/Tested"

foreach ($element in $fileList ) 
{
  $filename = $ServerPath  + $element.name
  $newfilename = $archivefolder  + $element.name

  Rename-FTPItem -Path $filename -NewName $newfilename -Session $FtpSession
}

ファイルはフォルダーに存在しますが、アーカイブ ( ) フォルダーTestにはまだ存在しません。Tested変数を使用して新しいファイルの場所を生成すると、うまくいくと思いました。

これを試すと、

Rename-FTPItem : "0" 個の引数を指定して "GetResponse" を呼び出し中に例外が発生しました: "リモート サーバーがエラーを返しました: (550) ファイルを利用できません (たとえば、ファイルが見つからない、アクセスできません)。"

ワイルドカードを使用してファイルを移動する方法、または私がやろうとしていることを達成するためのより良い方法はありますか?

前もって感謝します

4

1 に答える 1

1
  1. -NewNameURL ではなく、パスのみである必要があります。

    $archivefolder = "/Tested"
    

    ( では-Path、URL は受け入れられますが、冗長です。既に を使用してセッションを指定しています$FtpSession) 。

  2. フォルダー パスとファイル名の間にスラッシュがありません。

    $filename = $ServerPath  + "/" + $element.name
    
    $newfilename = $archivefolder  + "/" + $element.name
    

したがって、次のRename-FTPItemように呼び出す必要があります。

Rename-FTPItem -Path "ftp://myftpserver.com/Test/file.txt" -NewName "/Tested/file.txt" -Session $FtpSession

またはこのように:

Rename-FTPItem -Path "/Test/file.txt" -NewName "/Tested/file.txt" -Session $FtpSession
于 2021-03-11T07:29:31.900 に答える