2015-01-20 43 views
1

我想執行一個按位或(|)操作來應用多個枚舉到.NET程序集使用的PowerShell中的變量。但是,當單管字符做到這一點時,我得到一個Expressions are only allowed as the first element of a pipeline錯誤。如何在PowerShell中分配多個枚舉?如何在PowerShell中執行按位或(|)枚舉?

$everyone = New-Object System.Security.Principal.SecurityIdentifier([System.Security.Principal.WellKnownSidType]::WorldSid, $null); 
    $fsr = [System.Security.AccessControl.FileSystemRights]::Read; 
    $if = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit | [System.Security.AccessControl.InheritanceFlags]::ObjectInherit; 
    $pf = [System.Security.AccessControl.PropagationFlags]::None; 
    $act = [System.Security.AccessControl.AccessControlType]::Allow; 
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($everyone, $fsr, $if, $pf, $act); 

回答

4

使用-bor

[System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit 

ContainerInherit, ObjectInherit 
1

這是使用-bOr操作完成。請參閱TechNet documentation about ¾ down the page

上面的代碼示例是這樣的-bOr後實施:

$everyone = New-Object System.Security.Principal.SecurityIdentifier([System.Security.Principal.WellKnownSidType]::WorldSid, $null); 
    $fsr = [System.Security.AccessControl.FileSystemRights]::Read; 
    $if = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bOr [System.Security.AccessControl.InheritanceFlags]::ObjectInherit; 
    $pf = [System.Security.AccessControl.PropagationFlags]::None; 
    $act = [System.Security.AccessControl.AccessControlType]::Allow; 
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($everyone, $fsr, $if, $pf, $act); 
0

你也可以把兩個inheritanceflag對象的數組裏面:

$everyone = New-Object System.Security.Principal.SecurityIdentifier([System.Security.Principal.WellKnownSidType]::WorldSid, $null); 
$fsr = [System.Security.AccessControl.FileSystemRights]::Read; 
$if = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit 
$if2 = [System.Security.AccessControl.InheritanceFlags]::ObjectInherit; 
$pf = [System.Security.AccessControl.PropagationFlags]::None; 
$act = [System.Security.AccessControl.AccessControlType]::Allow; 
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($everyone, $fsr, ($if,$if2), $pf, $act); 
2

的PowerShell將提供自動轉換字符串,所以你也可以這樣做:

$everyone = New-Object System.Security.Principal.SecurityIdentifier([System.Security.Principal.WellKnownSidType]::WorldSid, $null); 
$fsr = [System.Security.AccessControl.FileSystemRights]::Read; 
$if = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit,ObjectInherit" 
$pf = [System.Security.AccessControl.PropagationFlags]::None; 
$act = [System.Security.AccessControl.AccessControlType]::Allow; 
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($everyone, $fsr, $if, $pf, $act); 

事實上,如果你希望它是顯著的打字比較少(好快的命令行的東西時,你不關心清晰供日後閱讀),你可以做這樣的:

$everyone = New-Object System.Security.Principal.SecurityIdentifier([System.Security.Principal.WellKnownSidType]::WorldSid, $null); 
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $everyone, "Read", "ContainerInherit,ObjectInherit", "None", "Allow" 
+0

很有意思,我學到了新鮮玩意 :) – 2015-01-20 20:45:01