如何在 PowerShell 中对枚举执行按位或 (|)?
How do I perform a bitwise or (|) for enumerations in PowerShell?
我正在尝试执行按位或 (|) 操作,以将多个枚举应用于 .NET 程序集使用的 PowerShell 中的变量。但是,当单竖线字符执行此操作时,我得到一个 Expressions are only allowed as the first element of a pipeline
错误。如何在 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);
使用-bor
bitwise operator,例如:
([System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor
[System.Security.AccessControl.InheritanceFlags]::ObjectInherit)
ContainerInherit, ObjectInherit
这是使用 -bOr
运算符完成的。请参阅按位运算符的 documentation。
实施 -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);
您也可以将两个 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);
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"
我正在尝试执行按位或 (|) 操作,以将多个枚举应用于 .NET 程序集使用的 PowerShell 中的变量。但是,当单竖线字符执行此操作时,我得到一个 Expressions are only allowed as the first element of a pipeline
错误。如何在 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);
使用-bor
bitwise operator,例如:
([System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor
[System.Security.AccessControl.InheritanceFlags]::ObjectInherit)
ContainerInherit, ObjectInherit
这是使用 -bOr
运算符完成的。请参阅按位运算符的 documentation。
实施 -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);
您也可以将两个 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);
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"