Параметр, используемый с [ref] в PowerShell, не заполняется - PullRequest
1 голос
/ 26 января 2011

Я пытаюсь вызвать Copy.asmx WebService of SharePoint из сценария PowerShell:

$copyWS = .\Connect-WebService.ps1 $copyWsdlUrl -requiresAuthentication
$copyWS.UseDefaultCredentials = $true

[FieldInformation[]]$fieldInfos = $null
[System.Byte[]]$data = $null
$copyWS.GetItem($fileUrl, [ref]$fieldInfos, [ref]$data)

Результат: GetItem возвращает 0 в случае успеха, но $ fieldInfos и $ data равны $ null. Если я делаю то же самое с консольным приложением C #, оно отлично работает и с данными. Длина равна длине моего файла.

Copy copyWS = new Copy();
copyWS.UseDefaultCredentials = true;

FieldInformation[] fieldInfos = null;
byte[] data = null;
uint result = copyWS.GetItem(fileUrl, out fieldInfos, out data);

Console.WriteLine(result);
Console.WriteLine(data.Length);

Где моя ошибка или это ошибка PowerShell?

Следуя совету beefarino, я позвонил в $ copyWS.GetItem и получил:

System.UInt32 GetItem(string Url,
Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy3http___moss__vti_bin_Copy_asmx.FieldInformation[]&, jfww_71i, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null Fields,
System.Byte[]&, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Stream)

Так что мои параметры выглядят правильно, я даже изменил тип $ fieldInfos для отображения полного имени Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy3http___moss__vti_bin_Copy_asmx.FieldInformation[], но безрезультатно.

1 Ответ

3 голосов
/ 26 января 2011

Предполагая, что connect-webservice.ps1 в конечном итоге вызывает new-webserviceproxy ...

Проверьте подпись метода веб-сервиса от powershell с помощью get-member:

$copyWS | get-member

или выгрузив метод на хост, не вызывая его:

$copyWS.GetItem

Прокси не всегда выглядят так, как вы ожидаете;Например, для этого метода:

int GetData(out byte[] value);

метод new-webserviceproxy, созданный powershell, выглядит следующим образом:

void GetData([ref] $result, [ref] $resultSpecified, [ref] $value)

...