用于从 [string] 解析输入参数-值对的本机机制

2023-12-04

是否有一个本机内置构造可以使用与 cmdlet 参数相同的规则自动将控制台输入解析为变量?

例如,许多 cmdlet 接受以下形式的参数值对:-parameter1 unspaced-value1 -parameter2:"spaced value2".

我想用 Maybe 读取一个字符串Read-Host,然后将字符串解析为参数值对并将它们存储到$variables, 就像是int main(argv, argc),但可能在关联数组或类似的数组中。


不确定我是否完全理解你想要什么,但你肯定是在描述一个哈希表,它可以简单地定义为

@{Name="Value";AnotherName="AnotherValue"}

或者更具可读性

@{
    Name="Value"
    AnotherName="AnotherValue"
}

两者都会输出以下内容,可以将其分配给可用于的变量飞溅(稍后会详细介绍)

Name        Value       
----        -----       
Name        Value       
AnotherName AnotherValue

好的,这很好,但是您正在寻找一种使用此临时功能的方法Read-Host或许?这可能是在哪里ConvertFrom-StringData拯救了这一天。最简单的形式:

PS C:\Users\Cameron> $data = "Data=Awesome"

PS C:\Users\Cameron> $data | ConvertFrom-StringData

Name                           Value                                                                                                                                        
----                           -----                                                                                                                                        
Data                           Awesome          

好吧...那太好了..但是那又怎么样Read-Host。我们现在就试试吧!

PS C:\Users\Cameron> Read-Host | ConvertFrom-StringData
Something=Blah

Name                           Value                                                                                                                                        
----                           -----                                                                                                                                        
Something                      Blah     

如果您想要执行多个键/值对,这可能会变得复杂,因为Read-Host似乎不喜欢在提示中插入新行。为了作弊我用-Split and -Join。 Split 分解配对并 join 最终创建一个换行符分隔的字符串,其中ConvertFrom-StringData玩得更好。边注有一篇文章包含用于创建的片段来自 Read-Host 的多行输入但这更简单。

PS C:\Users\Cameron> ((Read-Host) -Split ";") -Join "`r`n" | ConvertFrom-StringData
Key1=Value1;Key2=Value2;Key3=Value3  <---- That is what I typed in as a response to Read-Host 

Name                           Value                                                                                                                                        
----                           -----                                                                                                                                        
Key1                           Value1                                                                                                                                       
Key2                           Value2                                                                                                                                       
Key3                           Value3 

如果您仍在阅读,让我们使用 splatting 并给出使用此逻辑的实际理由。

PS C:\Users\Cameron>  $results = ((Read-Host) -Split ";") -Join "`r`n" | ConvertFrom-StringData
Get-ChildItem @results

Filter=*.txt;Path=C:\\temp    <---- That is what I typed in as a response to `Read-Host`                                                                                                                                    

LastWriteTime : 10/22/2014 11:43:38 PM
Length        : 653018
Name          : out1.txt

....output truncated....

Note:您应该注意到我在第二个反斜杠中输入的路径Path=C:\\temp。原因来自 TechNet 文章ConvertFrom-StringData

