PowerShell Excel Interop-无效CastException,环境原因?

发布于 2025-01-22 12:34:08 字数 10982 浏览 0 评论 0原文

我有一个庞大的PowerShell脚本,可以自动从头开始创建Excel工作簿。几个月来,我一直无法解决一个问题 - 但只有在某些环境中运行时(以下更多内容)。将其简化为最小的测试案例:

$ErrorActionPreference = 'Stop'

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$wb = $excel.Workbooks.Add()

$wb.Worksheets('Sheet1').Range('C2:C5').Value2 = 'abc'
$arr1 = $wb.Worksheets('Sheet1').Range('C2:C5').Value2

# Try a reflexive test first.  This seems to always fail whenever the below does.
$wb.Worksheets('Sheet1').Range('C2:C5').Value2 = $arr1

# Assuming we made it that far, try to overwrite with "x0, x1, x2, x3"...

$arr2 = [object[,]]::new(4, 1)
for($i = 0; $i -lt 4; $i++){
    $arr2[$i, 0] = ('x' + $i)
}

$wb.Worksheets('Sheet1').Range('C2:C5').Value2 = $arr2

典型的故障显示为:

Specified cast is not valid.
At line:11 char:1
+ $wb.Worksheets('Sheet1').Range('C2:C5').Value2 = $arr1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], InvalidCastException
    + FullyQualifiedErrorId : System.InvalidCastException

...或以不同的形式(如今捕获)(pwsh 7.2.6 Windows Terminal,2022-08-13):

PS> .\SpecifiedCastIsNotValid-Test.ps1
OperationStopped: ***\SpecifiedCastIsNotValid-Test.ps1:11
Line |
  11 |  $wb.Worksheets('Sheet1').Range('C2:C5').Value2 = $arr1
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.

有趣的是,我不喜欢't了解DateTime甚至在这里发挥作用的位置!

当此错误进一步扩展时,如$误差

ErrorRecord                 : Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.
WasThrownFromThrowStatement : False
TargetSite                  : System.Collections.ObjectModel.Collection`1[System.Management.Automation.PSObject] Invoke(System.Collections.IEnumerable)
Message                     : Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.
Data                        : {System.Management.Automation.Interpreter.InterpretedFrameInfo}
InnerException              : System.InvalidCastException: Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.
                                 at CallSite.Target(Closure , CallSite , ComObject , Object )
                                 at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
                                 at System.Management.Automation.Interpreter.DynamicInstruction`3.Run(InterpretedFrame frame)
                                 at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
HelpLink                    :
Source                      : System.Management.Automation
HResult                     : -2146233087
StackTrace                  :    at System.Management.Automation.Runspaces.PipelineBase.Invoke(IEnumerable input)
                                 at Microsoft.PowerShell.Executor.ExecuteCommandHelper(Pipeline tempPipeline, Exception& exceptionThrown, ExecutionOptions options)
# 
Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.
At ***\SpecifiedCastIsNotValid-Test.ps1:11 char:1
+ $wb.Worksheets('Sheet1').Range('C2:C5').Value2 = $arr1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : OperationStopped: (:) [], InvalidCastException
+ FullyQualifiedErrorId : System.InvalidCastException

...或Get-error

