Wednesday, April 22, 2020

Using PowerShell to store credentials in a secure string Part#2

On previous article, we did talk about storing credentials securely and re-using it within PowerShell script.
To follow up I would like to show you what NOT TO DO
Don’t do this; it is way too obvious why you should not be doing this, I am not going to waste time to sell this out.


$MyPassword = ConvertTo-SecureString "My password" -AsPlainText -Force
$MyUsername = "My username"


Usage within the script;

$csvFile = "C:\foldermigration.csv"
$table = Import-Csv $csvFile -Delimiter ","
$MyPassword = ConvertTo-SecureString "My password" -AsPlainText -Force
$MyUsername = "My username"
Set-Variable dstSite, dstList
foreach (
$row in $table) {
    Clear-Variable
 dstSite
    Clear-Variable
 dstList
    $dstSite
 = Connect-Site -Url $row.ONEDRIVEURL -UserName $MyUsername -Password $MyPassword
    Add-SiteCollectionAdministrator -Site $dstSite
    $dstList
 = Get-List -Name Documents -Site $dstSite
    Import-Document
 -SourceFilePath "C:\Migrated data" -DestinationList $dstList
    Remove-SiteCollectionAdministrator -Site $dstSite
}


To be fair to ShareGate, it is one of the best third-party utility for SharePoint and OneDrive migrations.
SG PowerShell module is pretty efficient, and its software has tons of great features with some limitations.

Do this instead

$adminName = ‘adminName’
$credpath  = "${env:\userprofile}\Documents\$adminName.Credential"


$Credential = Get-Credential $adminName
$Credential | Export-CliXml -Path $credpath 
$CredObject = Import-CliXml -Path $credpath 




To make it bit more organized

#(1)_.Define Credentials Vars
$adminName = 'admin'
$OrgName   = 'CloudSec365.onmicrosoft.com'
$Const     = '@'
$adminUPN  = $adminName+$Const+$OrgName
$credpath  = "${env:\userprofile}\Documents\Credentials\"
$FileName  = $adminName + '.credential'
$credfile  = $credpath+$FileName
$now       = (get-date -format 'dd-MMM-yyyy-HH-mm-ss')


#Create folder to store credentials

   Function Function-create-Folder {
  
  [CmdletBinding()]
    param()

 Try{

 if (!(Test-Path -Path $credpath))
 {
  New-Item -Type Directory -Path $credpath -ErrorAction Stop | Out-Null
 }

}catch{
   
    $errormessage = $($PSItem.ToString())
    Write-Warning 'Error has occoured'
    Write-host 'Problem FOUND:' $errormessage -ForegroundColor Red -BackgroundColor Black
   }

}



#(-)_.Function-Create-Secure-File


Function Function-Create-Secure-File {
  
  [CmdletBinding()]
    param()

 Try{

$Credential = Get-Credential $adminUPN -ErrorAction Stop
$Credential | Export-CliXml -Path $credfile

}catch{
   
    $errormessage = $($PSItem.ToString())
    Write-Warning 'Error has occoured'
    Write-host 'Problem FOUND:' $errormessage -ForegroundColor Red -BackgroundColor Black
   }

}



#(-)_.Import the file to Use
$CredObject = Import-CliXml -Path $credfile


#(-)_.Function-remove-Files 
   

Function Function-remove-Files {
  
  [CmdletBinding()]
    param()

 Try{

  Remove-Item -Path $credpath -Recurse -Force  # Remove Folder
# Get-ChildItem $credpath -Recurse -force | Remove-Item -Force # remove files

}catch{
   
    $errormessage = $($PSItem.ToString())
    Write-Warning 'Error has occoured'
    Write-host 'Problem FOUND:' $errormessage -ForegroundColor Red -BackgroundColor Black
   }

}



Casey DeDeal
Azure Certified Solutions Architect
AWS Certified Cloud Practitioner

https://msazure365.blogspot.com
https://simplepowershell.blogspot.com
https://twitter.com/Message_Talk




No comments:

Post a Comment