################################################
# アカウント新規作成
################################################
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")
if( $ADUser.ADsPath -ne $null ){
return $true
}
else{
return $false
}
}
###########################################################
# ドメインユーザー/ドメイングループのローカルグループ参加
###########################################################
function JoinADUser2Group( $DomainName, $DomainUser, $LocalGroup ){
$HostName = hostname
$ADUser = [ADSI]("WinNT://$DomainName/$DomainUser")
$LocalGroup = [ADSI]("WinNT://$HostName/$LocalGroup")
$LocalGroup.Add($ADUser.ADsPath)
}
################################################
# ローカルユーザーのグループ離脱
################################################
function DefectionLocalAccunt( $UserID, $GroupName ){
$hostname = hostname
[ADSI]$Computer = "WinNT://$hostname,computer"
$Group = $Computer.GetObject("group", $GroupName)
$User = $Computer.GetObject("user", $UserID)
$Group.Remove($User.ADsPath)
}
#############################################################
# ドメインユーザー/ドメイングループのグループ離脱
#############################################################
function DefectionDomainAccunt( $DomainName, $DomainUser, $LocalGroup ){
$HostName = hostname
$ADUser = [ADSI]("WinNT://$DomainName/$DomainUser")
$LocalGroup = [ADSI]("WinNT://$HostName/$LocalGroup")
$LocalGroup.Remove($ADUser.ADsPath)
}
################################################
# ローカルユーザーがメンバーになっているか
################################################
function IsMemberLocalAccunt( $UserID, $GroupName ){
$hostname = hostname
[ADSI]$Computer = "WinNT://$hostname,computer"
$Group = $Computer.GetObject("group", $GroupName)
$User = $Computer.GetObject("user", $UserID)
return $Group.IsMember($User.ADsPath)
}
################################################
# ドメインユーザーがメンバーになっているか
################################################
function IsMemberDomainAccunt( $DomainName, $DomainUser, $LocalGroup ){
$HostName = hostname
$ADUser = [ADSI]("WinNT://$DomainName/$DomainUser")
$LocalGroup = [ADSI]("WinNT://$HostName/$LocalGroup")
return $LocalGroup.IsMember($ADUser.ADsPath)
}
################################################
# ローカルグループメンバー取得
################################################
function ListLocalGroupMember( $GroupName ){
$hostname = hostname
[ADSI]$Computer = "WinNT://$hostname,computer"
$Group = $Computer.GetObject("group", $GroupName)
$MemberNames = @()
$Members = $Group.psbase.Invoke("members")
$Members | % { $MemberNames += $_.GetType().InvokeMember("Name", "GetProperty", $null, $_, $null) }
return $MemberNames
}
################################################
# アカウント無効
################################################
function DisableAccunt( $UserID ){
$hostname = hostname
[ADSI]$UpdateUser = "WinNT://$HostName/$UserID,User"
$UserFlags = $UpdateUser.Get("UserFlags")
$UserFlags = $UserFlags -bor 0x0202
$UpdateUser.Put("UserFlags", $UserFlags)
$UpdateUser.SetInfo()
}
################################################
# アカウント有効
################################################
function EnableAccunt( $UserID ){
$hostname = hostname
[ADSI]$UpdateUser = "WinNT://$HostName/$UserID,User"
$UserFlags = $UpdateUser.Get("UserFlags")
$SaveUserFlags = $UserFlags
$UserFlags = $UserFlags -bor 0x0202
$UserFlags = $UserFlags -bxor 0x0202
$UpdateUser.Put("UserFlags", $UserFlags)
$UpdateUser.SetInfo()
}
################################################
# ローカルグループ新規作成
################################################
function CreateGroup( $GroupName ){
$hostname = hostname
[ADSI]$Computer = "WinNT://$hostname,computer"
$NewGroup = $Computer.Create("Group", $GroupName)
$NewGroup.SetInfo()
}
################################################
# ローカルグループ取得
################################################
function GetLocalGroups(){
$hostname = hostname
[ADSI]$Computer = "WinNT://$hostname,computer"
$Groups = $Computer.psbase.children | ? {$_.psBase.schemaClassName -eq "Group"} | Select-Object -expand Name
return $Groups
}
################################################
# ローカルグループが存在するか
################################################
function ExistGroup( $GroupName ){
$hostname = hostname
[ADSI]$Computer = "WinNT://$hostname,computer"
$Groups = $Computer.psbase.children | ? {$_.psBase.schemaClassName -eq "Group"} | Select-Object -expand Name
return ($Groups -contains $GroupName)
}
|