2013-01-16 25 views
1

如何使用自定義模塊的輸出將其放入變量(最好是對象)中。Powershell - 自定義模塊的輸出不可用

這是問題所在。導入自定義模塊並運行cmdlet後,它始終輸出相同的信息並拒絕將其存儲在變量中或放入管道中。試圖放入管道或變量只是複製原始輸出並忽略變量或管道符號。

例子:

PS C:\> Get-FCoEPorts -HbaIndex 0 
Port List 

Index NodeWWN       PortWWN       FCID 

----- -------       -------       ---- 

0  10:00:A0:36:9F:0B:3E:E9   20:00:A0:36:9F:0B:3E:E9      0x4A0680 

1  20:A8:00:0D:EC:96:EA:01   00:FC:0E:00:A8:00:80:00     0x36A00120 

... 

93* 10:00:A0:36:9F:0B:3E:E9   20:3E:A0:36:9F:0B:3E:E9     0x4A0764 

94  20:A8:00:0D:EC:96:EA:01   00:FC:0E:00:A8:00:80:00     0x36A03F20 

* - Virtual Ports. 

所以這是預期的輸出,但嘗試這樣的:

$a = Get-FCoEPorts -HbaIndex 0 

或本:

(Get-FCoEPorts -HbaIndex 0).PortWWN 

或本:

$getports = Get-FCoEPorts -HbaIndex 0 | select -expand PortWWN 

每個命令給出如上面所示,並試圖使用在沒有輸出結果中引用變量相同的結果......這就像PowerShell是忽略除了Get-IntelFCoEPorts其他所有的命令。 這是我正在使用的代碼的問題,或者它可能是模塊後面的代碼的問題?

我在這個模塊的工作目標是讓PortWWN號到一個數組或者說,我可以引用通過時,我需要將它們刪除使用循環對象。

我向開發人員詢問了他的模塊的更新版本,但新版本產生了相同的結果。我想在我詛咒他之前確保我的代碼是正確的。

更新: 我試圖輸出到沒有運氣的文件。該文件是空的。我也試着開始和停止成績單像這樣:

C:\> $ErrorActionPreference="SilentlyContinue" 
PS C:\> Stop-Transcript | out-null 
PS C:\> $ErrorActionPreference = "Continue" 
PS C:\> Start-Transcript -path C:\Users\Administrator\Desktop\output.txt -append 
Transcript started, output file is C:\Users\Administrator\Desktop\output.txt 
PS C:\> Get-IntelFCoEPorts -HbaIndex 0 
    Index NodeWWN       PortWWN       FCID 

----- -------       -------       ---- 

0  10:00:A0:36:9F:0B:3E:E9   20:00:A0:36:9F:0B:3E:E9      0x4A0680 

1  20:A8:00:0D:EC:96:EA:01   00:FC:0E:00:A8:00:80:00     0x36A00120 

... 

93* 10:00:A0:36:9F:0B:3E:E9   20:3E:A0:36:9F:0B:3E:E9     0x4A0764 

94  20:A8:00:0D:EC:96:EA:01   00:FC:0E:00:A8:00:80:00     0x36A03F20 

* - Virtual Ports. 
PS C:\> Stop-Transcript 
Transcript stopped, output file is C:\Users\Administrator\Desktop\output.txt 

輸出是像這樣:

PS C:\> Stop-Transcript 
Transcript started, output file is C:\Users\Administrator\Desktop\output.txt 
PS C:\> Get-IntelFCoEPorts -HbaIndex 0 
+0

那麼'$ a'是不是空的?如果是這樣,運行'$ a |時列出的TypeName是什麼? get-member'? –

+0

'$ a'爲空('$ a。運行'$ a = Get-FCoEPorts -HbaIndex 0'後的GetType()') 運行'$ a | get-member'結果爲: 'get-member:沒有對象被指定給get-member cmdlet。「#: – IkeaTheSofa

回答

1

它看起來像開發商可能格式化自己的輸出。無論是或者他們正在使用寫主機。我懷疑前者,但無論在哪種情況下,按照規定的方式去做他們想要的就是輸出對象,而不通過Format- *或Write-Host運行它們。如果他們希望有一個很好的默認格式的顯示,那麼他們就需要創建一個格式文件.ps1xml和使用Update-FormatData.psd1文件使用模塊的FormatsToProcess場。

+0

Keith,我懷疑你是對的。格式化自己的輸出可以解釋爲什麼我不能將它存儲在變量中。我會與Dev聯繫,看看是否屬於這種情況。感謝您的想法。 – IkeaTheSofa

1

由於cmdlet不會返回任何值,你用證明「$ a是空」的評論,我相信他們正在使用寫主機輸出的結果。如果他們在輸出結果之前使用了Format-Table,那麼您將收到一個包含FormatStartData和其他格式數據對象的數組。

爲你能夠保存他們需要的,如果他們使用二進制cmdlet的文件(.dll模塊)使用寫輸出,如果腳本cmdlet的或writeObject(我認爲是)管的結果。總結一下:他們應該更新他們的模塊。

+0

感謝Graimer的回答。這很有幫助,但基思說了類似的話,先到了那裏。我會投票贊成有用,但我沒有足夠的代表:(:() – IkeaTheSofa