使用PowerShell测试FTP连接

时间:2018-01-09 10:26:47

标签: powershell ftp

我有一个PowerShell脚本,可以对某些服务器执行检查,例如PING为Test-Connection

我希望通过执行" FTP Open"来检查其中一台具有FTP服务器的服务器。命令。我不需要登录或上传/下载任何文件,只需要知道FTP服务器是否响应。

我在互联网上的大多数研究都指向设置凭据和导入专有模块来连接,也许上传或下载文件,但我只需要一个简单的方法来打开连接,如果有的话,告诉我是真是假。响应服务器。

我运行此脚本的服务器应该安装最少的软件,但如果它需要任何东西,最好是微软和他们的网站。

2 个答案:

答案 0 :(得分:4)

Test-NetConnection是本机Powershell,可用于测试FTP端口21上的简单连接:

Test-NetConnection -ComputerName ftp.contoso.com -Port 21

答案 1 :(得分:1)

没有像FTP命令那样“打开”。

但也许你的意思是只测试服务器侦听FTP端口21:

try
{
    $client = New-Object System.Net.Sockets.TcpClient("ftp.example.com", 21)
    $client.Close()
    Write-Host "Connectivity OK."
}
catch
{
    Write-Host "Connection failed: $($_.Exception.Message)"
}

如果要测试FTP服务器是的行为,而不实际登录,请使用错误凭据的FtpWebRequest并检查是否收到相应的错误消息。

try
{
    $ftprequest = [System.Net.FtpWebRequest]::Create("ftp://ftp.example.com")
    $ftprequest.Credentials = New-Object System.Net.NetworkCredential("wrong", "wrong") 
    $ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::PrintWorkingDirectory
    $ftprequest.GetResponse()

    Write-Host "Unexpected success, but OK."
}
catch
{
    if (($_.Exception.InnerException -ne $Null) -and
        ($_.Exception.InnerException.Response -ne $Null) -and
        ($_.Exception.InnerException.Response.StatusCode -eq
             [System.Net.FtpStatusCode]::NotLoggedIn))
    {
        Write-Host "Connectivity OK."
    }
    else
    {
        Write-Host "Unexpected error: $($_.Exception.Message)"
    }
}