2017-04-05 5 views
0

これは少し複雑かもしれません....私は、共有のセキュリティ権限を持つすべての人々のリストを生成するスクリプトを作成しました。問題は、共有への共有アクセス許可がセキュリティアクセス許可と異なることです。私はすべての共有のアクセス許可を削除し、セキュリティのアクセス許可と同じフルコントロールで同じユーザーに共有のアクセス許可を設定します。セキュリティ権限に基づいて共有内のすべてのフォルダのアクセス権を設定する

私はこれを変更するスクリプトが必要なので、これを4つの異なるサーバーで実行する必要があります。任意のアイデアやリソース?


編集:私の同僚との話し合いの後目的が少し変更されました。今私はSet-Aclを使用して、基本的に1つの特定のグループ以外のすべてのユーザーからフルコントロールを削除したいと考えています。これはあまりにも困難ではないでしょうか?私は単純に各共有のために - 個々のユーザー - 特定のグループに属していないユーザーがフルコントロールを削除するようにaclを設定すると、

権限を削除するにはどうすればよいですか? FCを設定するコマンドは表示されますが、削除するコマンドはありません。

+0

共有アクセス権を 'Everyone:FullControl'に設定し、ファイルシステムのアクセス権だけでコントロールにアクセスします。いずれにせよ、より細かい制御が可能です。何かがある場合は、共有にアクセスベースの列挙を有効にして、実際にアクセスできるファイル/フォルダだけを表示させます。 –

+0

get-aclとset-aclには、PowerShellのそれ以降のバージョンにはまだ存在するいくつかの大きなバグがありますが、これが可能です。私は試して、今夜の後に返事に行くよ! –

+0

こんにちは@リチャードDakinので、私の同僚との議論の後、目的はわずかに変更されています。今私はset-aclを使用して、基本的に1つの特定のグループ以外のすべてのユーザーからフルコントロールを削除したいと考えています。これはあまりにも困難ではないでしょうか?私は単純に各共有のために - 各ユーザーのために - 特定のグループにないユーザーがフルコントロールを削除するようにaclを設定した場合....どのように権限を削除しますか? FCを設定するコマンドは表示されますが、削除するコマンドはありません。 – SanomaJean

答えて

0

このように、この方法では、GET-ACLとSET-ACLからのすべてのバグが削除されるため、以前のバージョンのPowerShellでも使用できます。削除されたら、これを変更して(参照$ PERM)、アクセスを保持するグループに追加することができます。あなたがそれを微調整する必要があるかどうか教えてください。

$folderpath = "Somefolderpath" 

write-Output "Removing inheritance " 
$acl = Get-Acl $Folderpath 
$acl.SetAccessRuleProtection($True, $True) 
$acl | Set-Acl 
$acl = Get-Acl $Folderpath 
$acl.Access |where {$_.IdentityReference -eq "NT AUTHORITY\Authenticated 
Users"} |%{$acl.RemoveAccessRule($_)} 
$acl | Set-Acl 

If ($?){ 
Write-Output "Inheritance Removed" 
} 
write-Output "Set permissions" 
$acl = Get-Acl $Folderpath 
$perm = "AddGroupHere","FullControl","Allow" 
$accessRule = new-object System.Security.AccessControl.FileSystemAccessRule 
$perm 
$acl.AddAccessRule($accessRule) 
$acl | Set-Acl 

If ($?){ 
Write-Output "ACL set" 
} 
+0

申し訳ありません前にPSを書いたことはありません。私が共有内のすべてのフォルダに対してこれを実行したいのであれば、それをforeachでどうやってラップするのでしょうか? – SanomaJean

+0

[cmdletbinding()] のparam( '' [パラメータ(ValueFromPipeline = $ Trueの場合、 ValueFromPipelineByPropertyName = $ TRUE)] $コンピューター=) $株式= gwmi -Class win32_share -ComputerName $コンピュータ| ($の株式$共有)-ExpandProperty名前 のforeach { \t試し{= "SERVER PATH" + $共有 \t場合(テスト・パス$ SHARE1) \t#書き込みホスト$ \t \t $のSHARE1を選択share1 \t { \t書き込み出力$ share get-acl $ share1 | %{$ _。アクセス} | formatting-この不足のため申し訳ありませんフィート-propertyたIdentityReference、AccessControlType、他FileSystemRights } { スロー$共有 } } キャッチ { 書き込み出力 "HERE STRING" } – SanomaJean

+0

は、私は現在、午前ものです各共有上のすべてのログインの名前を収集するために使用します。私はセキュリティのためにSERVERPATHとSTRING HEREを削除しました。 – SanomaJean

関連する問題