web-dev-qa-db-ja.com

Powershellを介してユーザーにフォルダーへのNTFS権限を付与する方法

ファイルサーバーに新しいユーザー用のフォルダーを作成するスクリプトを作成しようとしています。次に、そのフォルダーから継承された権限を取り除き、特定の権限を再度追加します。フォルダーを正常に追加し(スクリプトに静的エントリを指定した場合)、ドメイン管理者権限を付与したり、継承を削除したりします。ユーザーとして設定した変数を使用するのに問題があります。毎回静的ユーザーになりたくありません。このスクリプトを実行し、ユーザー名を尋ねてもらい、それからフォルダーを作成して、同じユーザーにその完全な権限を与えます。提供したユーザー名に基づいたフォルダ。次のように、ユーザーとしてSmithdを使用できます。

New-Item \\ fileserver\home $\Smithd –Type Directory

しかし、次のようにユーザーを参照することはできません:

New-Item \\ fileserver\home $\$ username –Type Directory

ここに私が持っているものがあります:

新しいフォルダを作成し、NTFSアクセス許可を設定します。

$username = read-Host -Prompt "Enter User Name"

New-Item \\\fileserver\home$\$username –Type Directory

Get-Acl \\\fileserver\home$\$username  

$acl = Get-Acl \\\fileserver\home$\$username

$acl.SetAccessRuleProtection($True, $False)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Domain\Domain Admins","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Domain\"+$username,"FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

Set-Acl \\\fileserver\home$\$username $acl

私はそれを機能させるためにいくつかの方法を試しましたが、うまくいきませんでした。どんなアイデアや提案も歓迎します、ありがとう。

5
Don

私の以前の仕事では、古い 'mkdir'コマンドを使用してpowershellスクリプトにフォルダーを作成できることを思い出しましたが、最初にパスを引用し、echo/write-Hostでテストすることをお勧めします。ただテストするためにこれを試してください:

_write-Host "\\${file_server}\home$\${user_name}"_

テストするWindowsマシンにアクセスできませんが、「$」も問題である可能性があると思います。

_$_をエスケープするには、バックティックでこれを試してください:

_write-Host "\\${file_server}\home`$\${user_name}"
_

そして、文字列があなたの好みに合うことがわかるまで、続けないでください。おそらく問題ではありませんが、read-Hostに-Promptが必要だとは思いません。書き込みホスティングは常に、適切な健全性チェックです。

より良いサポートを提供できるように、すぐにWindowsマシンにアクセスしたいと思っています。

また、興味がある場合は、プログラムの先頭でユーザー名をパラメーターとして指定できるため、$ file_serverと$ user_nameのペアのファイルから名前を読み取る別のスクリプトからスクリプトを繰り返し呼び出すことができます。ただparam( [string] $file_server, [string] $user_name )

幸運を! :)

2
kikuchiyo