2020-03-24 11:08:37 -07:00
|
|
|
|
# Copyright (c) Microsoft Corporation.
|
2018-02-13 09:23:53 -08:00
|
|
|
|
# Licensed under the MIT License.
|
2016-09-14 09:13:13 -07:00
|
|
|
|
|
2017-07-19 17:20:35 -07:00
|
|
|
|
# Module removed due to #4272
|
|
|
|
|
|
# disabling tests
|
|
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
2016-09-14 09:13:13 -07:00
|
|
|
|
function IsWin10OrHigher
|
|
|
|
|
|
{
|
|
|
|
|
|
$version = [system.environment]::osversion.version
|
|
|
|
|
|
|
|
|
|
|
|
return ($version.Major -ge 10)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function RemoveTestUsers
|
|
|
|
|
|
{
|
|
|
|
|
|
param([string] $basename)
|
|
|
|
|
|
|
|
|
|
|
|
$results = Get-LocalUser $basename*
|
|
|
|
|
|
foreach ($element in $results) {
|
|
|
|
|
|
Remove-LocalUser -SID $element.SID
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function RemoveTestGroups
|
|
|
|
|
|
{
|
|
|
|
|
|
param([string] $basename)
|
|
|
|
|
|
|
|
|
|
|
|
$results = Get-LocalGroup $basename*
|
|
|
|
|
|
foreach ($element in $results) {
|
|
|
|
|
|
Remove-LocalGroup -SID $element.SID
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function VerifyFailingTest
|
|
|
|
|
|
{
|
|
|
|
|
|
param(
|
|
|
|
|
|
[scriptblock] $sb,
|
|
|
|
|
|
[string] $expectedFqeid
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
$backupEAP = $script:ErrorActionPreference
|
|
|
|
|
|
$script:ErrorActionPreference = "Stop"
|
|
|
|
|
|
|
2016-09-21 14:36:48 -07:00
|
|
|
|
try {
|
2016-09-14 09:13:13 -07:00
|
|
|
|
& $sb
|
|
|
|
|
|
throw "Expected error: $expectedFqeid"
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
catch {
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$_.FullyQualifiedErrorId | Should -Be $expectedFqeid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
2016-09-14 09:13:13 -07:00
|
|
|
|
finally {
|
|
|
|
|
|
$script:ErrorActionPreference = $backupEAP
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2016-09-21 14:36:48 -07:00
|
|
|
|
try {
|
|
|
|
|
|
#skip all tests on non-windows platform
|
|
|
|
|
|
$originalDefaultParameterValues = $PSDefaultParameterValues.Clone()
|
|
|
|
|
|
$IsNotSkipped = ($IsWindows -eq $true);
|
|
|
|
|
|
$PSDefaultParameterValues["it:skip"] = !$IsNotSkipped
|
2016-09-14 09:13:13 -07:00
|
|
|
|
|
2016-09-21 14:36:48 -07:00
|
|
|
|
Describe "Verify Expected LocalGroupMember Cmdlets are present" -Tags "CI" {
|
2016-09-14 09:13:13 -07:00
|
|
|
|
|
2016-09-21 14:36:48 -07:00
|
|
|
|
It "Test command presence" {
|
2017-07-22 05:03:49 +01:00
|
|
|
|
$result = Get-Command -Module Microsoft.PowerShell.LocalAccounts | ForEach-Object Name
|
2016-09-14 09:13:13 -07:00
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result -contains "Add-LocalGroupMember" | Should -BeTrue
|
|
|
|
|
|
$result -contains "Get-LocalGroupMember" | Should -BeTrue
|
|
|
|
|
|
$result -contains "Remove-LocalGroupMember" | Should -BeTrue
|
2016-09-14 09:13:13 -07:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2016-09-27 17:11:39 -07:00
|
|
|
|
Describe "Validate simple Add-LocalGroupMember" -Tags @('CI', 'RequireAdminOnWindows') {
|
2016-09-21 14:36:48 -07:00
|
|
|
|
|
|
|
|
|
|
BeforeEach {
|
|
|
|
|
|
if ($IsNotSkipped) {
|
|
|
|
|
|
$user1sid = [String](New-LocalUser TestUser1 -NoPassword).SID
|
|
|
|
|
|
$group1sid = [String](New-LocalGroup TestGroup1).SID
|
|
|
|
|
|
}
|
2016-09-14 09:13:13 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
2016-09-21 14:36:48 -07:00
|
|
|
|
AfterEach {
|
|
|
|
|
|
if ($IsNotSkipped) {
|
|
|
|
|
|
RemoveTestGroups -basename TestGroup
|
|
|
|
|
|
RemoveTestUsers -basename TestUser
|
|
|
|
|
|
}
|
2016-09-14 09:13:13 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
2016-09-21 14:36:48 -07:00
|
|
|
|
It "Can add local user to group by name" {
|
2016-09-14 09:13:13 -07:00
|
|
|
|
Add-LocalGroupMember TestGroup1 -Member TestUser1
|
2016-09-21 14:36:48 -07:00
|
|
|
|
$result = Get-LocalGroupMember TestGroup1
|
2016-09-14 09:13:13 -07:00
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Name.EndsWith("TestUser1") | Should -BeTrue
|
|
|
|
|
|
$result.SID | Should -Be $user1sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
2016-09-14 09:13:13 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
2016-09-27 17:11:39 -07:00
|
|
|
|
Describe "Validate Add-LocalGroupMember cmdlet" -Tags @('Feature', 'RequireAdminOnWindows') {
|
2016-09-21 14:36:48 -07:00
|
|
|
|
|
|
|
|
|
|
BeforeAll {
|
|
|
|
|
|
$OptDomainPrefix="(.+\\)?"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BeforeEach {
|
|
|
|
|
|
if ($IsNotSkipped) {
|
|
|
|
|
|
$user1sid = [String](New-LocalUser TestUser1 -NoPassword).SID
|
|
|
|
|
|
$user2sid = [String](New-LocalUser TestUser2 -NoPassword).SID
|
|
|
|
|
|
$group1sid = [String](New-LocalGroup TestGroup1).SID
|
|
|
|
|
|
$group2sid = [String](New-LocalGroup TestGroup2).SID
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
AfterEach {
|
|
|
|
|
|
if ($IsNotSkipped) {
|
|
|
|
|
|
RemoveTestGroups -basename TestGroup
|
|
|
|
|
|
RemoveTestUsers -basename TestUser
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2017-10-27 05:12:19 +08:00
|
|
|
|
|
2016-09-21 14:36:48 -07:00
|
|
|
|
It "Can add user to group using SID" {
|
|
|
|
|
|
Add-LocalGroupMember -SID $group1sid -Member TestUser1
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroup1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Name.EndsWith("TestUser1") | Should -BeTrue
|
|
|
|
|
|
$result.SID | Should -Be $user1sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can add user to group using group object" {
|
|
|
|
|
|
$groupObject = Get-LocalGroup TestGroup1
|
|
|
|
|
|
Add-LocalGroupMember -Group $groupObject -Member TestUser1
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroup1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Name.EndsWith("TestUser1") | Should -BeTrue
|
|
|
|
|
|
$result.SID | Should -Be $user1sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can add user to group using pipeline" {
|
|
|
|
|
|
Get-LocalUser TestUser1 | Add-LocalGroupMember -Name TestGroup1
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroup1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Name.EndsWith("TestUser1") | Should -BeTrue
|
|
|
|
|
|
$result.SID | Should -Be $user1sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Errors on missing group parameter value missing" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Add-LocalGroupMember -Member TestUser1
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "AmbiguousParameterSet,Microsoft.PowerShell.Commands.AddLocalGroupMemberCommand"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Errors on missing user parameter value missing" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Add-LocalGroupMember TestGroup1 -Member
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "MissingArgument,Microsoft.PowerShell.Commands.AddLocalGroupMemberCommand"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Errors on adding group to group" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Add-LocalGroupMember TestGroup1 TestGroup2
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "Internal,Microsoft.PowerShell.Commands.AddLocalGroupMemberCommand"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can add array of members to group" {
|
|
|
|
|
|
Add-LocalGroupMember TestGroup1 -Member @("TestUser1", "TestUser2")
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroup1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].Name -match ($OptDomainPrefix + "TestUser1") | Should -BeTrue
|
|
|
|
|
|
$result[1].Name -match ($OptDomainPrefix + "TestUser2") | Should -BeTrue
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can add array of user SIDs to group" {
|
|
|
|
|
|
Add-LocalGroupMember TestGroup1 -Member @($user1sid, $user2sid)
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroup1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].Name -match ($OptDomainPrefix + "TestUser1") | Should -BeTrue
|
|
|
|
|
|
$result[1].Name -match ($OptDomainPrefix + "TestUser2") | Should -BeTrue
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can add array of users names or SIDs to group" {
|
|
|
|
|
|
Add-LocalGroupMember TestGroup1 -Member @($user1sid, "TestUser2")
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroup1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].Name -match ($OptDomainPrefix + "TestUser1") | Should -BeTrue
|
|
|
|
|
|
$result[1].Name -match ($OptDomainPrefix + "TestUser2") | Should -BeTrue
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can add array of user names using pipeline" {
|
|
|
|
|
|
@("TestUser1", "TestUser2") | Add-LocalGroupMember TestGroup1
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroup1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].Name -match ($OptDomainPrefix + "TestUser1") | Should -BeTrue
|
|
|
|
|
|
$result[1].Name -match ($OptDomainPrefix + "TestUser2") | Should -BeTrue
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can add array of existent and nonexistent users names to group" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Add-LocalGroupMember TestGroup1 -Member @("TestUser1", "TestNonexistentUser", "TestUser2")
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "PrincipalNotFound,Microsoft.PowerShell.Commands.AddLocalGroupMemberCommand"
|
|
|
|
|
|
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroup1
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Name -match ($OptDomainPrefix + "TestUser1") | Should -BeTrue
|
|
|
|
|
|
$result.Name -match ($OptDomainPrefix + "TestUser2") | Should -BeFalse
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Errors on adding user to group by name twice" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Add-LocalGroupMember TestGroup1 -Member TestUser1
|
|
|
|
|
|
Add-LocalGroupMember TestGroup1 -Member TestUser1
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "MemberExists,Microsoft.PowerShell.Commands.AddLocalGroupMemberCommand"
|
|
|
|
|
|
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroup1
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Name.EndsWith("TestUser1") | Should -BeTrue
|
|
|
|
|
|
$result.SID | Should -Be $user1sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Errors on adding nonexistent user to group" {
|
|
|
|
|
|
$sb = {
|
2020-05-07 13:00:30 +01:00
|
|
|
|
Add-LocalGroupMember -Name TestGroup1 -Member TestNonexistentUser1
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "PrincipalNotFound,Microsoft.PowerShell.Commands.AddLocalGroupMemberCommand"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Errors on adding user to nonexistent group" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Add-LocalGroupMember TestNonexistentGroup1 -Member TestUser1 -ErrorAction Stop
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "GroupNotFound,Microsoft.PowerShell.Commands.AddLocalGroupMemberCommand"
|
|
|
|
|
|
}
|
2017-10-27 05:12:19 +08:00
|
|
|
|
|
2016-09-21 14:36:48 -07:00
|
|
|
|
It "Can respond to -ErrorAction Stop" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Add-LocalGroupMember TestGroup1 -Member @("TestUser1", "TestNonexistentUser1", "TestNonexistentUser2") -ErrorAction Stop -ErrorVariable OutputError | Out-Null
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "PrincipalNotFound,Microsoft.PowerShell.Commands.AddLocalGroupMemberCommand"
|
|
|
|
|
|
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroup1
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Name -match ($OptDomainPrefix + "TestUser1") | Should -BeTrue
|
2016-09-14 09:13:13 -07:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2016-09-27 17:11:39 -07:00
|
|
|
|
Describe "Validate simple Get-LocalGroupMember" -Tags @('CI', 'RequireAdminOnWindows') {
|
2016-09-14 09:13:13 -07:00
|
|
|
|
|
2016-09-21 14:36:48 -07:00
|
|
|
|
BeforeEach {
|
|
|
|
|
|
if ($IsNotSkipped) {
|
|
|
|
|
|
$user1 = New-LocalUser TestUserGet1 -NoPassword
|
|
|
|
|
|
$group1 = New-LocalGroup TestGroupGet1
|
|
|
|
|
|
Add-LocalGroupMember TestGroupGet1 -Member TestUserGet1
|
|
|
|
|
|
$user1sid = [String]($user1.SID)
|
|
|
|
|
|
$group1sid = [String]($group1.SID)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
AfterEach {
|
|
|
|
|
|
if ($IsNotSkipped) {
|
|
|
|
|
|
RemoveTestGroups -basename TestGroupGet
|
|
|
|
|
|
RemoveTestUsers -basename TestUserGet
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can get a local group member by name" {
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupGet1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Name.EndsWith("TestUserGet1") | Should -BeTrue
|
|
|
|
|
|
$result.SID | Should -Be $user1sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
if (IsWin10OrHigher)
|
|
|
|
|
|
{
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.PrincipalSource | Should -Be Local
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.ObjectClass | Should -Be User
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2016-09-27 17:11:39 -07:00
|
|
|
|
Describe "Validate Get-LocalGroupMember cmdlet" -Tags @('Feature', 'RequireAdminOnWindows') {
|
2016-09-21 14:36:48 -07:00
|
|
|
|
|
|
|
|
|
|
BeforeAll {
|
|
|
|
|
|
$OptDomainPrefix="(.+\\)?"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BeforeEach {
|
|
|
|
|
|
if ($IsNotSkipped) {
|
|
|
|
|
|
$user1 = New-LocalUser TestUserGet1 -NoPassword
|
|
|
|
|
|
$user2 = New-LocalUser TestUserGet2 -NoPassword
|
|
|
|
|
|
$group1 = New-LocalGroup TestGroupGet1
|
|
|
|
|
|
$group2 = New-LocalGroup TestGroupGet2
|
|
|
|
|
|
Add-LocalGroupMember TestGroupGet1 -Member TestUserGet1
|
|
|
|
|
|
Add-LocalGroupMember TestGroupGet1 -Member TestUserGet2
|
|
|
|
|
|
$user1sid = [String]($user1.SID)
|
|
|
|
|
|
$user2sid = [String]($user2.SID)
|
|
|
|
|
|
$group1sid = [String]($group1.SID)
|
|
|
|
|
|
$group2sid = [String]($group2.SID)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
AfterEach {
|
|
|
|
|
|
if ($IsNotSkipped) {
|
|
|
|
|
|
RemoveTestGroups -basename TestGroupGet
|
|
|
|
|
|
RemoveTestUsers -basename TestUserGet
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can get all group members by name" {
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupGet1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].Name.EndsWith("TestUserGet1") | Should -BeTrue
|
|
|
|
|
|
$result[0].SID | Should -Be $user1sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
if (IsWin10OrHigher)
|
|
|
|
|
|
{
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].PrincipalSource | Should -Be Local
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].ObjectClass | Should -Be User
|
|
|
|
|
|
$result[1].Name.EndsWith("TestUserGet2") | Should -BeTrue
|
|
|
|
|
|
$result[1].SID | Should -Be $user2sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
if (IsWin10OrHigher)
|
|
|
|
|
|
{
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[1].PrincipalSource | Should -Be Local
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[1].ObjectClass | Should -Be User
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can get all group members by SID" {
|
|
|
|
|
|
$result = Get-LocalGroupMember -SID $group1sid
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].Name.EndsWith("TestUserGet1") | Should -BeTrue
|
|
|
|
|
|
$result[0].SID | Should -Be $user1sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
if (IsWin10OrHigher)
|
|
|
|
|
|
{
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].PrincipalSource | Should -Be Local
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].ObjectClass | Should -Be User
|
|
|
|
|
|
$result[1].Name.EndsWith("TestUserGet2") | Should -BeTrue
|
|
|
|
|
|
$result[1].SID | Should -Be $user2sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
if (IsWin10OrHigher)
|
|
|
|
|
|
{
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[1].PrincipalSource | Should -Be Local
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[1].ObjectClass | Should -Be User
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can get all group members by Group object" {
|
|
|
|
|
|
$group = Get-LocalGroup TestGroupGet1
|
|
|
|
|
|
$result = Get-LocalGroupMember -Group $group
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].Name.EndsWith("TestUserGet1") | Should -BeTrue
|
|
|
|
|
|
$result[0].SID | Should -Be $user1sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
if (IsWin10OrHigher)
|
|
|
|
|
|
{
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].PrincipalSource | Should -Be Local
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].ObjectClass | Should -Be User
|
|
|
|
|
|
$result[1].Name.EndsWith("TestUserGet2") | Should -BeTrue
|
|
|
|
|
|
$result[1].SID | Should -Be $user2sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
if (IsWin10OrHigher)
|
|
|
|
|
|
{
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[1].PrincipalSource | Should -Be Local
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[1].ObjectClass | Should -Be User
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can get all group members by pipeline" {
|
|
|
|
|
|
$result = Get-LocalGroup TestGroupGet1 | Get-LocalGroupMember
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].Name.EndsWith("TestUserGet1") | Should -BeTrue
|
|
|
|
|
|
$result[0].SID | Should -Be $user1sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
if (IsWin10OrHigher)
|
|
|
|
|
|
{
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].PrincipalSource | Should -Be Local
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[0].ObjectClass | Should -Be User
|
|
|
|
|
|
$result[1].Name.EndsWith("TestUserGet2") | Should -BeTrue
|
|
|
|
|
|
$result[1].SID | Should -Be $user2sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
if (IsWin10OrHigher)
|
|
|
|
|
|
{
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[1].PrincipalSource | Should -Be Local
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result[1].ObjectClass | Should -Be User
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can get group members by wildcard" {
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupGet1 -Member TestUserGet*
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Count -eq 2 | Should -BeTrue
|
|
|
|
|
|
$result[0].Name -match ($OptDomainPrefix+"TestUserGet1") | Should -BeTrue
|
|
|
|
|
|
$result[1].Name -match ($OptDomainPrefix + "TestUserGet2") | Should -BeTrue
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Errors on group name being nonexistent" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Get-LocalGroupMember NonexistentGroup
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "GroupNotFound,Microsoft.PowerShell.Commands.GetLocalGroupMemberCommand"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can get specific group member by name" {
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupGet1 -Member TestUserGet1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Name.EndsWith("TestUserGet1") | Should -BeTrue
|
|
|
|
|
|
$result.SID | Should -Be $user1sid
|
2016-09-21 14:36:48 -07:00
|
|
|
|
if (IsWin10OrHigher)
|
|
|
|
|
|
{
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.PrincipalSource | Should -Be Local
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.ObjectClass | Should -Be User
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#TODO: 10.A valid user attempts to get membership from a group to which they don't have access
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2016-09-27 17:11:39 -07:00
|
|
|
|
Describe "Validate simple Remove-LocalGroupMember" -Tags @('CI', 'RequireAdminOnWindows') {
|
2016-09-21 14:36:48 -07:00
|
|
|
|
|
|
|
|
|
|
BeforeEach {
|
|
|
|
|
|
if ($IsNotSkipped) {
|
|
|
|
|
|
$user1 = New-LocalUser TestUserRemove1 -NoPassword
|
|
|
|
|
|
$group1 = New-LocalGroup TestGroupRemove1
|
|
|
|
|
|
Add-LocalGroupMember TestGroupRemove1 -Member TestUserRemove1
|
|
|
|
|
|
$user1sid = [String]($user1.SID)
|
|
|
|
|
|
$group1sid = [String]($group1.SID)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
AfterEach {
|
|
|
|
|
|
if ($IsNotSkipped) {
|
|
|
|
|
|
RemoveTestGroups -basename TestGroupRemove
|
|
|
|
|
|
RemoveTestUsers -basename TestUserRemove
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can remove a local group member by name" {
|
|
|
|
|
|
Remove-LocalGroupMember TestGroupRemove1 -Member TestUserRemove1
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupRemove1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result | Should -Be $null
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2016-09-27 17:11:39 -07:00
|
|
|
|
Describe "Validate Remove-LocalGroupMember cmdlet" -Tags @('Feature', 'RequireAdminOnWindows') {
|
2016-09-21 14:36:48 -07:00
|
|
|
|
|
|
|
|
|
|
BeforeEach {
|
|
|
|
|
|
if ($IsNotSkipped) {
|
|
|
|
|
|
$user1 = New-LocalUser TestUserRemove1 -NoPassword
|
|
|
|
|
|
$user2 = New-LocalUser TestUserRemove2 -NoPassword
|
|
|
|
|
|
$group1 = New-LocalGroup TestGroupRemove1
|
|
|
|
|
|
$group2 = New-LocalGroup TestGroupRemove2
|
|
|
|
|
|
Add-LocalGroupMember TestGroupRemove1 -Member TestUserRemove1
|
|
|
|
|
|
Add-LocalGroupMember TestGroupRemove1 -Member TestUserRemove2
|
|
|
|
|
|
$user1sid = [String]($user1.SID)
|
|
|
|
|
|
$user2sid = [String]($user2.SID)
|
|
|
|
|
|
$group1sid = [String]($group1.SID)
|
|
|
|
|
|
$group2sid = [String]($group2.SID)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
AfterEach {
|
|
|
|
|
|
if ($IsNotSkipped) {
|
|
|
|
|
|
RemoveTestGroups -basename TestGroupRemove
|
|
|
|
|
|
RemoveTestUsers -basename TestUserRemove
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can remove a group member by name" {
|
|
|
|
|
|
Remove-LocalGroupMember TestGroupRemove1 -Member TestUserRemove2
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupRemove1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Name.EndsWith("TestUserRemove1") | Should -BeTrue
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can remove a group member by SID" {
|
|
|
|
|
|
Remove-LocalGroupMember -SID $group1sid -Member TestUserRemove2
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupRemove1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Name.EndsWith("TestUserRemove1") | Should -BeTrue
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can remove a group member by Group object" {
|
|
|
|
|
|
$group = Get-LocalGroup TestGroupRemove1
|
|
|
|
|
|
Remove-LocalGroupMember -Group $group -Member TestUserRemove2
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupRemove1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Name.EndsWith("TestUserRemove1") | Should -BeTrue
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can remove a group member by pipeline" {
|
|
|
|
|
|
Get-LocalUser TestUserRemove2 | Remove-LocalGroupMember -Name TestGroupRemove1
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupRemove1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Name.EndsWith("TestUserRemove1") | Should -BeTrue
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Errors on group argument missing" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Remove-LocalGroupMember -Member TestUserRemove2
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "AmbiguousParameterSet,Microsoft.PowerShell.Commands.RemoveLocalGroupMemberCommand"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Errors on member argument missing" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Remove-LocalGroupMember TestGroupRemove1 -Member
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "MissingArgument,Microsoft.PowerShell.Commands.RemoveLocalGroupMemberCommand"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Errors on remove a group member not in the group" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Remove-LocalGroupMember TestGroupRemove2 -Member TestUserRemove2
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "MemberNotFound,Microsoft.PowerShell.Commands.RemoveLocalGroupMemberCommand"
|
|
|
|
|
|
}
|
2017-10-27 05:12:19 +08:00
|
|
|
|
|
2016-09-21 14:36:48 -07:00
|
|
|
|
It "Errors on remove group members by array of name" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Remove-LocalGroupMember TestGroupRemove2 -Member TestUserRemove2
|
|
|
|
|
|
Get-LocalGroupMember TestGroupRemove1
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "MemberNotFound,Microsoft.PowerShell.Commands.RemoveLocalGroupMemberCommand"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can remove array of user names from group" {
|
|
|
|
|
|
Remove-LocalGroupMember TestGroupRemove1 -Member @("TestUserRemove1", "TestUserRemove2")
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupRemove1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result | Should -Be $null
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can remove array of user SIDs from group" {
|
|
|
|
|
|
Remove-LocalGroupMember TestGroupRemove1 -Member @($user1sid, $user2sid)
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupRemove1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result | Should -Be $null
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can remove array of users names or SIDs from group" {
|
|
|
|
|
|
Remove-LocalGroupMember TestGroupRemove1 -Member @($user1sid, "TestUserRemove2")
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupRemove1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result | Should -Be $null
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can remove array of user names using pipeline" {
|
|
|
|
|
|
$name1 = (Get-LocalUser "TestUserRemove1").Name
|
|
|
|
|
|
$name2 = (Get-LocalUser "TestUserRemove2").Name
|
|
|
|
|
|
@($name1, $name2) | Remove-LocalGroupMember TestGroupRemove1
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupRemove1
|
|
|
|
|
|
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result | Should -Be $null
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Errors on remove nonexistent user from group" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Remove-LocalGroupMember TestGroupRemove1 -Member TestNonexistentUser1
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "PrincipalNotFound,Microsoft.PowerShell.Commands.RemoveLocalGroupMemberCommand"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Errors on remove user from nonexistent group" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Remove-LocalGroupMember TestNonexistentGroup1 -Member TestUserRemove1 -ErrorAction Stop
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "GroupNotFound,Microsoft.PowerShell.Commands.RemoveLocalGroupMemberCommand"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#TODO: 16.A valid user attempts to remove a user/group from a group to which they don’t have access
|
|
|
|
|
|
|
|
|
|
|
|
It "Can remove array of existent and nonexistent users names from group" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Remove-LocalGroupMember TestGroupRemove1 -Member @("TestUserRemove1", "TestNonexistentUser", "TestUserRemove2")
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "PrincipalNotFound,Microsoft.PowerShell.Commands.RemoveLocalGroupMemberCommand"
|
|
|
|
|
|
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupRemove2
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result | Should -Be $null
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Errors on remove user from nonexistent group" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Remove-LocalGroupMember TestGroupRemove1 -Member TestGroupRemove2 -ErrorAction Stop
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "MemberNotFound,Microsoft.PowerShell.Commands.RemoveLocalGroupMemberCommand"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
It "Can respond to -ErrorAction Stop" {
|
|
|
|
|
|
$sb = {
|
|
|
|
|
|
Remove-LocalGroupMember TestGroupRemove1 -Member @("TestUserRemove1", "TestNonexistentUser1", "TestUserRemove2") -ErrorAction Stop -ErrorVariable outError | Out-Null
|
|
|
|
|
|
}
|
|
|
|
|
|
VerifyFailingTest $sb "PrincipalNotFound,Microsoft.PowerShell.Commands.RemoveLocalGroupMemberCommand"
|
|
|
|
|
|
|
|
|
|
|
|
$result = Get-LocalGroupMember TestGroupRemove1 2>&1
|
2020-01-11 15:41:59 +00:00
|
|
|
|
$result.Name -match ($OptDomainPrefix + "TestUserRemove2") | Should -BeTrue
|
2016-09-21 14:36:48 -07:00
|
|
|
|
}
|
2016-09-14 09:13:13 -07:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2016-09-21 14:36:48 -07:00
|
|
|
|
finally {
|
|
|
|
|
|
$global:PSDefaultParameterValues = $originalDefaultParameterValues
|
2016-09-14 09:13:13 -07:00
|
|
|
|
}
|