为什么我在远程 PowerShell 会话中从 FTP 检索到的文件已加密?

Why is my file retrieved from FTP in a remote PowerShell session encrypted?

还有另一个在本地工作正常但在远程会话中会失去头脑的问题。

我有一个 PS 脚本,运行 是标准 Windows 命令行 ftp.exe 来获取文件。直接 运行 时有效,但是当通过 Invoke-Command 远程 运行 时,它突然留下设置了加密位的文件。

如果我在同一个 PS 会话中(在同一个脚本中)对文件 运行 cipher /d 进行访问被拒绝。但是,如果我使用相同的帐户登录到远程机器,我可以解密它。

那么,第一个问题是,这是 ftp.exe 的 "feature" 吗?我找不到任何这样的建议,但似乎没有其他创建文件的方法会导致它被加密,所以我认为这是应用程序的故意行为,比如它检查登录类型并加密它是网络登录。

其次,为什么不能立即解密?相同的帐户,相同的会话。


相关脚本的基本部分:

#the ftp script is just open, user, binary, get, quit
& ftp -n -v -s:"$script"

& cipher /d "$file_path"

我意识到这可能是一个非常模糊的边缘案例,但我会留下一个答案以防万一有人遇到类似的事情。

像往常一样,ProcMon 有所有的答案...

在我的公司 %HOMESHARE% 设置为网络文件服务器(我相信是通过某个 GPO)。

当 ftp.exe 正在检索文件时,它会写入一个临时文件,然后在完成后将其复制到指定位置。即使知道这一点,人们可能会期望 %TEMP% 用于这样的目的,但没有。

我不太确定 ftp.exe 是如何确定临时文件位置的,但是当我在 PSsession 中时,它会选择我的文档文件夹(我想是 %USERPROFILE%),但是当我在 RDP 会话中时,它使用 %HOMEPATH%。所以我的文档文件夹当然设置为加密新文件,因此临时文件被加密并被复制,但文件共享不是这样它复制干净。


此外,虽然我没有发现任何官方说明这一点,但 cipher.exe 似乎对网络登录完全无效。如果在进入 PSSession 后我使用 Set-Content 创建一个新文件并尝试使用 cipher /e <file> 进行加密,它会拒绝相同的访问。 RDP 上的相同帐户加密没问题;