[英]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.