在格式语法中调用函数

时间:2015-05-07 19:54:36

标签: powershell

我已经编写了以下代码来获取处理器数量。

Function cpucount {

Get-WmiObject Win32_processor | select -Expand NumberOfLogicalProcessors | Unique

} 

Function cpumodel {

'cpu: $(cpucount) X {0:0}' -f ( Get-WmiObject Win32_processor | select -Expand Name | Unique )

}

麻烦的是,我希望代码显示以下输出。处理器数量和处理器型号。

cpu:4 X Intel(R) Xeon(R) CPU L7555 @ 1.87GHz

现在,当我调用我的代码时,它给了我以下输出,主要是通过switch语句命名为cpumodel的函数。

PS C:\Users\Administrator> .\test.ps1 cpu
cpu: $(cpucount) X Intel(R) Xeon(R) CPU           L7555  @ 1.87GHz

如何在cpumodel函数中调用我的格式语法中的cpucount函数,或者我将如何实现我想要的结果?最后,如何避免以下输出中的空格?

Intel(R) Xeon(R) CPU           L7555  @ 1.87GHz

1 个答案:

答案 0 :(得分:1)

单引号字符串文字不处理子表达式($(...)内的内容)。 PowerShell始终将它们视为文字文本。

您需要使用双引号字符串文字:

"cpu: $(cpucount) X {0:0}" -f ( Get-WmiObject Win32_processor | select -Expand Name | Unique )
^                        ^

对于额外的空格,它们是调用Get-WmiObject返回的值的一部分。所以,你需要自己从价值中删除它们。使用-replace运算符可以轻松完成此操作:

Function cpumodel {

$data = Get-WmiObject Win32_processor | select -Expand Name | Unique
$data = $data -replace '\s+', ' '
"cpu: $(cpucount) X {0:0}" -f $data

}