PowerShell Komut Dosyalarında Şifrelenmiş Parola Dosyası nasıl kullanılır?


Gereksinim: PowerShell komut dosyalarında şifrelenmiş bir parola dosyası kullanın.

PowerShell'de Kimlik Bilgilerini Okumak/Yazmak için Şifrelenmiş Parola Dosyası nasıl kullanılır?

PnP PowerShell gibi PowerShell modülleri, komut dosyalarında kullanmak üzere kullanıcı adını ve parolayı kaydetmek ve almak için Windows kimlik bilgileri deposunu kullanma mekanizması sunar. Ancak SharePoint Çevrimiçi Yönetim Kabuğu, AzureAD, CSOM. vb. gibi diğer PowerShell modülleri için, parolayı komut dosyası içinde düz metin olarak saklamak dışında parola istemini bastırmanın doğrudan bir yolu yoktur. Komut dosyasını Windows görev zamanlayıcıda planlamamız gerektiği gibi durumlarda, komut dosyasının herhangi bir kullanıcı müdahalesi olmadan gözetimsiz yürütülmesi için bu yöntemi kullanabiliriz:

PowerShell betiklerindeki bir dosyadaki şifrelenmiş şifreleri nasıl saklayabileceğimiz ve okuyabileceğimiz aşağıda açıklanmıştır.

Kaydedilen kimlik bilgilerinin çalışması için MFA'nın kapatılması gerekir!
  • 1. Adım: Kimlik bilgilerini depolamak için şifrelenmiş bir şifre dosyası oluşturun
  • 2. Adım: Şifrelenmiş şifreyi dosyadan okuyun ve komut dosyalarında kullanın.

Şifrelenmiş Şifre Dosyası Oluşturun

Temel olarak, kullanıcıdan kimlik bilgilerini almamız (bir kez!) ve şifrelenmiş şifreyi bir dosyada saklamamız gerekir. Şifrelenmiş parolayı bir dosyaya kaydetmek için PowerShell betiği buradadır.


#function to Save Credentials to a file
Function Save-Credential([string]$UserName, [string]$KeyPath)
{
    #Create directory for Key file
    If (!(Test-Path $KeyPath)) {        
        Try {
            New-Item -ItemType Directory -Path $KeyPath -ErrorAction STOP | Out-Null
        }
        Catch {
            Throw $_.Exception.Message
        }
    }
    #store password encrypted in file
    $Credential = Get-Credential -Message "Enter the Credentials:" -UserName $UserName
    $Credential.Password | ConvertFrom-SecureString | Out-File "$($KeyPath)\$($Credential.Username).cred" -Force
}

#Get credentials and create an encrypted password file
Save-Credential -UserName "salaudeen@crescent.com" -KeyPath "C:\Scripts"

Bu, belirli bir yolda şifrelenmiş kimlik bilgilerine sahip bir dosya oluşturur.

Şifrelenmiş şifreyi Dosyadan alın

Şifrelenmiş parola dosyasını oluşturduğumuzda, dosyayı okuyabilir ve kayıtlı kimlik bilgilerini komut dosyalarımızda şu şekilde kullanabiliriz:


#function to get credentials from a Saved file
Function Get-SavedCredential([string]$UserName,[string]$KeyPath)
{
    If(Test-Path "$($KeyPath)\$($Username).cred") {
        $SecureString = Get-Content "$($KeyPath)\$($Username).cred" | ConvertTo-SecureString
        $Credential = New-Object System.Management.Automation.PSCredential -ArgumentList $Username, $SecureString
    }
    Else {
        Throw "Unable to locate a credential for $($Username)"
    }
    Return $Credential
}

#Get encrypted password from the file
$Cred = Get-SavedCredential -UserName "salaudeen@crescent.com" -KeyPath "C:\Scripts"

#Connect to Azure AD from saved credentials
Connect-AzureAD -Credential $Cred

