Creating the correct module functions
parent
dc4dbefe11
commit
78d0cb52b8
|
|
@ -1,243 +1,14 @@
|
||||||
<#
|
|
||||||
.Synopsis
|
|
||||||
Allows the secure transfer and reconciliation of a large number of files
|
|
||||||
|
|
||||||
PTRfile: Protect, Transfer, Reconcile files
|
|
||||||
|
|
||||||
.Description
|
|
||||||
Packages source folder contents into a 7ZIP file, adding a reconciliation
|
|
||||||
file to the 7ZIP file and then encrypting the contents. Send
|
|
||||||
* this script
|
|
||||||
* the 7ZIP package file
|
|
||||||
* plus optional SecretFilename ( if using RecipientKeyName )
|
|
||||||
to the target or recipient.
|
|
||||||
|
|
||||||
The source folder is not altered and only read rights are required. A log
|
|
||||||
file is written at exceution to record activity.
|
|
||||||
|
|
||||||
The SecretFileName can be sent via email, while the 7ZIP can go different routes
|
|
||||||
due to possible size such as:
|
|
||||||
* Cloud storage provider
|
|
||||||
* HTTPS web file upload
|
|
||||||
* SFTP transfer
|
|
||||||
* USB stick
|
|
||||||
|
|
||||||
At the target, unpack the contents to a folder and reconcile the results. You
|
|
||||||
will need write access on the target storage. A log file is written at exceution
|
|
||||||
to record activity.
|
|
||||||
|
|
||||||
Your bulk file transfer is encrypted in transit. Note that if you use the
|
|
||||||
SecretKey method the ecnrypted contents will only be as secure as the strength
|
|
||||||
of your secret.
|
|
||||||
|
|
||||||
You can use storage providers such as Dropbox, AWS S3, Google Drive, OneDrive or BackBlaze
|
|
||||||
and your documents have additonal protection.
|
|
||||||
|
|
||||||
A log file is produced on execution. Repeated executions on the same day
|
|
||||||
will add text content to the same log file. The default log name takes the form:
|
|
||||||
"ptr_files_yyyy-MM-dd.log"
|
|
||||||
|
|
||||||
You will need to have installed the 7Zip4Powershell PowerShell cmdlet
|
|
||||||
before using the pack or unpack actions. You can install the cmdlet
|
|
||||||
by executing
|
|
||||||
.\ptrFiles.ps1 -Action install -Path ".\"
|
|
||||||
|
|
||||||
Author: Tom Peltonen
|
|
||||||
|
|
||||||
.Parameter Action
|
|
||||||
Action to perform, which can be:
|
|
||||||
- Install : Install 7Zip4PowerShell
|
|
||||||
- Pack : Archive the contents of a folder(s)
|
|
||||||
- Unpack : Unpack the archive, but no reconfile is performed
|
|
||||||
- Reconcile : Reconcile the contents in the restored folder
|
|
||||||
- ReconcileFile : Generate reconfile file. The pack process does this.
|
|
||||||
- ArchiveInformation : Fetch archive information
|
|
||||||
|
|
||||||
.Parameter Path
|
|
||||||
The path to the files and folders to pack or the path to the unpack location.
|
|
||||||
The path can include a trailing * as a wildcard to only include a subset of
|
|
||||||
directories.
|
|
||||||
|
|
||||||
When using the trailing * for names, the filtering is only applied to immediate
|
|
||||||
folder names under the parent folder. The filter does not cascade to lower folders.
|
|
||||||
|
|
||||||
The path can be a local drive, mapped network drive or a network shared folder
|
|
||||||
location such as \\stora\MyLibrary.
|
|
||||||
|
|
||||||
The Path can also be a file containing a list of paths, one per line. To use a
|
|
||||||
list file, prefix the Path value with a "@" and name the file. Do not use a folder
|
|
||||||
for @ defined path.
|
|
||||||
|
|
||||||
A file (@ prefix) containing a list of paths cannot contain generic path names, that
|
|
||||||
is paths with trailing wildcard of "*"
|
|
||||||
|
|
||||||
.Parameter RecipientKeyName
|
|
||||||
The recipient of the package which is used to find the appropriate
|
|
||||||
certificate for encrypting with the public key. Either the RecipientKeyName
|
|
||||||
or the SecretKey is required for packing or unpacking the 7ZIP file.
|
|
||||||
Using the RecipientKeyName is the most secure transfer option as a
|
|
||||||
asymmetric cryptographic key is used that can only be decrypted by the
|
|
||||||
holder of the private key.
|
|
||||||
|
|
||||||
If you are using the RecipientKeyName, then the 7ZIP file contents can only
|
|
||||||
be unzipped by the holder of the private key and the SecretFileName file.
|
|
||||||
If you don't have the private, which you should not unless you are sending
|
|
||||||
to yourself, then you cannot unpack the 7ZIP file.
|
|
||||||
|
|
||||||
.Parameter SecretKey
|
|
||||||
A tradiitional secret to encrypt or decrypt the 7ZIP package. Either the RecipientKeyName
|
|
||||||
or the SecretKey is required for packing or unpacking the 7ZIP file. This method
|
|
||||||
uses a symmetric cryptographic key exchange which is less secure then the
|
|
||||||
RecipientKeyName approach.
|
|
||||||
|
|
||||||
Note: Currently the script doe snot user Secure Strings
|
|
||||||
|
|
||||||
.Parameter ArchiveFileName
|
|
||||||
The location and name of the 7ZIP file. If not supplied a default 7ZIP file name
|
|
||||||
will be generated in the current directory for the pack action.
|
|
||||||
|
|
||||||
The default name will take the form ".\transfer_protect_yyyyMMdd_hhmm.7z"
|
|
||||||
|
|
||||||
For unpack actions, the archive file name parameter is mandatory.
|
|
||||||
|
|
||||||
.Parameter RootFolderName
|
|
||||||
The root folder, which should be used if using wildcard (*) for the
|
|
||||||
path. A guess will be made as to value if not supplied, which will
|
|
||||||
work in many circumstances.
|
|
||||||
|
|
||||||
.Parameter FileFilter
|
|
||||||
A filter on file names. This does not filter directories.
|
|
||||||
An example to only include JPEG file is "*.jpg". You can also
|
|
||||||
filter on picture file names starting with "IMG*.jpg"
|
|
||||||
|
|
||||||
.Parameter ReconcileFileName
|
|
||||||
The name of the reconfile file name to generate during pack or use
|
|
||||||
during unpack. This is a file name without path. If no value is
|
|
||||||
supplied, then a default name is generated.
|
|
||||||
The reconcile file is included into the root of the 7ZIP file.
|
|
||||||
Once a reconcile is executed, you can delete this file from the
|
|
||||||
restored location.
|
|
||||||
|
|
||||||
The default name is "##protect_transfer_reconcile_files##.csv"
|
|
||||||
|
|
||||||
.Parameter SecretFileName
|
|
||||||
The secret file name is used with RecipientKeyName to secure the
|
|
||||||
internally generated password for the 7ZIP file. When unpacking the
|
|
||||||
7ZIP file you will need access to this file if RecipientKeyName
|
|
||||||
was used. If not supplied a default name is used. This file is
|
|
||||||
encrypted with RecipientKeyName.
|
|
||||||
|
|
||||||
The default name is the archive file name with postfix ".key"
|
|
||||||
|
|
||||||
.Parameter CloudProfile
|
|
||||||
The profile name to use for Install and Transfer actions. The
|
|
||||||
default for Install is "UserScope". The default for "Transfer"
|
|
||||||
is "default"
|
|
||||||
Profile name can also be specifed with Environment variable
|
|
||||||
"PTRFILES_PROFILE"
|
|
||||||
|
|
||||||
.Parameter ExcludeHash
|
|
||||||
Exclude the file hash from the reconcile file. As producing a file
|
|
||||||
hash takes compute cycles during pack, you can select to bypass this
|
|
||||||
generation to speed up the packaging. Excluding the hash does reduce
|
|
||||||
the functionality of the reconciliation at unpack.
|
|
||||||
|
|
||||||
.Parameter LogPath
|
|
||||||
The log folder where log files are written. If the folder does not
|
|
||||||
exist then it is created. You need write access rights to this location.
|
|
||||||
|
|
||||||
.Notes
|
|
||||||
This script has been written to use the 7ZIP function as it is open source
|
|
||||||
and provides a secure encryption mechanism, plus portability on Windows,
|
|
||||||
Linux and MacOS.
|
|
||||||
|
|
||||||
It is also beneficial that 7ZIP has efficient compression algorithms.
|
|
||||||
|
|
||||||
Compressing and packing a large data set can take significant time and also
|
|
||||||
require storage space. The script does not check if you have sufficient
|
|
||||||
free storage to package the source contents into a single 7ZIP file. It is your
|
|
||||||
responsibility to ensure sufficient storage space exists.
|
|
||||||
|
|
||||||
If you need to copy files from one directory to another accessible directory from
|
|
||||||
your Windows desktop, you might consider using ROBOCOPY. If the target directory
|
|
||||||
is not accessible and you want to reconcile, then this tool is appropriate.
|
|
||||||
|
|
||||||
The following environment variables are supported:
|
|
||||||
- PTRFILES_RECIPIENTKEYNAME
|
|
||||||
- PTRFILES_PROFILE
|
|
||||||
|
|
||||||
|
|
||||||
.Example
|
|
||||||
# Pack and encrypt all files in folder ".\transferpack\" using a private-public key
|
|
||||||
# A file with the postifx ".key" is also generated alongside the 7ZIP file
|
|
||||||
.\ptrFiles.ps1 -Action pack -Path ".\transferpack\" -RecipientKeyName data@mycompany
|
|
||||||
|
|
||||||
.Example
|
|
||||||
# Unpack all files in 7ZIP file "transfer_protect_yyyMMdd_hhmm.7z" to folder ".\targetdir" using a private-public key
|
|
||||||
# You will need the file "transfer_protect_yyyMMdd_hhmm.7z.key" to unpack the encrypted 7ZIP file
|
|
||||||
.\ptrFiles.ps1 -Action unpack -ArchiveFileName "transfer_protect_yyyMMdd_hhmm.7z" -Path ".\targetdir" -RecipientKeyName data@mycompany
|
|
||||||
|
|
||||||
.Example
|
|
||||||
# Reconcile files in folder ".\targetdir"
|
|
||||||
.\ptrFiles.ps1 -Action reconcile -Path ".\targetdir"
|
|
||||||
|
|
||||||
.Example
|
|
||||||
# Pack and encrypt all files in folder ".\transferpack\" using a password
|
|
||||||
.\ptrFiles.ps1 -Action pack -Path ".\transferpack\" -SecretKey "fjks932c-x=23ds"
|
|
||||||
|
|
||||||
.Example
|
|
||||||
# Unpack all files in 7ZIP file "transfer_protect_yyyMMdd_hhmm.7z" to folder ".\targetdir" using a password
|
|
||||||
.\ptrFiles.ps1 -Action unpack -ArchiveFileName "transfer_protect_yyyMMdd_hhmm.7z" -Path ".\targetdir" -SecretKey "fjks932c-x=23ds"
|
|
||||||
|
|
||||||
.Example
|
|
||||||
# Pack and encrypt all files in folder ".\transferpack\02*" where the folder name starts with "02" using a password
|
|
||||||
.\ptrFiles.ps1 -Action pack -Path ".\transferpack\02*" -SecretKey "fjks932c-x=23ds"
|
|
||||||
|
|
||||||
#>
|
|
||||||
|
|
||||||
param (
|
|
||||||
[Parameter(Mandatory)][String] $Action,
|
|
||||||
[Parameter(Mandatory)][String] $Path,
|
|
||||||
[String] $RecipientKeyName,
|
|
||||||
[String] $SecretKey,
|
|
||||||
[String] $ArchiveFileName,
|
|
||||||
[String] $RootFolderName,
|
|
||||||
[String] $FileFilter,
|
|
||||||
[String] $ReconcileFileName,
|
|
||||||
[String] $SecretFileName,
|
|
||||||
[String] $CloudProfile,
|
|
||||||
[switch] $ExcludeHash,
|
|
||||||
[String] $LogPath
|
|
||||||
|
|
||||||
)
|
|
||||||
|
|
||||||
#$default_dateLocal = Get-Date -Format "yyyyMMdd_HHmm"
|
|
||||||
#$default_archiveFile = ".\ptr_file_##date##.7z"
|
|
||||||
$default_reconcileFile = "##protect_transfer_reconcile_files##.csv"
|
$default_reconcileFile = "##protect_transfer_reconcile_files##.csv"
|
||||||
$default_profile = "default"
|
$default_profile = "default"
|
||||||
|
$default_archiveFile = ".\ptr_file_##date##.7z"
|
||||||
|
|
||||||
function Open-Log {
|
function Open-Log {
|
||||||
parm(
|
|
||||||
$PSBoundParameters
|
|
||||||
)
|
|
||||||
|
|
||||||
$dateTimeStart = Get-Date -f "yyyy-MM-dd HH:mm:ss"
|
$dateTimeStart = Get-Date -f "yyyy-MM-dd HH:mm:ss"
|
||||||
Write-Log "***********************************************************************************"
|
Write-Log "***********************************************************************************"
|
||||||
Write-Log "* Start of processing: [$dateTimeStart]"
|
Write-Log "* Start of processing: [$dateTimeStart]"
|
||||||
Write-Log "***********************************************************************************"
|
Write-Log "***********************************************************************************"
|
||||||
|
|
||||||
if ($null -ne $PSBoundParameters) {
|
|
||||||
Write-Log "Script parameters follow"
|
|
||||||
ForEach ($boundParam in $PSBoundParameters.GetEnumerator())
|
|
||||||
{
|
|
||||||
if ($boundParam.Key -eq "SecretKey") {
|
|
||||||
Write-Log "Parameter: $($boundParam.Key) Value: ************** "
|
|
||||||
} else {
|
|
||||||
Write-Log "Parameter: $($boundParam.Key) Value: $($boundParam.Value) "
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Write-Log ""
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -276,7 +47,7 @@ function Close-Log {
|
||||||
}
|
}
|
||||||
|
|
||||||
function Get-SoftwareName {
|
function Get-SoftwareName {
|
||||||
return [String] "PTRFILES"
|
return [String] "PETERDOCS"
|
||||||
}
|
}
|
||||||
|
|
||||||
function New-RandomPassword {
|
function New-RandomPassword {
|
||||||
|
|
@ -719,65 +490,259 @@ function Invoke-SinglePack
|
||||||
|
|
||||||
|
|
||||||
# Compress / Package
|
# Compress / Package
|
||||||
|
|
||||||
|
<#
|
||||||
|
.Synopsis
|
||||||
|
Packs a source folder(s) into an encrypted 7ZIP archive file
|
||||||
|
that can be securely transported to a remote lcoation or
|
||||||
|
even used as a secure permmanent backup.
|
||||||
|
|
||||||
|
PeterDocs : Protect, Transfer, Reconcile Document Files
|
||||||
|
|
||||||
|
.Description
|
||||||
|
Packages source folder contents into a 7ZIP file, adding a reconciliation
|
||||||
|
file to the 7ZIP file and then encrypting the contents. The source folder
|
||||||
|
is not altered and only read rights are required. A log file is written
|
||||||
|
at exceution to record activity.
|
||||||
|
|
||||||
|
|
||||||
|
.Parameter SourceFolder
|
||||||
|
The path to the files and folders to pack.
|
||||||
|
The path name can include a trailing * as a wildcard to only include a subset of
|
||||||
|
directories.
|
||||||
|
|
||||||
|
When using the trailing * for names, the filtering is only applied to immediate
|
||||||
|
folder names under the parent folder. The filter does not cascade to lower folders.
|
||||||
|
|
||||||
|
The path can be a local drive, mapped network drive or a network shared folder
|
||||||
|
location such as \\MediaStor\MyLibrary.
|
||||||
|
|
||||||
|
The source folder parameter can also be a file containing a list of paths, one per line.
|
||||||
|
To use a list file, prefix the source folder value with a "@" and name the file.
|
||||||
|
Do not use a folder for @ defined path.
|
||||||
|
|
||||||
|
A file (@ prefix) containing a list of paths cannot contain generic path names, that
|
||||||
|
is paths with trailing wildcard of "*"
|
||||||
|
|
||||||
|
.Parameter RecipientKey
|
||||||
|
The recipient of the package which is used to find the appropriate
|
||||||
|
certificate for encrypting with the public key. Either the RecipientKeyName
|
||||||
|
or the SecretKey is required for packing or unpacking the 7ZIP file.
|
||||||
|
Using the RecipientKeyName is the most secure transfer option as a
|
||||||
|
asymmetric cryptographic key is used that can only be decrypted by the
|
||||||
|
holder of the private key.
|
||||||
|
|
||||||
|
If you are using the RecipientKeyName, then the 7ZIP file contents can only
|
||||||
|
be unzipped by the holder of the private key and the SecretFileName file.
|
||||||
|
If you don't have the private, which you should not unless you are sending
|
||||||
|
to yourself, then you cannot unpack the 7ZIP file.
|
||||||
|
|
||||||
|
.Parameter SecretKey
|
||||||
|
A tradiitional secret to encrypt or decrypt the 7ZIP package. Either the RecipientKeyName
|
||||||
|
or the SecretKey is required for packing or unpacking the 7ZIP file. This method
|
||||||
|
uses a symmetric cryptographic key exchange which is less secure then the
|
||||||
|
RecipientKeyName approach.
|
||||||
|
|
||||||
|
Note: Currently the script doe snot user Secure Strings
|
||||||
|
|
||||||
|
.Parameter ArchiveFile
|
||||||
|
The location and name of the 7ZIP file. If not supplied a default 7ZIP file name
|
||||||
|
will be generated in the current directory for the pack action.
|
||||||
|
|
||||||
|
The default name will take the form ".\transfer_protect_yyyyMMdd_hhmm.7z"
|
||||||
|
|
||||||
|
For unpack actions, the archive file name parameter is mandatory.
|
||||||
|
|
||||||
|
.Parameter RootFolder
|
||||||
|
The root folder, which should be used if using wildcard (*) for the
|
||||||
|
path. A guess will be made as to value if not supplied, which will
|
||||||
|
work in many circumstances.
|
||||||
|
|
||||||
|
.Parameter FileFilter
|
||||||
|
A filter on file names. This does not filter directories.
|
||||||
|
An example to only include JPEG file is "*.jpg". You can also
|
||||||
|
filter on picture file names starting with "IMG*.jpg"
|
||||||
|
|
||||||
|
.Parameter ReconcileFile
|
||||||
|
The name of the reconfile file name to generate during pack or use
|
||||||
|
during unpack. This is a file name without path. If no value is
|
||||||
|
supplied, then a default name is generated.
|
||||||
|
The reconcile file is included into the root of the 7ZIP file.
|
||||||
|
Once a reconcile is executed, you can delete this file from the
|
||||||
|
restored location.
|
||||||
|
|
||||||
|
The default name is "##protect_transfer_reconcile_files##.csv"
|
||||||
|
|
||||||
|
.Parameter SecretFile
|
||||||
|
The secret file name is used with RecipientKey to secure the
|
||||||
|
internally generated password for the 7ZIP file. When unpacking the
|
||||||
|
7ZIP file you will need access to this file if RecipientKey
|
||||||
|
was used. If not supplied a default name is used. This file is
|
||||||
|
encrypted with RecipientKey.
|
||||||
|
|
||||||
|
The default name is the archive file name with postfix ".key"
|
||||||
|
|
||||||
|
.Parameter ExcludeHash
|
||||||
|
Exclude the file hash from the reconcile file. As producing a file
|
||||||
|
hash takes compute cycles during pack, you can select to bypass this
|
||||||
|
generation to speed up the packaging. Excluding the hash does reduce
|
||||||
|
the functionality of the reconciliation at unpack.
|
||||||
|
|
||||||
|
.Parameter LogPath
|
||||||
|
The log folder where log files are written. If the folder does not
|
||||||
|
exist then it is created. You need write access rights to this location.
|
||||||
|
|
||||||
|
.Notes
|
||||||
|
This script has been written to use the 7ZIP function as it is open source
|
||||||
|
and provides a secure encryption mechanism, plus portability on Windows,
|
||||||
|
Linux and MacOS.
|
||||||
|
|
||||||
|
It is also beneficial that 7ZIP has efficient compression algorithms.
|
||||||
|
|
||||||
|
Compressing and packing a large data set can take significant time and also
|
||||||
|
require storage space. The script does not check if you have sufficient
|
||||||
|
free storage to package the source contents into a single 7ZIP file. It is your
|
||||||
|
responsibility to ensure sufficient storage space exists.
|
||||||
|
|
||||||
|
If you need to copy files from one directory to another accessible directory from
|
||||||
|
your Windows desktop, you might consider using ROBOCOPY. If the target directory
|
||||||
|
is not accessible and you want to reconcile, then this tool is appropriate.
|
||||||
|
|
||||||
|
The following environment variables are supported:
|
||||||
|
- PETERDOCS_RECIPIENTKEY
|
||||||
|
|
||||||
|
|
||||||
|
.Example
|
||||||
|
# Pack and encrypt all files in folder ".\transferpack\" using a private-public key
|
||||||
|
# A file with the postifx ".key" is also generated alongside the 7ZIP file
|
||||||
|
Invoke-Pack -SourceFolder ".\transferpack\" -RecipientKeyName data@mycompany
|
||||||
|
|
||||||
|
#>
|
||||||
|
|
||||||
function Invoke-Pack
|
function Invoke-Pack
|
||||||
{
|
{
|
||||||
Param(
|
Param(
|
||||||
[Parameter(Mandatory)][String] $TransferFolder,
|
[Parameter(Mandatory)][String] $SourceFolder,
|
||||||
|
[String] $RecipientKey,
|
||||||
|
[String] $SecretKey,
|
||||||
|
[String] $ArchiveFile,
|
||||||
|
[String] $ReconcileFile,
|
||||||
|
[String] $FileFilter ="*",
|
||||||
|
[String] $SecretFile,
|
||||||
|
[switch] $ExcludeHash,
|
||||||
[String] $RootFolder,
|
[String] $RootFolder,
|
||||||
[String] $FileFilter,
|
[String] $LogPath
|
||||||
[Parameter(Mandatory)][String] $Secret,
|
|
||||||
[Parameter(Mandatory)][String] $CompressFile,
|
|
||||||
[String] $ReconcileFile
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if ($transferFolder.StartsWith("@")) {
|
Open-Log
|
||||||
If (!(Test-Path -Path $transferFolder.Substring(1) )) {
|
|
||||||
Write-Log "File '$($transferFolder.Substring(1))' does not exist"
|
Write-Log "Function parameters follow"
|
||||||
Write-Host "File '$($transferFolder.Substring(1))' does not exist" -ForegroundColor Red
|
Write-Log "Parameter: SourceFolder Value: $SourceFolder "
|
||||||
|
Write-Log "Parameter: RecipientKey Value: $RecipientKey "
|
||||||
|
if ($null -eq $SecretKey) {
|
||||||
|
Write-Log "Parameter: SecretKey Value: (null)) "
|
||||||
|
} else {
|
||||||
|
Write-Log "Parameter: SecretKey Value: ************** "
|
||||||
|
}
|
||||||
|
Write-Log "Parameter: ArchiveFile Value: $ArchiveFile "
|
||||||
|
Write-Log "Parameter: ReconcileFile Value: $ReconcileFile "
|
||||||
|
Write-Log "Parameter: FileFilter Value: $FileFilter "
|
||||||
|
Write-Log "Parameter: SecretFile Value: $SecretFile "
|
||||||
|
Write-Log "Parameter: ExcludeHash Value: $ExcludeHash "
|
||||||
|
Write-Log "Parameter: LogPath Value: $LogPath "
|
||||||
|
Write-Log ""
|
||||||
|
|
||||||
|
if ($SourceFolder.StartsWith("@")) {
|
||||||
|
If (!(Test-Path -Path $SourceFolder.Substring(1) )) {
|
||||||
|
Write-Log "File '$($SourceFolder.Substring(1))' does not exist"
|
||||||
|
Write-Host "File '$($SourceFolder.Substring(1))' does not exist" -ForegroundColor Red
|
||||||
Close-Log
|
Close-Log
|
||||||
Exit
|
Exit
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
If (!(Test-Path -Path $transferFolder )) {
|
If (!(Test-Path -Path $SourceFolder )) {
|
||||||
Write-Log "Folder '$transferFolder' does not exist"
|
Write-Log "Folder '$SourceFolder' does not exist"
|
||||||
Write-Host "Folder '$transferFolder' does not exist" -ForegroundColor Red
|
Write-Host "Folder '$SourceFolder' does not exist" -ForegroundColor Red
|
||||||
Close-Log
|
Close-Log
|
||||||
Exit
|
Exit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Log "Saving folders/files to archive file '$compressFile'"
|
|
||||||
Write-Host "Saving folders/files to archive file '$compressFile'"
|
|
||||||
|
|
||||||
if ($reconcileFile -eq "")
|
if ($RecipientKey -eq "") {
|
||||||
{
|
$getEnvName = $(Get-SoftwareName) + "_RECIPIENTKEY"
|
||||||
$reconcileFile = $default_reconcileFile
|
if ([System.Environment]::GetEnvironmentVariable($getEnvName) -ne "" -and $null -ne [System.Environment]::GetEnvironmentVariable($getEnvName)) {
|
||||||
|
$RecipientKey = [System.Environment]::GetEnvironmentVariable($getEnvName)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($fileFilter -eq "")
|
if (($RecipientKey -eq "") -and ($SecretKey -eq "")) {
|
||||||
{
|
Write-Log "Recipient Key or Secret Key required for packing"
|
||||||
$fileFilter = "*"
|
Write-Host "Recipient Key or Secret Key required for packing" -ForegroundColor Red
|
||||||
|
Close-Log
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($RootFolder -eq "") {
|
||||||
|
if ($SourceFolder.EndsWith("*")) {
|
||||||
|
Write-Log "Root folder required for packing when using wild card for Source Folder"
|
||||||
|
Write-Host "Root folder required for packing when using wild card for Source Folder" -ForegroundColor Red
|
||||||
|
Close-Log
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
$RootFolder = $SourceFolder
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($transferFolder.EndsWith("*"))
|
if ($ArchiveFile -eq "") {
|
||||||
|
$ArchiveFile = $default_archiveFile.Replace("##date##", (Get-Date -Format "yyyyMMdd_HHmm"))
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($SecretKey -eq "") {
|
||||||
|
if ($SecretFile -eq "")
|
||||||
|
{
|
||||||
|
$SecretFile = $ArchiveFile + ".key"
|
||||||
|
}
|
||||||
|
$secret = New-RandomPassword -Length 80
|
||||||
|
Protect-CmsMessage -To $recipientKey -OutFile $SecretFile -Content $secret
|
||||||
|
} else {
|
||||||
|
$secret = $SecretKey
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Write-Log "Saving folders/files to archive file '$ArchiveFile'"
|
||||||
|
Write-Host "Saving folders/files to archive file '$ArchiveFile'"
|
||||||
|
|
||||||
|
if ($ReconcileFile -eq "")
|
||||||
{
|
{
|
||||||
Write-Log "Archive primary folder is '$transferFolder'"
|
$ReconcileFile = $default_reconcileFile
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($FileFilter -eq "")
|
||||||
|
{
|
||||||
|
$FileFilter = "*"
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($SourceFolder.EndsWith("*"))
|
||||||
|
{
|
||||||
|
Write-Log "Archive primary folder is '$SourceFolder'"
|
||||||
$firstCompress = $true
|
$firstCompress = $true
|
||||||
Get-ChildItem $transferFolder| ForEach-Object {
|
Get-ChildItem $SourceFolder| ForEach-Object {
|
||||||
$firstCompress = Invoke-SinglePack -ArchiveFolder $_.FullName -ArchiveFile $compressFile -FileFilter $fileFilter -FirstCompress $firstCompress
|
$firstCompress = Invoke-SinglePack -ArchiveFolder $_.FullName -ArchiveFile $ArchiveFile -FileFilter $FileFilter -FirstCompress $firstCompress
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ($transferFolder.StartsWith("@")) {
|
if ($SourceFolder.StartsWith("@")) {
|
||||||
Write-Log "Using @ file '$($transferFolder.Substring(1))'"
|
Write-Log "Using @ file '$($SourceFolder.Substring(1))'"
|
||||||
Write-Host "Using @ file '$($transferFolder.Substring(1))'"
|
Write-Host "Using @ file '$($SourceFolder.Substring(1))'"
|
||||||
$firstCompress = $true
|
$firstCompress = $true
|
||||||
|
|
||||||
Get-Content -Path $($transferFolder.Substring(1)) | ForEach-Object {
|
Get-Content -Path $($SourceFolder.Substring(1)) | ForEach-Object {
|
||||||
if ($_ -ne "") {
|
if ($_ -ne "") {
|
||||||
|
|
||||||
if ($_.EndsWith("*")) {
|
if ($_.EndsWith("*")) {
|
||||||
Get-ChildItem $_ | ForEach-Object {
|
Get-ChildItem $_ | ForEach-Object {
|
||||||
$firstCompress = Invoke-SinglePack -ArchiveFolder $_.FullName -ArchiveFile $compressFile -FileFilter $fileFilter -FirstCompress $firstCompress
|
$firstCompress = Invoke-SinglePack -ArchiveFolder $_.FullName -ArchiveFile $ArchiveFile -FileFilter $FileFilter -FirstCompress $firstCompress
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|
@ -786,41 +751,43 @@ Param(
|
||||||
Write-Host "Folder/file '$($_)' does not exist" -ForegroundColor Red
|
Write-Host "Folder/file '$($_)' does not exist" -ForegroundColor Red
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$firstCompress = Invoke-SinglePack -ArchiveFolder $_ -ArchiveFile $compressFile -FileFilter $fileFilter -FirstCompress $firstCompress
|
$firstCompress = Invoke-SinglePack -ArchiveFolder $_ -ArchiveFile $ArchiveFile -FileFilter $FileFilter -FirstCompress $firstCompress
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Write-Log "Archive folder '$transferFolder'"
|
Write-Log "Archive folder '$SourceFolder'"
|
||||||
Write-Host "Archive folder '$transferFolder'"
|
Write-Host "Archive folder '$SourceFolder'"
|
||||||
Compress-7Zip -Path $transferFolder -ArchiveFileName $compressFile -Format SevenZip -Filter $fileFilter
|
Compress-7Zip -Path $SourceFolder -ArchiveFileName $ArchiveFile -Format SevenZip -Filter $FileFilter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
If (!(Test-Path -Path $compressFile )) {
|
If (!(Test-Path -Path $ArchiveFile )) {
|
||||||
Write-Log "Archive file '$compressFile' was not created. See any previous errors"
|
Write-Log "Archive file '$ArchiveFile' was not created. See any previous errors"
|
||||||
Write-Host "Archive file '$compressFile' was not created. See any previous errors" -ForegroundColor Red
|
Write-Host "Archive file '$ArchiveFile' was not created. See any previous errors" -ForegroundColor Red
|
||||||
Close-Log
|
Close-Log
|
||||||
Exit
|
Exit
|
||||||
}
|
}
|
||||||
|
|
||||||
Set-Reconcile -ReconcileFile $reconcileFile -FolderName $transferFolder -FileFilter $fileFilter -RootFolderName $rootFolder
|
Set-Reconcile -ReconcileFile $ReconcileFile -FolderName $SourceFolder -FileFilter $FileFilter -RootFolderName $rootFolder
|
||||||
If (!(Test-Path -Path $reconcileFile )) {
|
If (!(Test-Path -Path $ReconcileFile )) {
|
||||||
Write-Log "Reconcile file '$reconcileFile' was not created. See any previous errors"
|
Write-Log "Reconcile file '$ReconcileFile' was not created. See any previous errors"
|
||||||
Write-Host "Reconcile file '$reconcileFile' was not created. See any previous errors" -ForegroundColor Red
|
Write-Host "Reconcile file '$ReconcileFile' was not created. See any previous errors" -ForegroundColor Red
|
||||||
Close-Log
|
Close-Log
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Log "Add reconcile file '$reconcileFile' to file '$compressFile'"
|
Write-Log "Add reconcile file '$ReconcileFile' to file '$ArchiveFile'"
|
||||||
$fullReconcileName = (Get-Item $reconcileFile).FullName
|
$fullReconcileName = (Get-Item $ReconcileFile).FullName
|
||||||
$fullZipName = (Get-Item $compressFile).FullName
|
$fullZipName = (Get-Item $ArchiveFile).FullName
|
||||||
Compress-7Zip -Path $fullReconcileName -ArchiveFileName $fullZipName -Format SevenZip -Append -Password $secret -EncryptFilenames
|
Compress-7Zip -Path $fullReconcileName -ArchiveFileName $fullZipName -Format SevenZip -Append -Password $secret -EncryptFilenames
|
||||||
Remove-Item $fullReconcileName
|
Remove-Item $fullReconcileName
|
||||||
|
|
||||||
Write-Log "Archive file '$compressFile' created from folder '$transferFolder'"
|
Write-Log "Archive file '$ArchiveFile' created from folder '$SourceFolder'"
|
||||||
Write-Host "Archive file '$compressFile' created from folder '$transferFolder'" -ForegroundColor Green
|
Write-Host "Archive file '$ArchiveFile' created from folder '$SourceFolder'" -ForegroundColor Green
|
||||||
|
|
||||||
|
Close-Log
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Loading…
Reference in New Issue