2017-12-27 1 views
2

이미 매핑 된 프린터 목록을 먼저 확인하는 PowerShelll 스크립트를 만들려고합니다. 목록의 프린터가 매핑되지 않은 경우 프린터를 매핑합니다.Powershell에서 배열 값 생성 및 액세스

프린터 만 작동하는지 잘 확인 중입니다. 배열과 for 루프를 만들 때 프린터 이름이 잘못되어 작업이 중단되었습니다.

배열의 단일 항목에 액세스하지 못하는 것 같습니다.

이 내 현재 코드입니다 : 다음

"Buero Drucker" 

가 대신 내가 나타납니다 :

"Buero Drucker hase[0]" 
$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" 
} 

변수가 실제로 배열이 아닌 것 같지만 이유를 알 수 없습니다.

===== 편집 =====

을위한 루프 잘 작동하고 반복 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

와우 정보에 대해 매우 감사드립니다. 이 정보에 대한 출처가 있습니까? 구글에서만 나는 $ variablename [$ i] –

+0

을 찾았습니다. @julianbechtold 이것은 변수들과 관련이 없습니다. 문자열 내부에서 변수를 사용하는 것과 관련이 있습니다. [here] (https : //kevinmarquette.github. io/2017-01-13-powershell-variable-substitution-in-strings /)를 사용하면 유용한 정보를 얻을 수 있습니다. – ConnorLSW

+0

$ printernames [$ i]는 *** 표현식 *** 변수가 아닙니다. 따라서 $()는 때로는 calle * expression squeezing *을 수행하고 그 표현식이()의 내부에서 평가되어 변수로 전개됩니다. – EBGreen