Pekala, SharePoint Çevrimiçi Yönetim Kabuğu'na bağlanmak için bu yöntemi şu şekilde kullanabiliriz:


#Get encrypted password from the file
$Cred = Get-SavedCredential -UserName "salaudeen@crescent.com" -KeyPath "C:\Scripts"
 
#Connect to SharePoint Online PowerShell
Connect-SPOService -URL "https://Crescent-admin.sharepoint.com" -Credential $Cred
 
#Get all Site Collections
Get-SPOSite

Benzer şekilde, CSOM PowerShell kullanarak SharePoint Online'a bağlanmak için şunu kullanın:


Import-Module Microsoft.Online.SharePoint.PowerShell

#Get encrypted password from the file
$Cred = Get-SavedCredential -UserName "salaudeen@crescent.com" -KeyPath "C:\Scripts"

#Parameter
$SiteUrl = "https://Crescent.sharepoint.com/sites/marketing"
    
#Set up the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl)
$Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
 
#Get the Web Object
$Web = $Ctx.web
$Ctx.Load($Web)
$Ctx.ExecuteQuery()
 
#Get the Title of the Web
Write-host $Web.Title 

Bunu Windows görev zamanlayıcısında zamanlanan otomatik PowerShell komut dosyalarında kullandım. Örneğin, özel kullanıcı profili özelliklerini Azure AD'den SharePoint Online kullanıcı profili deposuna aktarmak için PowerShell.

Clixml Yöntemini Kullanarak Kimlik Bilgilerini Dışa Aktarma-İçe Aktarma

Kimlik bilgilerini güvenli bir şekilde dışa ve içe aktarmanın alternatif yolu buradadır.


#Function to Export Credentials to secure File
Function Export-Credential 
{
   param
   (
     [Parameter(Mandatory=$true)]
     $Path,

     [System.Management.Automation.Credential()]
     [Parameter(Mandatory=$true)]
     $Credential
   )
    
  $CredentialObject = $Credential | Select-Object *    
  $CredentialObject.Password = $CredentialObject.Password | ConvertFrom-SecureString    
  $CredentialObject | Export-Clixml $Path
} 

#Import Credentials from Saved File
Function Import-Credential 
{
   param
   (
     [Parameter(Mandatory=$true)]
     $Path
   )
    
  $CredentialObject = Import-Clixml $path    
  $CredentialObject.password = $CredentialObject.Password | ConvertTo-SecureString    
  New-Object system.Management.Automation.PSCredential($CredentialObject.username, $CredentialObject.password)
}

#Export Credential to a File
Export-Credential -Path "C:\Temp\CredFile.Secure" -Credential (Get-Credential)

#Get Credentials from File
$Cred = Import-Credential -Path "C:\Temp\CredFile.Secure"

#Connect to Azure AD
Connect-AzureAD -Credential $Cred

#Connect to SharePoint Online Management Shell
Connect-SPOService -Url "https://Crescet-admin.sharepoint.com" -Credential $Cred

#Connect to PnP Online
Connect-PnPOnline -Url "https://Crescent-admin.sharepoint.com" -Credentials $Cred

Sonuç olarak, PowerShell ile şifrelenmiş bir parola dosyası kullanmak, parolalar gibi hassas bilgileri depolamak için güvenli bir yöntemdir. Şifreleme işlemi, düz metni şifreli metne dönüştürerek onu okunamaz hale getirmek için güvenli bir algoritma kullanır. Ek olarak, bir PowerShell betiği kullanılarak parola dosyasının şifrelenmesi ve şifresinin çözülmesi otomatikleştirilebilir, bu da onu hassas bilgilerin yönetimi için kullanışlı ve etkili bir çözüm haline getirir. Ancak en büyük dezavantajlardan biri, şifre dosyasının yanlış ellere geçmesi durumunda, içinde saklanan bilgilerin onu yetkisiz erişime karşı korumamasıdır.

İlgili makaleler