Powershell 自动删除边界';s与CSV-删除CMBoundary

Powershell 自动删除边界';s与CSV-删除CMBoundary,powershell,sccm,boundary,Powershell,Sccm,Boundary,CSV.CSV: Name,Type,Value,Name,Subnet Manchester, IPSubnet,192.168.1.0,Manchester,192.168.1.0 上述方法不起作用,因为您需要边界Id,而不仅仅是子网信息。后来我来到这里: $csv = Import-Csv "C:\csv.csv" foreach ($line in $csv) { Get-CMBoundary -BoundaryName $csv.Name | select Va

CSV.CSV

Name,Type,Value,Name,Subnet Manchester, IPSubnet,192.168.1.0,Manchester,192.168.1.0 上述方法不起作用,因为您需要边界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的经验,但从您的代码示例来看,您可能正在尝试这样做:

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

我也不知道SCCM,但是

  • 根据需要,它接受管道输入
  • 并且有一个
    -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
}

我也不知道SCCM,但是

  • 根据需要,它接受管道输入
  • 并且有一个
    -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 
} 
    }

除了原始查询外,要一次枚举一个站点,可以执行以下操作:

$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中的一个站点,我尝试了以下方法,但没有成功:$site=“ABC”$CSV=Import CSV“C:\CSV.CSV”foreach($CSV中的行){Get-CMBoundary-BoundaryName$line.Name |其中对象{$\值-eq$line.Subnet-和$\ ShortCode-eq$site}| ForEach对象{Remove-CMBoundary-Id$|.BoundaryID}管道错误-输入对象无法绑定到任何参数-我投票太早了。您的评论尝试遵循Ansgars模板,而不是我的模板-因此没有理由在这里抱怨。我认为您应该在添加前将两个where条件括在括号中。请参阅更改的答案。在我的编辑后,您可以撤回您的投票-但是为什么?Mu感谢您的输入和编辑,不会收回任何内容,只需自我提醒,在升级投票之前应进行测试,以确保其他codeccannot验证参数“Id”的参数。该参数为null或空。请提供一个不为null或空的参数,然后重试该命令。若要一次仅枚举CSV中的一个站点,请尝试此操作失败:$Site=“ABC”$csv=Import csv“C:\csv.csv”foreach($csv中的行){Get-CMBoundary-BoundaryName$line.Name |其中对象{$\值-eq$line.Subnet-和$\ ShortCode-eq$Site}foreach对象{删除CMBoundary-Id$\.BoundaryID}管道错误-输入对象无法绑定到任何参数-我投票太早了。您的评论尝试遵循Ansgars模板,而不是我的模板-因此没有理由在这里抱怨。我认为您应该在添加前将两个where条件括在括号中。请参阅更改的答案。在我的编辑后,您可以撤回您的投票-但是为什么?Much感谢您的输入和编辑,不会收回任何内容,只需自我提醒,在升级表决之前应进行测试,以确保其他codeCannot验证参数“Id”的参数。该参数为null或空。请提供一个不为null或空的参数,然后重试该命令。