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")