ADSI - txt 文件中来自多台计算机的本地禁用用户列表
ADSI - Local disabled users list from multiple computers in a txt file
我正在尝试使用计算机列表的文本文件来查询和获取每台计算机上所有活动和禁用的本地帐户的列表。
这部分在单台计算机(名为 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
}}
请注意,我 运行ning Server 2008 限制了我可以使用的 PowerShell 命令 运行。
提前感谢您提供的任何帮助
PowerShell -f Format operator 用于替换字符串中的编号占位符。这些占位符采用 {0}
、{1}
等形式,可以与额外的格式结合使用。
在您的代码中 'WinNT://glm4453' -f $env:COMPUTERNAME
什么都不做,因为没有要替换的占位符,所以字符串只是保留 'WinNT://glm4453'.
在第二个代码中,发生了同样的事情,但在那种情况下,由于您使用的是 single-quotes,因此 $name
变量不会展开。
您需要删除 -f $env:COMPUTERNAME
,因为它在那里没有用,还要使用 double-quotes,所以名称会扩展。
假设 $name
中的计算机名称是 'PC-01'。
使用 single-quotes、'WinNT://$name'
将按字面意思获取字符串。
使用 double-quotes、"WinNT://$name"
将导致 WinNT://PC-01
我正在尝试使用计算机列表的文本文件来查询和获取每台计算机上所有活动和禁用的本地帐户的列表。
这部分在单台计算机(名为 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
}}
请注意,我 运行ning Server 2008 限制了我可以使用的 PowerShell 命令 运行。
提前感谢您提供的任何帮助
PowerShell -f Format operator 用于替换字符串中的编号占位符。这些占位符采用 {0}
、{1}
等形式,可以与额外的格式结合使用。
在您的代码中 'WinNT://glm4453' -f $env:COMPUTERNAME
什么都不做,因为没有要替换的占位符,所以字符串只是保留 'WinNT://glm4453'.
在第二个代码中,发生了同样的事情,但在那种情况下,由于您使用的是 single-quotes,因此 $name
变量不会展开。
您需要删除 -f $env:COMPUTERNAME
,因为它在那里没有用,还要使用 double-quotes,所以名称会扩展。
假设 $name
中的计算机名称是 'PC-01'。
使用 single-quotes、'WinNT://$name'
将按字面意思获取字符串。
使用 double-quotes、"WinNT://$name"
将导致 WinNT://PC-01