我已经进入了我的脚本中的最后一个(而且相当关键的)阶段,它循环以从目录中删除文件。我不打算假装我在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
这不是全部,但我相信它包含所有相关信息。
答案 0 :(得分:2)
你的$ dir路径看起来像是在unix系统上,所以这可能会有所不同,但你需要做的就是改变你的最终循环:
For ($DelLoop=1; $DelLoop -le 5; $DelLoop++)
{
$FileList[$DelLoop] | % { rm $FileList[$DelLoop] }
}
这假设$ FileList包含您要删除的文件,而不仅仅是(我猜的是虚拟的)数字。我还建议您下载@Graimer提到的模块,然后将其放入WindowsPowerShell&gt;模块&gt; %ModuleFolder%&gt; %Module.psm1%并从您的个人资料中导入。
然后,您可以使用PS> Remove-FTPItem -Path "/myFolder" -Recurse
删除您的FTP内容。让您的生活更轻松。
调整此帖子的解决方案也可以帮助Upload files with FTP using PowerShell
e.g:
使用$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进行一些研究并在上面的链接中调整接受的答案中的代码以及@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()
}
诚然,虽然不是最优雅的解决方案之一,但我已经对它进行了测试,它可以用来删除FTP服务器上的指定文件。