powershell - PowerShell 过滤远程桌面用户组的输出
问题描述
利用 PowerShell 我试图获取具有远程桌面用户权限以便能够登录到服务器的用户/组的列表。
我可以利用“ net localgroup”来获取具有远程桌面用户权限的组/用户列表:
PS C:\Users\pal.test> net localgroup "Remote Desktop Users" 别名 Remote Desktop Users Comment 该组的成员被授予远程登录的权限
成员
PAL\kron.pal
PAL\PAL-VPN-Clients
命令成功完成。
但是,如果我运行这个命令并输出到一个变量,我会得到所有的标题:
PS C:\Users\pal.test> $RDPUsers = net localgroup "远程桌面用户"
PS C:\Users\pal.test> 写入主机 $RDPUUsers
别名 远程桌面用户 评论 该组中的成员被授予远程登录的权限 成员 ------------------------------- ------------------------------------------------ 朋友\ kron.pal PAL\PAL-VPN-Client
命令成功完成。
对于“ Get-WMIObject ”等其他命令,我将使用“ | Select-Object -ExpandProperty Members过滤属性并仅选择属性值。但是,如果我使用它,当我尝试使用时会得到空白输出或错误 -展开属性:
PS C:\Users\pal.test> net localgroup "远程桌面用户" | Select-Object -ExpandProperty 成员
选择对象:找不到属性“成员”。
在行:1 字符:41
net localgroup "远程桌面用户" | Select-Object -ExpandProperty 成员
+ CategoryInfo : InvalidArgument: (Alias name Remote Desktop Users:PSObject) [Select-Object], PSArgumentException + FullyQualifiedErrorId ExpandPropertyNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand
有没有比使用“ net localgroup ”更好的方法来列出 Windows Server 2008/2012/2016 中的用户/组?
如果不是,你如何过滤“ net localgroup ”的输出?
解决方案
我在 Server 2008/2012/2016 上也没有对此进行测试,但它可能会有所帮助:
function Get-LocalGroupMembers {
[CmdletBinding()]
Param(
[Parameter(Mandatory = $true, Position = 0)]
[String]$Identity,
[String]$ComputerName = $env:COMPUTERNAME
)
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$context = New-Object DirectoryServices.AccountManagement.PrincipalContext('Machine', $ComputerName)
try {
if (!([string]::IsNullOrEmpty($Identity))) {
# search a specific group
[DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($context, $Identity)
}
else {
# search all local groups
$groupPrincipal = New-Object DirectoryServices.AccountManagement.GroupPrincipal($context)
$principalSearcher = New-Object DirectoryServices.AccountManagement.PrincipalSearcher($groupPrincipal)
}
}
catch {
throw "Error searching group(s) on '$ComputerName'. $($_.Exception.Message)"
}
finally {
if ($groupPrincipal) {$groupPrincipal.Dispose()}
if ($principalSearcher) {$principalSearcher.FindAll()}
}
}
(Get-LocalGroupMembers -Identity "Remote Desktop Users").Members | Select-Object -ExpandProperty Name
使用上述函数,您将获得具有各种属性的返回对象。在此示例中,我仅选择了 Name 属性。如果要查看所有属性,只需删除| Select-Object -ExpandProperty Name
推荐阅读
- java - Lombok 在使用 @Data 后不会创建 getter 和 setter 方法
- css - Jest Puppeteer - 如何在模态中选择第二次出现的类?
- timescaledb - 将 verneMQ 数据写入 TimescaleDB
- webhooks - 微软团队如何自动做传出 webhook?
- serialization - Flink 使用 Java 中的自定义类设置基本的 Kafka 生产者消费者
- c - 给定字符串输入的节点删除
- c# - 在 ApiController 之外,在 ActionFilter 内使用 Ok
- apache-spark - 如何在火花会话中指定雪花选项?
- hybris - 使用灵活搜索获取类别及其子/嵌套类别
- logging - 如何记录 Virtualbox VRDP 登录?