Power Shell管理Office參考http://www.mamicode.com/info-detail-494553.html C#調用Power Shell 參考 https://www.cnblogs.com/chenkai/archive/2010/11/09/1872471.htm ...
Power Shell管理Office參考http://www.mamicode.com/info-detail-494553.html
C#調用Power Shell 參考 https://www.cnblogs.com/chenkai/archive/2010/11/09/1872471.html
string pwd = "**********"; string userName = "**********"; StringBuilder ss = new StringBuilder(); ss.AppendLine("$password = ConvertTo-SecureString \"" + pwd + "\" -AsPlainText –Force"); ss.AppendLine("$credential = New-Object System.Management.Automation.PsCredential(\"" + userName + "\",$password)"); ss.AppendLine("$cred = Get-Credential -cred $credential"); ss.AppendLine("Import-Module MSOnline"); //ss.AppendLine("Get-Module"); ss.AppendLine("Connect-Msolservice -cred $cred"); ss.AppendLine("Get-MsolAccountSku"); using (Runspace runspace1 = RunspaceFactory.CreateRunspace()) { Collection<PSObject> results = null; try { runspace1.Open(); Pipeline pipeline = runspace1.CreatePipeline(); pipeline.Commands.AddScript(ss.ToString()); results = pipeline.Invoke(); } catch (Exception ex) { var ss1 = ex.ToString(); } finally { runspace1.Close(); } }
第一次出現的錯誤:無法將“Connect-Msolservice”項識別為 cmdlet、函數、腳本文件或可運行程式的名稱。請檢查名稱的拼寫,如果包括路徑,請確保路徑正確,然後再試一次。
然後發現在安裝的MSOnline模塊預設在64位PowerShell中可以成功導入,但是在32位的PowerShell X86中無法導入,
報錯:
PS C:\WINDOWS\system32>> Import-Module MSOnline
Import-Module : 未能載入指定的模塊“MSOnline”,因為在任何模塊目錄中都沒有找到有效模塊文件。
所在位置 行:1 字元: 1
+ Import-Module MSOnline
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (MSOnline:String) [Import-Module], FileNotFoundException
+ FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand
原來模塊只安裝到64位下,32位並沒有安裝MSOnline模塊;
這裡我參考了http://just4fun.cn/?p=786 這個文章,但是其中有部分是錯誤的:比如"登錄助手預設安裝到32位的模塊庫中,64位的模塊庫中沒有",估計它弄反了。
還有C#預設調用的是32位的PowerShell x86,而不是64位的;
這裡說明下一個容易搞錯的路徑:
C:\Windows\SysWOW64\WindowsPowerShell\v1.0 下的是32位的Power Shell,
而C:\Windows\System32\WindowsPowerShell\v1.0放的是64位的Power Shell;
這裡很容易被SysWOW64和System32搞暈,SysWOW64文件夾裡面的程式類型可參考百度百科https://baike.baidu.com/item/syswow64/10627204?fr=aladdin
後來我發現修改項目生成屬性的目標平臺為x64可以成功調用64位的PowerShell;
這裡我分析:
如果你的項目設置了首選32位或者引用任何32位的dll 就會自動調用32位的power Shell,可以通過設置目標平臺為x64測試有沒有依賴32位程式集,如果依賴會報
未能載入文件或程式集“ConnectionOffice365”或它的某一個依賴項。試圖載入格式不正確的程式。
說明: 執行當前 Web 請求期間,出現未經處理的異常。請檢查堆棧跟蹤信息,以瞭解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。
異常詳細信息: System.BadImageFormatException: 未能載入文件或程式集“ConnectionOffice365”或它的某一個依賴項。試圖載入格式不正確的程式。