从这个线程跟进。
无法克隆有序哈希表。
是否有捷径可寻?我确实发现了一些对于这样一个“简单”任务来说似乎过于复杂的例子。
$a = [ordered]@{}
$b = $a.Clone()
Run Code Online (Sandbox Code Playgroud)
Method invocation failed because [System.Collections.Specialized.OrderedDictionary] does not contain a method named 'Clone'.
我试图通过管道将两个参数传递给函数,但它似乎没有按预期工作,我很难理解为什么。
function Test-Pipeline {
[CmdletBinding ()]
Param(
[Parameter(ValueFromPipeline=$true)][String]$Name,
[Parameter(ValueFromPipeline=$true)][String]$Value
)
Write-Host "Name: $Name"
Write-Host "Value: $Value"
}
"Name", "Value" | Test-Pipeline
Run Code Online (Sandbox Code Playgroud)
名称: 值
价值:价值
我尝试运行Trace-Command命令来查看发生了什么。在第 35 行我们可以看到Value绑定到$Parameter。
为什么 PowerShell 将第二个输入绑定到两个参数?如果这是预期的,为什么它只发生在第二个参数而不是第一个参数上?
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Test-Pipeline]
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Test-Pipeline]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Test-Pipeline]
DEBUG: ParameterBinding Information: 0 : BIND arg [] …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 XML 文件中选择节点,但遇到了似乎由命名空间引起的问题。
下面的代码不返回任何内容。但是如果我从 XML 文件中删除命名空间,我会得到预期的结果。
$StandaloneXML = "test.xml"
# Load XML content
$NewStandaloneXML = New-Object -TypeName "System.XML.XMLDocument"
$NewStandaloneXML.Load($StandaloneXML)
# Get namespace
$Namespace = New-Object -TypeName "Xml.XmlNamespaceManager" -ArgumentList $NewStandaloneXML.NameTable
$Namespace.AddNamespace("jboss", $NewStandaloneXML.DocumentElement.NamespaceURI)
$NewStandaloneXML.SelectNodes("jboss:server/interfaces/interface", $Namespace)
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" ?>
<server xmlns="urn:jboss:domain:4.2">
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:127.0.0.1}"/>
</interface>
</interfaces>
</server>
Run Code Online (Sandbox Code Playgroud)
名称 inet 地址 ---- ------------ 管理 inet-address 公网地址