2016-04-13 29 views
0

Üçüncü taraf bir güç kabuk kitaplığı ile çalışıyorum. Bu kitaplık yöntemindeki işlev parametrelerinden biri dize dizisidir. Bu parametre değeri sabit disk sürücülerini içermelidir. Ben sürücülerDize dizisi olarak sürücüler listesi

[string[]] $drives = $null; 
gwmi win32_logicaldisk -filter "drivetype = 3" | Select Name | % { $drives += $_.Name } 
$drives -is [array] 
Write-Output $drives 

bu senaryonun çıktı Gerçek

olduğunu almak için komut şu var
C:
D:

Ancak üçüncü parti kütüphane görünmüyor bunu bir dizi olarak kabul etmek. Sürücüleri aşağıdaki gibi kodlarsam, her şey çalışır.

$drives = @('C:', 'D:') 

Sorum şu dize dizinin formu doğru olduğu gibi sürücüleri alma am yoludur? Ben Güç-Shell 2.0

cevap

2

Get-WMIObject karşı çalışmak gerektiğini unutmayın ManagementObject nesneler topluluğu dönen, ve Select-object ekran onlarla biri özelliğini seçmektir. IOW, zaten bir dizi alıyorsunuz (foreach-object boru hattında gerekli değildir), sadece türünün dizisine ihtiyacınız var (bu durumda bir dizi).

-expandproperty parametresini select-object'a iletirseniz, gereksinimlerinize uygun bir dizi dizge (bu örnekte) alırsınız. (write-output ima, burada gösterildiği gibi açık bir şekilde senaryoya kullanmasanız dahi olsa)

$drives = get-wmiobject win32_logicaldisk -filter "drivetype=3" | select-object -expandproperty name 
write-output $drives 

üçüncü taraf kitaplığından tarafından görülen gibi senaryonun çıktı ki aynı zamanda, $drives -is [array] üretimi dahildir biraz soruna neden oluyor. Bunu farklı bir akışa (Write-Verbose veya write-debug gibi) verin veya tamamen atın.

+0

Bu yaklaşımla, üçüncü taraf kitaplığı işlevi, temel olarak işlev için daha fazla argüman sağladığımı ima eden bir hata veriyor. Bunun nedeni şudur çünkü şimdi sürücü harfleri arasında ek boşluklar var mı? Ayrıca, bir harf dizisinden beri sürücü harfi tek tırnak içinde olmamalıdır? –

+1

Üçüncü taraf kitaplığının ne olduğunu, girdi olarak ne beklediğini ya da tam olarak hata mesajını bilmeden, yalnızca tahmin edebilirsiniz. Ama şunu söyleyebilirim ki, '$ drives' kesinlikle bir dizi dizge içerir. Sadece aradığın dizeler olmayabilirler. – alroc