netapi32/NetLocalGroupDelMembers.ps1
function NetLocalGroupDelMembers { <# .SYNOPSIS Deletes a specified member from a specific local group on the local (or remote) machine. .DESCRIPTION This function will execute the NetLocalGroupDelMembers Win32API call to delete a specified member from the specified local group on a specified host. .PARAMETER ComputerName Specifies the hostname to delete the local group member from (also accepts IP addresses). Defaults to 'localhost'. .PARAMETER MemberName The member to delete from the local group, in COMPUTER\member or DOMAIN\member syntax. .PARAMETER GroupName The local group name to delete the member from. If not given, it defaults to "Administrators". .NOTES Author: Will Schroeder (@harmj0y) License: BSD 3-Clause Required Dependencies: PSReflect Optional Dependencies: None (func netapi32 NetLocalGroupDelMembers ([Int32]) @( [String], # _In_ LPCWSTR servername [String], # _In_ LPCWSTR groupname [Int32], # _In_ DWORD level [IntPtr], # _In_ LPBYTE buf [Int32] # _In_ DWORD totalentries ) -EntryPoint NetLocalGroupDelMembers) .LINK https://msdn.microsoft.com/en-us/library/windows/desktop/aa370439(v=vs.85).aspx .EXAMPLE #> [CmdletBinding()] Param( [Parameter(Position = 0, ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)] [Alias('HostName', 'dnshostname', 'name')] [ValidateNotNullOrEmpty()] [String[]] $ComputerName = 'localhost', [Parameter(Position = 1, Mandatory = $True, ValueFromPipelineByPropertyName = $True)] [ValidatePattern('.*\\.*')] [String] $MemberName, [Parameter(Position = 2, ValueFromPipelineByPropertyName = $True)] [ValidateNotNullOrEmpty()] [String] $GroupName = 'Administrators' ) PROCESS { ForEach ($Computer in $ComputerName) { $MemberStruct = [Activator]::CreateInstance($LOCALGROUP_MEMBERS_INFO_3) $MemberStruct.lgrmi3_domainandname = $MemberName [IntPtr]$MemberStructPtr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($LOCALGROUP_MEMBERS_INFO_3::GetSize()) [Runtime.InteropServices.Marshal]::StructureToPtr($MemberStruct, $MemberStructPtr, $false) $Result = $Netapi32::NetLocalGroupDelMembers($Computer, $GroupName, 3, $MemberStructPtr, 1) [System.Runtime.InteropServices.Marshal]::FreeHGlobal($MemberStructPtr) if ($Result -eq 0) { Write-Verbose "Member '$MemberName' successfully delete from local group '$GroupName' on server '$Computer'" } else { Throw "[NetLocalGroupDelMembers] Error deleting member '$MemberName' from local group '$GroupName' on server '$Computer' : $(([ComponentModel.Win32Exception]$Result).Message)" } } } } |