1

我正在迁移到云,从 SBS 2003 Active Directory 迁移到 2008 R2。

我配置了一个新用户,并注意到该用户无法重置密码。

我的服务器管理员向我展示了如何使用网络用户。

我注意到我可以从某些帐户而不是其他帐户获取信息。有超过 100 个帐户要处理,我想我会尝试 PowerShell。

在这篇文章中(使用 powershell 在其他域上查找“网络用户”?)Lorenzo 建议使用 Get-ADUser(这适用于从另一个域进行轮询)。当我从 PowerShell 提示符运行 Get-ADUser 时,我收到一条消息,指出无法识别命令行开关。

我正在从文本文件中读取用户 ID,并将输出发送到日志文件,以便我可以发送给服务器管理员进行进一步分析。

到目前为止,这是我的代码(请注意,我对 PowerShell 完全陌生):

# Get our list of user names from the local staff.txt file
$users = get-content 'C:\Scripts\staff.txt'

# Create log file of output:
$LogTime = Get-Date -Format 'MM-dd-yyyy_hh-mm-ss'
$CompPath = "C:\Scripts\"
$CompLog = $CompPath + "NetUserInfo" + $LogTime + ".txt"
New-Item -path $CompLog -type File

foreach ($user in $users) {

#Testing user:
"Testing user: $user" | out-file $CompLog -Append

# Obtain user information using net user:
net user $user /domain >> $CompLog

# Pause to let system gather information:
Start-Sleep -Second 15

}

由于脚本当前运行,我的日志文件将有两个或三个用户名,后跟响应“请求将在域(域)的域控制器上处理”

如果来自 CMD 的网络用户将返回“系统错误 5 已发生,访问被拒绝”。这未记录在输出文件中。如果来自 CMD 的 net user 将返回用户信息,这将记录到输出文件中。我目前只接收几个用户的输出,但是当我从 CMD 运行命令时,我能够检索至少十个用户的信息。

我的第一个想法是我需要等待 net user 命令完成(因此是 Start-Sleep 命令),但这对输出没有任何影响。

任何帮助将不胜感激。

4

2 回答 2

1

错误输出未附加到日志文件的原因是您仅重定向 STDOUT(标准输出流)。还重定向 STDERR(标准错误流)更改

net user $user /domain >> $CompLog

net user $user /domain 2>&1 $CompLog

这解释了一点: http ://www.techotopia.com/index.php/Windows_PowerShell_1.0_Pipes_and_Redirection#Windows_PowerShell_Redirection_Operators

于 2013-10-16T17:30:23.137 回答
1

抱歉,我没有足够的声望来添加评论。

当您在 Powershell 中运行程序(例如net user...ping)时,它的运行应该与在普通命令提示符 (cmd) 中运行的完全相同。

如果我理解正确,当您(有效地)在 Powershell 或命令提示符中运行相同的东西时,您会得到不同的结果。那正确吗?

您是否使用 ISE 构建脚本?如果是这样,您可以设置将暂停脚本并允许您查看变量的断点。可能是该$user变量未包含您认为的值,或者该值与域用户帐户的名称不匹配。

编辑:

当您net user ...在 Powershell 中以交互方式(例如,不是作为脚本,而是手动)运行命令时会发生什么?你有错误吗?如果是这样,错误说明了什么?

其他相关内容:

您不应该需要 Start-Sleep,因为命令是按顺序运行的,并且下一行不应该执行,直到上一行完成。

另外,您使用的是哪个版本的 Powershell?

(您可以通过运行检查$host.version.Major

Get-ADUser cmdlet 需要版本 3(我相信)并且还需要导入 Active Directory 模块。

于 2013-08-19T11:46:34.543 回答