【问题标题】:Powershell output in one line一行中的Powershell输出
【发布时间】:2021-07-13 13:43:59
【问题描述】:

对于使用 powershell 编写脚本(或者一般而言,对于脚本编写),我还是个新手。我遇到的问题是我有一堆我想在一行中输出的变量。这里不是原始的而是简化的代码:

$a = 1
$b = 2
$c = $a; $b;
Write-output $c

输出如下:

1
2

你可能猜到我希望输出的样子:

12

我已经在网上搜索了一个解决方案,但似乎没有任何效果。我做错了什么?

【问题讨论】:

  • "$a$b",Powershell中的分号表示语句终止。因此,由于$c 是对$a 的引用,由于分号分隔$a$b 的两个变量,它会打印出1。所以,你基本上是在说,打印$a,然后打印$b

标签: powershell one-liner


【解决方案1】:

现在您只需将$a 分配给$c,然后分别输出$b - 请改用@() 数组子表达式运算符来创建$c

$c = @($a; $b)

然后,使用-join 运算符将两个值连接成一个字符串:

$c -join ''

【讨论】:

  • 太棒了!适用于简化代码,但不适用于实际代码。
  • @Dude “实际代码”是什么意思?如果您忘记包含某些内容,请update your original post :-)
【解决方案2】:

您可以使用会员访问权限或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 将仅由于使用-Expand-ExpandProperty 而检索Property 的值。您可以选择使用成员访问,它使用语法 $object.Property,以实现相同的结果。

如果您有一个元素数组,则可以使用 -join 运算符创建这些数组元素的单个字符串。

$array = 1,2,3,'go'
# single string
$array -join ''

字符串格式运算符-f 可用于将组件连接成单个字符串。它允许您轻松地在子字符串之间添加额外的字符。

【讨论】:

    猜你喜欢
    • 2022-08-10
    • 2020-10-31
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2020-08-31
    • 2013-04-15
    相关资源
    最近更新 更多