我正在尝试创建一个PowerShell脚本,如果已经映射,则首先检查打印机列表。如果未映射列表中的打印机,则它将映射打印机。
单独检查打印机工作正常。当我创建一个数组和一个for循环时,由于打印机名称错误,它停止工作。
似乎我无法访问数组的单个项目。
这是我目前的代码段:
[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
在括号中扩展变量有点烦人,你遇到同样的问题
$Var = "Something"
"$Var.Property"
它将返回"Something.Property"
你想用这个:
"Name = $($printernames[$i])"
包装你需要在$()
内扩展的任何东西,它将按预期工作,目前powershell只匹配var名称的末尾,并忽略任何.
或[
等。