2016-04-07 13 views
0

をフォルダに新しいグループを適用するには:ユーザーが をそれを見ることができるようにシングルのPowerShellスクリプトは、フォルダ、ADグループを作成し、私がしたいんだ

  • フォルダの新規フォルダ
  • セットの共有名を作成します。
  • FS-TEへ
  • セットのフル読み取り権限新しい共有フォルダに両方のグループを適用します
  • ADグループFS-TestShareを-RWを作成
  • ADグループFS-TestShareを-Rを作成します。 STSHARE-R
  • セットのすべて読み取り/権利権限FS-TestShareを-RWへ
  • 設定し、フルアクセス権限をドメイン管理者へ

は、ここで私は少し周りを再生した後、今持っているものですが、私は望んでいました私が何かを見逃していないことを確認する。私は決定しました(今度はparamの設定を外すことにしましたが、後でそれに戻ることができます)これは正しいかどうか、スクリプトを書く良い方法がありますか?

私も予期しない

New-ADGroup 
    -Name "FS-$NAME-RW" 
    -SamAccountName "FS-"+$NAME+"-RW" 
    -GroupCategory Security 
    -GroupScope Global 
    -DisplayName "$NAME Read-Write Access" 
    -Path "CN=$LOCATION,CN=SECURITY GROUPS,CN=FILE SHARE GROUPS,DC=ESG,DC=INTL" 
    -Description "Members of this group have read-write access to the test share" 

New-ADGroup 
    -Name "FS-$NAME-R" 
    -SamAccountName "FS-"+$NAME+"-R" 
    -GroupCategory Security 
    -GroupScope Global 
    -DisplayName "$NAME Read Access" 
    -Path "CN=$LOCATION,CN=SECURITY GROUPS,CN=FILE SHARE GROUPS,DC=ESG,DC=INTL" 
    -Description "Members of this group have read access to the test share" 


# create new folder 
New-Item -Path $Path -ItemType Directory 

# get permissions 
$acl = Get-Acl -Path $Path 

#Get Security Groups 
get-adobject -searchbase "CN=SECURITY GROUPS,CN=FILE SHARE GROUPS,DC=ESG,DC=INTL" -ldapfilter {(objectclass=group)} 