Type           : System.Management.Automation.RuntimeException
ErrorRecord    :
    Exception             :
        Type       : System.InvalidCastException
        TargetSite : System.Object CallSite.Target(System.Runtime.CompilerServices.Closure, System.Runtime.CompilerServices.CallSite, System.Management.Automation.ComInterop.ComObject, System.Object)
        Message    : Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.
        Data       : System.Collections.ListDictionaryInternal
        Source     : Anonymously Hosted DynamicMethods Assembly
        HResult    : -2147467262
        StackTrace :
   at CallSite.Target(Closure , CallSite , ComObject , Object )
   at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
   at System.Management.Automation.Interpreter.DynamicInstruction`3.Run(InterpretedFrame frame)
   at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
    CategoryInfo          : OperationStopped: (:) [], InvalidCastException
    FullyQualifiedErrorId : System.InvalidCastException
    InvocationInfo        :
        ScriptLineNumber : 11
        OffsetInLine     : 1
        HistoryId        : -1
        ScriptName       : ***\SpecifiedCastIsNotValid-Test.ps1
        Line             : $wb.Worksheets('Sheet1').Range('C2:C5').Value2 = $arr1

        PositionMessage  : At ***\SpecifiedCastIsNotValid-Test.ps1:11 char:1
                           + $wb.Worksheets('Sheet1').Range('C2:C5').Value2 = $arr1
                           + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        PSScriptRoot     : ***
        PSCommandPath    : ***\SpecifiedCastIsNotValid-Test.ps1
        CommandOrigin    : Internal
    ScriptStackTrace      : at <ScriptBlock>, ***\SpecifiedCastIsNotValid-Test.ps1: line 11
                            at <ScriptBlock>, <No file>: line 1
TargetSite     :
    Name          : Invoke
    DeclaringType : System.Management.Automation.Runspaces.PipelineBase, System.Management.Automation, Version=7.2.6.500, Culture=neutral, PublicKeyToken=31bf3856ad364e35
    MemberType    : Method
    Module        : System.Management.Automation.dll
Message        : Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.
Data           : System.Collections.ListDictionaryInternal
InnerException :
    Type       : System.InvalidCastException
    TargetSite : System.Object CallSite.Target(System.Runtime.CompilerServices.Closure, System.Runtime.CompilerServices.CallSite, System.Management.Automation.ComInterop.ComObject, System.Object)
    Message    : Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.
    Data       : System.Collections.ListDictionaryInternal
    Source     : Anonymously Hosted DynamicMethods Assembly
    HResult    : -2147467262
    StackTrace :
   at CallSite.Target(Closure , CallSite , ComObject , Object )
   at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
   at System.Management.Automation.Interpreter.DynamicInstruction`3.Run(InterpretedFrame frame)
   at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
Source         : System.Management.Automation
HResult        : -2146233087
StackTrace     :
   at System.Management.Automation.Runspaces.PipelineBase.Invoke(IEnumerable input)
   at Microsoft.PowerShell.Executor.ExecuteCommandHelper(Pipeline tempPipeline, Exception& exceptionThrown, ExecutionOptions options)

我非常熟悉class cast Exception,这是没有一个 - 至少不是从编写和显示的代码中。我可以看到,这可能是某些Interop或系统代码本身的例外,但是随后努力查看该内容的细节。

我可以一次分配一个单元格的值来解决这个问题,但这效率较低,尤其是一次分配数百个或什至数千个单元格。该代码当然可以在某些环境中起作用,而不是其他环境 - 它代表了10年以上的代码样本(尽管通常没有PowerShell或Interop组件),因此它并不是真正“新”或出血的任何东西。

这个问题有时似乎来来去去。但是,在多个设备中,多个用户在多个环境中看到了它,分别维护。此处有效所有需要的就是当前支持的Windows OS上的PowerShell + Excel。

以下是我今晚目前看到的一些细节:

  • Windows 11 Professional,22H2版,OS Build 22598.100(Insider)
    • 在Windows 10下也可以再现。
  • 从Office 365,版本2203构建15028.20204 / 16.0.15028.20178 64位。
  • $ psversiontable
Name                           Value
----                           -----
PSVersion                      5.1.22598.1
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.22598.1
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
  • Visual Studio代码:
Version: 1.66.2 (user setup)
Commit: dfd34e8260c270da74b5c2d86d61aee4b6d56977
Date: 2022-04-11T07:46:01.075Z
Electron: 17.2.0
Chromium: 98.0.4758.109
Node.js: 16.13.0
V8: 9.8.177.11-electron.0
OS: Windows_NT x64 10.0.22598

编辑:截至2022-08-12,AM甚至与最新版本相同:

  • Windows 11 Professional,版本22H2,OS Build 22622.575(Insider)
  • Excel,来自Office 365 ,版本2207 Build 15427.20210 / 16.0.15427.20182 64位。
  • $ psversiontable < / code>
