我创建了这个脚本来停止,然后在一个由8台服务器组成的环境中启动特定的服务。服务器名是阿波罗-1通过阿波罗-8。我正在寻找建议的修改,以确保我的脚本是可以接受的生产。
#Create a credential to be used on remote machines
$User = "MyDomain\myusername"
$Password = ConvertTo-SecureString 'password' -asplaintext -force
$Credential = New-Object -typename System.Management.Automation.PSCredential
-ArgumentList $User, $Password
$Server1 = New-Object System.Object
$Server1 | Add-Member -type NoteProperty -name Name -value "Apollo-1"
$arrServ1Services = @("MSSQLSERVER","QueueManager")
$Server1 | Add-Member -type NoteProperty -name Services -value $arrServ1Services
$Server2 = New-Object System.Object
$Server2 | Add-Member -type NoteProperty -name Name -value "Apollo-2"
$arrServ2Services = @("Analytics Engine", "MSSQLSERVER")
$Server2 | Add-Member -type NoteProperty -name Services -value $arrServ2Services
$Server3 = New-Object System.Object
$Server3 | Add-Member -type NoteProperty -name Name -value "Apollo-3"
$arrServ3Services = @("EDDS Agent Manager", "MSSQLSERVER", "Secret Store")
$Server3 | Add-Member -type NoteProperty -name Services -value
$arrServ3Services
$Server4 = New-Object System.Object
$Server4 | Add-Member -type NoteProperty -name Name -value "Apollo-4"
$arrServ4Services = @("Service Host Manager", "MSSQLSERVER","Service Bus
Gateway","Service Bus Message Broker","Service Bus Resource
Provider","Service Bus VSS","EDDS Agent Manager","Analytics Engine")
$Server4 | Add-Member -type NoteProperty -name Services -value arrServ4Services
$Server5 = New-Object System.Object
$Server5 | Add-Member -type NoteProperty -name Name -value "Apollo-5"
$arrServ5Services = @("MSSQLSERVER")
$Server5 | Add-Member -type NoteProperty -name Services -value $arrServ5Services
$Server6 = New-Object System.Object
$Server6 | Add-Member -type NoteProperty -name Name -value "Apollo-6"
$arrServ6Services = @("Web Processing Manager", "Service Host Manager")
$Server6 | Add-Member -type NoteProperty -name Services -value $arrServ6Services
$Server7 = New-Object System.Object
$Server7 | Add-Member -type NoteProperty -name Name -value "Apollo-7"
$arrServ7Services = @("Web Processing Manager", "Service Host Manager")
$Server7 | Add-Member -type NoteProperty -name Services -value
$arrServ7Services
$Server8 = New-Object System.Object
$Server8 | Add-Member -type NoteProperty -name Name -value "Apollo-8"
$arrServ8Services = @("elasticsearch-service-x64")
$Server8 | Add-Member -type NoteProperty -name Services -value
$arrServ8Services
#Create an object to represent the entire Server environment
$ServerEnvironment = New-Object System.Object
$ServerEnvironment | Add-Member -type NoteProperty -name Machines -value
@($Server1, $Server2, $Server3, $Server4, $Server5, $Server6, $Server7,
$Server8)
#Iterate through each machine in the environment and stop the services.
for ($x = $ServerEnvironment.Machines.Length-1; $x -gt -1; $x--) {
Write-Host " "
Write-Host " "
Write-Host "Machine:" $ServerEnvironment.Machines[$x].Name
Write-Host "No. of Services we are monitoring:"
$ServerEnvironment.Machines[$x].Services.Length
#iterate through services
for ($c = 0; $c -lt $ServerEnvironment.Machines[$x].Services.Length; $c++) {
$_s = Invoke-Command -ComputerName $ServerEnvironment.Machines[$x].Name -
Credential $Credential -Command{param($SERV) Get-Service -Name $SERV} -
ArgumentList $ServerEnvironment.Machines[$x].Services[$c]
Write-Host $ServerEnvironment.Machines[$x].Services[$c] $_s.Status
$_s.StartType
Invoke-Command -ComputerName $ServerEnvironment.Machines[$x].Name -
Credential $Credential -Command{param($SERV) Stop-Service -Name $SERV} -
ArgumentList $ServerEnvironment.Machines[$x].Services[$c]
}
}
#Iterate through each machine in the environment. Here we are starting the
services.
for ($x = 0; $x -lt $ServerEnvironment.Machines.Length; $x++) {
Write-Host " "
Write-Host " "
Write-Host "Machine:" $ServerEnvironment.Machines[$x].Name
Write-Host "No. of Services we are monitoring:"
$ServerEnvironment.Machines[$x].Services.Length
#iterate through service
for ($c = 0; $c -lt $ServerEnvironment.Machines[$x].Services.Length; $c++) {
$_s = Invoke-Command -ComputerName $ServerEnvironment.Machines[$x].Name -
Credential $Credential -Command{param($SERV) Get-Service -Name $SERV} -ArgumentList $ServerEnvironment.Machines[$x].Services[$c]
Write-Host $ServerEnvironment.Machines[$x].Services[$c] $_s.Status $_s.StartType
Invoke-Command -ComputerName $ServerEnvironment.Machines[$x].Name -
Credential $Credential -Command{param($SERV) Start-Service -Name $SERV} -
ArgumentList $ServerEnvironment.Machines[$x].Services[$c]
}
}
Write-Host "Done"发布于 2018-08-08 21:10:48
我不明白为什么要用单独的$server变量构建一个复杂的结构。您有一个带有关联服务的服务器名称列表。
这是一个可以包含在csv文件中的简单列表。如果读入变量对象,则可以在不需要索引的情况下迭代列表。
顺便说一句,正确的缩进有助于读取代码。有几个意想不到的断线。
#Create a credential to be used on remote machines
$User = "MyDomain\myusername"
$Password = ConvertTo-SecureString 'password' -asplaintext -force
$Credential = New-Object -typename System.Management.Automation.PSCredential -ArgumentList $User, $Password
$ServerServices = @"
"Name","Services"
"Apollo-1","MSSQLSERVER,QueueManager"
"Apollo-2","Analytics Engine,MSSQLSERVER"
"Apollo-3","EDDS Agent Manager,MSSQLSERVER,Secret Store "
"Apollo-4","Service Host Manager,MSSQLSERVER,Service Bus "
"Apollo-5","MSSQLSERVER"
"Apollo-6","Web Processing Manager,Service Host Manager "
"Apollo-7","Web Processing Manager,Service Host Manager "
"Apollo-8","elasticsearch-service-x64"
"@ | ConvertFrom-Csv
#Iterate through each machine in the environment and stop the services.
ForEach ($Server in $ServerServices){
$Services = $Server.Services -split ','
Write-Host " "
Write-Host " "
Write-Host "Machine:" $Server.Name
Write-Host ("No. of Services we are monitoring: {0}" -f $Services.Length)
#iterate through services
ForEach ($Service in $Services) {
Write-Host ("Proceesing service: {0} on server:{1}" -f $Service,$Server.Name)
# $_s = Invoke-Command -ComputerName $Server.Name -Credential $Credential -Command {
# param($SERV) Get-Service -Name $SERV} -ArgumentList $Service
# }
#...
}
}
#Iterate through each machine in the environment. Here we are starting the
# same as above
Write-Host "Done"样本输出:
Machine: Apollo-1
No. of Services we are monitoring: 2
Proceesing service: MSSQLSERVER on server:Apollo-1
Proceesing service: QueueManager on server:Apollo-1
Machine: Apollo-2
No. of Services we are monitoring: 2
Proceesing service: Analytics Engine on server:Apollo-2
Proceesing service: MSSQLSERVER on server:Apollo-2
...snip...https://codereview.stackexchange.com/questions/201233
复制相似问题