1

おはようございます!

ディレクトリからファイルを削除するためにループしている、スクリプトの最後の (そしてかなり重要な) 段階に到達しました。私は Powershell に精通しているふりをするつもりはありません (それどころではありません)。そのため、ネットで見つけたコードのブロックを切り刻み、即興で機能することを期待しています。

私がここでやろうとしていることを誰かが解読して、私が間違っていることを見てくれることを願っています!

#   Clear FTP Directory
$DelLoop=1
$server = "www.newsbase.com"
$dir = "/usr/local/tomcat/webapps/newsbasearchive/monitors/asiaelec/"
"open $server
user Canttell Youthis
binary  
cd $dir    
" +(
For ($DelLoop=1; $DelLoop -le 5; 5)
    {
        $FileList[$DelLoop] | %{ "delete ""$_""`n" }
        $DelLoop++
    })| ftp -i -in

「Open Connection」部分が機能することは知っていますが、それは単なるループです。間違った演算子について不平を言い続けるだけで、それらを修正してもエラーは発生しませんが、何もしません。

私は昨日これを調査するために 4 時間の大部分を費やしました。どなたかの助けを借りてください。

前もって感謝します!

補遺:

要求されたコードの詳細は次のとおりです。

#   Clear existing .htm file to avoid duplication
Get-ChildItem -path ".\" -recurse -include index.jsp | ForEach-Object {
Clear-Content "index.jsp"
}

#   Set first part of .JSP Body
$HTMLPart1="</br><tr><td colspan=9 align=center><p style=""font-family:Arial"">Here are the links to the last 3 AsiaElec PDFs:</br><ul>"

#   Recurse through directory, looking for 3 most recent .PDF files 3 times
$Directory="C:\PDFs"
$HTMLLinePrefix="<li><a style=""font-family:Arial""href="""
$HTMLLineSuffix="</a></li>"
$HTMLLine=@(1,2,3,4)
$Loop=1
$PDF=@(1,2,3,4)
Get-ChildItem -path $Directory -recurse -include *.pdf | sort-object -Property LastWriteTime -Descending | select-object -First 3 | ForEach-Object {
        $PDF[$Loop]=$_.name
        $HTMLLine[$Loop]=$HTMLLinePrefix + $_.name + """>" + $_.name + $HTMLLineSuffix
        $Loop++
    }

#   Final .JSP File Assembly
Get-Content "header.html" >> "index.jsp"
$HTMLPart1 >> "index.jsp"
$LineParse=""
$Loop2=1
For ($Loop2=1; $Loop2 -le 3; 3)
    {
        $HTMLLine[$Loop2] >> "index.jsp"
        $Loop2++
    }
Get-Content "tail.html" >> "index.jsp"

#   Prepare File List
$FileList=@(1,2,3,4,5)
$FileList[2]=$PDF[2]
$FileList[3]=$PDF[3]
$FileList[4]="index.jsp"

#   Clear FTP Directory
$DelLoop=1
$server = "www.newsbase.com"
$dir = "/usr/local/tomcat/webapps/newsbasearchive/monitors/asiaelec/"
"open $server
user derek bland1ne
binary  
cd $dir    
" +(
For ($DelLoop=1; $DelLoop -le 5; 5)
    {
        $FileList[$DelLoop] | %{ "delete ""$_""`n" }
        $DelLoop++
    })| ftp -i -in

これがすべてではありませんが、関連するすべての情報が含まれていると思います。

4

1 に答える 1

2

あなたの $dir パスは UNIX システム上にあるように見えるので、これは少し異なるかもしれませんが、最終ループを少し変更するだけです:

For ($DelLoop=1; $DelLoop -le 5; $DelLoop++)
{
    $FileList[$DelLoop] | % { rm $FileList[$DelLoop] }
} 

これは、 $FileList に削除したいファイルが含まれていることを前提としています (私が推測しているのはダミーです) 数字だけではありません。また、@Graimer が言及しているモジュールをダウンロードし、それを WindowsPowerShell > Modules > %ModuleFolder% > %Module.psm1% に配置して、プロファイルからインポートすることもお勧めします。

PS> Remove-FTPItem -Path "/myFolder" -Recurseその後、FTP のものを削除するために使用できます。あなたの人生をより簡単にします。

この投稿のソリューションを微調整すると、 PowerShell を使用して FTP でファイルをアップロードするのにも役立つ場合があります

例えば:

を使用$ftp.Method = [System.Net.WebRequestMethods+Ftp]::DeleteFileしてファイルを削除し、

物事が順調に進んだかどうかを$response = $ftp.GetResponse()調べるために。

編集

ここhttp://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/17a3abbc-6144-433b-aadd-1f776c042bd5から少し調査を行い、Accepted からコードを適応させた後、この関数を作成しました上記のリンクと@Graimerが話したモジュールで答えてください。

function deleteFTPSide 
{
    Param(
        [String] $ftpUserName = "muUserName",
        [String] $ftpDomain = "ftp.place.com", # Normal domains begin with "ftp" here
        [String] $ftpPassword = "myPassword",
        [String] $ftpPort = 21, # Leave as the default FTP port
        [String] $fileToDelete = "folder.domain.com/subfolder/file.txt"
    )

    # Create the direct path to the file you want to delete
    [String] $ftpPath = "ftp://"+"$ftpUserName"+":"+"$ftpPassword@$ftpDomain"+":"+"$ftpPort/$fileToDelete"

    # create the FtpWebRequest and configure it
    $ftp = [System.Net.FtpWebRequest]::Create($ftpPath)

    $ftp.Method = [System.Net.WebRequestMethods+Ftp]::DeleteFile

    $ftp.Credentials = new-object System.Net.NetworkCredential($ftpUserName,$ftpPassword)

    $ftp.UseBinary = $true
    $ftp.UsePassive = $true

    $response = [System.Net.FtpWebResponse]$ftp.GetResponse()
    $response.Close()
}

確かに、書かれた最も洗練されたソリューションの 1 つではありませんが、私はそれをテストし、FTP サーバーから指定されたファイルを削除する際に機能します。

于 2013-01-30T10:16:22.360 に答える