Name                           Value
----                           -----
PSVersion                      7.2.6
PSEdition                      Core
GitCommitId                    7.2.6
OS                             Microsoft Windows 10.0.22622
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0
  • Visual Studio代码:
Version: 1.70.1 (user setup)
Commit: 6d9b74a70ca9c7733b29f0456fd8195364076dda
Date: 2022-08-10T06:08:33.642Z
Electron: 18.3.5
Chromium: 100.0.4896.160
Node.js: 16.13.2
V8: 10.0.139.17-electron.0
OS: Windows_NT x64 10.0.22622

测试:

我以前有一个网格,我在这里跟踪跨环境的结果(Visual Studio Code,Windows PowerShell ISE,Windows PowerShell / Windows Windows terminal / powershell / windows terminal / windows terminal和powershell / cmd等) - 但意识到,即使是其中一些组合,我仍然看到不一致的结果。

我回想起过去在VS代码中杀死终端(单击垃圾桶可以图标以杀死“ PowerShell Integrated Console”),然后在提示时重新启动它。果然,这再次(但暂时)解决了问题,现在允许在PS 5.1下的VS代码中成功运行最小的测试用例和整个脚本,即使我是从上述测试的干净会话开始的。现在重新启动VS代码,我将不再能够重现该问题 - 但是确信该问题会在重新启动窗口或我尚未确定的另一组情况后重新出现。

截至2022-08-13,我看到了以下内容 - 目前,我可以反复再现:

  1. 我从开始在Windows终端打开的开始菜单中打开了“ PowerShell 7(x64)”。运行上述。\ specifiedcastisnotvalid-test.ps1失败。
  2. 在同一作品的新窗口中运行相同的操作。
  3. 在原始窗口(#1)中重新运行仍然失败。
  4. 在原始窗口中运行pwsh打开儿童PowerShell进程,然后重新运行测试。
  5. 退出儿童过程以恢复到原始的PowerShell过程,然后重新运行测试失败。

简而言之,是什么导致此数组分配偶发地失败?我还能检查什么可能正在改变VS代码终端中的PowerShell如何运行?

更新:

I have a large PowerShell script that automates the creation of an Excel workbook from scratch. For months now, I have been unable to resolve one issue - but only when run from certain environments (more on this below). To simplify this to a minimal test case:

$ErrorActionPreference = 'Stop'

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$wb = $excel.Workbooks.Add()

$wb.Worksheets('Sheet1').Range('C2:C5').Value2 = 'abc'
$arr1 = $wb.Worksheets('Sheet1').Range('C2:C5').Value2

# Try a reflexive test first.  This seems to always fail whenever the below does.
$wb.Worksheets('Sheet1').Range('C2:C5').Value2 = $arr1

# Assuming we made it that far, try to overwrite with "x0, x1, x2, x3"...

$arr2 = [object[,]]::new(4, 1)
for($i = 0; $i -lt 4; $i++){
    $arr2[$i, 0] = ('x' + $i)
}

$wb.Worksheets('Sheet1').Range('C2:C5').Value2 = $arr2

The typical failure presents as:

Specified cast is not valid.
At line:11 char:1
+ $wb.Worksheets('Sheet1').Range('C2:C5').Value2 = $arr1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], InvalidCastException
    + FullyQualifiedErrorId : System.InvalidCastException

... or in a different form as captured today (pwsh 7.2.6 under Windows Terminal, 2022-08-13):

PS> .\SpecifiedCastIsNotValid-Test.ps1
OperationStopped: ***\SpecifiedCastIsNotValid-Test.ps1:11
Line |
  11 |  $wb.Worksheets('Sheet1').Range('C2:C5').Value2 = $arr1
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.

What is interesting here is that I don't understand where a DateTime is even coming into play here!

When this error is further expanded as shown by $Error:

