当谈到使用 powershell 编写脚本时(或者一般来说,当涉及到脚本编写时),我是相当新的。我遇到的问题是我有一堆我想在一行中输出的变量。这不是原始但简化的代码:
$a = 1
$b = 2
$c = $a; $b;
Write-output $c
输出如下所示:
1
2
您可能会猜到我希望输出的样子:
12
我已经在网上搜索以获得解决方案,但似乎没有任何效果。我究竟做错了什么?
当谈到使用 powershell 编写脚本时(或者一般来说,当涉及到脚本编写时),我是相当新的。我遇到的问题是我有一堆我想在一行中输出的变量。这不是原始但简化的代码:
$a = 1
$b = 2
$c = $a; $b;
Write-output $c
输出如下所示:
1
2
您可能会猜到我希望输出的样子:
12
我已经在网上搜索以获得解决方案,但似乎没有任何效果。我究竟做错了什么?
现在你只是分配$a
给$c
然后$b
分别输出 - 使用@()
数组子表达式运算符来创建$c
:
$c = @($a; $b)
然后,使用-join
运算符将两个值连接成一个字符串:
$c -join ''
Select-Object
您可以使用成员访问或检索属性值使事情变得更轻松。检索到值后,您可以对其进行操作。
尚不完全清楚您真正需要什么,但以下是如何从代码中获取所需系统数据的蓝图。
# Get Serial Number
$serial = Get-CimInstance CIM_BIOSElement | Select-Object -Expand SerialNumber
# Serial Without Last Digit
$serialMinusLast = $serial -replace '.$'
# First 7 characters of Serial Number
# Only works when serial is 7 or more characters
$serial.Substring(0,7)
# Always works
$serial -replace '(?<=^.{7}).*$'
# Get Model
$model = Get-CimInstance Win32_ComputerSystem | Select-Object -Expand Model
# Get First Character and Last 4 Characters of Model
$modelSubString = $model -replace '^(.).*(.{4})$','$1$2'
# Output <model substring - serial number substring>
"{0}-{1}" -f $modelSubString,$serialMinusLast
# Output <model - serial number>
"{0}-{1}" -f $model,$serial
使用语法$object | Select-Object -Expand Property
将Property
仅由于使用-Expand
or而检索 的值-ExpandProperty
。您可以选择使用使用语法的成员访问$object.Property
来实现相同的结果。
如果您有一个元素数组,则可以使用-join
运算符创建这些数组元素的单个字符串。
$array = 1,2,3,'go'
# single string
$array -join ''
字符串格式运算符-f
可用于将组件连接成单个字符串。它允许您轻松地在子字符串之间添加额外的字符。