特定OUにあるグループに14日以上いるユーザーを自動的にグループから抜くスクリプト

10.30

管理者権限を制限している企業の場合、いざ必要がありユーザーに管理者権限を渡すのは、円滑に運用するためには綿密な設計が必要になります。

今回担当している企業様にて、対応した方法が以下になります。

1. Computer名に紐づけられたADグループを作成。後々の処理のため特定のOU内にすべて作られるように設定。

2. スタートアップスクリプトによって、AというPCであれば、そのAdminグループに A_LocalAdmin という1で作ったグループを追加。

3. ユーザーから申請があった場合は、A_LocalAdmin にそのユーザーアカウントを追加。

4. 再ログオン後に管理者権限が有効になる。

骨組みは上記となりますが問題となるのが、そもそも管理者権限を制限している企業様の場合、永遠に管理者権限を付与することは望ましくない。
そのため、1か月で自動的に通常のユーザー権限に戻さないといけないという要件がありました。

これに対応するために、下記のスクリプトを作成いたしました。

設計当初は30日と指示されたものが後ほど14日に変更されたため、For( の中の数字に違和感を感じるかと思いますが、そのあたりはご自身で調整ください。
グループ名を検知して、同じ名前でローカルにフォルダを作成。
メンバーが存在する場合は、そのメンバーを日付ごとに記録。
14日間連続してそのメンバーが存在する場合はグループから抜く。
15日より前のデータは不要なので削除。

 

こんな順序で進んでおります。

$Check = @($null ・・の部分はもっときれいに書きたいのですが、どうやるんでしょ?事前に配列の数を決めたうえで、宣言をしたいのですがやり方が良く分からず・・結局、必要な分だけ$nullで指定しました。

 

$daysago = @()

for($i = 0 ;$i -le 32 ;$i++)

{

$day = -$i

$daysago += (Get-Date).AddDays($day).ToString(“yyyyMMdd”)

}

$ADGroup = Get-ADGroup -SearchBase “Localグループの入っているOUを指定l” -Filter *

$ADGroup | % {

$name = $exist = $GroupMember = $null

$name = $_.name

$Path = “C:\Script\Win10_LocalAdmin\data\$name”

$exist = Test-Path $Path

if(!($exist))

{

New-Item $Path -Type Directory -Force

}

$GroupMember = Get-ADGroupMember $name

$TodayFileName = $daysago[0] + “_” + $name + “.txt”

if($GroupMember -ne $null)

{

$GroupMember.SamAccountName | % {

$_ | Out-File $Path\$TodayFileName -Append

}

}

$FileName = $existFile = @()

for($i = 0 ;$i -le 14 ;$i++)

{

$TargetPath = $null

$FileName += $daysago[$i] + “_” + $name + “.txt”

$TargetPath = $Path + ‘\’ + $FileName[$i]

$existFile += Test-Path $TargetPath

}

$TargetExist = $null

$existFile | % {

if($_ -eq $False)

{

$TargetExist += “NotExist”

}

}

if($TargetExist -eq $null)

{

$TodayMember = Get-Content $Path\$TodayFileName

$Check = @($null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null)

$TodayMember | % {

$TargetMember = $null

$TargetMember = $_

for($i = 1 ;$i -le 14;$i++)

{

$Path1 = $Member = $null

$Path1 = $Path + ‘\’ + $FileName[$i]

$Member += Get-content $Path1

$Member | % {

if($_ -eq $TargetMember)

{

$Check[$i] = “Exist”

}

}

}

$Delete = $null

$Check | % {

if($_ -eq “Exist”)

{

$Delete += 1

}

}

if($Delete -ge 14)

{

$LogName = $note = $null

Remove-ADGroupMember -Identity $name -Members $TargetMember -Confirm:$false

$LogName = $daysago[0] + “_RemoveLog.txt”

$note = “Delete ” + $TargetMember + ” from ” + $name

$note | Out-File C:\Script\Win10_LocalAdmin\Log\$LogName -Append

}

}

}

for($i = 15 ;$i -le 32 ;$i++)

{

$FileName = $DeletePath = $DeleteExist = $null

$FileName += $daysago[$i] + “_” + $name + “.txt”

$DeletePath = $Path + ‘\’ + $FileName

$DeleteExist = Test-Path $DeletePath

if($DeleteExist)

{

$LogName = $note = $null

Remove-Item $DeletePath -Force

$LogName = $daysago[0] + “_RemoveLog.txt”

$note = $DeletePath + ” has been deleted.”

$note | Out-File C:\Script\Win10_LocalAdmin\Log\$LogName -Append

}

}

$count = $count + 1

Write-Output $count

}

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

2019年11月
« 10月    
 123
45678910
11121314151617
18192021222324
252627282930  
ページ上部へ戻る