我的主要目标是使FTP传输自动化以每天运行。我有一个PowerShell脚本,我想使用它来登录有问题的FTP站点。我知道该脚本有效,因为我已经与其他站点/登录进行了测试,并且每次都可以完美运行。问题是,当网站加载时,登录屏幕会在弹出窗口中加载(下图),并且我无法右键单击检查元素或F12来在HTML中搜索对象名称,元素ID等。几乎可以想到的所有东西都可以用来猜测登录窗口的名称,但是我认为我的脚本甚至没有与弹出窗口通信。关于如何解决此特定问题的任何建议?我也包括了我最后得到的错误消息。
这是我的剧本:
$username = "myuser";
$password = "mypass";
#Create an instance of IE
$ie = New-Object -ComObject 'internetExplorer.Application'
$ie.Visible= $true # Make it visible
#Navigate to the site
$ie.Navigate("website.com")
While ($ie.Busy -eq $true) {Start-Sleep -Seconds 1;} #wait for browser idle
($ie.document.getElementById('User') | select -first 1).value = $username #enters username
Start-Sleep -Seconds 1
($ie.document.getElementById('Pass') | select -first 1).value = $password #enters password
Start-Sleep -Seconds 1
($ie.document.getElementById('Log on') | select -first 1).click() #clicks login button
Start-Sleep -Seconds 1
考虑使用PSFTP Powershell Module而不是Internet Explorer COM对象。使用以下命令安装它:
Install-Module PSFTP
基本上,使用Set-FTPConnection
打开与FTP服务器的会话,使用New-FTPItem
创建新的FTP目录,并使用Add-FTPItem
上传新文件。 Get-FTPItem
将用于检索远程文件。
这里是TechNet Gallery site的一些示例:
Import-Module PSFTP
Set-FTPConnection -Credentials mgajda -Server ftp://ftp.server.org -Session MyTestSession -UsePassive
$Session = Get-FTPConnection -Session MyTestSession
New-FTPItem -Session $Session -Name TestRootDir
New-FTPItem -Session $Session -Name TestDir1 -Path /TestRootDir
New-FTPItem -Session $Session -Name TestDir2 -Path /TestRootDir
New-FTPItem -Session $Session -Name TestDir11 -Path /TestRootDir/TestDir1
Get-FTPChildItem -Session $Session -Path /TestRootDir -Recurse -Depth 2
"Test File" | Out-File TestFile.txt
Get-ChildItem TestFile.txt | Add-FTPItem -Session $Session -Path /TestRootDir
Get-ChildItem TestFile.txt | Add-FTPItem -Session $Session -Path /TestRootDir -Overwrite
Get-ChildItem TestFile.txt | Add-FTPItem -Session $Session -Path /TestRootDir/TestDir1
Get-ChildItem TestFile.txt | Add-FTPItem -Session $Session -Path /TestRootDir/TestDir2 -BufferSize 5
Add-FTPItem -Session $Session -Path /TestRootDir/TestDir1/TestDir11 -LocalPath TestFile.txt
Get-FTPChildItem -Session $Session -Path /TestRootDir -Recurse -Depth 2
Get-FTPChildItem -Session $Session -Path /TestRootDir -Recurse
Get-FTPItemSize -Session $Session -Path /TestRootDir/TestDir1/TestFile.txt
Rename-FTPItem -Session $Session -Path /TestRootDir/TestDir1/TestFile.txt -NewName TestFile2.txt
Rename-FTPItem -Session $Session -Path /TestRootDir/TestDir1/TestFile2.txt -NewName ../TestFile2.txt
Get-FTPChildItem -Session $Session -Path /TestRootDir | Get-FTPItem -Session $Session -LocalPath C:\test
Get-FTPChildItem -Session $Session -Path /TestRootDir -Recurse | Get-FTPItem -Session $Session -LocalPath C:\test -RecreateFolders
Get-FTPChildItem -Session $Session -Path /TestRootDir -Filter TestF* | Remove-FTPItem -Session $Session
Remove-FTPItem -Session $Session -Path /TestRootDir -Recurse