📁
PowerShell:ファイルSVに個人用フォルダ一括作成&クォータ設定
オンプレAD環境にあるWindowsSVで構築されたファイルSVに個人用フォルダを一括作成したかったので、PowerShellを書いてみた。
やりたいこと
CSVを読み込んで
- ADのユーザー名のフォルダ作成
- ユーザーのみのアクセス権付与
- クォータの設定
その他
・ADにユーザーがいるか判定
・フォルダ作成、クォータ変更、フォルダ削除をflagで判定
使い方
- 「import.csv」の2行目からいれていく
※1行目のヘッダーは必要
CSVのレイアウト
import.csv
flag,UserName
n,testuser01
c,testuser02
d,testuser03
flagで処理を判定
flag | 説明 |
---|---|
n | フォルダ作成 |
c | クォータ変更 |
d | フォルダ削除 |
2.「Folder-Set.ps1」をメモ帳で開いて、作業ディレクトリを指定とクォータのサイズを指定
3.「import.csv」、「Folder-Set.ps1」を同じフォルダに置いて、ファイルSVで実行
4.フォルダ、アクセス権、クォータが設定されていればOK
事前準備
- 共有フォルダ化したいフォルダを作成
- 作成したフォルダのアクセス権で、「Users」等の不要なものを削除しておく。
(AdministratorsとSYSTEMのみにしておけばokかな) - Import-Module FileServerResourceManager するための機能追加
- Import-Module ActiveDirectoryするための機能追加
完成したスクリプト
Folder-Set.ps1
Import-Module FileServerResourceManager
Import-Module ActiveDirectory
#作業ディレクトリを指定(最後に[\]必須)
$workdir = "D:\test\"
#クォータのサイズを指定(○○MB、○○GBで指定)
$QuotaSize = 500MB
cd $workdir
Import-Csv $PSScriptRoot\import.csv -Encoding Default | ForEach-Object{
$user = $_.UserName
$targetpath = $workdir + $user
#パラメータで処理分岐
$switchflag = $_.flag
switch ( $switchflag ) {
#フォルダ作成処理
n {
#コンソールのエラーを非表示にする
$ErrorActionPreference = "silentlycontinue"
#ユーザーがいるか判定。Get-ADUserでエラーだと「NULL」のまま。
$UserJudg = $NULL
$UserJudg = Get-ADUser -Identity $user
#コンソールのエラーを再表示する
$ErrorActionPreference = "continue"
if ( $UserJudg -eq $NULL ){
#エラー出力
Write-Host -NoNewline $user " はADにいません(n)"
Write-Output ""
} else {
#フォルダの存在判定
If(!(test-path $user))
{
#フォルダの作成
New-Item -Path $user -ItemType Directory | Out-Null
#アクセス権の付与(フルコントロール)
icacls $targetpath /grant ${user}:`(OI`)`(CI`)F /t /c /l /q | Out-Null
#クォータの設定(ハード制限クォータ)
New-FsrmQuota -Path $targetpath -Description "個人フォルダサイズ制限" -Size $QuotaSize | Out-Null
} else {
Write-Host -NoNewline $user " のフォルダはすでにあります(n)"
Write-Output ""
}
}
}
#クォータの変更(ハード制限クォータ)
c {
If((test-path $user)){
Set-FsrmQuota -Path $targetpath -Description "個人フォルダサイズ制限" -Size $QuotaSize | Out-Null
} else {
Write-Host -NoNewline $user " のフォルダはありません(c)"
Write-Output ""
}
}
#フォルダ削除処理
d {
If((test-path $user)){
#フォルダの削除(確認あり)
Remove-Item -Path $user | Out-Null
#フォルダの削除(確認なし)
#Remove-Item -Path $user -Force -Recurse | Out-Null
} else {
Write-Host -NoNewline $user " のフォルダはありません(d)"
Write-Output ""
}
}
#flagエラー
default {
Write-Host -NoNewline $user " のflagはありません(f)"
Write-Output ""
}
}
参考:アクセス権の確認
アクセスの確認は、「icacls フォルダパス」で確認できる
icacls D:\test\* > access-access-list.txt
grep的なことをしたい場合は、
icacls D:\test\* | findstr "検索したい文字列*" > access-list.txt
Discussion