ErrorRecord                 : Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.
WasThrownFromThrowStatement : False
TargetSite                  : System.Collections.ObjectModel.Collection`1[System.Management.Automation.PSObject] Invoke(System.Collections.IEnumerable)
Message                     : Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.
Data                        : {System.Management.Automation.Interpreter.InterpretedFrameInfo}
InnerException              : System.InvalidCastException: Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.
                                 at CallSite.Target(Closure , CallSite , ComObject , Object )
                                 at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
                                 at System.Management.Automation.Interpreter.DynamicInstruction`3.Run(InterpretedFrame frame)
                                 at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
HelpLink                    :
Source                      : System.Management.Automation
HResult                     : -2146233087
StackTrace                  :    at System.Management.Automation.Runspaces.PipelineBase.Invoke(IEnumerable input)
                                 at Microsoft.PowerShell.Executor.ExecuteCommandHelper(Pipeline tempPipeline, Exception& exceptionThrown, ExecutionOptions options)
# 
Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.
At ***\SpecifiedCastIsNotValid-Test.ps1:11 char:1
+ $wb.Worksheets('Sheet1').Range('C2:C5').Value2 = $arr1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : OperationStopped: (:) [], InvalidCastException
+ FullyQualifiedErrorId : System.InvalidCastException

... or by Get-Error:

Type           : System.Management.Automation.RuntimeException
ErrorRecord    :
    Exception             :
        Type       : System.InvalidCastException
        TargetSite : System.Object CallSite.Target(System.Runtime.CompilerServices.Closure, System.Runtime.CompilerServices.CallSite, System.Management.Automation.ComInterop.ComObject, System.Object)
        Message    : Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.
        Data       : System.Collections.ListDictionaryInternal
        Source     : Anonymously Hosted DynamicMethods Assembly
        HResult    : -2147467262
        StackTrace :
   at CallSite.Target(Closure , CallSite , ComObject , Object )
   at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
   at System.Management.Automation.Interpreter.DynamicInstruction`3.Run(InterpretedFrame frame)
   at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
    CategoryInfo          : OperationStopped: (:) [], InvalidCastException
    FullyQualifiedErrorId : System.InvalidCastException
    InvocationInfo        :
        ScriptLineNumber : 11
        OffsetInLine     : 1
        HistoryId        : -1
        ScriptName       : ***\SpecifiedCastIsNotValid-Test.ps1
        Line             : $wb.Worksheets('Sheet1').Range('C2:C5').Value2 = $arr1

        PositionMessage  : At ***\SpecifiedCastIsNotValid-Test.ps1:11 char:1
                           + $wb.Worksheets('Sheet1').Range('C2:C5').Value2 = $arr1
                           + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        PSScriptRoot     : ***
        PSCommandPath    : ***\SpecifiedCastIsNotValid-Test.ps1
        CommandOrigin    : Internal
    ScriptStackTrace      : at <ScriptBlock>, ***\SpecifiedCastIsNotValid-Test.ps1: line 11
                            at <ScriptBlock>, <No file>: line 1
TargetSite     :
    Name          : Invoke
    DeclaringType : System.Management.Automation.Runspaces.PipelineBase, System.Management.Automation, Version=7.2.6.500, Culture=neutral, PublicKeyToken=31bf3856ad364e35
    MemberType    : Method
    Module        : System.Management.Automation.dll
Message        : Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.
Data           : System.Collections.ListDictionaryInternal
InnerException :
    Type       : System.InvalidCastException
    TargetSite : System.Object CallSite.Target(System.Runtime.CompilerServices.Closure, System.Runtime.CompilerServices.CallSite, System.Management.Automation.ComInterop.ComObject, System.Object)
    Message    : Unable to cast object of type 'System.Object[,]' to type 'System.DateTime'.
    Data       : System.Collections.ListDictionaryInternal
    Source     : Anonymously Hosted DynamicMethods Assembly
    HResult    : -2147467262
    StackTrace :
   at CallSite.Target(Closure , CallSite , ComObject , Object )
   at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
   at System.Management.Automation.Interpreter.DynamicInstruction`3.Run(InterpretedFrame frame)
   at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
