我想检查Microsoft Exchange Server中的邮箱数量。此命令在标准cmd.exe中正常工作:
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -command ". 'C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto ; Get-Mailbox | Measure-Object"
输出
...
Count : 3
Average :
Sum :
Maximum :
Minimum :
Property :
然后我将使用“-ExecutionPolicy RemoteSigned”在Python中编码:
cmd = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe
-ExecutionPolicy RemoteSigned
-command \". 'C:\\Program Files\\Microsoft\\Exchange Server\\V14\\bin\\RemoteExchange.ps1'; Connect-ExchangeServer -auto; Get-Mailbox | Measure-Object\""
os.system(cmd)
加载RemoteExchange.ps1文件有很多错误。
Get-ItemProperty : Cannot find path 'HKLM:\SOFTWARE\Microsoft\ExchangeServer\v14\Setup' because it does not exist.
At C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1:46 char:34
+ $global:exbin = (get-itemproperty <<<< HKLM:\SOFTWARE\Microsoft\ExchangeServer\v14\Setup).MsiInstallPath + "bin\"
+ CategoryInfo : ObjectNotFound: (HKLM:\SOFTWARE\...erver\v14\Setup:String) [Get-ItemProperty], ItemNotFo
undException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemPropertyCommand
...
The Exchange types file wasn't loaded because not all of the required files could be found.
Update-TypeData : Cannot find path 'C:\Users\administrator.SCCM01\bin\Exchange.partial.Types.ps1xml' because it does no
t exist.
At C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1:104 char:16
+ Update-TypeData <<<< -PrependPath $partialTypeFile
+ CategoryInfo : InvalidOperation: (bin\Exchange.partial.Types.ps1xml:String) [Update-TypeData], ItemNotF
oundException
+ FullyQualifiedErrorId : TypesPrependPathException,Microsoft.PowerShell.Commands.UpdateTypeDataCommand
虽然出现了Exchange命令行管理程序的欢迎屏幕,但无法加载RemoteExchange.ps1,并且“Get-Mailbox”命令根本无法运行。
我想我一定错过了重要的事情。我怎么解决这个问题?请帮忙。
修改:为什么要在Python脚本中添加-ExecutionPolicy RemoteSigned
?如果我不这样做,将导致不同的错误:
File C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see "get-help about_signing" for more details.
请参阅此thread,RemoteSigned
优于Unrestricted
。它们都在cmd.exe中工作,但在Python脚本中不起作用。
答案 0 :(得分:1)
我在稍微不同的情况下遇到了完全相同的问题,但错误信息是相同的。我试图通过Puppet and Powershell scripts配置MS Exchange。您正在遭受File System Redirector (Windows)的无效运行的副作用。显然,32位程序无法访问64位注册表项,文件系统重定向器会在您不知情的情况下更改您的内容。
根据我的情况,我发现这是elegant solution:
32位应用程序可以访问本机系统目录 将%windir%\ Sysnative替换为%windir%\ System32。 WOW64 将Sysnative识别为用于指示该文件的特殊别名 系统不应重定向访问。这种机制很灵活 因此,它是推荐的绕过文件的机制 系统重定向。请注意,64位应用程序无法使用 Sysnative别名,因为它是一个虚拟目录而不是真正的目录。