ConvertFrom-StringData支持转义字符序列 传统机器翻译工具允许。也就是说,cmdlet 可以解释反斜杠(\) 作为字符串数据中的转义字符 通过使用Regex.Unescape方法,而不是 Windows PowerShell 反引号字符 (`)通常表示一行的结束 一个脚本。在此处字符串内,反引号字符不 工作。您还可以通过以下方式在结果中保留文字反斜杠用前面的反斜杠转义它, 像这样:\\。未转义 反斜杠字符,例如文件中常用的反斜杠字符 路径,可能会在结果中呈现为非法转义序列。

小更新

虽然((Read-Host) -Split ";") -Join "`r`n" | ConvertFrom-StringData我确信以下内容要简单得多。

(Read-Host).Replace(";","`r`n") | ConvertFrom-StringData
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于从 [string] 解析输入参数-值对的本机机制 的相关文章

随机推荐

  • 不使用 Composer 安装 PHPMailer

    请原谅我的无知 我正在尝试在 Linux 上的 PHP 5 6 下安装 PHPMailer 6 0 1 我的 PHP 安装是远程的 我通过 FTP 管理所有网站的 PHP 我通常将软件包作为 zip 下载到 Win 10 解压 然后将结果通
  • 将无头浏览器与 Heroku Rails Unicorn 堆栈结合使用

    我看到过一些帖子 您可以更改 Heroku 上的构建 以将 PhantomJS 与 Cedar 堆栈一起使用 但是是否可以在 unicorn 堆栈上运行无头浏览器 是的 有人已经编写了一个包含 PhantomJS 的构建包 互联网和开源非常
  • 使用 Linq 遍历层次结构表

    我有一个包含两列的表 GroupId 和 ParentId 均为 GUIDS 该表形成了一个层次结构 因此我可以在 GroupId 字段中查找值 当我找到它时 我可以查看它的 ParentId 这个ParentId也会出现在不同记录的Gro
  • Jquery 中的去抖动功能?

    一直在寻找 Jquery 中的去抖函数或去抖方法 动画的构建可能会变得非常烦人 代码如下 function fade media hide media fadeIn 2000 var debounce false function colo
  • 预先已知字符串的完美哈希函数

    我有 4000 个字符串 我想用这些字符串创建一个完美的哈希表 字符串是预先知道的 所以我的第一个想法是使用一系列if声明 if name aaa return 1 else if name bbb return 2 4000th if s
  • 使用 C# 以编程方式更改 ipsec 规则的方法?

    我知道如何执行 IPsec 更改的唯一方法是调用 netsh 来进行更改 有没有直接使用 System Management 和 WMI 对象的方法 如果是这样 那是什么 我很难通过 MSDN 找到相关的 WMI 信息 或者有人使用过其他有
  • 是否可以从另一个文件调用测试函数来开始测试

    是否可以从非测试 go 文件中调用测试函数来开始执行测试 例如 我有一个测试功能 package API import testing func TestAPI t testing T 我需要从非测试 go 文件中调用它 package m
  • 在 Three.js 中渲染具有输入顶点的多边形

    我有多边形的顶点 x y z 坐标 作为输入 如何在 Three js 中渲染具有这些顶点的多边形 有this但似乎涉及到贝塞尔曲线 我需要简单的直边多边形 您可以使用以下代码从顶点创建多边形 var geom new THREE Geom
  • 测试 Postgres 表分区的 HASH 函数

    我正在使用 Postgres 11 并且想在主键是 UUID 的表上使用哈希分区 我知道我需要预先选择多个分区 并且主键上的哈希函数的模数将用于将行分配给每个分区 像这样的事情 CREATE TABLE new table id uuid
  • Webpack FOSJsRoutingBundle 与 Symfony Flex 和 Angular 集成

    我不明白FOSJs路由包跟 共事Symfony Flex Webpack and AngularJS 我已经在 Symfony 3 和 AngularJS 中使用这个包很长时间了 从来没有出现过问题 但随着 Symfony Flex 中引入
  • System.Runtime.InteropServices.COMException:检索 CLSID 为 {58968145-CF05-4341-995F-2EE093F6ABA3} 的组件的 COM 类工厂失败

    我正在运行一个 C 应用程序 并且正在使用 DSOFile dll 项目中引用了该DLL 我可以在我的开发机器上运行该exe 但是当我在另一台机器上运行 exe 时 我得到了 未处理的异常 System Runtime InteropSer
  • 有没有办法改变包装时物品的顺序?

    我正在尝试创建一个网站的一部分 由 3 个部分组成 我们称它们为 A B C 其中 A 和 B 彼此相邻 对齐以接触容器的相对两侧 它们下面是 C 但是当 A 和 B 在容器中无法并排放置时 B 会包裹在 C 下方 而不是包裹在 A 和 C
  • 错误:“}”中出现意外的“}”[重复]

    这个问题在这里已经有答案了 我有以下代码 TB lt data frame 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 TB BIG value lt apply TB 1 function r sr lt so
  • 偶数斐波那契数之和 < X

    我正在研究这个 我似乎有一个可行的解决方案 但我很难理解它的行为 这是我所拥有的 usr bin python def even fib sums limit number 1 last 0 before last 0 total 0 fo
  • F# 异步显示 WPF 窗口

    这个问题一直让我抓狂 总体要点如下 我的解决方案中有两个项目 第一个是 F 控制台应用程序 第二个是 C 库 其中包含名为的 C XAML 类DisplayWindow继承自 WPF 窗口 DisplayWindow有一个方法public
  • 注销后的 JSF 生命周期

    我正在使用基于表单的身份验证 我有一个注销链接 如下所示
  • 如何返回一个字符串?

    import java util public class HangManP5 public static void main String args int attempts 10 int wordLength boolean solve
  • IllegalArgumentException,从 s3 而不是 hdfs 指定输入/输出时出现错误的 FS

    我一直在本地集群上运行 Spark 作业 该集群具有 hdfs 从中读取输入并写入输出 现在我已经设置了一个 AWS EMR 和一个 S3 存储桶 其中有我的输入 并且我希望我的输出也写入 S3 错误 用户类抛出异常 java lang I
  • Mac 和 iPhone 开发书籍 2009 [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 目前关于 Mac 和 iP
  • 用于从 [string] 解析输入参数-值对的本机机制

    是否有一个本机内置构造可以使用与 cmdlet 参数相同的规则自动将控制台输入解析为变量 例如 许多 cmdlet 接受以下形式的参数值对 parameter1 unspaced value1 parameter2 spaced value