小编Ste*_*eDJ的帖子

PowerShell:如何初始化自定义对象数组

首先,因为这引出了我的问题,我首先要指出我在PowerShell中使用了XML,以及如何将XML文件中的数据快速地读入自定义对象数组.例如,如果我有以下XML文件:

<stuff>
 <item name="Joe" age="32">
  <info>something about him</info>
 </item>
 <item name="Sue" age="29">
  <info>something about her</info>
 </item>
 <item name="Cat" age="12">
  <info>something else</info>
 </item>
</stuff>
Run Code Online (Sandbox Code Playgroud)

如果我简单地阅读它,就像这样:

[xml]$myxml = Get-Content .\my.xml
Run Code Online (Sandbox Code Playgroud)

然后我可以得到一个像我这样的项目数组:

[array]$myitems = $myxml.stuff.Item
$myitems

name   age  info
----   ---  ----
Joe    32   something about him
Sue    29   something about her
Cat    12   something else
Run Code Online (Sandbox Code Playgroud)

那么,现在我的问题是:

如何创建自定义对象数组的类似结构,并在我的脚本中初始化它们,而无需读取文件?

我可以做很多循环和/或大量创建/初始化单个对象,然后一次添加一个数组...

但似乎应该有一种方法以更简单的方式执行此创建/初始化.请注意,这里的关键是我的自定义对象有两个以上的元素(否则,我已经使用了哈希).

我甚至考虑过创建一个大的XML字符串,并使用Select-XML,但我只是无法正确使用语法(如果这是正确的方向,那就是正确的方向).

powershell pscustomobject

51
推荐指数
5
解决办法
13万
查看次数

Powershell:使用转义参数调用运算符(&)( - %)不使用非静态参数

我的Powershell脚本需要使用一组非常复杂的参数调用EXE.我正在使用Powershell 3.0,并且必须坚持使用该版本.唉,即使是"魔术"逃脱的操作员(--%)也没有帮助我.例如,使用Call运算符,请考虑以下因素:

& other.exe --% action /mode fast /path:"location with spaces" /fancyparam { /dothis /dothat:"arg with spaces" } /verbose
Run Code Online (Sandbox Code Playgroud)

现在,如果它很简单,我的脚本可以很容易地正常工作.但事情并非那么简单."other.exe"的参数可能不同,具体取决于我脚本中较早的用户选择.所以相反,我需要提前建立这些参数,也许是这样的:

$commandArgs = 'action /mode ' + $userMode + ' /path:"location with spaces" /fancyparam { /dothis /dothat:"' + $userArgs + " } /verbose'
Run Code Online (Sandbox Code Playgroud)

因此我会这样调用:

& other.exe --% $commandArgs
Run Code Online (Sandbox Code Playgroud)

...好吧,期望这--%意味着它只是传递一个原始字符串$commandArgs.但是如果没有--%,powershell会自动引用$ commandArgs的内容,这些内容实际上会混淆内部引用(更不用说打破其他程序首先需要的'action'参数).换句话说,我已经尝试嵌入--%我的$ commandArgs字符串内部,但损坏已经在它被解析的时候完成了(我不认为它甚至可以这样工作).

请注意,这个例子只是我需要执行的实际命令的1/4 - 其中包括更多用户参数,引号和其他有趣的字符,这些字符会让我匆忙逃离地狱!我也一直在使用echoargs.exe工具,这就是我看到我遇到的麻烦.哦,我也需要我的例子中的所有空格(即需要在括号字符周围留出空格).

所以经过多次寻找答案后,我求助于你.提前致谢.

parameters powershell escaping call operator-keyword

6
推荐指数
1
解决办法
1万
查看次数