briantist对这个问题的有用评论简洁地总结了答案(用他的话来说;轻微编辑,强调添加):
Get-Content
[默认情况下] 逐行读取文件并返回行数组。Using-Raw
将文件的全部内容作为单个字符串读取。
这个名字-Raw
有点不幸,因为它错误地建议读取原始字节,而-Raw
仍然检测编码并最终将所有内容读入 .NET[string]
类型。
(相比之下,您需要-Encoding Byte
(Windows PowerShell) 或-AsByteStream
(PowerShell Core) 将文件作为字节数组读取。)
考虑到-Raw
的实际目的,也许类似这样-Whole
的名称会是一个更好的名称,但那艘船已经航行(尽管为参数添加别名仍然是一种选择)。
让我们看看为什么这些信息目前可能难以发现[更新:不再是]:
[更新:此部分现在已过时,除了 PowerShell 文档 GitHub 存储库的链接,欢迎贡献、错误报告、建议]
PowerShell 文档困境的故事
这个故事的中心冲突是PowerShell潜在的强大帮助系统的坚实基础与其伪劣的当前内容之间的紧张关系。
通常情况下,第三方会来救援,如gms0ulman 的有用答案所示。
然而,正如 briantist 也指出的那样,PowerShell 的文档现在是开源的,欢迎贡献;他说:
“我会将您的注意力引向编辑链接
[ Get-Content
GitHub 上的帮助主题] [...],这样您就可以实际修复它并提交更好的内容(包括示例)。我以前做过;他们确实做到了接受它的拉取请求。”
需要注意的是,虽然未来的 PowerShell Core版本将受益于改进,但尚不清楚改进是否会重新回到Windows PowerShell中。
让我们询问PowerShell 的内置帮助系统,可通过标准Get-Help
cmdlet 访问(其内容可能未预安装;在提示时安装,或Update-Help
从提升的会话运行):
Get-Help Get-Content -Parameter Raw
请注意如何方便地就特定参数( )寻求帮助。-Parameter Raw
在Windows PowerShell v5.1上,这会产生:
-生的
忽略换行符并在一个字符串中返回文件的全部内容。
默认情况下,文件的内容作为分隔的字符串数组返回
由换行符。
Raw 是文件系统提供程序添加到 Get-Content cmdlet 的动态参数。
此参数仅适用于文件系统驱动器。
此参数是在 Windows PowerShell 3.0 中引入的。
必需的?错误的
位置?命名为
默认值
接受管道输入?错误的
接受通配符?错误的
这确实是我们正在寻找的并且非常有用(将“由换行符分隔”的尴尬措辞放在一边,在 Windows 上换行符是一个字符序列)。
在Powershell Core v6.0.2上,这会产生:
-生的
必需的?错误的
位置?命名
接受管道输入?错误的
参数集名称(全部)
别名 无
动态的?真的
虽然元数据更详细——包括参数是动态的提示(见下文)——但关键是缺少对参数的描述。
一些 provider-cmdlet 参数是动态的,因为它们特定于给定的提供者,因此有一种机制可以在寻求帮助时指定目标提供者,方法是将特定于提供者的示例路径传递给-Path
参数。
因此,在手头的情况下,让我们尝试一下(Windows 上的 PowerShell Core):
Get-Help Get-Content -Parameter Raw -Path C:\
可悲的是,结果是和以前一样无益的反应。
请注意,只要您从文件系统位置调用命令,就不需要显式使用,-Path
因为当前位置的提供程序是隐式目标的。
现在让我们看一下PowerShell 帮助主题的在线版本:
事实证明,一个给定的提供者 cmdlet 可以有多个文档页面:
可悲的是,通用主题没有提及提供者特定主题的存在,这使得它们很难被发现。
谷歌搜索 Get-Content
将您带到https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-content通用主题,其中包含以下误导性陈述:This parameter is not supported by any providers that are installed with Windows PowerShell.
- 这不仅没有帮助,而且还具有误导性,因为 PowerShell 文件系统提供程序显然是随 PowerShell 一起安装的,而且它确实支持
-Raw
.
[驱动器] 提供程序是 PowerShell 对文件系统驱动器隐喻的概括,以支持针对具有统一 cmdlet 集的其他 [通常是分层的] 存储系统。例如,Windows PowerShell 还附带注册表驱动器提供程序,它允许像管理驱动器一样管理注册表。
方便的-Online
开关允许在Get-Help
浏览器中打开所请求主题的在线版本;所以让我们试试(Get-Help Get-Content -Online
):
然而,还有一线希望:前面提到的 404 页面提供了指向文件系统提供者特定主题的链接:
Get-Content for FileSystem
在那里,我们最终发现了真正相关的、特定于提供商的信息的在线版本,这些信息与Get-Help Get-Content -Parameter Raw
本地提供的信息相同,但如前所述,仅在Windows PowerShell中提供。