【问题标题】:Creating and accessing an array value in Powershell [duplicate]在 Powershell 中创建和访问数组值 [重复]
【发布时间】:2017-12-27 20:17:16
【问题描述】:

我正在尝试创建一个 PowerShelll 脚本,它首先检查打印机列表是否已经映射。如果列表中的打印机未映射,它将映射打印机。

单独检查打印机可以正常工作。当我创建一个数组和一个 for 循环时,由于打印机名称错误,它停止工作。

我似乎无法访问数组的单个项目。

这是我当前的代码 sn-p:

[string[]] $printernames = "Buero Drucker","hase"
for($i = 0; $i -lt $printernames.Length; $i++)
{
    $printerexists = [Boolean](Get-WmiObject win32_printer -Filter "Name = $printernames[$i]")
    Write-Host "Printer $printernames[$i] exists: $printerexists"
}

现在当调用$printernames[0] 时,我希望得到以下信息:

"Buero Drucker"

相反,我收到以下内容:

"Buero Drucker hase[0]"

这个变量似乎不是一个真正的数组,但我不知道为什么。

===== 编辑=====

for 循环可以正常工作并迭代 2 次。因此,我希望数组创建是正确的,但变量的访问是错误的

我已经检查了变量 $i。控制台输出如下:

Printer Buero Drucker hase[0] exists:  False
Printer Buero Drucker hase[1] exists:  False

【问题讨论】:

    标签: arrays powershell for-loop


    【解决方案1】:

    在括号中扩展变量有点烦人,你会遇到同样的问题

    $Var = "Something"
    "$Var.Property"
    

    它将返回"Something.Property"

    你想用这个:

     "Name = $($printernames[$i])"
    

    $() 中包装您需要扩展的任何内容,它会按预期工作,目前powershell 仅匹配到var 名称的末尾,并忽略任何.[ 等。

    【讨论】:

    • 哇,非常感谢您提供的快速信息。你有这个信息的来源吗?在谷歌上我只找到了 $variablename[$i]
    • @julianbechtold 这与变量本身无关,这与在字符串中使用变量有关,看看here,您可能会发现一些有用的信息。
    • 只是要明确 $printernames[$i] 是一个 expression 而不是变量。因此 $() 执行有时称为 表达式压缩 的操作,并导致表达式在 () 内部进行评估,然后扩展为变量。
    猜你喜欢
    • 2011-01-23
    • 2019-08-28
    • 2018-07-11
    • 2017-04-13
    • 1970-01-01
    • 2015-08-21
    • 2011-11-06
    • 2012-09-21
    • 1970-01-01
    相关资源
    最近更新 更多