我有一个要存储在文本文件中的用户列表。我正在尝试更新文本文件,以便它删除与$ NotExpiring users变量匹配的所有用户,该变量是一个集合。如果无法从文本文件中删除多个用户,我只是想不出如何正确更新文本文件。
下面是完整功能。您可以忽略其中的大部分内容,只需在#Stuck Here下查看即可。
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 }
答案 0 :(得分:0)
基本上,您正在尝试匹配两个数组。
使用where
做foreach
对象。现在,您必须将单个对象$_
与数组$user
匹配。
使用:
...| where {$_ -notin $user}
或
...| where {$user -notcontains $_}