- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
Powershell 4 Windows Server 2008 R2
最近我编写了一个 Powershell 脚本来拨入我的机器的 IIS Web 配置文件的应用程序池。我真的不知道这种访问 XML 节点的方式的名称,但这是第一次完成的方式:
$appPoolNode = ($config['configuration']['system.applicationHost']['applicationPools']['add'] | where {$_.name -eq $AppPoolName})
遗憾的是,除了默认的应用程序池外,这对任何东西都不起作用。
因此,如果我想为创建的另一个应用程序池更改某些内容,我无法从上面的代码行返回任何内容。我请来了一位同事,他向我展示了访问 XML 节点的点表示法:
$appPoolNode = ($config.configuration.'system.applicationHost'.applicationPools.add | where {$_.name -eq $AppPoolName})
不知何故这段代码起作用了。
我的问题是:
第一个代码示例调用的是哪种 XML 访问,为什么点符号适用于其他应用程序池,而不是像第一个代码示例那样仅适用于 defaultappPool?
最佳答案
PowerShell 魔法的乐趣 :-)
您的 $config
变量是从 System.Xml.XmlNode
派生的某种类型。当您将一些字符串转换为 [xml]
时,PowerShell 会执行此操作。
此类型在其他方法中包括属性 Item
,就像在 C# 中一样,它用于处理带括号的访问器语法,因此编写
$config['a']
解析为函数调用
$config.Item('a')
它返回一个值 - 与给定名称匹配的第一个子节点。
现在,如果为此使用 .
表示法,您只需调用另一个属性,但在本例中,PowerShell 在解析 XML 文件时动态添加了一个属性。
它为每个子节点名称和它在当前节点上找到的每个属性添加一个属性。如果有多个具有给定名称的子节点,它会使属性返回这些节点的数组,这是它与仅返回第一个值的 Item 方法的不同之处。 p>
要通过一个简单的示例来了解这一点,请考虑
$x = [xml]"<a> <b Id='1'/> <b Id='2'/> </a>"
然后 $x | Get-Member
显示常用的 XmlDocument
属性,包括 Item
,以及返回单个 XmlElement 的属性 a
。所以此时
$x['a']
$x.Item('a')
$x.a
所有返回相同。现在执行 $x.a |获取成员
。您会看到 Item
仍然返回单个 XmlElement,但由于 b 在 XML 中出现不止一次,PowerShell 让 b
属性返回一个通用对象数组(恰好再次成为 XmlElement 类型)。
因此
$x.a.b
给你两个 Id
值,而
$x.a['b']
只返回第一个。
关于xml - Powershell 4 XML 节点访问符号谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42417923/
我正在寻找实现 PowerShell 提供程序 在 电源外壳。 我一直在想,如果我只是定义类型,然后将它们导入我的 session (导入模块),我应该能够让它们可用。 例如,这个 不工作但它沿着我想
我创建的脚本使用了组件,这些组件仅在32位版本的Powershell中可用。 默认情况下,Windows使用Powershell x64执行脚本,这会导致一些错误。 是一种在脚本开头设置值以强制Win
是否可以从 Powershell 中检测它是否是嵌套 shell? 如果我打开 Powershell 或 cmd.exe 窗口,然后输入 powershell 在那里,是否有一个神奇的 $host.s
随着 PowerShell Core 的发布,应用程序在使用托管自动化库 (system.management.automation) 时如何选择调用哪个版本的 Powershell(Powershe
最近,我加入了我企业的 Windows 团队,凭借我的开发人员背景(一般是 Java、.NET 和 Web),我很快就对 PowerShell 产生了兴趣。我可以看到它比普通的旧批处理文件、VB 更有
假设我有一个 powershell 脚本,它在我当前路径的相对路径中包含一个 Powershell 哈希。让我们称之为“name.ps1”,它包含: $names = @{ "bob" = "b
我想为我正在构建的自定义 Powershell Commandlet 使用 SqlServerCmdletSnapin。如果我将以下代码添加到 PSM1 的开头: if ( (Get-PSSnapin
如何调用从 PowerShell 脚本中获取命名参数的 PowerShell 脚本? foo.ps1: param( [Parameter(Mandatory=$true)][String]$a=''
我即将为 Windows 管理员编写一个 PowerShell 脚本,以帮助他们完成与部署 Web 应用程序相关的某些任务。 有什么理由让我应该赞成或排除开发 PowerShell 模块 (.psm1
我的 powershell 模块有一个函数,我希望它返回一个非零退出代码。但是,作为一个模块函数,当我运行 Import-Module 时,它会加载到 powershell 控制台的上下文中。所以,当
我在这个问题上花了最后 4 个小时,非常感谢您提供的任何意见。 我需要使用不同的凭据调用 powershell 脚本并将参数传递给该脚本。 安装 WISEScript 中包装的程序后,此脚本开始收集机
我有一个场景,我需要将 powershell 命令的命令和输出转发到另一个进程以进行日志记录和处理。 我希望这个控制台尽可能接近 powershell,因此不希望将它简单地托管在另一个控制台程序中。
我正在尝试让一个主 PowerShell 脚本运行所有其他脚本,同时等待 30-60 秒以确保完成任务。我尝试过的所有其他操作都不会停止/等待第一个脚本及其进程完成,然后才能同时完成所有其他脚本,并且
我正在编写一个脚本来使用多个 plink (PuTTY) session 作为 Windows 版本的 clustersh。然而,我陷入困境,因为我想从 powershell 打开多个 Powersh
我读了这个答案:How to Open Powershell from Powershell start powershell 这将打开基础的大分辨率 PS 实例。如何打开 PS(x86)? 最佳答案
我很想知道我们是否可以在 Powershell 中做到这一点。 使用 Out-File 命令,我们可以通过管道将其输出写入文件。这样我就可以将我所有的历史命令发送到一个文本文件中。 问题是我可以在每次
我在 about_Pipelines 阅读了有关 PowerShell 中的管道工作原理的信息,并了解到管道一次传送一个对象。 所以,这个 Get-Service | Format-Table -Pr
我正在尝试像这样从 powershell 启动一个进程:- $proc = (start-process $myExe -argumentList '/myArg True' -windowStyle
## To run the script # .\get_status.ps1 -Hostname -Service_Action -Service_Name #$Hostname = "hos
让我们使用 powershell 命令 Write-Host "red text"-Fore red这会在红色前景中显示“红色文本”。 但是,您希望文本以稍微亮一点的方式显示字体颜色,浅红色。 有没有
我是一名优秀的程序员,十分优秀!