微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ADSI-本地禁用用户从txt文件中的多台计算机列表

如何解决ADSI-本地禁用用户从txt文件中的多台计算机列表

我正在尝试使用文本文件查询计算机列表,并查询每台计算机上所有活动和禁用的本地帐户的列表。

这部分适用于单台计算机(名为 glm4453 ):

([ADSI]('WinNT://glm4453' -f $env:COmpuTERNAME)).Children | Where { $_.SchemaClassName -eq 'user' } | ForEach {
$user = ([ADSI]$_.Path)
$lastLogin = $user.Properties.LastLogin.Value
$enabled = ($user.Properties.UserFlags.Value -band 0x2) -ne 0x2
if ($lastLogin -eq $null) {$lastLogin = 'Never'}

Write-Host
Write-Host Username: ( " " * 5 ) $user.name
Write-Host Last Login: ( " " * 3 ) $lastLogin
Write-Host Enabled: ( " " * 6 )  $enabled
}

当我尝试从txt文件添加计算机列表时,输出为空。

foreach ($name in (get-content C:\temp\computer.txt))
{

([ADSI]('WinNT://$name' -f $env:COmpuTERNAME)).Children | Where { $_.SchemaClassName -eq 'user' } | ForEach {
$user = ([ADSI]$_.Path)
$lastLogin = $user.Properties.LastLogin.Value
$enabled = ($user.Properties.UserFlags.Value -band 0x2) -ne 0x2
if ($lastLogin -eq $null) {$lastLogin = 'Never'}

Write-Host
Write-Host Username: ( " " * 5 ) $user.name
Write-Host Last Login: ( " " * 3 ) $lastLogin
Write-Host Enabled: ( " " * 6 )  $enabled
}}

请注意,我正在运行Server 2008,这限制了我可以运行的PowerShell命令。

在此先感谢您提供的任何帮助

解决方法

PowerShell -f Format operator用于替换字符串中编号的占位符。这些占位符采用{0}{1}等形式,可以与其他格式结合使用。

在您的代码'WinNT://glm4453' -f $env:COMPUTERNAME中什么也没有做,因为没有可替换的占位符,因此字符串仅保留为'WinNT:// glm4453'。

在第二个代码中,发生了相同的事情,但是在这种情况下,由于使用的是单引号$name变量将不会扩展。

您需要删除-f $env:COMPUTERNAME,因为它在那里没有用,并且还使用双引号,因此名称会得到扩展。

假设$name中的计算机名是“ PC-01”。

使用单引号,'WinNT://$name'将从字面上接受字符串。
使用双引号,"WinNT://$name"将产生WinNT://PC-01

请参见About Quoting Rules

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。