使用 CSV 自动删除边界 - Remove-CMBoundary

Automate Removal Of Boundary's with CSV - Remove-CMBoundary

CSV.csv:

Name,Type,Value,Name,Subnet
Manchester, IPSubnet,192.168.1.0,Manchester,192.168.1.0

我正在尝试自动删除站点边界(作为此过程的一部分,我将它们作为 IPA 地址范围边界添加到新的主站点上。

Remove-CMBoundary cmdlet 似乎需要 ID,我的 CSV 中没有该 ID,因此我试图在删除过程中从 SCCM 中提取它。

注意:现有组中有多个边界需要保留在原处,每个组只需要删除 3 个边界,所以稍微有点棘手。

$csv = Import-Csv "C:\NETS\csv.csv"
foreach ($line in $csv) {
    Write-Host -ForegroundColor Green "Removing boundary for $($line.Subnet)"
    Remove-CMBoundary -Name $line.$Name -Type IPSubnet -Value $line.Subnet
}

以上方法不起作用,因为您需要边界 ID - 而不仅仅是子网信息。随后的挖掘让我来到这里:

$csv = Import-Csv "C:\csv.csv"
foreach ($line in $csv) {
    Get-CMBoundary -BoundaryName $csv.Name |
        select Value,BoundaryID |
        Export-Csv C:\Boundary.csv
    $boundaryids = Import-Csv C:\Boundary.csv
    foreach ($id in $boundaryids) {
        Where-Object -eq $line.'Subnet'
    } Remove-CMBoundary -Id $id.'boundaryID'
}

我敢打赌,这对于我实际尝试做的事情来说太费力了。谁能看到我想把它带到哪里?

我没有使用 SCCM 的经验,但从您的代码示例来看,您可能正在尝试执行以下操作:

foreach ($line in $csv) {
    Get-CMBoundary -BoundaryName $line.Name | Where-Object {
        $_.Value -eq $line.Subnet
    } | ForEach-Object {
        Remove-CMBoundary -Id $_.BoundaryID
    }
}

我也不知道 SCCM,但是

所以应该这样做:

$csv = Import-Csv "C:\csv.csv"
ForEach ($line in $csv) {
    Get-CMBoundary -BoundaryName $line.Name | 
        Where-Object Value -eq $line.Subnet |
            Remove-CMBoundary -WhatIf
}

如果输出看起来正常,删除 -WhatIf(或者使用 -Confirm

以这种方式进行编辑,您在评论中的尝试可能会奏效

$Site = "ABC" 
$csv = Import-Csv "C:\csv.csv" 
ForEach ($line in $csv) { 
    Get-CMBoundary -BoundaryName $line.Name | 
        Where-Object{($_.Value -eq $line.Subnet) -and 
                     ($_.ShortCode -eq $Site) } |
            Remove-CMBoundary
}

除了原始查询之外,要一次枚举一个站点,可以这样做:

$Site = "ABC"
$csv = Import-Csv "C:\csv.csv"
foreach ($line in $csv) { 

                        Get-CMBoundary -BoundaryName $line.Name | Where-Object {
                        $_.Value -eq $line.Subnet -and $_.ShortCode -eq $line.$Site} | 
        ForEach-Object {
        Remove-CMBoundary -Id $_.BoundaryID 
} 
    }