Get Content中的-raw开关参数在Powershell中真正起什么作用?查找有用的文档

Get Content中的-raw开关参数在Powershell中真正起什么作用?查找有用的文档,powershell,help-system,Powershell,Help System,我一直在尝试使用只接受JSON对象中的原始文本或base64编码值的API。我发布的内容是来自XML文件的数据。因此,我使用Powershell的Get Contentcmdlet(不含-Raw)从.xml中检索数据,然后对其进行base64编码并将其发送到API。API随后对其进行解码,但XML格式丢失 我发现了一篇关于使用-Raw开关打开Get Content的帖子,但是关于这个开关的文档似乎很模糊。当我使用-Raw开关对其进行编码并将其发送回API时,格式很好 根据和,内置和应该是您的第一

我一直在尝试使用只接受JSON对象中的原始文本或base64编码值的API。我发布的内容是来自XML文件的数据。因此,我使用Powershell的
Get Content
cmdlet(不含
-Raw
)从.xml中检索数据,然后对其进行base64编码并将其发送到API。API随后对其进行解码,但XML格式丢失

我发现了一篇关于使用
-Raw
开关打开
Get Content
的帖子,但是关于这个开关的文档似乎很模糊。当我使用
-Raw
开关对其进行编码并将其发送回API时,格式很好

根据和,内置和应该是您的第一个呼叫端口。但你已经做了RTFM

如果失败,这是Powershell文档和其他示例的重要参考

。它这样说是关于
-Raw

将多行作为单个字符串返回(PowerShell 3.0)
在PowerShell 2.0中,使用静态方法:[System.IO.File]::ReadAllText(字符串路径)

他对这个问题的有益评论简洁地总结了答案(用他的话来说,稍加编辑,强调):

Get Content
[默认情况下]逐行读取文件并返回一个行数组。使用
-Raw
将文件的全部内容作为单个字符串读取

名称
-Raw
有点不幸,因为它错误地建议读取原始字节,而
-Raw
仍然检测编码并最终将所有内容读入.NET
[string]
类型。
(相比之下,您需要
-Encoding Byte
(Windows PowerShell)或
-AsByteStream
(PowerShell核心)以字节数组的形式读取文件。)

考虑到
-Raw
的实际用途,也许像
-Whole
这样的名字会更好,但这艘船已经开航了(尽管为参数添加别名仍然是一种选择)

让我们来看看为什么这些信息目前可能很难被发现[更新:它不再是了]:


[更新:此部分现已过时,除了指向PowerShell文档GitHub存储库的链接,该存储库欢迎贡献、错误报告和建议]

PowerShell文档灾难的故事 <> P>这个故事的中心冲突是电源外壳潜在的巨大帮助系统的坚实基础和它的劣质电流内容之间的紧张关系。
  • 通常情况下,第三方前来救援,如答案所示

  • 然而,正如布里安提斯特也指出的那样,并欢迎贡献;他说:
    “我会把你的注意力转移到 [对于GitHub上的
    Get Content
    help主题][…],这样您就可以实际修复它并提交更好的内容 (包括示例)。我以前做过;他们确实接受拉动 请求它。”
    需要注意的是,尽管未来的PowerShell核心版本将从改进中受益,但尚不清楚改进是否会回到Windows PowerShell中

让我们询问一下PowerShell的内置帮助系统,该系统可通过标准的
获取帮助
cmdlet访问(其内容可能未预安装;提示时安装,或从提升的会话运行
更新帮助
):

请注意,您可以如何方便地请求有关特定参数的帮助(
-parameter Raw

在Windows PowerShell v5.1上,这将产生:

-Raw Ignores newline characters and returns the entire contents of a file in one string. By default, the contents of a file is returned as a array of strings that is delimited by the newline character. Raw is a dynamic parameter that the FileSystem provider adds to the Get-Content cmdlet. This parameter works only in file system drives. This parameter is introduced in Windows PowerShell 3.0. Required? false Position? named Default value Accept pipeline input? false Accept wildcard characters? false -Raw Required? false Position? Named Accept pipeline input? false Parameter set name (All) Aliases None Dynamic? true 可悲的是,结果是和以前一样的无益反应

请注意,只要从文件系统位置调用命令,就不必显式使用
-Path
,因为当前位置下的提供程序是隐式指向的


现在让我们看看PosithSk的帮助主题<<强> >:< /P>的<强>在线版本。 事实证明,给定的provider cmdlet可以有多个文档页:

  • 一种适用于所有提供者的通用方法

  • 特定于提供程序的页面,记录提供程序的独占行为和参数,例如文件系统提供程序的
    -Raw

遗憾的是,通用主题没有提及特定于提供商的主题的存在,这使得它们很难被发现

  • 通过谷歌搜索
    获取内容
    进入通用主题,该主题包含以下误导性陈述:
    安装Windows PowerShell的任何提供商都不支持此参数。

    • 这不仅没有帮助,而且会造成误导,因为PowerShell文件系统提供程序显然是与PowerShell一起安装的,并且它确实支持
      -Raw

      [Drive]提供程序是PowerShell对文件系统驱动器比喻的概括,支持使用一组统一的cmdlet针对其他[通常是分层的]存储系统。例如,Windows PowerShell还附带注册表驱动器提供程序,该提供程序允许将注册表当作驱动器进行管理
  • 用于
    获取帮助的
    -Online
    开关方便地允许在浏览器中打开所请求主题的在线版本;所以,让我们试试(
    获取帮助获取内容-在线
    ):

    • Windows PowerShell v5.1:带您去

    • PowerShell Core v6.0.1:与谷歌的主题相同

然而,还有一线希望:前面提到的404页面提供了指向文件系统提供程序特定主题的链接:

它是 -Raw Required? false Position? Named Accept pipeline input? false Parameter set name (All) Aliases None Dynamic? true
Get-Help Get-Content -Parameter Raw -Path C:\