Я пытаюсь сравнить данные из нескольких источников, а затем дать мне отчет об ошибках. Из-за меняющейся природы исключений я хотел создать таблицу исключений в формате csv, которую я могу изменить на лету.
Я собираюсь предоставить данные как можно лучше, и покажу вам, чего я пытаюсь достичь, и покажу вам, где у меня возникают проблемы.
Список исключений содержит префикс для различных типов учетных записей:
Exceptions List
_______________
FQ
Q
HQ
E
Так что, если моя учетная запись была BND123
, тогда у меня может быть учетная запись с именем FQBND123
или QBND123
. Я хочу иметь возможность добавить в этот список, если одна из команд решит, что им необходимо создать учетную запись JQ
или что-нибудь подобное в будущем.
Это пример Inventoryreport.csv
Я хочу разобрать:
Safe Target system user name
HUMAN_ABC QABC
HUMAN_CDE QCDE
HUMAN_FGHIJ QFGHIJ
HUMAN_P123456 root
HUMAN_KLMNO QKLMNO1
HUMAN_P789123 FQ789123
Поэтому я хочу сравнить имя пользователя целевой системы с безопасным именем, и если ведущая учетная запись находится в списке исключений, она передает его, а если нет, то выдает его как ошибку.
Так что в случае данных выше 2 строки приведут к ошибке ниже.
HUMAN_P123456 root
HUMAN_KLMNO QKLMNO1
Root по понятной причине и учетная запись KLMNO
из-за трейлинга 1
.
Проблема, которую я получаю, состоит в том, что она говорит, что все является ошибкой. Если я введу это вручную в цикл, все будет хорошо.
У меня были исключения в цикле foreach
тоже внутри цикла для инвентаря, но он продолжает повторять одни и те же результаты и все равно выплевывает все.
Надеюсь, это хорошее объяснение, я уверен, что делаю это сложнее, чем нужно.
$loc = $scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$D = $loc + "\Exceptions\Exceptions.csv"
$E = $loc + "\Import\InventoryReport.csv"
$exceptions = Import-Csv -LiteralPath $D
$inventory = Import-Csv -LiteralPath $E
$list2 = 'Inventory Report Exceptions'
$list3 = 'Target system user name'
$DO = $loc + "\Report\Inventory Report Errors" + "$((Get-Date).ToString('MM-dd-yyyy')).CSV"
$time = (Get-Date).ToString()
foreach ($item in $inventory) {
$input1 = $item.Safe -replace "HUMAN_"
$input4 = $item.Safe -replace "HUMAN_P"
$input2 = $item.$list3
$input3 = $item.Safe
if ($input2 -eq ($exceptions.$list2 + $input1) -or $input2 -eq ($exceptions.$list2 + $input4)) {
return
}
else {
$newitem = New-Object -TypeName PSCustomObject -Property @{
Safe = $input1
Owner = $input2
}| Export-CSV -LiteralPath $DO -NoTypeInformation -append
}
}