为什么PowerShell没有正确地转换为基类?

时间:2015-10-21 18:02:02

标签: powershell casting

我正在尝试调用需要两个参数的方法。第一个参数是ClientRuntimeContext。我只有一个ClientContext,但该类继承自ClientRuntimeContext。如果我调用该方法,我会收到以下错误:

New-Object:找不到“”的重载和参数count:“2”。

所以,我认为我需要先抛出对象。在转换之前,如果我查看$ clientContext.GetType()。Name,则返回“ClientContext”。这是我尝试的两个演员表达式:

$clientRuntimeContext = $clientContext -as [Microsoft.SharePoint.Client.ClientRuntimeContext]
$clientRuntimeContext = [Microsoft.SharePoint.Client.ClientRuntimeContext]$clientContext

不幸的是,在这两种情况下,$ clientRuntimeContext.GetType()。Name返回“ClientContext”而不是“ClientRuntimeContext”,我认为这是我问题的根源。

有没有办法强制PowerShell正确投射?我已经查看了http://www.powershellatoms.com/powershell-101/casting-values-in-powershell/中描述的Trace-Command TypeConversion,但这没有帮助。

更新:由于受欢迎的需求,我提供的是实际的脚本。我想避免CSOM和SharePoint Online的复杂性,但也许这是问题的一部分。这是脚本。

$SPClient = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
$SPClientRuntime = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")
Add-Type -Path “C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.WorkflowServices.dll”

$siteUrl = "https://tenant.sharepoint.com"
$username = "user@tenant.onmicrosoft.com"
$password = Read-Host -Prompt "Enter Password" -AsSecureString

$clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password) 
$clientContext.Credentials = $credentials

$web = $clientContext.Web
$clientContext.Load($web)
$clientContext.ExecuteQuery()

$webWFAssociations=$web.WorkflowAssociations
$clientContext.Load($webWFAssociations)
$clientContext.ExecuteQuery()

$clientRuntimeContext = $clientContext -as [Microsoft.SharePoint.Client.ClientRuntimeContext]
$WFServicesManager =New-Object Microsoft.SharePoint.Client.WorkflowServices.WorkflowServicesManager($clientRuntimeContext, $clientContext.Web)

最后一行是因错误而失败的行:New-Object:找不到“WorkflowServicesManager”的重载和参数count:“2”。

1 个答案:

答案 0 :(得分:1)

如果我使用WorkflowServices程序集的“版本16”而不是“版本15”,我可以让你的代码工作。例如:

Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.WorkflowServices.dll"