mirror of
https://github.com/aphrody-labs/PowerShell.git
synced 2026-10-17 20:56:02 +00:00
215 lines
6.7 KiB
C#
215 lines
6.7 KiB
C#
#region Using directives
|
|||
|
|
using System;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using System.Management.Automation;
|
||
|
|
|
||
|
|
using System.Management.Automation.SecurityAccountsManager;
|
||
|
|
using System.Management.Automation.SecurityAccountsManager.Extensions;
|
||
|
|
|
||
|
|
using Microsoft.PowerShell.LocalAccounts;
|
||
|
|
using System.Diagnostics.CodeAnalysis;
|
||
|
|
#endregion
|
||
|
|
|
||
|
|
|
||
|
|
namespace Microsoft.PowerShell.Commands
|
||
|
|
{
|
||
|
|
/// <summary>
|
||
|
|
/// The Disable-LocalUser cmdlet disables local user accounts. When a user
|
||
|
|
/// account is disabled, the user is not permitted to log on. When a user
|
||
|
|
/// account is enabled, the user is permitted to log on normally.
|
||
|
|
/// </summary>
|
||
|
|
[Cmdlet(VerbsLifecycle.Disable, "LocalUser",
|
||
|
|
SupportsShouldProcess = true,
|
||
|
|
HelpUri = "http://go.microsoft.com/fwlink/?LinkId=717986")]
|
||
|
|
[Alias("dlu")]
|
||
|
|
public class DisableLocalUserCommand : Cmdlet
|
||
|
|
{
|
||
|
|
#region Constants
|
||
|
|
private const Enabling enabling = Enabling.Disable;
|
||
|
|
#endregion Constants
|
||
|
|
|
||
|
|
#region Instance Data
|
||
|
|
private Sam sam = null;
|
||
|
|
#endregion Instance Data
|
||
|
|
|
||
|
|
#region Parameter Properties
|
||
|
|
/// <summary>
|
||
|
|
/// The following is the definition of the input parameter "InputObject".
|
||
|
|
/// Specifies the of the local user accounts to disable in the local Security
|
||
|
|
/// Accounts Manager.
|
||
|
|
/// </summary>
|
||
|
|
[Parameter(Mandatory = true,
|
||
|
|
Position = 0,
|
||
|
|
ValueFromPipeline = true,
|
||
|
|
ValueFromPipelineByPropertyName = true,
|
||
|
|
ParameterSetName = "InputObject")]
|
||
|
|
[ValidateNotNullOrEmpty]
|
||
|
|
[SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
|
||
|
|
public Microsoft.PowerShell.Commands.LocalUser[] InputObject
|
||
|
|
{
|
||
|
|
get { return this.inputobject; }
|
||
|
|
set { this.inputobject = value; }
|
||
|
|
}
|
||
|
|
private Microsoft.PowerShell.Commands.LocalUser[] inputobject;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// The following is the definition of the input parameter "Name".
|
||
|
|
/// Specifies the names of the local user accounts to disable in the local
|
||
|
|
/// Security Accounts Manager.
|
||
|
|
/// </summary>
|
||
|
|
[Parameter(Mandatory = true,
|
||
|
|
Position = 0,
|
||
|
|
ValueFromPipeline = true,
|
||
|
|
ValueFromPipelineByPropertyName = true,
|
||
|
|
ParameterSetName = "Default")]
|
||
|
|
[ValidateNotNullOrEmpty]
|
||
|
|
[SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
|
||
|
|
public string[] Name
|
||
|
|
{
|
||
|
|
get { return this.name; }
|
||
|
|
set { this.name = value; }
|
||
|
|
}
|
||
|
|
private string[] name;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// The following is the definition of the input parameter "SID".
|
||
|
|
/// Specifies the LocalUser accounts to disable by
|
||
|
|
/// System.Security.Principal.SecurityIdentifier.
|
||
|
|
/// </summary>
|
||
|
|
[Parameter(Mandatory = true,
|
||
|
|
Position = 0,
|
||
|
|
ValueFromPipeline = true,
|
||
|
|
ValueFromPipelineByPropertyName = true,
|
||
|
|
ParameterSetName = "SecurityIdentifier")]
|
||
|
|
[ValidateNotNullOrEmpty]
|
||
|
|
[SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
|
||
|
|
public System.Security.Principal.SecurityIdentifier[] SID
|
||
|
|
{
|
||
|
|
get { return this.sid;}
|
||
|
|
set { this.sid = value; }
|
||
|
|
}
|
||
|
|
private System.Security.Principal.SecurityIdentifier[] sid;
|
||
|
|
#endregion Parameter Properties
|
||
|
|
|
||
|
|
|
||
|
|
#region Cmdlet Overrides
|
||
|
|
/// <summary>
|
||
|
|
/// BeginProcessing method.
|
||
|
|
/// </summary>
|
||
|
|
protected override void BeginProcessing()
|
||
|
|
{
|
||
|
|
sam = new Sam();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// ProcessRecord method.
|
||
|
|
/// </summary>
|
||
|
|
protected override void ProcessRecord()
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
ProcessUsers();
|
||
|
|
ProcessNames();
|
||
|
|
ProcessSids();
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
WriteError(ex.MakeErrorRecord());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// EndProcessing method.
|
||
|
|
/// </summary>
|
||
|
|
protected override void EndProcessing()
|
||
|
|
{
|
||
|
|
if (sam != null)
|
||
|
|
{
|
||
|
|
sam.Dispose();
|
||
|
|
sam = null;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
#endregion Cmdlet Overrides
|
||
|
|
|
||
|
|
#region Private Methods
|
||
|
|
/// <summary>
|
||
|
|
/// Process users requested by -Name
|
||
|
|
/// </summary>
|
||
|
|
/// <remarks>
|
||
|
|
/// All arguments to -Name will be treated as names,
|
||
|
|
/// even if a name looks like a SID.
|
||
|
|
/// </remarks>
|
||
|
|
private void ProcessNames()
|
||
|
|
{
|
||
|
|
if (Name != null)
|
||
|
|
{
|
||
|
|
foreach (var name in Name)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
if (CheckShouldProcess(name))
|
||
|
|
sam.EnableLocalUser(sam.GetLocalUser(name), enabling);
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
WriteError(ex.MakeErrorRecord());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// Process users requested by -SID
|
||
|
|
/// </summary>
|
||
|
|
private void ProcessSids()
|
||
|
|
{
|
||
|
|
if (SID != null)
|
||
|
|
{
|
||
|
|
foreach (var sid in SID)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
if (CheckShouldProcess(sid.ToString()))
|
||
|
|
sam.EnableLocalUser(sid, enabling);
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
WriteError(ex.MakeErrorRecord());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// Process users requested by -InputObject
|
||
|
|
/// </summary>
|
||
|
|
private void ProcessUsers()
|
||
|
|
{
|
||
|
|
if (InputObject != null)
|
||
|
|
{
|
||
|
|
foreach (var user in InputObject)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
if (CheckShouldProcess(user.Name))
|
||
|
|
sam.EnableLocalUser(user, enabling);
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
WriteError(ex.MakeErrorRecord());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private bool CheckShouldProcess(string target)
|
||
|
|
{
|
||
|
|
return ShouldProcess(target, Strings.ActionDisableUser);
|
||
|
|
}
|
||
|
|
#endregion Private Methods
|
||
|
|
}//End Class
|
||
|
|
|
||
|
|
}//End namespace
|
||
|
|
|