powershell - 根据服务器名称获取服务名称

标签 powershell xml-parsing

我正在编写一个简单的 PowerShell 脚本来从本地和远程服务器获取服务的状态。我正在从我创建的 XML 文件中读取服务器和服务:

<Settings>
  <Server>
    <Name>Server1</Name>
    <StartOrder>1</StartOrder>
    <Services>
      <Service>
        <Name>Service1</Name>
        <StartOrder>1</StartOrder>
      </Service>
      <Service>
       <Name>Service2</Name>
       <StartOrder>2</StartOrder>
      </Service>
    </Services>
  </Server>
</Settings>

这是我的代码:

$xml = [xml](Get-Content $args)

function readServersfromXML() {
    $xml.Settings.Server | select -ExpandProperty Name
}

function readServerServicesfromXML($server) {
    $server
    $xml.Settings.Server.Services.Service | Where {$_ -eq $server}
}

function getServiceStatus($server, $service) {
    Get-Service -Name $service -ComputerName $server
}

$servers = ( readServersfromXML )
#loop through the configxml and get status of services
foreach ( $server in $servers ) {
    $services = ( readServerServicesfromXML $server )
    foreach ( $service in $services ) {
        getServiceStatus $server $service
    }
}

有效的是 $servers 哈希已填充,但 $services 哈希未填充,我不知道为什么。我的假设是 readServerServicesfromXML() 函数找不到路径,但我不知道为什么。有人可以指出我正确的方向,或者提供更好的方法吗?最终,我将使用此脚本按照 XML 文件(因此是 startOrder XML 标记)指定的特定顺序远程启动服务。

最佳答案

稍作修改,您的代码就可以正常运行:

readServerServicesfromXML 函数:

function readServerServicesfromXML ( $server ) {
    $xml.Settings.Server |
        Where-Object {$_.Name -eq $server} |
            Select-Object -ExpandProperty Services
}

嵌套 foreach 循环:

foreach ( $service in $services.ChildNodes ) {
    getServiceStatus $server $service.Name
}

关于powershell - 根据服务器名称获取服务名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33480444/

相关文章:

java - 使用命名空间的 jaxb 解码

r - 从XML提取数据并传递到data.frame(使用NA表示丢失)

ruby - 使用 Nokogiri 解析 XML 文件以确定路径 (Ruby)

java - XStream 上用于 XML 转换的等效 DROP_ROOT_MODE

powershell - Get-ChildItem为Assembly。*。dll添加排除筛选器,但包括Assembly.Some。*。dll

json - 为 TFS 团队设置区域时参数 'patch' 出现 ArgumentNullException

java - 如何使用 XPATH 查询选择属性值?

powershell - 如何从 Powershell 中已过滤的列表中排除关键字

c# - 从 C# 启动 SharePoint Management Shell (PowerShell)

powershell - 一个命令中的 Powershell 中的多种前景色,包括空格