Удалить соответствующий объект коллекции из текстового файла - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть список пользователей, которые я храню в текстовом файле.Я пытаюсь обновить текстовый файл, чтобы он удалял любого пользователя, который соответствует переменной $ NotExpiring users, которая является коллекцией.Я просто не могу понять, как правильно обновить текстовый файл, если нужно удалить более одного пользователя из текстового файла.

Ниже приведена полная функция.Вы можете проигнорировать большую часть этого. Просто посмотрите в #Stuck Здесь, чтобы перейти к сути.

function Get-NotExpiring{

$NotExpiring=New-Object System.Collections.Generic.List[System.Object]

$MatchedUser=New-Object System.Collections.Generic.List[System.Object]

$textfiles = Get-ChildItem $email_dir



#Day of Span

$Days="20"

#Settings

$Date=Get-Date ((Get-Date).adddays($Days))

$Users=Get-ADUser -filter {(Enabled -eq $True) -and (PasswordNeverExpires -eq $False)} -Properties SamAccountName, DisplayName, msDS-UserPasswordExpiryTimeComputed, Mail | Where-Object { $_.DisplayName -ne $nul -and ($_."msDS-UserPasswordExpiryTimeComputed" -gt ($NotExpDate.ToFileTime()))} | Select SamAccountName, Mail, DisplayName,@{Name="ExpiryDate";Expression={([datetime]::fromfiletime($_."msDS-UserPasswordExpiryTimeComputed")).DateTime}}

#Magic

foreach ($Entry in $Users) {



$EntryDate = Get-date($Entry.ExpiryDate)

if ($EntryDate -gt $Date){



$Account = $Entry.SamAccountName

$ExpDate = $Entry.ExpiryDate

$NotExpiring.add($Account)

}

}



#STUCK HERE

foreach($file in $textfiles){

foreach ($user in $NotExpiring){

if((Get-Content "$email_dir\$file") -contains $user){

$temp_get = Get-Content $email_dir\$file | where {$_ -notmatch $user}

}}}



$temp_get}

Я попробовал ниже, но это не работает, если более одного пользователя имеют $ NotExpiring, которые также находятся всуществующий текстовый файл.Любая помощь будет оценена.Я знаю, что это простое исправление, но я не могу понять это.

Get-Content $email_dir\$file | where {$_ -notmatch $user} | Set-Content <path>.txt

Я смог достичь именно того, что мне было нужно, используя следующее решение.

foreach($file in $textfiles){ foreach ($user in $NotExpiring){

if((Get-Content "$email_dir\$file") -contains $user){ 
$MatchedUser.add($user) 
}}
Get-Content "$email_dir\$file" | Where {$MatchedUser -NotContains $_ } | Set Content "$temp_dir\$file" 

Copy-Item -path "$temp_dir\$file" -Destination "$email_dir\$file" -ErrorAction SilentlyContinue }

1 Ответ

0 голосов
/ 11 декабря 2018

Обычно вы пытаетесь сопоставить два массива.С where вы делаете это foreach объект.Теперь вам нужно сопоставить отдельный объект $_ с массивом $user.
Использование:

...| where {$_ -notin $user}

или

...| where {$user -notcontains $_}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...