SEブログ

【PowerShell】フォルダを作成しアクセス権限を付与する

 

こんにちは!SEブログの相馬です。

 

 

 

今回は、PowerShell を使いフォルダを作成し、アクセス権限を付与する方法について書いてみました。色々な用途で使えるとは思いますが、これが自動でできますと、ユーザーの PC 管理が効率的にできるような感じですね。

 

 

企業で大量の PC を管理する場合は、例えばユーザーの PC の C ドライブに対してユーザーのアクセス権限が無い環境が多いかと思います。そこで、C ドライブ直下にログ格納用のフォルダを作成したり、また別のローカルドライブがある場合は、そこに一時作業用のフォルダを作成したりする場合があるかと思います。

 

 

 

フォルダの仕様

 

 

ここでは、ユーザーの PC の C ドライブ下の特定のフォルダに、ユーザーに一時的な作業領域を提供するフォルダを作ってみます。具体的には Work という一時作業用のフォルダを作成して、そのフォルダの下に、ログオンしたユーザー名 (User1) のフォルダを作成します。

 

 

 

フォルダの権限

 

 

フォルダの権限は以下のとおりにします。

 

 

  • C:\Work : Administrators はフルコントロール、Users は読み取り
  • C:\Work : Administrators はフルコントロール、Users は読み取り、User1 はフルコントロール

 

 

 

スクリプト

 

 

それでは、上記の内容をスクリプトで書いてみましたところ、以下のようになりました。

 

# ユーザー名のフォルダを変数に代入
$UserInfo = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$DomainUserName = $UserInfo.Name
$UserName = $DomainUserName.Replace("SOMAENG", "")
$UserFolder = $UserName

# フォルダーのパス
$FolderPath = "C:\Work\"
# C:\Temp に ユーザー名のフォルダをくっつける
$FolderPath = $FolderPath + "\" + $UserFolder
# フォルダ作成
New-Item $FolderPath -ItemType Directory
# フォルダ権限を取得
$ACL = Get-Acl $FolderPath
# 権限の設定(引数:ユーザー名,アクセス権,下位フォルダ継承,下位オブジェクト継承,継承の制限,アクセス許可)
$Permission = ($DomainUserName,"FullControl","ContainerInherit,ObjectInherit","None","Allow")
# 権限の設定を反映
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $Permission
$ACL.SetAccessRule($AccessRule)
$ACL | Set-Acl $FolderPath

 

 

 

いかがでしょうか。

 

 

こんな感じで、フォルダの作成やアクセス権限がスクリプトでできると、ユーザーの PC の管理が統一できますし、楽で良いですね。もっと色々な方法を身に着けて多種多様な事ができるようになりたいと思います。

 

 

それでは最後までお読みいただきありがとうございました!