问题描述
我正在尝试使用文本文件来查询计算机列表,并查询每台计算机上所有活动和禁用的本地帐户的列表。
这部分适用于单台计算机(名为 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
}
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