# add a new permission 
$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("esg.intl\Domain Admins","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow") 
$acl.AddAccessRule($rule) 

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("esg.intl\"FS-"+$NAME+"-R"","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow") 
$acl.AddAccessRule($rule) 

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("esg.intl\"FS-"+$NAME+"-RW"","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow") 
$acl.AddAccessRule($rule) 

# set new permissions 
$acl | Set-Acl -Path $path 

に関するエラーの束は、私はまた、いくつかのエラーに実行していると私は、私はそれらを修正する方法を理解していない...

At C:\Users\A-Shane.Johnson\Desktop\ShareFolderCreation.ps1:44 char:96 
+ ... " -ldapfilter {(objectclass=group)} 
+     ~ 
Use `{ instead of { in variable names. 
At C:\Users\A-Shane.Johnson\Desktop\ShareFolderCreation.ps1:55 char:82 
+ ... ule("esg.intl\"FS-"+$NAME+"-R"","FullControl", "ContainerInherit, ObjectInherit" ... 
+     ~~~~~~~~~~~~~~~~ 
Unexpected token 'FS-"+$NAME+"-R""' in expression or statement. 
At C:\Users\A-Shane.Johnson\Desktop\ShareFolderCreation.ps1:55 char:82 
+ ... ule("esg.intl\"FS-"+$NAME+"-R"","FullControl", "ContainerInherit, ObjectInherit" ... 
+     ~ 
Missing closing ')' in expression. 
At C:\Users\A-Shane.Johnson\Desktop\ShareFolderCreation.ps1:55 char:164 
+ ... "None", "Allow") 
+     ~ 
Unexpected token ')' in expression or statement. 
At C:\Users\A-Shane.Johnson\Desktop\ShareFolderCreation.ps1:58 char:82 
+ ... ule("esg.intl\"FS-"+$NAME+"-RW"","FullControl", "ContainerInherit, ObjectInherit ... 
+     ~~~~~~~~~~~~~~~~~ 
Unexpected token 'FS-"+$NAME+"-RW""' in expression or statement. 
At C:\Users\A-Shane.Johnson\Desktop\ShareFolderCreation.ps1:58 char:82 
+ ... ule("esg.intl\"FS-"+$NAME+"-RW"","FullControl", "ContainerInherit, ObjectInherit ... 
+     ~ 
Missing closing ')' in expression. 
At C:\Users\A-Shane.Johnson\Desktop\ShareFolderCreation.ps1:58 char:165 
+ ... "None", "Allow") 
+     ~ 
Unexpected token ')' in expression or statement. 
    + CategoryInfo   : ParserError: (:) [], ParseException 
    + FullyQualifiedErrorId : OpenBraceNeedsToBeBackTickedInVariableName 

答えて

1

オクラホマので、カップルの事I最初に、文字列の補間...あなたが持っている場所:

"FS-"+$NAME+"-RW" 

あなたは、単にそれを短縮することができます。

"FS-$NAME-RW" 

変数は、それが自動的に文字列に変数を展開しようということのような二重引用符の中に発見された場合。私はそれが過度に複雑になると思うので、私は規定または規則に入るつもりはない。この変更だけでスクリプト内のすべてのインスタンスに適用すると、おそらくエラーのほとんどが削除されると言えば十分です。いくつかのコマンドが正しく解釈されるため、新しいコマンドを作成する可能性があります。

次に、コマンド構文。あなたの最初の2つのコマンドは、あなたが新しい行をエスケープしておらず、単にあなたの質問に反映されていない場合を除いて、期待通りに実行されない可能性があります。あなたのようにパラメータを設定したい場合は、それらをハッシュテーブルとして設定し、コマンドを実行するときにハッシュテーブルを展開することをお勧めします。あなたはこのようなことを行うことができます:私はそれをコメントアウト言うと上を移動したいので

$GroupParams= @{ 
    'Name' = "FS-$NAME-RW" 
    'SamAccountName' = "FS-$NAME-RW" 
    'GroupCategory' = "Security" 
    'GroupScope' = "Global" 
    'DisplayName' = "$NAME Read-Write Access" 
    'Path' = "CN=$LOCATION,CN=SECURITY GROUPS,CN=FILE SHARE GROUPS,DC=ESG,DC=INTL" 
    'Description' = "Members of this group have read-write access to the test share" 
} 

New-ADGroup @GroupParams 

あなたLDAPFilterラインエラーが、まあ、その行が余計に見えます。

ReadグループにFullAccess権限を与えていることに注意してください。おそらくReadAndExecuteに変更する必要があります。

最後に、ACLに問題がある場合は、ファイル共有のACLを扱う際に誰かにも同じ助言をします。設定を明示的に定義し、アクセスルールとして適用します。私はテンプレートとして次のコマンドを使用します。

$Rights = [System.Security.AccessControl.FileSystemRights]"FullControl" 

$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]"ObjectInherit,ContainerInherit" 
$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None 

$objType =[System.Security.AccessControl.AccessControlType]::Allow 

$objUser = New-Object System.Security.Principal.NTAccount("IIS_IUSRS") 

$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule($objUser, $Rights, $InheritanceFlag, $PropagationFlag, $objType) 

$objACL = Get-ACL "C:\Temp" 

$objACL.AddAccessRule($objACE) 

Set-ACL "C:\Temp" $objACL 

サイドノートでは、あなたが本当に共有名を宣言したものではないの全体のネットワーク共有の事を扱うことはありません。 get-help New-SMBShare -Fullを実行して、ネットワーク共有の設定に関する詳細情報を入手したい場合があります。

+0

NVMあなたは既にそれをしています...私が追加しようとしていたスプラットさえ。 – Matt

+0

ええ、私たちはお互いの時間以内に投稿しました。あなたの投稿は私のものよりも良いフォーマットでした:) – TheMadTechnician

+0

私は私の投稿に行ったように、最初の問題を広げるべきだと思います。文字列全体は '" esg.intl \ "FS - " + $ NAME + " - RW" "'で、表示されない余分な引用符があります。 '' esg.intl \ FS- $ NAME-RW ''でなければなりません。 – Matt

関連する問題