2014-11-12 33 views
8

Chciałbym wykorzystać własne niestandardowe przestrzenie nazw w skrypcie PowerShell .ps1 lub module .psm1. czy to możliwe? Jeśli tak, jaka jest składnia, aby to zrobić?Jak utworzyć przestrzeń nazw w skrypcie PowerShell?

znalazłem powiązany link tutaj: Breaking the Powershell namespace limit of global,script

Wydaje się, że będę musiał zrobić własny niestandardowy obiekt, lub ewentualnie użyć niestandardowego asocjacyjną do tego?

chciałbym móc zadzwonić do mojego funkcję tak:

[MyCoolNamespace]::Get-CrazyYall 

Odpowiedz

12

Nazwa modułu jest podobna do nazw. Na przykład:

Microsoft.PowerShell.Core\Get-Command 

jest taka sama jak

Get-Command 

Zazwyczaj podczas wywoływania poleceń (aplety poleceń, funkcji lub pseudonimy) nie użyć modułu kwalifikowane nazwy, ale jest przydatna, jeśli nie mieć konflikt lub chcieć być w 100% pewny, że powołujesz się na funkcję, którą chciałeś.

+0

dzięki! Myślę, że jest to bardziej zgodne z tym, co chcę zrobić. Zasadniczo chciałem przestrzeni nazw, więc nie musiałem pisać długich nazw funkcji (tj. Pseudo przestrzeni nazw). –

+0

Zaakceptowałem to, ponieważ był to "czysty" PowerShell i zapewniało to, co chciałem, aczkolwiek z inną nazwą ... –

+0

To daleki od zakończenia: na przykład nie mogę osiągnąć zmiennych wyeksportowanych z modułu. Funkcje i aliasy są rzeczywiście widoczne – maoizm

7

Tworzenie typu niestandardowej z metody statycznej:

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

dzięki! Sądzę, że jest to możliwe tylko poprzez powrót do składni C#? Miałem nadzieję zapisać moje funkcje w PowerShell, ale umieścić je w przestrzeni nazw. czy to możliwe? To jest łatwe? Na przykład, co jeśli mam już funkcję Get-Foo napisaną w PowerShell? –

+1

Nie jestem świadomy sposób to zrobić w prostym PowerShell. –

0

Możesz spróbować użyć PSTypeNames.

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

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

$ var | get-member

Powiązane problemy