我有一个CSV文件如下:
它包含一个Windows服务和一个优先级,我希望优先级控制服务启动和停止的顺序n。
即在优先级2之前停止所有优先级1,依此类推,直到优先级为9,这将是最后一个优先级。按顺序停止1-9后我也希望它按顺序启动。
无法解决这个问题。我不想拥有9个不同的数组,我在这些数组中存储组,因为它感觉效率低下。有什么想法或建议吗?
$Columns = "ApplicationName", "Priority"
$Applications = @()
$Path = "C:\Users\mwalters\Desktop\app-test.csv"
$CSV = Import-csv -Path $Path | Select $Columns
$Applications += $CSV | Sort -Property Priority
$AppsToLoopOver = @()
$i = 0
foreach ($Application in $Applications) {
$ApplicationFromCSV = $Applications.ApplicationName[$i]
$AppPriority = $Applications.Priority[$i]
$AppsToLoopOver += [PSCustomObject]@{
Priority=$AppPriority;
ApplicationName=$ApplicationFromCSV
}
$i++
}
$Group1 = @()
$Group2 = @()
$Group3 = @()
foreach ($Priority in $AppsToLoopOver.Priority) {
if ($Priority -eq 1) {
$Group1 += $Priority + " Group1"
} elseif ($Priority -eq 2) {
$Group2 += $Priority + " Group2"
} elseif($Priority -eq 3) {
$Group3 += $Priority + " Group3"
}
}
$AppsToLoopOver
答案 0 :(得分:2)
要对结构化数据进行分组,请使用Group-Object
cmdlet:
Import-Csv $Path |
Group-Object Priority |
Sort-Object {[int]$_.Name} |
ForEach-Object {
# ... do stuff ...
}
答案 1 :(得分:1)
您可以按优先级排序,但如果您特别希望将它们作为组进行操作,则可以使用Group-Object
cmdlet,如下所示:
$VerbosePreference = 'Continue'
$ServiceGroups = Import-CSV "C:\Users\mwalters\Desktop\app-test.csv" | Group-Object Priority | Sort Name
$ServiceGroups | ForEach-Object {
Write-Verbose "Stopping priority $($_.name) services"
$_.Group | Select -ExpandProperty ApplicationName | Stop-Service -WhatIf
}
如果您对结果感到满意,请移除-WhatIf
。