2016-01-20 64 views
0

我寫了這個foreach循環來將所有用戶添加到本地管理員組保存幾個條件。似乎要經過前兩個if語句,但是當涉及到將用戶添加到管理員組的部分時,我收到了錯誤「該組已存在」。有任何想法嗎?我的foreach循環出了什麼問題?

$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 
    } 
} 
+0

第一行是一個空字符串,所以你最終調用'net localgroup Administrators/Add' - 創建*組命令'Administrators' –

+0

@ MathiasR.Jessen Ahh,那麼我如何從'net user'的輸出中選擇用戶呢? –

回答

1

問題是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,但使用它沒有問題。

+0

我在第二行運行你的塊之前得到了下面的錯誤:'Get-WmiObject:Invalid query「從Win32_UserAccount-Filter中選擇LocalAccount ='True' 在行:1 char:13 + $ UserList = Get-WmiObject -Class Win32_UserAccount型過濾器 「LocalAccount = '真'」 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidArgument:(:) [獲取-WmiObject可以],ManagementException + FullyQualifiedErrorId:GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand' –

+1

對不起,我錯過了Win32_UserAccount之間的空間 - 過濾。現在編輯。 –

+0

美麗,工作完美。 –

1

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 -SkipSelect-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 
從`淨user`輸出
+0

這會在多臺機器上工作嗎?例如,假設有更多的用戶,那麼最終會有3行用戶名而不是2個。 –

+1

是的,那也可以。 –