Продолжая изучение командной строки IIS, начатое тут, предлагаю ознакомится с тем как в IIS можно настроить FTP.
Начиная с версии 7, в IIS появилось универсальное средство командной строки AppCmd. И теперь можно создавать, настраивать, и пользоваться FTP службами из командной строки точно тем же способом, как это можно делать теперь (начиная с IIS 7) с веб-сайтами. Давайте рассмотрим пример подробнее.
Для начала нужно установит необходимые компоненты. Предположим что у нас уже есть предустановленный IIS и нам не хватает только служб FTP. Воспользуемся диспетчером пакетов pkgmgr:
Теперь IIS готов к настройке первого FTP. Что бы воспользоваться AppCmd надо использовать полный путь до команды: %windir%\system32\inetsrv\appcmd.exe, или же прописать путь в переменную окружения PATH. Нам же будет достаточно запускать appcmd прямо из ее каталога:
Этот скрипт создаст папку
И так, добавляем каталоги:
Для проверки тоже воспользуемся командной строкой и командой ftp:
Для того что бы написать скрипт для powershell потребуется небольшие косметические изменения.
Так для того что бы установить сервисы FTP надо выполнить:
Что бы создать FTP-сайт:
Аналогично можно добавить виртуальные каталоги:
А вот про работу с конфигурацией внятных решения я не нашел. Все что нашел тут и тут. Последнее меня не вдохновило в свете того что некоторые изменения надо вносить на уровне APPHOST.
Так что если будут предложения и замечания — всегда пожалуйста. С удовольствием дополню.
Начиная с версии 7, в IIS появилось универсальное средство командной строки AppCmd. И теперь можно создавать, настраивать, и пользоваться FTP службами из командной строки точно тем же способом, как это можно делать теперь (начиная с IIS 7) с веб-сайтами. Давайте рассмотрим пример подробнее.
Устанавливаем FTP
Для начала нужно установит необходимые компоненты. Предположим что у нас уже есть предустановленный IIS и нам не хватает только служб FTP. Воспользуемся диспетчером пакетов pkgmgr:
pkgmgr /iu:IIS-FTPServer;IIS-FTPSvc;IIS-FTPExtensibility;
Настраиваем FTP
Теперь IIS готов к настройке первого FTP. Что бы воспользоваться AppCmd надо использовать полный путь до команды: %windir%\system32\inetsrv\appcmd.exe, или же прописать путь в переменную окружения PATH. Нам же будет достаточно запускать appcmd прямо из ее каталога:
cd %windir%\system32\inetsrv set ftproot=%systemdrive%\inetpub\ftproot set ftpsite=MyFtp if not exist "%ftproot%" (mkdir "%ftproot%") appcmd add site /name:%ftpsite% /bindings:ftp://*:21 /physicalpath:"%ftproot%" appcmd set config -section:system.applicationHost/sites /[name='%ftpsite%'].ftpServer.security.authentication.AnonimouseAuthentication.enabled:true appcmd set config -section:system.applicationHost/sites /[name='%ftpsite%'].ftpServer.security.ssl.controlChannelPolicy:"SslAllow" appcmd set config -section:system.applicationHost/sites /[name='%ftpsite%'].ftpServer.security.ssl.dataChannelPolicy:"SslAllow" appcmd set config -section:system.applicationHost/sites /[name='%ftpsite%'].ftpServer.directoryBrowse.showFlags:DisplayVirtualDirectories appcmd set config -section:system.applicationHost/sites /[name='%ftpsite%'].ftpServer.userIsolation.mode:StartInUsersDirectory appcmd set config %ftpsite% /section:system.ftpserver/security/authorization /+[accessType='Allow',permissions='Read',roles='',users='*'] /commit:apphost
Этот скрипт создаст папку
inetpub\ftproot на системном диске, и привяжет ее к корневой папке нашего сайта «MyFtp». Так же мы настроили наш сайт на использование анонимной аутентификации. И перевели SSL в режим allow (по умолчанию он require). Последней строчкой мы раздали права на чтение всем пользователям. Теперь нам осталось добавить виртуальных папок нашему сайту и можно пользоваться, а параметр showFlags:DisplayVirtualDirectories позволит видеть не только корневой каталог, но и виртуальные каталоги тоже.И так, добавляем каталоги:
appcmd add vdir /app.name:"%ftpsite%/" /path:/path1 /physicalPath:D:\path1 appcmd add vdir /app.name:"%ftpsite%/" /path:/path2 /physicalPath:\\MEDIASERVER\path2
Проверяем
Для проверки тоже воспользуемся командной строкой и командой ftp:
c:\Users\User>ftp server Connected to SERVER.domain.corp. 220 Microsoft FTP Service User (SERVER.domain.corp:(none)): anonymous 331 Anonymous access allowed, send identity (e-mail name) as password. Password: 230-User logged in. Win32 error: The operation completed successfully. Error details: File system returned an error. 230 End ftp> dir 200 EPRT command successful. 125 Data connection already open; Transfer starting. 06-01-12 04:33PM <DIR> path1 06-01-12 04:33PM <DIR> path2 226 Transfer complete. ftp: 93 bytes received in 0,00Seconds 93000,00Kbytes/sec. ftp>
Почему не PowerShell
Для того что бы написать скрипт для powershell потребуется небольшие косметические изменения.
Так для того что бы установить сервисы FTP надо выполнить:
Add-WindowsFeature Web-Ftp-Server,Web-Ftp-Service,Web-Ftp-Ext
Что бы создать FTP-сайт:
$ftproot="$env:systemdrive\inetpub\ftproot" $ftpsite="MyFtp" if (-not (test-path $ftproot)){ new-item -path $ftproot -type directory } new-item -path IIS:/sites/$ftpsite -type site -bindings @{protocol='ftp';bindingInformation=':21:'} -physicalpath:$ftproot
Аналогично можно добавить виртуальные каталоги:
new-item -path IIS:/sites/$ftpsite/path1 -type virtualdirectory -physicalpath d:\share
А вот про работу с конфигурацией внятных решения я не нашел. Все что нашел тут и тут. Последнее меня не вдохновило в свете того что некоторые изменения надо вносить на уровне APPHOST.
Так что если будут предложения и замечания — всегда пожалуйста. С удовольствием дополню.