2017-06-13 55 views
1

我對所有腳本都使用Save-AzureRmProfile來並行執行天藍色請求。我借用auto login to azure with powershell/導入保存的AzureRMContext仍然需要密碼

這個想法,我不得不更新我的系統爲最新版本(AzureRM> 4)儘管在AzureRmProfile現在AzureRmContext的cmdlet我還是不能像以前一樣使用它。

方案

打開PS主機和執行

Save-AzureRmContext -Profile (Add-AzureRmAccount) -Path myprofile.json 

# List my VMs 
Get-AzureRmVm 

打開第二個PS控制檯

Import-AzureRmContext -Path myprofile.json 

# List my VMs 
Get-AzureRmVm 
Get-AzureRmVM : Your Azure credentials have not been set up or have expired, please run Login-AzureRMAccount to set up your Azure credentials. 

如何重新使用我的個人資料並行執行加載?

回答

2

cmdlet中存在一個錯誤。沒有多少可以做(只降級)。

在此追蹤它:https://github.com/Azure/azure-powershell/issues/3954

+1

感謝@ 4c74356b41還是我需要說Lt5kA :)我檢查了GitHub庫,但還沒有找到它。 – guillem

+0

你實際上是第一個解密這個的人,並不是說它使事情更清楚,但仍然;)@guillem – 4c74356b41

+1

jaja @ 4c74356b41,我雖然一次翻譯它,但仍然很明顯 – guillem

0

作爲一種變通方法,直到問題不是固定的或者我降級我用

$azureAccountName ="[email protected]" 
$Password = "12345678" 
$azurePassword = ConvertTo-SecureString $Password -AsPlainText -Force 
$psCred = New-Object System.Management.Automation.PSCredential($azureAccountName, $azurePassword) 

然後在我的並行腳本塊我不喜歡這樣的調用來代替我的PS安裝破碎的進口憑證

Login-AzureRmAccount -Credential $psCred 

不是我所引以爲傲的解決方案,但它......它的訣竅。

2

以下是一些解決方法。

簡單,在內存中的解決方法,將需要添加的,只要你導入情境:

$ctx = Import-AzureRmContext -Path <path-to-context> 
$ctx.Context.TokenCache.Deserialize($ctx.Context.TokenCache.CacheData) 

更復雜的解決方法。這會創建一個永久文件TokenCache.dat,如果存在的話,它可能允許您在一臺機器上完全避免此問題。

在一個新的窗口譽:

$ctx = Import-AzureRmContext -Path <path-to-saved-context> 
$session = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance 
$cacheFile = [System.IO.Path]::Combine($session.ProfileDirectory, $session.TokenCacheFile) 
if (Test-Path $cacheFile) { 
    $session.DataStore.CopyFile($cacheFile, ($cacheFile + ".bak")) 
} 

$session.DataStore.WriteFile($cacheFile, [System.Security.Cryptography.ProtectedData]::Protect($ctx.Context.TokenCache.CacheData, $null, [System.Security.Cryptography.DataProtectionScope]::CurrentUser)) 
$session.TokenCache = New-Object -TypeName Microsoft.Azure.Commands.Common.Authentication.ProtectedFileTokenCache -ArgumentList $cacheFile 
[Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile.DefaultContext.TokenCache = $session.TokenCache 

請注意,這個問題應該是固定在下一版本

+0

我喜歡「內存」解決方案因爲它需要對我的腳本進行最小程度的更改。這應該也在github問題中引用 – guillem

+0

它在github問題的底部被引用,正如永久修復的預期發佈(7/7) –

相關問題