PowerShell:新增使用者至本機群組

這是一行很基本的Powershell系統管理的指令,因應管理環境需求,幫這指令加點料。
下面的範例是使用者透過指令加入本機遠端桌面使用主群組:

Add-LocalGroupMember -Group "Remote Desktop Users" -Member "$env:USERDOMAIN\GGININDER"

但是這裡不單純介紹照這樣而已。
1.需要搭配RunAs(因為執行時使用者並非系統管理員)
2.我希望在加入之前先行判斷該使用者是否已經加入過了,如果已經加入,則略過不執行。
3.不管加入成功與否,寫入CSV做紀錄
要做到如此,必須使用Bat搭配Powershell來執行

下面是批次擋內容,附檔名為Bat,在RunAs系統管理員的同時將目前的使用者帳號用%USERNAME%帶進去Powershell

Powershell -Command Start-Process powershell -ArgumentList '-File %~dp0AddUserToGroup.ps1 -UserN %USERNAME%' -Verb runAs 

下面是Powreshell前半段:
利用Param來接收使用者帳號。
群組名稱設為變數方便自由變化。其實也可以弄成參數從前面的批次檔帶過來。
使用指定的檔名與路徑來記錄。

Param
(
    [String]$UserN = "Nothing"
)
"UserN = $UserN"
$LGroup = "Remote Desktop Users"
$LogFile = "AddToRDSList"
$LogPath = "\\1.2.3.4\share\IT\"
Function LogWrite
{
    Param([string]$logstring)
    [String]$Logfile = $LogPath+$LogFile+".CSV" 
    Add-content $Logfile "$(Get-date -Format 'yyyy-MM-dd tthh:mm:ss') $logstring" 
}

下面是後半段判斷的部分,
如果檢查未曾加入過Remote Desktop Users則新增該員進群組
        新增完後,再檢查一次,如果還是找不到則回應Fail,並且寫入記錄檔
        如果檢查已經加入,則回應Success,寫入記錄檔

IF(!(Get-LocalGroupMember -Group $LGroup -Member $env:USERDOMAIN\$UserN -ErrorAction SilentlyContinue))
{
    Add-LocalGroupMember -Group $LGroup -Member "$env:USERDOMAIN\$UserN"

    IF(!(Get-LocalGroupMember -Group $LGroup -Member $env:USERDOMAIN\$UserN -ErrorAction SilentlyContinue))
    {
        LogWrite ",$UserN,$env:COMPUTERNAME,Fail"
        Write-Host "$UserN add to $env:COMPUTERNAME is fail"
        Get-LocalGroupMember -Group $LGroup -Member $env:USERDOMAIN\$UserN
        Read-Host "Press any key to exit."
    }
    ELSE
    {
        LogWrite ",$UserN,$env:COMPUTERNAME,Success"
        Write-Host "$UserN add to $env:COMPUTERNAME is success"
        Get-LocalGroupMember -Group $LGroup -Member $env:USERDOMAIN\$UserN
        Read-Host "Press any key to exit."
    }
}
ELSE
{
    LogWrite ",$UserN,$env:COMPUTERNAME,Exists"
    Write-Host "$UserN,is exists in $env:COMPUTERNAME $LGroup group."
    Read-Host "Press any key to exit."
}

紀錄檔其實只是為了方面事後方便與名單稽核,看看有沒有遺漏的人。