PowerShell 技能连载 - 同时输出和赋值

在前一个技能中我们介绍了如何记录脚本结果,以及如何使用括号来同时输出和赋值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PS> ($a = Get-Process -Id $pid)

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
1595 102 283200 325444 64,56 6436 1 powershell_ise



PS> $a

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
1595 102 283200 325444 64,75 6436 1 powershell_ise



PS>

还可以用 -OutVariable 通用参数来实现相同的功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PS> Get-Process -Id $pid -OutVariable b

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
1731 105 290336 341688 66,66 6436 1 powershell_ise



PS> $b

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
1731 105 290336 341688 66,92 6436 1 powershell_ise



PS>

Tee-Object 是第三种方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PS> Get-Process -Id $pid | Tee-Object -Variable c

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
1759 109 292300 343644 71,53 6436 1 powershell_ise



PS> $c

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
1759 109 292300 343644 71,69 6436 1 powershell_ise



PS>

以上方法使用了管道,而管道的速度比较慢。如果希望提升性能,那么避免使用管道:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PS> Tee-Object -InputObject (Get-Process -Id $pid) -Variable d

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
1761 111 294568 345268 74,31 6436 1 powershell_ise



PS> $d

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
1761 111 294568 345268 74,59 6436 1 powershell_ise



PS>

本文国际来源:Outputting and Assigning at the same time

评论