2016-04-12 10 views
0

多くの血液、汗、涙、そしてこれらのボードの人々からの驚くべき助けの後、私は最終的に私のコードを動作させるが、私はトリミングと大文字小文字を使って少し助けが必要です。私は、すでに作成された後に何かを変更する方法を理解していますが、コミットする前にそれを変換しておきたいと思います。Powershell .ToUpperと空白を削除

これは正しい構文です:

#Create Security Groups 
    $GroupParams1= @{ 
     'Name' = "FS-$NAME-RW".ToUpper 
     'SamAccountName' = "FS-$NAME-RW".ToUpper 
     'GroupCategory' = "Security" 
     'GroupScope' = "Global" 
     'DisplayName' = "$NAME Read-Write Access" 
     'Path' = "OU=$LOCATION,OU=FILE SHARE GROUPS,OU=Security Groups,DC=esg,DC=intl" 
    'Description' = "Members of this group have read-write access to $Path." 
} 

それが正しい場合、どのように私は原因$名入力に追加されるかもしれないスペースを削除しますか?

この場合、「Test Share 123」という名前のフォルダを作成できますが、これで作成されたADグループを「FS-TESTSHARE123-R」および「FS-TESTSHARE123 "FS-Test Share 123-R"の代わりに "-RW"を使用します。

また、私のスクリプトに関する他の提案はありますか?

$Parent = read-host -prompt "Enter full parent path that will contain the new folder (ie. \\eccofs01\Groups\ECCO IT\)" 
$Name = read-host -prompt "Enter New Folder Name." 
$Path = "$($parent)$($Name)" 
$Location = read-host -prompt "Enter the AD Security Group Location (i.e. Global, Americas, Europe, Asia Pacific)" 

Import-Module ActiveDirectory 

#Create Security Groups 
$GroupParams1= @{ 
    'Name' = "FS-$NAME-RW" 
    'SamAccountName' = "FS-$NAME-RW" 
    'GroupCategory' = "Security" 
    'GroupScope' = "Global" 
    'DisplayName' = "$NAME Read-Write Access" 
    'Path' = "OU=$LOCATION,OU=FILE SHARE GROUPS,OU=Security Groups,DC=esg,DC=intl" 
    'Description' = "Members of this group have read-write access to $Path." 
} 

New-ADGroup @GroupParams1 

$GroupParams2= @{ 
    'Name' = "FS-$NAME-R" 
    'SamAccountName' = "FS-$NAME-R" 
    'GroupCategory' = "Security" 
    'GroupScope' = "Global" 
    'DisplayName' = "$NAME Read-Write Access" 
    'Path' = "OU=$LOCATION,OU=FILE SHARE GROUPS,OU=Security Groups,DC=esg,DC=intl" 
    'Description' = "Members of this group have read access to $Path" 
} 

New-ADGroup @GroupParams2 

# Create New Folder 
New-Item -Path $Path -ItemType Directory 

#Create All ACEs (permission sets) and Set ACL on the new folder 
function New-Ace { 
    [CmdletBinding()] 
    Param(
    [Parameter(Mandatory=$true, Position=0)] 
    [Security.Principal.NTAccount]$Account, 
    [Parameter(Mandatory=$false, Position=1)] 
    [Security.AccessControl.FileSystemRights]$Permissions = 'ReadAndExecute', 
    [Parameter(Mandatory=$false, Position=2)] 
    [Security.AccessControl.InheritanceFlags]$InheritanceFlags = 'ContainerInherit,ObjectInherit', 
    [Parameter(Mandatory=$false, Position=3)] 
    [Security.AccessControl.PropagationFlags]$PropagationFlags = 'None', 
    [Parameter(Mandatory=$false, Position=4)] 
    [Security.AccessControl.AccessControlType]$Type = 'Allow' 
) 

    New-Object Security.AccessControl.FileSystemAccessRule(
    $Account, $Permissions, $InheritanceFlags, $PropagationFlags, $Type 
) 
} 

$domain = 'ESG.INTL' 

$administrators = ([wmi]"Win32_Sid.Sid='S-1-5-32-544'").AccountName 

$acl = Get-Acl $path 

$administrators, "$domain\Domain Admins" | ForEach-Object { 
    $acl.AddAccessRule((New-Ace $_ 'FullControl')) 
} 
$acl.AddAccessRule((New-Ace "$domain\FS-$NAME-RW" 'Modify')) 
$acl.AddAccessRule((New-Ace "$domain\FS-$NAME-R" 'ReadAndExecute')) 

Set-Acl $path $acl 

答えて

0

'Name' = "FS-$($NAME.replace(' ',''))-RW".toupper() 
+0

素晴らしいです、ありがとうございます!それはトンを助ける。私はそれを後ろ向きに考えていて、まずそれを大文字にしようとしていたので、混乱させていました... –

+0

よろしくお願いします!初めてここに口座を入れて、私が手伝ってくれてうれしい!私のコードは実際には括弧を欠いていましたが、あなたはそれを理解したと思います。 – 2o1o0

+0

ええ、私はそれを実行し、エラーを見た。しかし、心配はありません。 :D –

0

あなたは役立つはず

'Name' = "FS-$NAME-RW".ToUpper() 

を呼び出すTOUPPERに括弧を逃しています。あなたは末尾のスペースをトリミングする必要がある場合は、....(この1つは末尾のスペースを持っていませんが)一緒に呼び出しをチェーンすることができます私のために働くようだ

'Name' = "FS-$NAME-RW".ToUpper().TrimEnd(' ') 
+0

Iを最後にだけでなく、文字列内のスペースを削除したいと思うと思います。この場合、 '.Replace()'を使用することができます。例: ''Name' =" FS - $($ NAME.Trim()。Replace ( ''、 '').ToUpper()) - RW "' – Negorath

+0

私はすべてのスペースを置き換えている場合、.Trimは必要ないと思われます。私はそれを正しく理解していませんか? –