2012-07-31 105 views
1

我想用PowerShell腳本替換本地組中的用戶。如何在從本地用戶組刪除之前確保用戶的存在?

Function ReplaceUserInGroup { 

    Param (
     [string]$Group, 
     [string]$OldUserName, 
     [string]$NewUserName   
    ) 

    [string]$computer=$env:ComputerName 


    If($Group -And $OldUserName -And $NewUserName) { 
     $LocalGroup = [ADSI]"WinNT://$computer/$Group,group" 

     $LocalGroup.Add("WinNT://$computer/$NewUserName") 

     $LocalGroup.Remove("WinNT://$OldUserName") 
    } 
    Else { 
      Write-Warning " ReplaceUserInGroup : Some or all the parameters are empty" 
    } 


} 

該腳本的問題是,如果OldUserName在本地組中不存在,它將會失敗。

我想在從本地組中刪除用戶之前檢查用戶是否存在於組中。

換句話說,我想在下面的一些條件下包裝刪除功能行。

If (UserName exists in Localgroup) { 
    $LocalGroup.Remove("WinNT://$OldUserName") 
} 

如何檢查用戶的存在?

回答

2
$members = $LocalGroup.psbase.Invoke("Members") | Foreach-Object {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) } 

    if($members -contains $OldUserName) 
    { 
     "$OldUserName is member" 
    } 
    else 
    { 
     "$OldUserName is NOT a member" 
    } 
+0

如果我使用包含即使它匹配部分它會拋出$ OldUserName是成員,不是嗎?我認爲循環通過$成員更好。的foreach(在$成員$成員){如果($成員-eq $ OldUserName) { 「$ OldUserName是成員」 } 其他 { 「$ OldUserName是不是會員」 } – Samselvaprabu 2012-07-31 12:55:31

+0

這與使用並且效率較低。如果你想檢查部分匹配replace -contains with -like並使用通配符表達式。 – 2012-07-31 13:39:32

0
$objOu = [ADSI]"WinNT://${env:Computername}" 
    $localUsers = $objOu.Children | where {$_.SchemaClassName -eq 'user'} | % {$_.name[0].ToString()} 

    # Ensure we have local user BOB 
    if($localusers -contains "BOB"){ 
     Write-Host "local user ${env:Computername}/BOB already exists" 
    } 
    else{ 
     Write-Host "Creating local user: /BOB" 
     NET USER BOB "qwefgnbm" /ADD 
    } 

此檢查用戶是否存在,並增加了一個,如果它不存在。它可能是有用的。

相關問題