簡體   English   中英

無法在Powershell中第二次轉換參數

[英]Cannot convert argument second time in Powershell

我正在嘗試調用網絡服務。 如果我只是剛啟動Powershell,則以下代碼可以完美運行。 任何后續運行都會產生以下錯誤。

Cannot convert argument "fieldsWithValues", with value: 
"FileHold.LibraryManager.FieldWithValue[]", for "SetMetadata" to type 
"FileHold.LibraryManager.FieldWithValue[]": "Cannot convert the 
"FileHold.LibraryManager.FieldWithValue" value of type 
"FileHold.LibraryManager.FieldWithValue" to type 
"FileHold.LibraryManager.FieldWithValue"."
At Z:\VM_Transfer\Customers\Oregon\UpdateMetadata\CannotConvertTest.ps1:19 char:1

這是有問題的代碼。

$fh = "http://fileholdtest8/fh/filehold"

$uri = $fh + "/UserRoleManager/SessionManager.asmx?WSDL"
$SessionManager = New-WebServiceProxy -Uri $uri -Namespace FileHold.SessionManager
$sessionId = $SessionManager.StartSession( 'sysadm', '12345', 4 )

$uri = $fh + "/LibraryManager/DocumentManager.asmx?WSDL"
$dm = New-WebServiceProxy -Uri $uri -Namespace FileHold.LibraryManager

$dm.CookieContainer = New-Object System.Net.CookieContainer
$cookie = New-Object System.Net.Cookie( 'FHLSID', $sessionId, "/", ([System.Uri]$dm.Url).Host )
$dm.CookieContainer.Add( $cookie )    

$newFieldValue = [FileHold.LibraryManager.FieldWithValue]::new()
$newFieldValue.FieldId = 1007
$newFieldValue.FieldValue = $true
[FileHold.LibraryManager.FieldWithValue[]]$fieldsWithValues = @( $newFieldValue )

$dm.SetMetadata( 4033, 1002, "EmployeeInfo_filled1-test", $fieldsWithValues, $false, $null )

我需要做些什么才能每次都運行此程序而無需重新啟動ISE。

順便說一句。 只要它們的參數是簡單類型,我就可以使用這種技術來調用其他方法而不會出現任何問題。 似乎僅當我有一個復雜的對象(如FileHold.LibraryManager.FieldWithValue)時,才會出現此問題。

PSVersion = 5.1.14393.1532

通過確保不重復使用變量,我找到了解決方案。 當然,我將需要處理可能過期的cookie,但這是另一個問題。

$fh = "http://fileholdtest8/fh/filehold"

$uri = $fh + "/UserRoleManager/SessionManager.asmx?WSDL"
$SessionManager = New-WebServiceProxy -Uri $uri -Namespace FileHold.SessionManager
$sessionId = $SessionManager.StartSession( 'sysadm', '12345', 4 )

if ( !(Test-Path variable:dm) )
{
    $uri = $fh + "/LibraryManager/DocumentManager.asmx?WSDL"
    $dm = New-WebServiceProxy -Uri $uri -Namespace FileHold.Library

    $FieldWithValueType = "{0}.FieldWithValue" -f $dm.GetType().Namespace

    $dm.CookieContainer = New-Object System.Net.CookieContainer
    $cookie = New-Object System.Net.Cookie( 'FHLSID', $sessionId, "/", ([System.Uri]$dm.Url).Host )
    $dm.CookieContainer.Add( $cookie )    
}

$newFieldValue = [FileHold.Library.FieldWithValue]::new()
$newFieldValue.FieldId = 1007
$newFieldValue.FieldValue = $true
$fieldsWithValues = @( ,$newFieldValue )

$dm.SetMetadata( 4041, 1002, "EmployeeInfo_filled1-test", $fieldsWithValues, $false, $null ) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM