# array
C:\> (1,2,3).count
3
C:\> (1,2,3 | measure).count
3
# hashtable
C:\> @{1=1; 2=2; 3=3}.count
3
C:\> (@{1=1; 2=2; 3=3} | measure).count
1
# array returned from function
C:\> function UnrollMe { $args }
C:\> (UnrollMe a,b,c).count
3
C:\> (UnrollMe a,b,c | measure).count
1
C:\> (1,2,3).gettype() -eq (UnrollMe a,b,c).gettype()
True
HashTables ile uyuşmazlık fairly well known olup, official documentation yalnızca bununla birlikte (örneğin) bunlardan bahseder.Powershell boru hattının bir koleksiyonu açıp açmayacağını belirleyen nedir?
fonksiyonları ile sorun olsa da, bana haber. Şimdiye kadar beni ısırmadığı için şok oldum. Yazarların izleyebileceği bazı rehber ilke var mı? Ben C# cmdlet'lerinizi yazarken açıkça numaralandırma kontrol edebilirsiniz bir overload of WriteObject var olduğunu biliyorum ama AFAIK Posh dilin kendisi böyle bir yapı yoktur. Son örnekte de görüldüğü gibi, Posh tercümanı, boru döşenen nesnelerin türünde hiçbir fark olmadığını düşünmektedir. Kaputun altında bazı Object vs PSObject tuhaflık olabileceğinden şüpheliyim, ama saf Posh yazdığınızda ve betik dilinin "sadece işe" geçmesini beklerken çok az kullanışlıdır.
/DÜZENLEME/
Keith benim örnekte ben 3 dize argümanları yerine tek dize [] argüman geçiyorum işaret etmek doğrudur. Diğer bir deyişle, bir neden Ölçü-Nesne bu ilk elemanı olan tek bir dizi-of-the dizileri gören çünkü Sayısı = 1 olduğunu söyler @ ("a", "b", "c"). Yeterince adil. ...
# stick to single objects
C:\> (UnrollMe a b c | measure).count
3
# rewrite the function to handle nesting
C:\> function UnrollMe2 { $args[0] }
C:\> (UnrollMe2 a,b,c | measure).count
3
# ditto
C:\> function UnrollMe3 { $args | %{ $_ } }
C:\> (UnrollMe3 a,b,c | measure).count
3
Ancak, her şeyi açıklamıyor ben oyunda bir kural daha var tahmin kadarıyla
# as seen earlier - if we're truly returning @(@("a","b","c")) why not count=1?
C:\> (UnrollMe a,b,c).count
3
# our theory must also explain these results:
C:\> ((UnrollMe a,b,c) | measure).count
3
C:\> (@(@("a","b","c")) | measure).count
3
C:\> ((UnrollMe a,b,c d) | measure).count
2
: Bu bilgi, çeşitli yollarla soruna geçici izin verirse Tam olarak bir eleman ile bir dizi var VE çözümleyici expression mode, sonra yorumlayıcı söz konusu öğe "unwrap" olacaktır. Kaybolduğum başka incelikler var mı?
WriteObject eşdeğeri, millerin nadiren kullanıldıkları yazım-çıkış cmdlet'idir (yankılanmaz). –
Doğru, Write-Output, WriteObject (object, bool) gibi bir -EnumerateCollection parametresi içermiyor. –
ile ilgili: http://stackoverflow.com/questions/28702588/in-what-conditions-does-powershell-unroll-items-in-the-pipeline/28707054#28707054 – alx9r