2017-12-27 19 views
2

PowerShelllスクリプトを作成しようとしています。すでにスクリプトがマップされている場合は、まずそのリストをチェックします。リストのプリンタがマップされていない場合は、プリンタをマップします。Powershellで配列値を作成してアクセスする

プリンタだけを確認しても問題ありません。配列とforループを作成したとき、プリンタ名が間違っていたので動作しなくなりました。

私は配列の単一項目にアクセスできないようです。

これは私の現在のコードスニペットです:$printernames[0]を呼び出すとき

[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" 
} 

今、私は次のことを得ることを期待する:

"Buero Drucker" 

代わりに、私は次のように受信します。

"Buero Drucker hase[0]" 

変数は本当に配列ではないようですが、私はその理由を伝えられません。

===== forループ編集=====

ザ・罰金や繰り返し処理2回動作します。したがって、私は、配列の作成が正しいことを期待しますが、私はすでに、変数$ Iをチェックし

変数のアクセスが間違っていること。それはあなたがしたい "Something.Property"

を返します。カッコ内の変数を展開

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

答えて

1

は少し迷惑である、あなたは

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

をしようと、同じ問題に遭遇するだろう:コンソール出力は以下のとおりです。これを使用する:

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

あなたは012の内側に展開する必要があるものをラップと期待どおりに動作しますが、現在のところpowershellはvar名の最後までしか一致せず、.または[などを無視します。

+0

すばらしい情報はありがとうございます。この情報のソースはありますか? Googleで私は$ variablename [$ i] –

+0

@julianbechtoldしか見つけられませんでした。これは変数などとは関係ありません。これは文字列内で変数を使用することと関係しています。[こちら](ここではhttps://kevinmarquette.github。 io/2017-01-13-powershell-variable-substitution-in-strings /)には、有用な情報がいくつかあります。 – ConnorLSW

+0

$ printernames [$ i]は変数ではなく***式***です。したがって、$()は時にはcalle * expression squeezing *を実行し、()の内部で評価された式を変数として展開します。 – EBGreen

関連する問題