1.@在以下用法都一样(array);并且是可选的

$a = 1,2,3,4,5
$b = (1,2,3,4,5)
$c = @(1,2,3,4,5)

PS C:\Users\Administrator> $a = 1,2,3,4,5
PS C:\Users\Administrator> $b = (1,2,3,4,5)
PS C:\Users\Administrator> $c = @(1,2,3,4,5)
PS C:\Users\Administrator> $a
1
2
3
4
5
PS C:\Users\Administrator> $b
1
2
3
4
5
PS C:\Users\Administrator> $c
1
2
3
4
5
PS C:\Users\Administrator>

2.在创建空array时,必须使用@

$a = @()
$b = () #错误写法

PS C:\Users\Administrator> $a = @()
PS C:\Users\Administrator> $b = ()
:1 : 7
+ $b = ()
+ ~
(
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedExpression

PS C:\Users\Administrator> $a.GetType()

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array


PS C:\Users\Administrator>

3.@在以下用法不一样(hashtable;也叫关联数组);并且是必选的

$a = {"Name"="xiamingliang";"Age"=18;"City"="ShangHai"}   #这是错误的写法
$b = @{"Name"="xiamingliang";"Age"=18;"City"="ShangHai"}

PS C:\Users\Administrator> $a = {"Name"="xiamingliang";"Age"=18;"City"="ShangHai"}
:1 : 7
+ $a = {"Name"="xiamingliang";"Age"=18;"City"="ShangHai"}
+ ~~~~~~

:1 : 29
+ $a = {"Name"="xiamingliang";"Age"=18;"City"="ShangHai"}
+ ~~~~~

:1 : 38
+ $a = {"Name"="xiamingliang";"Age"=18;"City"="ShangHai"}
+ ~~~~~~

+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : InvalidLeftHandSide

PS C:\Users\Administrator> $b = @{"Name"="xiamingliang";"Age"=18;"City"="ShangHai"}
PS C:\Users\Administrator> $b

Name Value
---- -----
Name xiamingliang
Age 18
City ShangHai


PS C:\Users\Administrator> $b.GetType()

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Hashtable System.Object


PS C:\Users\Administrator>

4.@可以强制将值设置为数组,即使对方为null

$a = Get-Process | where name -like 'balabalabala'

PS C:\Users\Administrator\Desktop> $a = Get-Process | where name -like 'balabalabala'

PS C:\Users\Administrator\Desktop> $a

PS C:\Users\Administrator\Desktop> $a.GetType()
Null
:1 : 1

+ $a.GetType()

+ ~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) []RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
~~~~~~~~~~~~


PS C:\Users\Administrator\Desktop>
$b = @(Get-Process | where name -like 'balabalabala')

PS C:\Users\Administrator\Desktop> $b = @(Get-Process | where name -like 'balabalabala')

PS C:\Users\Administrator\Desktop> $b

PS C:\Users\Administrator\Desktop> $b.GetType()

IsPublic IsSerial Name BaseType

-------- -------- ---- --------

True True Object[] System.Array



PS C:\Users\Administrator\Desktop>

5.@还可以用于定义多行字符串

5.1无引号等特殊字符时,两者基本无差别

细微的换行差别除外

$a = "
hello,
world!!
"

$b = @"
hello,
world!!
"@

PS C:\Users\Administrator> $a = "
>> hello,
>> world!!
>> "
PS C:\Users\Administrator>
PS C:\Users\Administrator> $b = @"
>> hello,
>> world!!
>> "@
PS C:\Users\Administrator> $a

hello,
world!!

PS C:\Users\Administrator> $b
hello,
world!!
PS C:\Users\Administrator>

5.2有引号等特殊字符时,必须使用单引号或@或转义字符

$c  = '
hello,
world!!"test"
'

$c1 = "
hello,
world!!""test""
"

$c2 = "
hello,
world!!`"test`"
"

$d = @"
hello,
world!!"test"
"@


PS C:\Users\Administrator> $c = '
>> hello,
>> world!!"test"
>> '
PS C:\Users\Administrator>
PS C:\Users\Administrator> $c1 = "
>> hello,
>> world!!""test""
>> "
PS C:\Users\Administrator>
PS C:\Users\Administrator> $c2 = "
>> hello,
>> world!!`"test`"
>> "
PS C:\Users\Administrator>
PS C:\Users\Administrator> $d = @"
>> hello,
>> world!!"test"
>> "@
PS C:\Users\Administrator> $c

hello,
world!!"test"

PS C:\Users\Administrator> $c1

hello,
world!!"test"

PS C:\Users\Administrator> $c2

hello,
world!!"test"

PS C:\Users\Administrator> $d
hello,
world!!"test"
PS C:\Users\Administrator>
PS C:\Users\Administrator>

5.3在变量使用上两者基本无差别

$str = "test for string."
$a = "
hello,
world!!$str
"

$b = @"
hello,
world!!$str
"@

PS C:\Users\Administrator> $str = "test for string."
PS C:\Users\Administrator> $a = "
>> hello,
>> world!!$str
>> "
PS C:\Users\Administrator>
PS C:\Users\Administrator> $b = @"
>> hello,
>> world!!$str
>> "@
PS C:\Users\Administrator>
PS C:\Users\Administrator> $a

hello,
world!!test for string.

PS C:\Users\Administrator> $b
hello,
world!!test for string.
PS C:\Users\Administrator>
PS C:\Users\Administrator>
$str = "test for string1."
$c = "
hello,
world!!{0}
" -f $str

$d = @"
hello,
world!!{0}
"@ -f $str

PS C:\Users\Administrator> $str = "test for string1."
PS C:\Users\Administrator> $c = "
>> hello,
>> world!!{0}
>> " -f $str
PS C:\Users\Administrator>
PS C:\Users\Administrator> $d = @"
>> hello,
>> world!!{0}
>> "@ -f $str
PS C:\Users\Administrator>
PS C:\Users\Administrator> $c

hello,
world!!test for string1.

PS C:\Users\Administrator> $d
hello,
world!!test for string1.
PS C:\Users\Administrator>
PS C:\Users\Administrator>

【封面图。。。】

@符号在PowerShell中的应用_powershell

文章若有纰漏处,还望大家及时指正...