我的 foreach 循环有什么问题?
What's wrong with my foreach loop?
我写了这个 foreach 循环来将所有用户添加到本地管理员组,但有一些条件。它似乎通过前两个 if 语句正常,但是当涉及到将用户添加到管理员组的部分时,我收到错误 "The group already exists"。有任何想法吗?
$UserList = Net User
foreach ($User in $UserList)
{
if($User -match "Lcs")
{
Write-Host "FCS Account Excluded."
}
if($User -match "Guest" -Or $User -match "Administrator")
{
Write-Host "Default Windows Accounts Excluded."
}
else
{
net localgroup Administrators $User /Add
}
}
问题是 Net User
存储用户的方式。
尝试以下块:
$UserList = Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount='True'"
foreach ($User in $UserList)
{
if($User.Name -match "Lcs")
{
Write-Host "FCS Account Excluded."
}
elseif ($User.Name -match "Guest" -Or $User.Name -match "Administrator")
{
Write-Host "Default Windows Accounts Excluded."
}
else
{
net localgroup Administrators $User.Name /Add
}
}
另外我不建议使用Net local group administrators user.add
,因为它使用了另一个应用程序网络,但使用它没有问题。
net user
命令的输出如下所示:
PS C:\> net user
User accounts for \ComputerName
-------------------------------------------------------------------------------
user01 user02 user03 user04
user05 user06
The command completed successfully
PS C:\>
请注意,如果您只对用户名感兴趣,前 4 行是无用的,最后两行也是如此。您可以使用 Select-Object -Skip
和 Select-Object -First
:
删除它们
PS C:\> $netuser = net user |Select-Object -Skip 4
PS C:\> $netuser |Select-Object -First $($netuser.Length - 3)
user01 user02 user03 user04
user05 user06
PS C:\>
现在您只需要将用户名拆分成单独的字符串:
PS C:\> $users = $netuser |Select-Object -First $($netuser.Length - 3) |ForEach-Object {
$_.Split(' ',[StringSplitOptions]::RemoveEmptyEntries)
}
PS C:\> $users
user01
user02
user03
user04
user05
user06
我写了这个 foreach 循环来将所有用户添加到本地管理员组,但有一些条件。它似乎通过前两个 if 语句正常,但是当涉及到将用户添加到管理员组的部分时,我收到错误 "The group already exists"。有任何想法吗?
$UserList = Net User
foreach ($User in $UserList)
{
if($User -match "Lcs")
{
Write-Host "FCS Account Excluded."
}
if($User -match "Guest" -Or $User -match "Administrator")
{
Write-Host "Default Windows Accounts Excluded."
}
else
{
net localgroup Administrators $User /Add
}
}
问题是 Net User
存储用户的方式。
尝试以下块:
$UserList = Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount='True'"
foreach ($User in $UserList)
{
if($User.Name -match "Lcs")
{
Write-Host "FCS Account Excluded."
}
elseif ($User.Name -match "Guest" -Or $User.Name -match "Administrator")
{
Write-Host "Default Windows Accounts Excluded."
}
else
{
net localgroup Administrators $User.Name /Add
}
}
另外我不建议使用Net local group administrators user.add
,因为它使用了另一个应用程序网络,但使用它没有问题。
net user
命令的输出如下所示:
PS C:\> net user
User accounts for \ComputerName
-------------------------------------------------------------------------------
user01 user02 user03 user04
user05 user06
The command completed successfully
PS C:\>
请注意,如果您只对用户名感兴趣,前 4 行是无用的,最后两行也是如此。您可以使用 Select-Object -Skip
和 Select-Object -First
:
PS C:\> $netuser = net user |Select-Object -Skip 4
PS C:\> $netuser |Select-Object -First $($netuser.Length - 3)
user01 user02 user03 user04
user05 user06
PS C:\>
现在您只需要将用户名拆分成单独的字符串:
PS C:\> $users = $netuser |Select-Object -First $($netuser.Length - 3) |ForEach-Object {
$_.Split(' ',[StringSplitOptions]::RemoveEmptyEntries)
}
PS C:\> $users
user01
user02
user03
user04
user05
user06