首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ADSI处理错误

用ADSI处理错误
EN

Stack Overflow用户
提问于 2014-10-08 16:57:31
回答 3查看 5K关注 0票数 0

我正在编写一个PowerShell脚本来更改本地帐户名。当然,第一步是检查帐户是否存在:

代码语言:javascript
复制
$user=[ADSI]"WinNT://$server/$oldName,user"

如果帐户存在,那么就没有问题。但如果没有,我就会得到这样的错误:

格式-默认:检索成员>“distinguishedName”时出现以下异常:“找不到用户名。”+ CategoryInfo : NotSpecified:(:) format-default,ExtendedTypeSystemException + FullyQualifiedErrorId : CatchFromBaseGetMember,CatchFromBaseGetMember

我不知道如何查找该错误,报告“未找到的$oldName”之类的内容,然后继续进行。据我所知,它没有被抛到错误变量中,所以我无法搜索“用户名找不到”字符串。最后似乎忽略了这个错误。

我承认我在错误处理方面很薄弱。似乎有无数种失败的方法,我的用户在使用我的脚本时总是会找到新的方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-08 18:00:20

似乎该命令实际上正在抛出一个终止错误。来自about_preference_variables

“$ErrorActionPreference和ErrorAction公共参数都不会影响PowerShell对终止错误(那些停止cmdlet处理的错误)的响应。”

因此,当命令运行时,即使在脚本能够继续尝试并处理catch块之前,它也正在终止脚本。

有趣的是,如果把它放入变量中,这种行为就会停止发生。我很想知道是否有人有更好的答案,但从我所能看到的看来,这是一个基于变量结果的if语句。

代码语言:javascript
复制
$User = [ADSI]"WinNT://badserver/Name,user" 
If (! $User.Name)
{
    Throw "Issue retrieving user"
}

#Rest of script can continue here
票数 3
EN

Stack Overflow用户

发布于 2014-10-09 03:00:44

您可以以这种方式检查用户名是否存在。

代码语言:javascript
复制
[ADSI]::Exists("WinNT://$Server/$UserName")

它返回一个布尔值。如果用户存在,则为true,否则为false。

票数 0
EN

Stack Overflow用户

发布于 2018-04-25 14:49:54

我通过将命令封装在脚本块中并使用解决了类似的问题。

代码语言:javascript
复制
$ChangePassword = {([adsi]"WinNT://domain/$Username,user").ChangePassword($CurrentPassword, $NewPassword)}
try {
    Invoke-Command -ScriptBlock $ChangePassword -ErrorAction Stop
}
catch {
    # Error handling code
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26262384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档