2014-12-05 37 views
1

我試圖加載文件的二進制內容爲ByteArrayContent使用以下的PowerShell:爲什麼PowerShell中找不到`ByteArrayContent`字節數組構造?

$arr = Get-Content $pathToFile -Encoding Byte -ReadCount 0 
$binaryContent = New-Object System.Net.Http.ByteArrayContent($arr) 

我收到以下錯誤,當劇本然:

Cannot find an overload for "ByteArrayContent" and the argument count: "460" 

我跑這腳本在Windows 8.1上,使用Powershell 4.0。

檢查文檔有兩個重載ByteArrayContent,我使用第一個,所以我確保我正在解析一個byte[]數組到ctor。

最後,我用其他的構造函數和一切工作:

$binaryContent = New-Object System.Net.Http.ByteArrayContent($arr, 0, $arr.Length) 

我檢查我使用的是System.Net.Http集的版本,運行以下命令來查看所有加載的程序集:

[System.AppDomain]::CurrentDomain.GetAssemblies() 
v4.0.30319 => C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0 

在MSDN文檔,我看不到ByteArrayContent任何其他版本的,所以什麼描述這種行爲的任何想法?

+0

相關:http://stackoverflow.com/questions/12870109/how-do-i-call-new-object-for-a-constructor-which-takes-a-single-array-parameter – 2014-12-05 09:55:55

回答

3

你能要麼更換

$binaryContent = New-Object System.Net.Http.ByteArrayContent($arr) 

$binaryContent = New-Object System.Net.Http.ByteArrayContent -ArgumentList @(,$arr) 

或更改線路:

$arr = Get-Content $pathToFile -Encoding Byte -ReadCount 0 

[byte[]]$arr = Get-Content $pathToFile -Encoding Byte -ReadCount 0 


說明
Powershell通常需要一個參數數組才能找到調用的正確構造函數。在你的情況下,它將字節數組看作460個單獨的參數。

通過使用@(,$ ARR),然後我們有一個數組的一個元素,一個元素本身就是一個數組,但它足以讓PowerShell來考慮它使用一個字節數組構造。

+0

您的第一個建議完美工作 - 爲什麼?之前我已經嘗試了第二個選項,但它不起作用。 – 2014-12-05 10:12:25

+1

嗨拉爾夫,我不完全理解確切的校長是PowerShell使用解決要使用的方法。然而,PowerShell是通常期望的參數數組找到合適的構造函數調用。在你的情況下,它將字節數組看作460個單獨的參數。通過使用@(,$ ARR),然後我們有一個數組的一個元素,一個元素本身就是一個數組,但它足以讓PowerShell來考慮它使用的字節數組 – DanL 2014-12-05 10:25:46

+0

感謝丹構造! – 2014-12-05 13:38:54

相關問題