PowerShell2.0之桌面计算机维护(二)用户管理

原创 2011年01月08日 00:28:00

系统管理员的重要任务之一是管理用户,既允许用户做执行相应的操作,又要防止因权限设置不合理而潜在的用户越权操作。如在虚拟主机中设置的用户的主目录的权限有问题,其他用户可以采用..反溯到上级目录。进而访问其他用户的文件,直接造成这些文件的泄露,这个问题的解决方法是将每个用户的主目录权限设置为仅有管理员和用户本人可以访问,而拒绝其他人的访问。各用户的文件只是独立在自己的权限范围内,无法访问他人的文件,他人也无法访问自己的文件。

(1)创建本地用户

创建本地用户的方法通常使用net user和ADSI命令,也可以使用如图1所示的“新用户”对话框。

image

图1 “新用户”对话框

在cmd下可以直接使用net user命令创建用户。在PowerShell中使用ADSI方便而有效的创建本地用户和组,也可以使用WinNT ADSI Providernet user命令。本地账户没有域账户的多个属性,因而创建过程很简单。创建名为“CreateLocalUser.ps1”的脚本,其代码如下:

param($computer="localhost", $group, $help)

function funHelp()

{

$helpText=@"

DESCRIPTION:

NAME: CreateLocalGroup.ps1

Creates a local group on either a local or remote machine.

PARAMETERS:

-computer Specifies the name of the computer upon which to run the script

-group Name of group to create

-help prints help file

SYNTAX:

CreateLocalGroup.ps1

Generates an error. You must supply a group name

CreateLocalGroup.ps1 -computer WebServer -group MyGroup

Creates a local group called MyGroup on a computer named WebServer

CreateLocalGroup.ps1 -group Mygroup

Creates a local group called MyGroup on local computer

CreateLocalGroup.ps1 -help ?

Displays the help topic for the script

"@

$helpText

exit

}

if($help){ "Obtaining help ..." ; funhelp }

if(!$group)

