Powershell中的Foreach错误处理

Mic*_*ael 3 powershell

有没有办法在foreach循环中捕获并保存坏名称?我有以下内容:

$CollectionName = "Import Test"
$PCName = Import-Csv "C:\Powershell\import_test.csv" 
foreach($computer in $PCName) {
Add-CMDeviceCollectionDirectMembershipRule -CollectionName $CollectionName -ResourceID $(Get-   CMDevice -Name $computer.computername).ResourceID
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是,如果csv中有一个错误的名称,那么我不会显示当前获得的"无法验证参数"错误,只需将失败的名称输出到文本文件即可.

谢谢

Ans*_*ers 6

是.将语句放在循环中的try..catch块中:

foreach($computer in $PCName) {
  try {
    Add-CMDeviceCollectionDirectMembershipRule ...
  } catch {
    "Bad name: $name" | Out-File 'C:\bad_names.txt' -Append
  }
}
Run Code Online (Sandbox Code Playgroud)

如果错误是非终止错误(即显示错误消息但未被捕获try..catch),则可以通过添加-ErrorAction Stop命令或设置将其转换为终止错误$ErrorActionPreference = "Stop".