2017-01-26 72 views
1

您是否能夠通過PowerShell使用不同的用戶帳戶導入模塊?我特意試圖將ActiveDirectory模塊以不同的帳戶導入到當前登錄的帳戶。使用不同的用戶帳戶導入模塊

我不想全力以赴的控制檯,但因爲我試圖使用當前的Outlook進程發送電子郵件後的部分代碼完成,如果整個控制檯提升它會給COM錯誤(PowerShell和Outlook的實例不會一起提升)。

發送電子郵件或通過的SMTP方式發送郵件將無法正常工作,即使我可以ping SMTP服務器,我得到下面的錯誤消息,從我讀過,因爲我不能與SMTP服務器進行適當的通信?

例外調用帶有「1」參數的「發送」:「發送郵件失敗」。 在C:\ Users \\ Desktop \ SCRIPT.ps1:64 char:9 + $ SMTP.Send($ MSG) + ~~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:SmtpException

+0

您可以使用'psexec.exe'作爲不同用戶啓動一個新進程,然後返回所需內容。 – BenH

回答

0

不能導入模塊使用不同的帳戶,因爲它不以這種方式工作。您需要使用其他憑據自行運行單個命令。

正如你所提到的AD,我用Get-ADUser爲例,但很多powershell命令都有某種CredentialPSCredential參數,請查看文檔以找出答案。

$Credentials = Get-Credential 

Get-ADUser JohnSmith -Properties DistinguishedName -Credential $Credentials 

以上示例將提示輸入憑據,但您也可以將它們保存在腳本中,而不是每次輸入它們。

注意:在文件中保存的憑證是不安全的,所以要小心你救什麼憑據和您儲存!

$Username = "DomainUserName" 
$Password = "PlainPassword" | ConvertTo-SecureString -AsPlainText -Force 
$Credentials = New-Object System.Management.Automation.PSCredential($Username ,$Password) 

也有other ways保存憑據,但這是太多進入這裏。

+0

謝謝。這對我有幫助 - Get-Credential併爲每個命令添加-Credential參數。 –

0

爲PowerShell中的AD模塊是一個包裝周圍多了.NET Framework的的System.DirectoryServices的代碼命名空間。

.NET依次被包裝在舊的COM ADSI組件的頂部。

正因爲如此,可以使用windows緩存憑據來處理AD工作不使用-Credential選項。

如果你在運行腳本之前緩存Windows域憑證後,AD的cmdlet將使用這些緩存憑據進行身份驗證的DC。當然,不需要刪除緩存的憑證......但意識到它是靜態的。如果密碼在域中更改,則需要重新緩存該信用。

域creds的管理可以通過命令行,以及使用cmdkey.exe程序,它是因爲Win7的存在來進行。使用此命令行工具,您可以在運行腳本之前設置Windows憑據,然後再刪除憑證。

請注意,緩存的信用卡的使用僅基於該cmdlet嘗試進行通信的服務器名稱。如果您未在cmdlet調用中指定DC,那麼它將使用%logonserver%環境變量。

然後關鍵的一點是,ADSI使用的服務器名必須完全匹配憑證緩存。如果使用短名稱(server01),那麼它必須位於緩存中。如果使用完整的DNS名稱(server01.domain.com),那麼它必須位於緩存中。如果您覺得您的腳本可能會更改爲其他服務器,那麼該服務器必須位於緩存中。

相關問題