我必须创建一个脚本,该脚本列出由名称指定的用户所属的每个组,并显示指定用户的名称(仅本地组和帐户)。指定的用户名应仅是脚本中的参数。如果不声明用户名,脚本应使用运行脚本的用户名。如果我们声明的用户名不是系统中当前的用户名,则脚本不会显示任何内容,因此不会出现错误。
这是我的第一个脚本作业,我了解基本编程算法的工作原理。不幸的是,我对Powershell中的脚本不熟悉。如果有人能伸出援手,写剧本或展示一些指导性的教程,我将感到非常高兴。
答案 0 :(得分:2)
至于……
显然,Get-ADPrincipalGroupMembership不是这种方式
...这实际上不是一个有效的声明,并且在此站点上,您的用例中有几个问答。基本上就是这样。
# Get users with base properties and their group membership, display user and group name
ForEach ($TargetUser in (Get-ADUser -Filter *))
{
"`n" + "-"*12 + " Showing group membership for " + $TargetUser.SamAccountName
Get-ADPrincipalGroupMembership -Identity $TargetUser.SamAccountName | Select Name
}
# Results
------------ Showing group membership for Administrator
Name
----
Domain Users
Administrators
...
------------ Showing group membership for Guest
Domain Guests
Guests
OP更新
我使用了cmdlet来解释您所使用的内容。 如果您使用的是PowerShell v5,则已经有本地组cmdlet。
Get-Command -Name *LocalUser*
# Results
CommandType Name
Cmdlet Disable-LocalUser
Cmdlet Enable-LocalUser
Cmdlet Get-LocalUser
Cmdlet New-LocalUser
Cmdlet Remove-LocalUser
Cmdlet Rename-LocalUser
Cmdlet Set-LocalUser
Get-Command -Name *LocalGroup*
# Results
CommandType Name
Cmdlet Add-LocalGroupMember
Cmdlet Get-LocalGroup
Cmdlet Get-LocalGroupMember
Cmdlet New-LocalGroup
Cmdlet Remove-LocalGroup
Cmdlet Remove-LocalGroupMember
Cmdlet Rename-LocalGroup
Cmdlet Set-LocalGroup
然后做这样的事情...
Clear-Host
$LocalUserName = Read-Host -Prompt 'Enter a username'
# If no user is passed, list all
If($LocalUserName -eq '')
{
ForEach($GroupName in Get-LocalGroup)
{
Get-LocalGroupMember -Group "$($GroupName.Name)" |
Select @{n='GroupName';e={$($GroupName.Name)}},Name
}
}
Else
{
# process only the user passed
Get-LocalGroup |
%{
If(Get-LocalGroupMember -Group "$($_.Name)" -Member $LocalUserName -ErrorAction SilentlyContinue)
{
[PSCustomObject]@{
GroupName = $_.Name
Username = $LocalUserName
}
}
}
}
如果使用较低版本,则可以使用PowerShellGallery.com模块或直接使用ADSI。这个站点和整个网络上都有很多关于此的文章和示例。
示例:
LocalUserManagement 3.0 执行各种本地用户管理功能的模块
另请参阅: