はじめに
前回テスト用のユーザを作成したので、今回はファイルサーバの移行用のデータを作成します。
※本記事は下記のファイルサーバ移行検証の一部です。
データ作成
テスト用のフォルダとテキストファイルを作成します。データ移行の範囲にNTFSアクセス権が含まれることがほとんどかと思うので、データ作成後にアクセス権も付与します。
フォルダ作成
以下のスクリプトで、フォルダを作成します。「E:\share」内に作成していますが、適宜PATHを変更してください。実行後、直下に10個のフォルダが作成され、さらにその配下に100個のフォルダが作成されます(合計1000個)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# 共有フォルダのパス $shareFolderPath = "E:\share" # 10個のフォルダを作成するループ for ($i = 1; $i -le 10; $i++) { $folderName = "level1folder{0:d2}" -f $i $folderPath = Join-Path -Path $shareFolderPath -ChildPath $folderName New-Item -Path $folderPath -ItemType Directory -Force Write-Host "Created folder: $folderPath" } # 10個のフォルダを作成するループ for ($i = 1; $i -le 10; $i++) { $level1FolderName = "level1folder{0:d2}" -f $i $level1FolderPath = Join-Path -Path $shareFolderPath -ChildPath $level1FolderName # 100個のサブフォルダを作成するループ for ($j = 1; $j -le 100; $j++) { $level2FolderName = "level2folder{0:d2}" -f $j $level2FolderPath = Join-Path -Path $level1FolderPath -ChildPath $level2FolderName New-Item -Path $level2FolderPath -ItemType Directory -Force Write-Host "Created folder: $level2FolderPath" } } |
ファイル作成
次に先ほど作成したフォルダの配下にファイルを作成します。作成するファイル数は、1から3個のうち、ランダムな個数が作成されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# 共有フォルダのパス $shareFolderPath = "E:\share" # ファイル名のインデックス $fileIndex = 1 # 共有フォルダ内のすべてのフォルダに対して処理を行う関数 function CreateRandomFilesRecursively($folderPath) { # フォルダ内のランダムな数のファイルを作成する $fileCount = Get-Random -Minimum 1 -Maximum 3 for ($i = 1; $i -le $fileCount; $i++) { $fileName = "test{0:d4}_{1:d4}.txt" -f $folderIndex, $fileIndex $filePath = Join-Path -Path $folderPath -ChildPath $fileName New-Item -Path $filePath -ItemType File -Force Write-Host "Created file: $filePath" $global:fileIndex++ } # サブフォルダに対して再帰的に処理を行う Get-ChildItem -Path $folderPath -Directory | ForEach-Object { CreateRandomFilesRecursively $_.FullName } } # 共有フォルダ内のすべてのフォルダに対して関数を呼び出す CreateRandomFilesRecursively $shareFolderPath |
アクセス権設定(AD環境用)
作成したフォルダとファイルにアクセス権を付与します。事前に作成しているfileuser01から50までのユーザに対して権限を付与します。また、アクセス権と付与されるユーザはランダムになるように設定します。ここまで入り組んだ設定をする必要はないのかもしれませんが、検証なので試しに設定してみました。
なお、「$domainUser = “jasm.ricecake24book.com\$userName”」というパラメータがある通り、ドメインユーザを指定しています。ドメイン環境ではない場合は末尾に紹介していますので、環境に応じて利用してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# 共有フォルダのパス $shareFolderPath = "E:\share" # ユーザーの数 $userCount = 50 # 権限の種類 $permissions = @("FullControl", "Modify", "ReadAndExecute", "Read", "Write") # すべてのフォルダに対して処理を行うループ for ($i = 1; $i -le 10; $i++) { $level1FolderName = "level1folder{0:d2}" -f $i $level1FolderPath = Join-Path -Path $shareFolderPath -ChildPath $level1FolderName # ランダムなユーザーと権限を選択 $randomUsers = Get-Random -InputObject (1..$userCount) -Count (Get-Random -Minimum 1 -Maximum $userCount) $randomPermissions = Get-Random -InputObject $permissions -Count (Get-Random -Minimum 1 -Maximum $permissions.Count) # 権限を追加 $acl = Get-Acl -Path $level1FolderPath foreach ($randomUser in $randomUsers) { foreach ($randomPermission in $randomPermissions) { $userName = "fileuser{0:d2}" -f $randomUser $domainUser = "jasm.ricecake24book.com\$userName" $ntAccount = New-Object System.Security.Principal.NTAccount($domainUser) $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($ntAccount, $randomPermission, "Allow") $acl.AddAccessRule($rule) Write-Host "Granted $($randomPermission) permission to $($domainUser) for folder $($level1FolderPath)" } } Set-Acl -Path $level1FolderPath -AclObject $acl for ($j = 1; $j -le 100; $j++) { $level2FolderName = "level2folder{0:d2}" -f $j $level2FolderPath = Join-Path -Path $level1FolderPath -ChildPath $level2FolderName # ランダムなユーザーと権限を選択 $randomUsers = Get-Random -InputObject (1..$userCount) -Count (Get-Random -Minimum 1 -Maximum $userCount) $randomPermissions = Get-Random -InputObject $permissions -Count (Get-Random -Minimum 1 -Maximum $permissions.Count) # 権限を追加 $acl = Get-Acl -Path $level2FolderPath foreach ($randomUser in $randomUsers) { foreach ($randomPermission in $randomPermissions) { $userName = "fileuser{0:d2}" -f $randomUser $domainUser = "jasm.ricecake24book.com\$userName" $ntAccount = New-Object System.Security.Principal.NTAccount($domainUser) $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($ntAccount, $randomPermission, "Allow") $acl.AddAccessRule($rule) Write-Host "Granted $($randomPermission) permission to $($domainUser) for folder $($level2FolderPath)" } } Set-Acl -Path $level2FolderPath -AclObject $acl # フォルダ内のファイルにもランダムなアクセス許可を追加する $files = Get-ChildItem -Path $level2FolderPath -File foreach ($file in $files) { $randomUsers = Get-Random -InputObject (1..$userCount) -Count (Get-Random -Minimum 1 -Maximum $userCount) $randomPermissions = Get-Random -InputObject $permissions -Count (Get-Random -Minimum 1 -Maximum $permissions.Count) $acl = Get-Acl -Path $file.FullName foreach ($randomUser in $randomUsers) { foreach ($randomPermission in $randomPermissions) { $userName = "fileuser{0:d2}" -f $randomUser $domainUser = "jasm.ricecake24book.com\$userName" $ntAccount = New-Object System.Security.Principal.NTAccount($domainUser) $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($ntAccount, $randomPermission, "Allow") $acl.AddAccessRule($rule) Write-Host "Granted $($randomPermission) permission to $($domainUser) for file $($file.FullName)" } } Set-Acl -Path $file.FullName -AclObject $acl } } } |
実行結果
実行結果の一部を紹介します。share配下に10個のフォルダを作成しています。
作成されたフォルダの配下に、さらに100個のフォルダを作成しています。
アクセス権もランダムに付与されています。
アクセス権設定(WORKGROUP環境用)
以下はWORKGROUP(AD環境ではない)用のスクリプトです。AD環境用と大差はないです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# 共有フォルダのパス $shareFolderPath = "E:\share" # ユーザーの数 $userCount = 50 # 権限の種類 $permissions = @("FullControl", "Modify", "ReadAndExecute", "Read", "Write") # すべてのフォルダに対して処理を行うループ for ($i = 1; $i -le 10; $i++) { $level1FolderName = "level1folder{0:d2}" -f $i $level1FolderPath = Join-Path -Path $shareFolderPath -ChildPath $level1FolderName # ランダムなユーザーと権限を選択 $randomUsers = Get-Random -InputObject (1..$userCount) -Count (Get-Random -Minimum 1 -Maximum $userCount) $randomPermissions = Get-Random -InputObject $permissions -Count (Get-Random -Minimum 1 -Maximum $permissions.Count) # 権限を追加 $acl = Get-Acl -Path $level1FolderPath foreach ($randomUser in $randomUsers) { foreach ($randomPermission in $randomPermissions) { $permission = "fileuser{0:d2}" -f $randomUser $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($permission, $randomPermission, "Allow") $acl.AddAccessRule($rule) Write-Host "Granted $($randomPermission) permission to $($permission) for folder $($level1FolderPath)" } } Set-Acl -Path $level1FolderPath -AclObject $acl for ($j = 1; $j -le 100; $j++) { $level2FolderName = "level2folder{0:d2}" -f $j $level2FolderPath = Join-Path -Path $level1FolderPath -ChildPath $level2FolderName # ランダムなユーザーと権限を選択 $randomUsers = Get-Random -InputObject (1..$userCount) -Count (Get-Random -Minimum 1 -Maximum $userCount) $randomPermissions = Get-Random -InputObject $permissions -Count (Get-Random -Minimum 1 -Maximum $permissions.Count) # 権限を追加 $acl = Get-Acl -Path $level2FolderPath foreach ($randomUser in $randomUsers) { foreach ($randomPermission in $randomPermissions) { $permission = "fileuser{0:d2}" -f $randomUser $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($permission, $randomPermission, "Allow") $acl.AddAccessRule($rule) Write-Host "Granted $($randomPermission) permission to $($permission) for folder $($level2FolderPath)" } } Set-Acl -Path $level2FolderPath -AclObject $acl # フォルダ内のファイルにもランダムなアクセス許可を追加する $files = Get-ChildItem -Path $level2FolderPath -File foreach ($file in $files) { $randomUsers = Get-Random -InputObject (1..$userCount) -Count (Get-Random -Minimum 1 -Maximum $userCount) $randomPermissions = Get-Random -InputObject $permissions -Count (Get-Random -Minimum 1 -Maximum $permissions.Count) $acl = Get-Acl -Path $file.FullName foreach ($randomUser in $randomUsers) { foreach ($randomPermission in $randomPermissions) { $permission = "fileuser{0:d2}" -f $randomUser $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($permission, $randomPermission, "Allow") $acl.AddAccessRule($rule) Write-Host "Granted $($randomPermission) permission to $($permission) for file $($file.FullName)" } } Set-Acl -Path $file.FullName -AclObject $acl } } } |
以上でテスト用データ作成ができました。次はデータコピーを実施します。