如何使用PowerShell在FTP服务器设置已上传文件的权限?
在PowerShell FTP上传后设置文件权限(无需第三方库)
可以直接在现有脚本基础上扩展,无需依赖第三方库,利用.NET的FtpWebRequest发送FTP原生的SITE CHMOD命令来实现权限设置,大部分类Unix系FTP服务器(如vsftpd、ProFTPD)都支持该命令。
整合后的完整脚本
# 上传文件部分(原脚本保留) $ftpUpload = [System.Net.FtpWebRequest]::Create("ftp://foo/test.pdf") $ftpUpload = [System.Net.FtpWebRequest]$ftpUpload $ftpUpload.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile $ftpUpload.Credentials = New-Object System.Net.NetworkCredential("anonymous","anonymous@foo") $ftpUpload.UseBinary = $true $ftpUpload.UsePassive = $true $content = [System.IO.File]::ReadAllBytes("C:\Temp\test.pdf") $ftpUpload.ContentLength = $content.Length $rs = $ftpUpload.GetRequestStream() $rs.Write($content, 0, $content.Length) $rs.Close() $rs.Dispose() # 新增:设置文件权限(chmod 666) $ftpChmod = [System.Net.FtpWebRequest]::Create("ftp://foo/test.pdf") $ftpChmod = [System.Net.FtpWebRequest]$ftpChmod $ftpChmod.Method = [System.Net.WebRequestMethods+Ftp]::ExecuteCommand $ftpChmod.Credentials = New-Object System.Net.NetworkCredential("anonymous","anonymous@foo") # 指定SITE CHMOD命令,格式为"SITE CHMOD 权限值 文件名" $ftpChmod.Command = "SITE CHMOD 666 test.pdf" # 发送命令并验证执行结果 try { $response = $ftpChmod.GetResponse() Write-Host "权限设置成功,服务器响应:$($response.StatusDescription)" $response.Close() } catch { Write-Host "权限设置失败:$($_.Exception.Message)" }
关键说明
- 必须在文件上传完成后执行权限设置命令,确保文件已存在于FTP服务器
- 部分FTP服务器可能无需
SITE前缀,直接支持CHMOD 666 test.pdf,如果上述脚本报错,可尝试修改Command值 - 权限值需根据实际需求调整(如
644、755等) - 若使用Windows系FTP服务器,通常不支持
CHMOD命令,需改用服务器端的权限配置方式
内容的提问来源于stack exchange,提问作者Jan Solo
相关产品推荐
相关产品推荐

