2013-01-21 8 views
22

Birkaç sabitin tanımlandığı ana bir komut dosyası var. Daha sonra yardımcı işlevler eklemek için bir modül (psm1) var. detaylar:PowerShell'deki modüllerdeki değişkenler

ana komut, ben bir nesne olarak modülü ithal var: modülde

$cud2ADhleper = Import-Module -Force $cud2ADhelperModule -AsCustomObject 

, ben iki değişken,

[string]$SQLServer = $null 

Function SetSQLServerAddr ([string] $name) 
{ 
    $SQLServer = $name 
} 
Function GetSQLServerAddr 
{ 
    return $SQLServer 
} 

Benim anlayış olduğunu çünkü Modülden $SQLServer dışa aktarmıyorum, bu değişken yerel olmalı ve Set/Get onu yapabilmeli.

Aksi halde ortaya çıkıyor. SetSQLServerAddr ([string] $name)'u aradıktan sonra GetSQLServerAddr'un kalması $ null değerini döndürür. Ne kaçırdım? Bu fonksiyonun kapsamında yeni yerel$SQLServer oluşturur

cevap

27
Function SetSQLServerAddr ([string] $name) 
{ 
    $SQLServer = $name 
} 

. Eğer modül bir değişken güncellemek istiyorsanız

(.psm1) kapsamı o zaman belirtmek için adı öneki gerekir: Daha fazla bilgi için

Function SetSQLServerAddr ([string] $name) 
{ 
    $script:SQLServer = $name 
} 

kapsamları get-help about_scopes bkz üzerinde.

+0

Her yerde baktım ve about_scopes hakkında okudum, ancak modülde tanımlanmış bir değişkenin, modül içindeki bir fonksiyonda betik kapsamını kullanarak ayarlanabileceğinin hala bana açık olmadığı açıktı. Komut dosyası kapsamı, bir modül bağlamında bir yanlış isim olduğu ve modül kapsamı veya bunun gibi bir şey olarak adlandırılması gerektiği gibi ses çıkarır. Cevabınız için teşekkür ederim! –

+1

@ChrisMagnuson Adın harika olmadığını kabul ediyorum, ancak mantıklı ("normal" komut dosyasından gelen fark, modül durumuna, arayan kişiye döndükten sonra devam etmesidir). – Richard