powershell - 如何将文件复制到 Powershell 中的 NTFS 备用数据流中?
问题描述
我正在尝试为我在我的一门网络安全课程的教科书中看到的一个示例创建概念证明。我设置了所需的文件并尝试了它,但我只收到错误。
这是一个例子:
C:\> type C:\windows\system32\notepad.exe > c:\windows\system32\calc.exe:notepad.exe
这就是我所做的:
C:\> type c:\hello.exe > c:\README.txt:hello.exe
wherehello.exe
是一个可以打印的可执行文件hello world
,并且README.txt
是一个包含一些随机文本的文本文件。
我得到的错误是:
out-file: The given path's format is not supported.
当第一个参数和重定向运算符之间有空格时,并且
Get-Content : A positional parameter cannot be found that accepts argument 'C:\README.txt:hello.exe'.
没有空间的时候。
我尝试用 替换type
,cat
在运算符之间添加和删除空格,在尝试导入数据之前创建备用流,以及不同的文件类型。另外,切题的问题,我在::$DATA
处理 NTFS 文件时遇到了麻烦。它只是给cat : Cannot find path 'C:\hello.exe::' because it does not exist.
解决方案
在 PowerShelltype
中,cat
或者gc
都只是 的别名Get-Content
,默认情况下与文本一起使用,因此显然您不能将它们用于二进制数据(在 cmdtype
中也仅适用于文本)。要处理二进制文件,您必须使用-Encoding Byte
或-AsByteStream
告诉 PowerShell 不要将文件作为文本处理
此外,您不能使用重定向来保存输出,因为>
它只是 Out-File 的别名,它不支持流。您必须使用-Stream
选项指定要存储的流Set-Content
Get-Content -Encoding Byte "C:\windows\system32\notepad.exe" | `
Set-Content -Encoding Byte -Stream Notepad .\README.txt
事实上,PowerShell 中的许多 cmdlet,如Get-Item
、Get-Content
、Remove-Item
、Set-Content
、Clear-Content
,Add-Content
都可以-Stream
选择对流进行操作。可惜Out-File
没有这个选项
另请参阅与备用数据流交互
推荐阅读
- vuejs3 - vue3, vue-router4.0 instances.default 在路由匹配中未定义
- vue.js - Vue 3 MD Bootstrap 不加载手风琴
- android - 'adb' 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称
- go - id 是保留字段名称
- java - 错误:未设置 X11 DISPLAY 变量,但该程序执行了需要它的操作
- javascript - fontFamily 尚未通过 Font.loadAsync 与 Firestore 和动画启动屏幕加载
- laravel - 如何在 cPanel/共享主机上部署 Laravel 项目,省略“node_modules”文件夹
- java - Tomcat org.apache.catalina.loader.WebappClassLoaderBase 非法反射访问
- android - 无法在特定项目中创建新活动,但其他项目运行良好
- android - 如何关闭自定义弹出窗口