使用 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,但是
- 根据 Remove-CMBoundary 它接受管道输入
- 并有一个
-WhatIf
参数。
所以应该这样做:
$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
}
}
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,但是
- 根据 Remove-CMBoundary 它接受管道输入
- 并有一个
-WhatIf
参数。
所以应该这样做:
$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
}
}