Source         : System.Management.Automation
HResult        : -2146233087
StackTrace     :
   at System.Management.Automation.Runspaces.PipelineBase.Invoke(IEnumerable input)
   at Microsoft.PowerShell.Executor.ExecuteCommandHelper(Pipeline tempPipeline, Exception& exceptionThrown, ExecutionOptions options)

I'm more than familiar with a class cast exception, and this is not one - at least not from the code written and shown. I could see that this could be an exception from some interop or system code itself, but am then struggling to see the details of what or where that is.

I can work-around this issue by assigning the values one cell at a time, but this is terribly less efficient - especially for assigning hundreds or even thousands of cells at once. The code certainly works in some environments, just not others - and it is representative of code samples over 10 years old (though typically without the PowerShell or interop components), so it isn't really anything "new" or bleeding-edge.

This issue sometimes seems to come and go. However, it is seen by multiple users across multiple devices in multiple environments, separately maintained. All that is effectively required here is PowerShell + Excel on a currently-supported Windows OS.

Following are some details of where I'm currently seeing this tonight:

  • Windows 11 Professional, Version 22H2, OS Build 22598.100 (Insider)
    • Also reproducible under Windows 10.
  • Excel from Office 365, Version 2203 Build 15028.20204 / 16.0.15028.20178 64-bit.
  • $PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.22598.1
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.22598.1
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
  • Visual Studio Code:
Version: 1.66.2 (user setup)
Commit: dfd34e8260c270da74b5c2d86d61aee4b6d56977
Date: 2022-04-11T07:46:01.075Z
Electron: 17.2.0
Chromium: 98.0.4758.109
Node.js: 16.13.0
V8: 9.8.177.11-electron.0
OS: Windows_NT x64 10.0.22598

Edit: As of 2022-08-12, am even seeing the same with the latest versions:

  • Windows 11 Professional, Version 22H2, OS Build 22622.575 (Insider)
  • Excel from Office 365, Version 2207 Build 15427.20210 / 16.0.15427.20182 64-Bit.
  • $PSVersionTable
Name                           Value
----                           -----
PSVersion                      7.2.6
PSEdition                      Core
GitCommitId                    7.2.6
OS                             Microsoft Windows 10.0.22622
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0
  • Visual Studio Code:
Version: 1.70.1 (user setup)
Commit: 6d9b74a70ca9c7733b29f0456fd8195364076dda
Date: 2022-08-10T06:08:33.642Z
Electron: 18.3.5
Chromium: 100.0.4896.160
Node.js: 16.13.2
V8: 10.0.139.17-electron.0
OS: Windows_NT x64 10.0.22622

Tests:

I previously had a grid I was tracking here with results across environment (Visual Studio Code, Windows PowerShell ISE, Windows PowerShell / Windows Terminal, PowerShell / Windows Terminal, and PowerShell / cmd, etc.) - but realized I'm still seeing inconsistent results across even some of these combinations.

I recalled in the past killing the terminal within VS Code (clicking the trash can icon to kill the "PowerShell Integrated Console") and then re-launching it when prompted. Sure enough, that has again - but temporarily - resolved the issue, now allowing for a successful run of both the minimal test case and the entire script from VS Code under PS 5.1, even though I started from a clean session for the above tests. Restarting VS Code now, I'm no longer able to reproduce the issue - but am sure the problem will reappear after restarting Windows or another set of circumstances I've yet to identify.

As of 2022-08-13, I am seeing the following - which at the moment, I can reproduce repeatedly:

  1. I had opened "PowerShell 7 (x64)" from the Start Menu, which opened in Windows Terminal. Running the above .\SpecifiedCastIsNotValid-Test.ps1 fails.
  2. Running the same in a new window of the same works.
  3. Re-running in the original window (#1) still fails.
  4. Running pwsh in the original window to open a child PowerShell process, then re-running the test succeeds.
  5. Exiting the child process to revert back to the original PowerShell process, then re-running the test fails.

In short, what is causing this array assignment to sporadically fail? What else can I check that may be altering how PowerShell runs from within the VS Code terminal than elsewhere?

Updates:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文