2014-04-14 26 views
-1

如果我寫了下面的代碼,就像你看到的,我使用Get-Member我得到一個空:添加成員的奇怪行爲。獲得會員不返回任何值

$UserToAdd = New-Object psobject 
$UserToAdd | Add-Member -membertype NoteProperty -Name "Name" -Value ([adsi]$_.path).name[0] 
$UserToAdd | Add-Member -membertype NoteProperty -Name "Email" -Value ([adsi]$_.path).mail[0] 
$UserToAdd | Add-Member -membertype NoteProperty -Name "DaysLeft" -Value $DaysTillExpiring 
$UserToAdd | Add-Member -membertype NoteProperty -Name "ExpirationTimestamp" -Value $ExpirationTimestamp.ToString("dd/MM/yyyy alle ore HH:mm:ss ") 
$UserToAdd | Add-Member -membertype NoteProperty -Name "SamAccountName" -Value ([adsi]$_.path).SamAccountName[0] 
$UserToAdd | get-member -Verbose 
get-content $UserToAdd 

但變量具有值,因爲當我使用類似get-content時,出現以下錯誤,包含正確的值:

get-content:找不到驅動器。名爲'@ {Name = XXXXXXXXX;電子郵件= XXXXXXXXXX; DaysLeft = 13; ExpirationTimestamp = 27/04/2014 alle ore 10'不存在。

+0

什麼是你的PS版? – Raf

+0

PS C:\ Windows \ system32> Get-Host |選擇對象版本 版本 ------- 4.0 – S4rg0n

回答

1

我無法在PS 4.0上重現您的問題。一切正常後,你刪除了Get-Content部分,應該永遠不會在那裏擺在首位。

$UserToAdd = New-Object psobject 
$UserToAdd | Add-Member -membertype NoteProperty -Name "Name" -Value "hei" 
$UserToAdd | Add-Member -membertype NoteProperty -Name "Email" -Value "epost" 
$UserToAdd | Add-Member -membertype NoteProperty -Name "DaysLeft" -Value 3 
$UserToAdd | Add-Member -membertype NoteProperty -Name "ExpirationTimestamp" -Value ((date).ToString("dd/MM/yyyy alle ore HH:mm:ss ")) 
$UserToAdd | Add-Member -membertype NoteProperty -Name "SamAccountName" -Value "ops" 
$UserToAdd | get-member -Verbose 


    TypeName: System.Management.Automation.PSCustomObject 

Name    MemberType Definition              
----    ---------- ----------              
Equals    Method  bool Equals(System.Object obj)         
GetHashCode   Method  int GetHashCode()            
GetType    Method  type GetType()             
ToString   Method  string ToString()            
DaysLeft   NoteProperty System.Int32 DaysLeft=3           
Email    NoteProperty System.String Email=epost          
ExpirationTimestamp NoteProperty System.String ExpirationTimestamp=14.04.2014 alle ore 16:40:48 
Name    NoteProperty System.String Name=hei           
SamAccountName  NoteProperty System.String SamAccountName=ops 

如果Get-Member返回null,那麼你永遠不會創建擺在首位的對象,因爲即使沒有Add-Member線,Get-Member仍然會顯示此:

$UserToAdd = New-Object psobject 
$UserToAdd | get-member -Verbose 


    TypeName: System.Management.Automation.PSCustomObject 

Name  MemberType Definition      
----  ---------- ----------      
Equals  Method  bool Equals(System.Object obj) 
GetHashCode Method  int GetHashCode()    
GetType  Method  type GetType()     
ToString Method  string ToString() 
+0

謝謝,但你可以看到,在第7行我寫了一個Get-Member來調試問題,但它返回null。 – S4rg0n

+0

啊,我的壞。儘管如此,「Get-Content」命令總是會失敗,所以刪除它和錯誤。這只是混亂。至於Get-Content之前的腳本:當我在這裏運行它時(使用虛擬值),所有的東西都可以在PS 4.0上運行。查看更新的答案。 –

+0

其實一切正常,因爲這是一個更大的腳本的一部分。我正在修改它,因爲我想添加一個功能,但我不能添加類似$ UserToAdd.name的東西,因爲它是空的。這看起來是荒謬的,因爲最終,整個腳本起作用,而這部分是它的基礎。在這個意義上,get-member返回null也是很奇怪的。 – S4rg0n