尝试执行以下代码时出错:
$dll = "C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll"
import-module -Name $dll
$exc = new-object Microsoft.Exchange.WebServices.Data.ExchangeService
错误:
New-Object : Could not load file or assembly 'System.Core, Version=3.5.0.0, Cul
ture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The
system cannot find the file specified.
At D:\scripts\get_mails.ps1:5 char:18
+ $exc = new-object <<<< Microsoft.Exchange.WebServices.Data.ExchangeService
+ CategoryInfo : NotSpecified: (:) [New-Object], FileNotFoundExce
ption
+ FullyQualifiedErrorId : System.IO.FileNotFoundException,Microsoft.PowerS
hell.Commands.NewObjectCommand
我们在安装了.net framework 4.5.2(现已升级到4.6.1)的Windows Server 2008 r2上运行了这个。正在使用的powershell版本是v2.0
我们应该能够通过powershell 2.0使用托管api吗?
答案 0 :(得分:0)
好像它需要.net 3.5。 程序集版本“Version = 3.5.0.0”表示它。
答案 1 :(得分:0)
对于加载程序集,您应该使用:
[Reflection.Assembly]::LoadFile("C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll")
导入模块需要加载psm1文件。我不认为这是加载程序集的方式。
点击链接:
learn-to-use-the-exchange-web-services-with-powershell/
希望它有所帮助。
答案 2 :(得分:0)
我认为问题在于您尝试加载需要.net运行时&gt; = 3.5的程序集。如果您在PowerShell 2.0中运行$PSVersionTable
,那么您将获得以下内容:
Name Value
---- -----
CLRVersion 2.0.50727.5485
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
导致EWS程序集加载失败的CLR版本。
要解决此问题,您可以创建一个批处理文件,该文件将创建一个调用PowerShell 2.0并使用较新的CLR运行时的配置文件。
这是批处理文件:
@echo off
:: https://stackoverflow.com/questions/7308586/using-batch-echo-with-special-characters
if exist %~dp0powershell.exe.activation_config goto :run
echo.^<?xml version="1.0" encoding="utf-8" ?^> > %~dp0powershell.exe.activation_config
echo.^<configuration^> >> %~dp0powershell.exe.activation_config
echo. ^<startup useLegacyV2RuntimeActivationPolicy="true"^> >> %~dp0powershell.exe.activation_config
echo. ^<supportedRuntime version="v4.0"/^> >> %~dp0powershell.exe.activation_config
echo. ^</startup^> >> %~dp0powershell.exe.activation_config
echo.^</configuration^> >> %~dp0powershell.exe.activation_config
:run
:: point COMPLUS_ApplicationMigrationRuntimeActivationConfigPath to the directory that this cmd file lives in
:: and the directory contains a powershell.exe.activation_config file which matches the executable name powershell.exe
set COMPLUS_ApplicationMigrationRuntimeActivationConfigPath=%~dp0
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe %*
set COMPLUS_ApplicationMigrationRuntimeActivationConfigPath=
将powershell.exe
更改为powershell_ise.exe
以使用.net 4 CLR运行时启动ISE。
另请参阅我的SO answer在PowerShell中使用EWS