我正在尝试编写一个小脚本来计时命令:
PS C:\Users\myUserName> cat timeSeb.ps1
"=> args = $args"
( Measure-Command { $args | Out-Default } ).ToString()
PS C:\Users\myUserName>
但是当我运行它时,我在输出中看不到文件列表:
PS C:\Users\myUserName> .\timeSeb.ps1 dir -force .smplayer
=> args = dir -force .smplayer
00:00:00.0026973
PS C:\Users\myUserName>
EDIT0:如果我在交互式 powershell 会话中键入此命令,它会按预期工作:
PS C:\Users\myUserName> ( Measure-Command { dir -force .smplayer | Out-Default } ).ToString()
Directory: C:\Users\myUserName\.smplayer
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 28/02/2024 18:14 file_settings
-a---- 29/02/2024 11:01 8 favorites.m3u8
-a---- 29/02/2024 11:01 77 hdpi.ini
-a---- 22/02/2024 18:22 42405 player_info.ini
-a---- 29/02/2024 11:01 1431 playlist.ini
-a---- 29/02/2024 11:01 8 radio.m3u8
-a---- 29/02/2024 11:01 8303 smplayer.ini
-a---- 29/02/2024 11:01 8 tv.m3u8
00:00:00.0255996
PS C:\Users\myUserName>
但是从我的 timeSeb.ps1 脚本来看,它不显示
dir -force
命令的输出
我希望看到
dir -force
命令的输出。
Measure-Command
无法访问$args
,这就是为什么它不写任何东西。
你需要像
(Measure-Command -InputObject $args -Expression { $_ | Out-Default }).toString()
那样传递它
(或
($args | Measure-Command -Expression { $_ | Out-Default }).toString()
)
您的另一个示例将其值硬编码在字符串命令中,这就是它起作用的原因