基本上发生了什么,我有两个文件,一个包含允许用户列表,另一个实际上在桌面上用户列表。我想做的是使用for循环来抓取AllowedUsers.txt
文件中的每个名称,并使用Select-String查找匹配的任何名称并将其从原始Users.txt
中删除(列表实际在桌面上的用户数)。最终目标是在Users.txt
文件的左侧留下一个不允许在桌面上访问的用户列表,然后我可以在其中再次进行循环浏览,并只需通过命令行删除这些用户即可。
不幸的是,由于我无法完全掌握Select-String或for循环的工作原理,因此无法使它正常工作,但是编写脚本的任何帮助将不胜感激。
AllowedUsers.txt
的示例(输入):
abbby
Sebastian
Evan
Users.txt
的示例(输入):
abbby
Evan
Sebastian
Ethan
zachary
已编辑Users.txt
的示例(所需输出):
Ethan
zachary
答案 0 :(得分:0)
这是另一种方法。与LotPings的解决方案不同,它使用数组成员资格运算符-notin
来查看常规用户列表中的项目是否在允许列表中。我没有覆盖源用户列表,因为这困扰了我。 [咧嘴],您可以轻松地更改它。
请注意,低于3的PoSh版本将需要使用-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