Удаление строк в текстовом файле с заданными строками из другого файла с помощью Set-String (Powershell) - PullRequest
0 голосов
/ 26 декабря 2018

В основном происходит то, что у меня есть два файла, один со списком разрешенных пользователей и другой список пользователей, которые на самом деле находятся на рабочем столе.То, что я пытаюсь сделать, это использовать цикл for, чтобы захватить каждое имя в файле AllowedUsers.txt, и использовать Select-String, чтобы найти любые совпадающие имена и удалить их из исходного Users.txt (список пользователей на самом деле нарабочий стол).Конечная цель - создать список пользователей, которым запрещен доступ к рабочему столу, в файле Users.txt, где я могу снова выполнить цикл и просто удалить этих пользователей через командную строку.

К сожалению, мне не удалось заставить это работать, так как я не совсем понимаю, как работают Select-String или для циклов, но любая помощь при написании сценария будет принята с благодарностью.

Пример для AllowedUsers.txt (вход):

abbby
Sebastian
Evan

Пример для Users.txt (вход):

abbby
Evan
Sebastian
Ethan
zachary

Пример для редактирования Users.txt (желаемый выход):

Ethan
zachary

1 Ответ

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

вот еще один способ сделать это.в отличие от решения LotPings, он использует оператор членства в массиве -notin, чтобы увидеть, находятся ли элементы в общем списке пользователей в списке разрешенных.я не переписывал исходный список пользователей, так как это беспокоит меня.[ ухмылка ] ты можешь легко это изменить, хотя.

обратите внимание, что версии PoSh ниже 3 должны будут использовать -notcontains и поменять местами элементы, чтобы поместить коллекцию слева от теста, а не справа.спасибо Theo за напоминание об этом!

# fake reading in a text file
#    in real life, use Get-Content
$AllowedUsers = @'
abbby
Sebastian
Evan
'@ -split [environment]::NewLine

# another fake file read
$AllUsers = @'
abbby
Evan
Sebastian
Ethan
zachary
'@ -split [environment]::NewLine

# this presumes the source files are both text and have the same name format
#    the "-notin" operator is NOT case sensitive
$ExcludedUsers = $AllUsers |
    Where-Object {$_ -notin $AllowedUsers}

# send to screen
$ExcludedUsers

# send to text file
$ExcludedUsers |
    Set-Content -LiteralPath "$env:TEMP\BassoftheC_ExcludedUserList.txt"

на экране ...

Ethan
zachary

содержимое текстового файла ...

Ethan
zachary
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...