{

$(Throw 'A value for $group is required.

Try this: CreateLocalGroup.ps1 -help ?')

}

$OBJou = [ADSI]"WinNT://$computer"

$objUser = $objOU.Create("Group", $group)

$objUser.SetInfo()

$objUser.description = "Test Group"

$objUser.SetInfo()

其中首先使用param语句定义了4个参数,即-computer、-user、-password和-help,随后定义了funhelp函数输出帮助信息。如果$help变量存在,则显示一条信息提示正在获取帮助文件,然后调用funhelp函数。接下来检查输入内容中的-user和-password参数是否被赋值,如果值不存在,则直接调用throw语句产生错误信息,并停止执行后续代码。

在用户名和密码均存在的前提下,脚本调用[ADSI]类型约束连接到本地计算机的账户数据库,并使用Create()方法利用$user变量中提供的用户名创建账户。随后调用SetPasswod()方法设置密码,并调用SetInfo()方法将其写入数据库。最后设置Description属性,并再次调用SetInfo()。

需要强调的是这个脚本中使用的SetInfo()方法仅在Windows Vista和Windows 2008以后版本的WMI模型中才出现,在Windows XP下安装的PowerShell中执行则报错。使用这个脚本创建用户的方法如下:

./CreateLocalUser.ps1 –computer localhost -user UserForTest -password Passw0rd#!

创建的用户能够在管理工具中看到。

(2)创建用户组

为了有效地控制访问本地资源(如共享文件夹、扫描仪或打印机),需要在Windows Vista或Windows 2008系统中创建本地用户组。这些本地用户组如图2所示。

image

图2 本地用户组

本地用户组同样使用工作组设置,与新建账户工具类似。计算机管理控制台中也提供了“新建组”对话框,如图3所示。

image

图3 “计算机管理”控制台中的“新建组”对话框

为了创建本地用户组,创建名为“CreateLocalGroup.ps1”的脚本,其代码如下:

param($computer="localhost", $group, $help)

function funHelp()

{

$helpText=@"

DESCRIPTION:

NAME: CreateLocalGroup.ps1

Creates a local group on either a local or remote machine.

PARAMETERS:

-computer Specifies the name of the computer upon which to run the script

-group Name of group to create

-help prints help file

SYNTAX:

CreateLocalGroup.ps1

Generates an error. You must supply a group name

CreateLocalGroup.ps1 -computer WebServer -group MyGroup

Creates a local group called MyGroup on a computer named WebServer

CreateLocalGroup.ps1 -group Mygroup

Creates a local group called MyGroup on local computer

CreateLocalGroup.ps1 -help ?

Displays the help topic for the script

"@

$helpText

exit

}

if($help){ "Obtaining help ..." ; funhelp }

if(!$group)

{

$(Throw 'A value for $group is required.

Try this: CreateLocalGroup.ps1 -help ?')

}

$OBJou = [ADSI]"WinNT://$computer"

$objUser = $objOU.Create("Group", $group)

$objUser.SetInfo()

$objUser.description = "Test Group"

$objUser.SetInfo()

其中首先使用param语句定义了3个参数,即-computer、-group及-help,并将-computer参数的默认值设置为localhost。然后定义funhelp函数输出帮助信息,当用户提供-help参数时将输出帮助信息。

在运行脚本时需要提供新建组的名称,如果未提供$group变量,则显示通过throw语句产生的错误信息。创建用户组不需要提供密码,使用该脚本创建用户组的方法如下:

./CreateLocalGroup.ps1 -group NewGroups

创建的用户组在计算机管理控制台中的本地组信息中显示,该脚本也使用了仅适用于Windows Vista和Windows 2008以上系统的SetInfo()方法。

(3)禁用或启用用户账号

本地用户账号主要用于访问本地资源或本地服务的账号,系统管理员可以禁用或启用特定账户来控制账户的可用性。

创建名为“EnableDisableUser.ps1”的脚本禁用或启用特定账户的权限,其代码如下:

param($computer="localhost", $a, $user, $password, $help)

function funHelp()

{

$helpText=@"

DESCRIPTION:

NAME: EnableDisableUser.ps1

Enables or Disables a local user on either a local or remote machine.

PARAMETERS:

-computer Specifies the name of the computer upon which to run the script

-a(ction) Action to perform < e(nable) d(isable) >

-user Name of user to modify

-help prints help file

SYNTAX:

EnableDisableUser.ps1

Generates an error. You must supply a user name

EnableDisableUser.ps1 -computer WebServer -user myUser

-password Passw0rd^&! -a e

Enables a local user called myUser on a computer named WebServer

with a password of Passw0rd^&!

EnableDisableUser.ps1 -user myUser -a d

Disables a local user called myUser on the local machine

EnableDisableUser.ps1 -help ?

Displays the help topic for the script

"@

$helpText

exit

}

$EnableUser = 512 # ADS_USER_FLAG_ENUM enumeration value from SDK

$DisableUser = 2 # ADS_USER_FLAG_ENUM enumeration value from SDK

if($help){ "Obtaining help ..." ; funhelp }

if(!$user)

{

$(Throw 'A value for $user is required.

Try this: EnableDisableUser.ps1 -help ?')

}

$ObjUser = [ADSI]"WinNT://$computer/$user"

switch($a)

{

"e" {

if(!$password)

{

$(Throw 'a value for $password is required.

Try this: EnableDisableUser.ps1 -help ?')

}

$objUser.setpassword($password)

$objUser.description = "Enabled Account"

$objUser.userflags = $EnableUser

$objUser.setinfo()

}

"d" {

$objUser.description = "Disabled Account"

$objUser.userflags = $DisableUser

$objUser.setinfo()

}

DEFAULT

{

"You must supply a value for the action.

Try this: EnableDisableUser.ps1 -help ?"

}

}

使用该脚本可以启用或禁用特定账户,并更改特定账号的密码。在脚本中首先使用param语句定义了5个参数,其中-compute指定执行该脚本的主机,默认为本机localhost;-a指定运行脚本执行的操作;-user和-password指定密码;-help调用funhelp函数显示帮助的内容。在funhelp函数之后声明了两个变量,其中包括ADS_USER_FLAG_ENUM枚举值,相关具体的内容可以参考Windows SDK,这些值可以用于启动或禁用用户账号。

需要强调的是虽然ADS_USER_FLAG_ENUM枚举值在Windows SDK中有详细说明,但是并没有介绍在PowerShell中的使用。由于无法获得PowerShell中IadsUser的直接支持,所以在VBScript中用于禁用账户的AccountDisabled布尔属性在PowerShell中无法继续使用。这样之前用于禁用账户的VBScript脚本不能移植到PowerShell中,而EnableDisableUser.ps1脚本并不能由VBScript转换而来。

定义这两个变量后需要测试help参数以确定是否显示帮助信息,在这个脚本中必须输入参数-user,即禁用或启用的用户名。如果该参数为空,系统将会抛出错误并停止后续语句的执行。检测到用户名后,使用[ADSI]类型约束符及WinNT Active Directory服务接口(ADSI)Provider连接到本地计算机的SAM账户数据库并获取用户对象。

获取用户对象之后使用switch语句判断$a变量的值,该变量用于指定脚本中执行的相应操作。如果要启用账户,那么需要为该账户设置密码,即为参数-a提供e(enable,启用)值。当-password参数未接收到密码时抛出异常提示用户查看帮助信息。如果密码存在,则调用SetPasswod方法为用户设置密码。并将用户Description(描述)属性修改为“Enable Account”,使用UserFlags属性值启用账户,最后调用SetInfo()方法将更改提交到SAM账户数据库。启用账户操作命令的标准格式如下:

./EnableDisableUser.ps1 -user UserForTest -password Passw0rd#! -a e

要禁用账户,为参数-a传递d(disable,禁用)值。并为UserFlags参数设置适当值,调用SetInfo()方法将更改提交给SAM账户数据库。在这里为了使演示效果更为明显,在调用SetInfo()方法之前将用户的Description(描述)属性改为disable Account。禁用账户操作命令的标准格式如下:

./EnableDisableUser.ps1 -user UserForTest -a d

如果用户未指定-a的参数为e或d,则脚本执行默认操作,在本例中会输出字符串提示用户查看帮助文件。启用或禁用用户的执行结果如图4所示。

image

图4 执行结果

作者: 付海军
出处:http://blog.csdn.net/fuhj02
版权:本文版权归作者和csdn共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://txj.lzuer.com/

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

PowerShell2.0之桌面计算机维护(九)磁盘管理

1 处理磁盘分区 PC通常只会有一个磁盘,Windows的管理策略会以分区形式管理磁盘,这样即可将物理硬件从操作系统中抽象出来。分区概念对于高效率地维护系统和文件很有好处,用户可以在“计算机管理”的...

PowerShell2.0之桌面计算机维护(五)管理桌面电源设置

便携式计算机的供电是个很重要的问题,因其直接关系到便携式设备的可移动性。Windows有多个组件与电源管理的配置策略相关,在Windows Server 2008中的电源策略设置界面如图1所示。 ...

PowerShell2.0之桌面计算机维护(六)修改电源计划

Windows Vista和Windows Server 2008的电源计划有大量改进,可以针对使用电池或交流电供电的情况分别设置。如果当前计算机正在使用电池,那么续航时间是个需要关心的问题。而在某些...

PowerShell2.0之桌面计算机维护(七)性能计数器

Windows系统性能计数器是操作系统支持用于应用和组件发布性能数据的特殊对象,并且支持其他应用获取和分析这些已发布的数据。Windows中的性能计数器很多,包括针对磁盘、网络和TCP等计数器,用户能...

PowerShell2.0之桌面计算机维护(一)监控磁盘空间

随着时间的增长,系统中的可用空间会越来越少。系统管理员需要清理磁盘,前提是了解系统磁盘空间,为此需要追踪一段时间内的磁盘空间的使用情况。创建名为“QueryOldFiles.ps1”的脚本连接到特定文...

PowerShell2.0之桌面计算机维护(三)设置屏幕保护程序

Windows系统需要针对图形界面设置有关选项,如屏幕保护程序、桌面及电源设置等。尽管有很多用户通过组策略方式配置这些选项,但是对于尚未部署活动目录(Active Directory)的企业还是在使用...

PowerShell 2.0管理事件日志(二)写入和搜索事件日志

事件日志是操作系统用来保存本身及其他程序信息的工具,本文将会介绍如何通过PowerShell脚本阅读事件日志并创建新的日志条目。Windows系统中包含多种事件日志,在Windows XP系统中包括4...

PowerShell2.0之维护网络(二)处理适配器配置

在处理所有适配器的状态后,还可以查询每个网络适配器的详细配置信息。可以通过选择“控制面板”|“网络和共享中心”|“网络连接”选项,打开“网络连接”窗口。在其中显示每个适配器的详细信息并做相应调整,如图...

PowerShell 2.0实践(十)管理TFS 2010 (1)

近日工作中设计了一套TFS自定义流程,使用了一些命令行工具,这两天看了看TFS 2010 中的PowerShell支持,特地总结一下,熟练使用这些命令行工具可以完成一些高级任务。 测试脚本下载 ...

PowerShell 2.0远程管理之交互式远程线程

本文将会介绍PowerShell 2.0的交互式远程管理以及如何使用Enter-PSSession、Exit-PSSession以及Get-PSSession操作线程的相关属性,以及在交互式远程管理中...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)