我看到了一个类似于这样的函数:
function
{
[CmdletBinding()]
[OutputType([Boolean])]
param (
[bool] $param
}
# ...
}
这里
Boolean
和bool
有什么区别?我看到了一个类似于这样的函数:
function
{
[CmdletBinding()]
[OutputType([Boolean])]
param (
[bool] $param
}
# ...
}
Boolean
和bool
有什么区别?[bool]
是一个用于 powershell 类型加速器 的关键字。
我在使用 powershell 7,如果有官方文档,我没有找到(除了像往常一样的《Windows Powershell in Action》)。
[psobject].Assembly.GetType("System.Management.Automation.TypeAccelerators")::get
Key Value
--- -----
Alias System.Management.Automation.AliasAttribute
AllowEmptyCollection System.Management.Automation.AllowEmptyCollectionAttribute
AllowEmptyString System.Management.Automation.AllowEmptyStringAttribute
AllowNull System.Management.Automation.AllowNullAttribute
ArgumentCompleter System.Management.Automation.ArgumentCompleterAttribute
ArgumentCompletions System.Management.Automation.ArgumentCompletionsAttribute
array System.Array
bool System.Boolean
byte System.Byte
char System.Char
CmdletBinding System.Management.Automation.CmdletBindingAttribute
datetime System.DateTime
decimal System.Decimal
double System.Double
DscResource System.Management.Automation.DscResourceAttribute
ExperimentAction System.Management.Automation.ExperimentAction
Experimental System.Management.Automation.ExperimentalAttribute
ExperimentalFeature System.Management.Automation.ExperimentalFeature
float System.Single
single System.Single
guid System.Guid
hashtable System.Collections.Hashtable
int System.Int32
int32 System.Int32
short System.Int16
int16 System.Int16
long System.Int64
int64 System.Int64
ciminstance Microsoft.Management.Infrastructure.CimInstance
cimclass Microsoft.Management.Infrastructure.CimClass
cimtype Microsoft.Management.Infrastructure.CimType
cimconverter Microsoft.Management.Infrastructure.CimConverter
IPEndpoint System.Net.IPEndPoint
NullString System.Management.Automation.Language.NullString
OutputType System.Management.Automation.OutputTypeAttribute
ObjectSecurity System.Security.AccessControl.ObjectSecurity
Parameter System.Management.Automation.ParameterAttribute
PhysicalAddress System.Net.NetworkInformation.PhysicalAddress
pscredential System.Management.Automation.PSCredential
PSDefaultValue System.Management.Automation.PSDefaultValueAttribute
pslistmodifier System.Management.Automation.PSListModifier
psobject System.Management.Automation.PSObject
pscustomobject System.Management.Automation.PSObject
psprimitivedictionary System.Management.Automation.PSPrimitiveDictionary
ref System.Management.Automation.PSReference
PSTypeNameAttribute System.Management.Automation.PSTypeNameAttribute
regex System.Text.RegularExpressions.Regex
DscProperty System.Management.Automation.DscPropertyAttribute
sbyte System.SByte
string System.String
SupportsWildcards System.Management.Automation.SupportsWildcardsAttribute
switch System.Management.Automation.SwitchParameter
cultureinfo System.Globalization.CultureInfo
bigint System.Numerics.BigInteger
securestring System.Security.SecureString
timespan System.TimeSpan
ushort System.UInt16
uint16 System.UInt16
uint System.UInt32
uint32 System.UInt32
ulong System.UInt64
uint64 System.UInt64
uri System.Uri
ValidateCount System.Management.Automation.ValidateCountAttribute
ValidateDrive System.Management.Automation.ValidateDriveAttribute
ValidateLength System.Management.Automation.ValidateLengthAttribute
ValidateNotNull System.Management.Automation.ValidateNotNullAttribute
ValidateNotNullOrEmpty System.Management.Automation.ValidateNotNullOrEmptyAttribute
ValidatePattern System.Management.Automation.ValidatePatternAttribute
ValidateRange System.Management.Automation.ValidateRangeAttribute
ValidateScript System.Management.Automation.ValidateScriptAttribute
ValidateSet System.Management.Automation.ValidateSetAttribute
ValidateTrustedData System.Management.Automation.ValidateTrustedDataAttribute
ValidateUserDrive System.Management.Automation.ValidateUserDriveAttribute
version System.Version
void System.Void
ipaddress System.Net.IPAddress
DscLocalConfigurationManager System.Management.Automation.DscLocalConfigurationManagerAttribute
WildcardPattern System.Management.Automation.WildcardPattern
X509Certificate System.Security.Cryptography.X509Certificates.X509Certificate
X500DistinguishedName System.Security.Cryptography.X509Certificates.X500DistinguishedName
xml System.Xml.XmlDocument
CimSession Microsoft.Management.Infrastructure.CimSession
mailaddress System.Net.Mail.MailAddress
semver System.Management.Automation.SemanticVersion
scriptblock System.Management.Automation.ScriptBlock
pspropertyexpression Microsoft.PowerShell.Commands.PSPropertyExpression
psvariable System.Management.Automation.PSVariable
type System.Type
psmoduleinfo System.Management.Automation.PSModuleInfo
powershell System.Management.Automation.PowerShell
runspacefactory System.Management.Automation.Runspaces.RunspaceFactory
runspace System.Management.Automation.Runspaces.Runspace
initialsessionstate System.Management.Automation.Runspaces.InitialSessionState
psscriptmethod System.Management.Automation.PSScriptMethod
psscriptproperty System.Management.Automation.PSScriptProperty
psnoteproperty System.Management.Automation.PSNoteProperty
psaliasproperty System.Management.Automation.PSAliasProperty
psvariableproperty System.Management.Automation.PSVa
$Accelerators = [PowerShell].Assembly.GetType("System.Management.Automation.TypeAccelerators")
$Accelerators::Add('dt','system.datetime')
[dt]'1:00'
Saturday, February 22, 2020 1:00:00 AM
bool
是 System.Boolean
的别名,就像 int
是 System.Int32
的别名一样。
例子:
PS C:\Users\aruns7> [bool] $yourValue = 1
PS C:\Users\aruns7> $yourValue.gettype().fullname
System.Boolean
Boolean代表了System.Boolean
类,而bool
是用于创建Boolean
对象的System.Boolean
关键字。
bool
在技术上并不是一个 _关键字_:[bool]
是使用 类型加速器 的 _类型文字_,如 js2010 的回答 所示。此外,在 .NET 术语中,System.Boolean
在技术上不是一个 _类_,而是一个 struct
(一个 _值类型_)。 - mklement0
System.Management.Automation.TypeAccelerators
_不是公共的_,使用它的Add()
方法来定义自定义加速器时要小心;在 PSv5+ 中最好使用using namespace
(虽然不完全等效,但至少可以省略类型文字中的命名空间部分)。 - mklement0