如何在Powershell中读取machine.config并检查密钥是否存在

马赫什

如何读取machine.config文件以检查其是否包含密钥?范例:oracle.managedaccess.client

下面是代码:

$configFilePath = [System.Runtime.InteropServices.RuntimeEnvironment]::SystemConfigurationFile

Write-Host $configFilePath

$cnf = . $configFilePath
echo name

Write-Host $cnf

#check machine.config contains oracle.managedaccess.client
mklement0

Ansgar Wiechers的有用答案很好地解释了代码中的问题,并提供了有用的背景信息。

这是显示一些相关技术的具体解决方案:

$file = [System.Runtime.InteropServices.RuntimeEnvironment]::SystemConfigurationFile
[xml] $xml = Get-Content -Raw $file 

# Get the <oracle.manageddataaccess.client> element
# that, in this example, is assumed to be a child element of the 
# top-level <configuration> element.
$elem = $xml.configuration.'oracle.manageddataaccess.client'

# Determine if the element exists.
$exists = $null -ne $elem

说明:

  • [xml] $xml = Get-Content -Raw $file是从文件中读取XML文档的一种更加PowerShell惯用的方式;使用[xml]类型加速器会自动将通过获取的文件内容Get-Content转换为XML文档(System.Xml.XmlDocument)。

  • $xml.configuration.'oracle.manageddataaccess.client'使用PowerShell对XML DOM修改,以点符号(.方便地访问文档层次结构中的元素

    • 注意,这是假设您知道目标元素的精确位置(路径)。如果您不这样做,请使用Ansgar的答案中的.SelectNodes().SelectSingleNode()建议的答案;请参阅底部的示例。

    • 请注意需要oracle.manageddataaccess.client'...'(引号)引起来,因为元素名称本身包含.字符。

    • 有关PowerShell如何适应XML DOM的更多信息,请参见此答案

  • 如果目标元素存在,System.Xml.XmlElement则返回一个实例,如果目标元素具有自己的子元素(否则,.InnerText将返回属性)。

  • 如果不存在这样的元素,则返回值为$null

  • $exists = $null -eq $elem 创建一个布尔变量,该变量指示感兴趣的元素是否存在。


.SelectSingleNode()XPath查询一起使用的示例

以下内容返回<oracle.manageddataaccess.client>在文档中任何位置(如果存在)以及$null其他位置找到元素

$xml.SelectSingleNode('//oracle.manageddataaccess.client')

以下内容查找一个<section>元素,该元素是elements的子元素<configuration><configSections>并且包含name包含字符串属性appSettings

$xml.SelectSingleNode('/configuration/configSections/section[@name="appSettings"]')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章