https://www.vwnet.jp/Windows/PowerShell/MaintenanceLocalAccunt.htm
ドメイン環境であればアカウント メンテナンス用の PowerShell コマンドレットが数多く提供されていますが、ワークグループ環境で使うローカルアカウントにはメンテナンス コマンドレットが用意されていません。
結構困るので、良く使う「アカウント新規作成」「グループへ参加」「パスワード無期限設定」「パスワード更新」を関数にしました。
メンバーになっているかの確認も必要なので、メンバーか否かの確認関数も作ってみました。
組み込みで使う事を想定していますが、関数コピペして使う事も出来ます。
################################################
# アカウント新規作成
################################################
function CreateUser( $UserID, $Password ){
$hostname = hostname
[ADSI]$Computer = "WinNT://$hostname,computer"
$NewUser = $Computer.Create("User", $UserID)
$NewUser.SetPassword( $Password )
$NewUser.SetInfo()
}
################################################
# グループへ参加
################################################
function JoinGroup( $UserID, $JoinGroup ){
$hostname = hostname
[ADSI]$Computer = "WinNT://$hostname,computer"
$Group = $Computer.GetObject("group", $JoinGroup)
$Group.Add("WinNT://$hostname/$UserID")
}
########################################################################################
# グループへ参加
# IIS APPPOOL\xx とかの一般的なユーザーではないアカウントとローカルグループ追加対応
########################################################################################
function JoinGroup2( $UserID, $JoinGroup ){
$hostname = hostname
$Group = [ADSI]"WinNT://$hostname/$JoinGroup,group"
$NTAccount = New-Object System.Security.Principal.NTAccount($UserID)
$SID = $NTAccount.Translate([System.Security.Principal.SecurityIdentifier])
$User = [ADSI]"WinNT://$SID"
$Group.Add($User.Path)
}
################################################
# パスワード無期限設定
################################################
function DontExpirePasswd( $UserID ){
$hostname = hostname
[ADSI]$UpdateUser = "WinNT://$HostName/$UserID,User"
$UserFlags = $UpdateUser.Get("UserFlags")
$UserFlags = $UserFlags -bor 0x10000
$UpdateUser.Put("UserFlags", $UserFlags)
$UpdateUser.SetInfo()
}
################################################
# パスワード更新
################################################
function UpdatePasswd( $UserID, $Password ){
$hostname = hostname
[ADSI]$UpdateUser = "WinNT://$HostName/$UserID,User"
$UpdateUser.SetPassword( $Password )
$UpdateUser.SetInfo()
}
################################################
# ローカルユーザーが存在するか
################################################
function IsLocalUserAccunt( $UserID ){
$hostname = hostname
[ADSI]$Computer = "WinNT://$hostname,computer"
$Users = $Computer.psbase.children | ? {$_.psBase.schemaClassName -eq "User"} | Select-Object -expand Name
return ($Users -contains $UserID)
}
################################################
# ドメインユーザーが存在するか
################################################
function IsADUserAccunt( $DomainName, $DomainUser ){
$hostname = hostname
$ADUser = [ADSI]("WinNT://$DomainName/$DomainUser")