Ant*_*otz 3 powershell help-system
我一直在尝试使用仅接受 JSON 对象中的原始文本或 base64 编码值的 API。我要发布的内容是来自 XML 文件的数据。因此,我使用 Powershell 的Get-Contentcmdlet(不带-Raw)从 .xml 检索数据,然后对其进行 base64 编码并将其发送到 API。然后 API 对其进行解码,但 XML 格式丢失。
我发现了一篇关于使用-Rawswitch on 的帖子Get-Content,但似乎这个开关的文档很模糊。当我使用该-Raw开关、对其进行编码并将其发送回 API 时,格式很好。
briantist对这个问题的有用评论简洁地总结了答案(用他的话来说;经过轻微编辑,添加了重点):
Get-Content[默认情况下] 逐行读取文件并返回行数组。使用 将-Raw文件的全部内容作为单个字符串读取。
这个名字-Raw有点不幸,因为它错误地建议读取原始字节,而-Raw仍然检测编码并最终将所有内容读取到 .NET[string]类型中。
(相比之下,您需要-Encoding Byte(Windows PowerShell) 或-AsByteStream(PowerShell Core) 才能将文件读取为字节数组。)
鉴于-Raw的实际目的,也许类似的-Whole名称会更好,但那艘船已经航行了(尽管为参数添加别名仍然是一个选项)。
让我们来看看为什么这些信息目前可能很难发现[更新:不再是了]:
[更新:本节现已过时,除了 PowerShell 文档 GitHub 存储库的链接,该存储库欢迎贡献、错误报告和建议]
这个故事的中心冲突是PowerShell潜在的强大帮助系统的坚实基础与其当前劣质内容之间的紧张关系。
通常情况下,第三方会来救援,如gms0ulman 的有用答案所示。
然而,正如 Briantist 还指出的那样,PowerShell 的文档现在是开源的,欢迎贡献;他表示:
“我将引导您注意编辑链接
[ Get-ContentGitHub 上的帮助主题] [...],这样您就可以实际修复它并提交更好的内容(包括示例)。我以前这样做过;他们也这样做过接受它的拉取请求。”
需要注意的是,虽然未来的 PowerShell Core版本将受益于改进,但尚不清楚改进是否会重新回到Windows PowerShell中。
让我们询问PowerShell 的内置帮助系统,该系统可通过标准Get-Helpcmdlet 访问(其内容可能未预安装;出现提示时安装,或Update-Help从提升的会话运行):
Get-Help Get-Content -Parameter Raw
Run Code Online (Sandbox Code Playgroud)
请注意如何方便地寻求有关特定参数的帮助( -Parameter Raw)。
在Windows PowerShell v5.1上,这会产生:
-生的
忽略换行符并在一个字符串中返回文件的全部内容。
默认情况下,文件的内容作为分隔的字符串数组返回
通过换行符。
Raw 是文件系统提供程序添加到 Get-Content cmdlet 的动态参数。
此参数仅适用于文件系统驱动器。
此参数是在 Windows PowerShell 3.0 中引入的。
必需的?错误的
位置?命名的
默认值
接受管道输入吗?错误的
接受通配符吗?错误的
这确实是我们正在寻找的并且非常有帮助(将尴尬的措辞“由换行符分隔”放在一边,在 Windows 上换行符是一个字符序列)。
在Powershell Core v6.0.2上,这会产生:
-生的
必需的?错误的
位置?命名
接受管道输入吗?错误的
参数集名称(全部)
别名 无
动态的?真的
虽然元数据更详细 - 包括参数是动态的提示(见下文) - 但它严重缺少参数的描述。
某些提供程序 cmdlet 参数是动态的,因为它们特定于给定提供程序,因此有一种机制可以在请求帮助时通过将特定于提供程序的示例路径传递给-Path参数来指定目标提供程序。
在当前的情况下,让我们尝试一下(Windows 上的 PowerShell Core):
Get-Help Get-Content -Parameter Raw -Path C:\
Run Code Online (Sandbox Code Playgroud)
可悲的是,结果和以前一样毫无帮助。
请注意,只要您从文件系统-Path位置调用该命令,就不需要显式使用,因为当前位置下的提供程序是隐式目标的。
现在让我们看一下PowerShell 帮助主题的在线版本:
事实证明,给定的提供程序 cmdlet 可以有多个文档页面:
一种适用于所有提供商的通用方法。
提供程序特定的页面,记录提供程序专有的行为和参数,例如-Raw文件系统提供程序的行为和参数。
遗憾的是,通用主题没有提及特定于提供者的主题的存在,使得它们很难被发现。
谷歌搜索 Get-Content会将您带到https://learn.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.
-Raw. 的-Online开关方便地允许在Get-Help浏览器中打开所请求主题的在线版本;那么让我们尝试一下 ( Get-Help Get-Content -Online):
Windows PowerShell v5.1:向您显示与 v4 相关的 404 页面(!)。
PowerShell Core v6.0.1:带您进入与谷歌搜索相同的通用主题。
然而,还有一线希望:前面提到的 404 页面提供了指向文件系统提供商特定主题的链接: Get-Content for FileSystem
正是在那里,我们最终发现了真正相关的、特定于提供商的信息的在线版本,该信息与本地提供的信息相同Get-Help Get-Content -Parameter Raw,但如前所述,仅在Windows PowerShell中提供。
| 归档时间: |
|
| 查看次数: |
3591 次 |
| 最近记录: |