2014-11-12 19 views
8

Kendi özel ad alanlarını bir PowerShell .ps1 komut dosyasında veya bir .psm1 modülünde kullanmak istiyorum. Mümkün mü? Eğer öyleyse, bunu yapmak için sözdizimi nedir? PowerShell betiği içinde bir ad alanı nasıl oluşturulur

Burada ilgili bağlantı buldu: Breaking the Powershell namespace limit of global,script

Bu benim kendi özel nesne yapmak ya da muhtemelen bunun için özel bir ilişkisel dizi kullanmanız gerekecektir benim gibi görünüyor?

Bu gibi benim işlevi çağırmak edebilmek istiyorum:

[MyCoolNamespace]::Get-CrazyYall 

cevap

12

bir modül adı bir ad benzer. Örneğin:

Microsoft.PowerShell.Core\Get-Command 

komutları (davranırlar, fonksiyonlar veya takma ad) çağrılırken modül nitelikli adlar kullanmayın Normalde

Get-Command 

aynıdır, ancak bunu yaparsanız kullanışlı oluyor Bir çakışma varsa veya% 100 emin olmak istedim, demek istediğin işlevi çağırıyorsun.

+0

teşekkürler! Bunun aslında yapmak istediklerimin çizgisinde olduğunu düşünüyorum. Temel olarak bir isim alanı istedim, böylece uzun işlev adlarını yazmam gerekmedim (yani sözde ad alanı). –

+0

Bunu kabul ettim çünkü "saf" PowerShell ve farklı bir isim olsa da istediğimi sağladım ... –

+0

Bu tam olarak değil: örneğin modülden dışa aktarılan değişkenlere ulaşamıyorum. İşlevler ve takma adlar gerçekten görünür – maoizm

7

statik yöntemle özel bir türü oluşturun:

 
PS C:\>Add-Type @' 
>>using System; 
>>public class MyCoolNamespace { 
>> public static string Foo() { 
>>  return "Foo"; 
>> } 
>>} 
>>'@ 
>> 
PS C:\>[MyCoolNamespace]::Foo() 
Foo 
+0

Teşekkürler! Sanırım sadece C# sözdizimini geri alarak mümkün mü? PowerShell'de işlevlerimi yazmayı umuyordum ama onları bir ad alanına koydu. Mümkün mü? Kolay mı? Örneğin, Get-Foo işlevini zaten PowerShell'de yazmışsam ne olur? –

+1

Düz PowerShell'de bunu yapmanın bir yolunun farkında değilim. –

0

PSTypeNames'i kullanmayı deneyebilirsiniz.

$Var = [PSCustomObject]@{ 
    foo = [string]::Empty 
    bar = $false 
} 

$Var.PSTypeNames.Insert(0, 'My.Namespace') 

$ var | get-üye