mikebai.com

  • Home
  • dev
  • DotNET
  • M365
  • 搞笑
  • 杂七杂八
  • FocusDict
個人BLOG
it developer
  1. Main page
  2. M365
  3. Main content

PowerShellでローカルアカウントの操作

2019-05-20 108hotness 0likes 0comments

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

Tag: Nothing
Last updated:2019-05-20

mikebai

This person is a lazy dog and has left nothing

Like
< Last article
Next article >

COPYRIGHT © 2025 mikebai.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang