我正在编写一个简单的 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/