195 lines
6.3 KiB
PowerShell
195 lines
6.3 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
<Overview of script>
|
|
|
|
.NOTES
|
|
Version : 1.0
|
|
Author : Hubert CORNET
|
|
Creation Date : <Date>
|
|
Purpose/Change : <Initial script development>
|
|
|
|
.LINK
|
|
https://www.tips-of-mine.fr
|
|
|
|
.EXEMPLE
|
|
<Example goes here. Repeat this attribute for more than one example>
|
|
|
|
.DESCRIPTION
|
|
<Brief description of script>
|
|
|
|
.PARAMETER <Parameter_Name>
|
|
<Brief description of parameter input required. Repeat this attribute if required>
|
|
|
|
.INPUTS
|
|
<Inputs if any, otherwise state None>
|
|
|
|
.OUTPUTS
|
|
<Outputs if any, otherwise state None - example: Log file stored in C:\Windows\Temp\<name>.log>
|
|
#>
|
|
|
|
#---------------------------------------------------------[Initialisations]--------------------------------------------------------
|
|
|
|
[CmdletBinding()]
|
|
Param(
|
|
[Parameter(Position=0,Mandatory=$True)]
|
|
[string]$CheminSource,
|
|
[Parameter(Position=1,Mandatory=$True)]
|
|
[string]$Pattern,
|
|
[Parameter(Position=2,Mandatory=$True)]
|
|
[int]$Pourcentage
|
|
)
|
|
|
|
|
|
# Définir l'action d'erreur pour continuer silencieusement
|
|
$ErrorActionPreference = "SilentlyContinue"
|
|
|
|
#----------------------------------------------------------[Declarations]----------------------------------------------------------
|
|
# Version Script
|
|
$sScriptVersion = "1.0"
|
|
|
|
#Log File Info
|
|
$sLogPath = "C:\Tmp"
|
|
$sLogName = "Dichotomie.log"
|
|
$sLogFile = Join-Path -Path $sLogPath -ChildPath $sLogName
|
|
|
|
Start-Transcript -Path $sLogFile -NoClobber
|
|
|
|
$Date = Get-Date -Format "yyyyMMdd HHmm"
|
|
$FolderBackup = $CheminSource+"\Backup - "+$Date
|
|
$FolderLotA = $CheminSource+"\Lot-A"
|
|
$FolderLotB = $CheminSource+"\Lot-B"
|
|
$FolderLock = $CheminSource+"\Fichier Bloquant - "+$Date
|
|
$Compteur = 0
|
|
|
|
#-----------------------------------------------------------[Functions]------------------------------------------------------------
|
|
|
|
Function Login-RestApi {
|
|
[cmdletbinding()]
|
|
param(
|
|
[string] $ApiUrl,
|
|
[string] $OpConUser,
|
|
[string] $OpConPassword
|
|
)
|
|
|
|
Write-Verbose ("Parameters =")
|
|
Write-Verbose ("ApiUrl: " + $ApiUrl)
|
|
Write-Verbose ("OpConUser: " + $OpConUser)
|
|
Write-Verbose ("OpConPassword: (hidden)")
|
|
|
|
$ApiUrl = $ApiUrl.ToLower().TrimEnd("/").TrimEnd("/api")
|
|
|
|
Write-Host ("Logging in to OpCon REST API: " + $ApiUrl)
|
|
|
|
$Global:OpconRESTApiUrl = $ApiUrl
|
|
$Global:OpconRESTApiUser = $OpConUser
|
|
$Global:OpConRESTApiPassword = $OpConPassword
|
|
$token = Get-OpConApiToken -Url $ApiUrl -User $OpConUser -Password $OpConPassword
|
|
$Global:OpconRESTApiToken = $token.id
|
|
|
|
$Global:OpconRESTApiAuthHeader = Get-OpConApiAuthHeader -Token $token.id
|
|
Write-Host ('Token successfully stored for future calls in session.')
|
|
}
|
|
|
|
Function Ignore-SelfSignedCerts {
|
|
add-type -TypeDefinition @"
|
|
using System.Net;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
public class TrustAllCertsPolicy : ICertificatePolicy {
|
|
public bool CheckValidationResult(
|
|
ServicePoint srvPoint, X509Certificate certificate,
|
|
WebRequest request, int certificateProblem) {
|
|
return true;
|
|
}
|
|
}
|
|
"@
|
|
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
|
|
}
|
|
|
|
Function Get-OpConApiToken {
|
|
[cmdletbinding()]
|
|
param(
|
|
[string] $Url,
|
|
[string] $User,
|
|
[string] $Password
|
|
)
|
|
$tokensUri = -join($Url, "/api/tokens")
|
|
Write-Host ("Retrieving authorization token...")
|
|
Write-Host ("Uri: " + $tokensUri)
|
|
Write-Host ("User: " + $User)
|
|
$tokenObject = @{
|
|
user = @{
|
|
loginName = $User
|
|
password = $Password
|
|
}
|
|
tokenType = @{
|
|
type = "User"
|
|
}
|
|
}
|
|
try
|
|
{
|
|
Ignore-SelfSignedCerts
|
|
#$token = Invoke-RestMethod -Method Post -Uri $tokensUri -Body (ConvertTo-Json $tokenObject) -ContentType 'application/json; charset=utf-8' -ErrorVariable $RestException -SkipCertificateCheck
|
|
$token = Invoke-RestMethod -Method Post -Uri $tokensUri -Body (ConvertTo-Json $tokenObject) -ContentType 'application/json; charset=utf-8' -ErrorVariable $RestException
|
|
}
|
|
catch
|
|
{
|
|
## $error = ConvertFrom-Json $RestException.ErrorDetails.Message
|
|
##Write-Host ("Unable to fetch token for user '" + $user + "'")
|
|
##Write-Host ("Error Code: " + $error.code)
|
|
##Write-Host ("Message: " + $error.message)
|
|
Write-Host ("StatusCode: " + $_.Exception.Response.StatusCode.value__)
|
|
Write-Host ("StatusDescription: " + $_.Exception.Response.StatusDescription)
|
|
Write-Host ("Message: " + $_[0].message)
|
|
##$Global:OpConRESTAPIException = $_
|
|
throw
|
|
##exit $_.Exception.Response.StatusCode.value__
|
|
}
|
|
Write-Host ("Token retrieved successfully, Id: " + $token.id + ", Valid Until: " + $token.validUntil)
|
|
return $token
|
|
}
|
|
|
|
Function Get-OpConApiAuthHeader {
|
|
Param(
|
|
[string] $Token
|
|
)
|
|
|
|
$authHeader = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
|
|
$authHeader.Add("Authorization", ("Token " + $Token))
|
|
|
|
return $authHeader
|
|
}
|
|
|
|
#--------------------------------------------------------[Debut Du Script]---------------------------------------------------------
|
|
|
|
Login-RestApi -ApiUrl $ServerUrl -OpConUser $OpConUser -OpConPassword $clearPassword
|
|
|
|
#Nombre de fichier présent dans le répertoire
|
|
$ListFile = Get-ChildItem -Path $CheminSource"\*" -Include "*.$Pattern" | Select Name,FullName
|
|
$FileCount = $ListFile.count
|
|
|
|
$PourcentageFichier = (($Pourcentage/100)*$FileCount)
|
|
$PourcentageFichier = [math]::floor($PourcentageFichier)
|
|
|
|
If (!(Test-Path $FolderBackup)) {
|
|
New-Item -Path $FolderBackup -ItemType Directory
|
|
New-Item -Path $FolderLotA -ItemType Directory
|
|
New-Item -Path $FolderLotB -ItemType Directory
|
|
New-Item -Path $FolderLock -ItemType Directory
|
|
}
|
|
|
|
Foreach ($File in $ListFile) {
|
|
Copy-Item $File.FullName -Destination $FolderBackup
|
|
|
|
If ($Compteur -le $PourcentageFichier) {
|
|
Move-Item $File.FullName -Destination $FolderLotA
|
|
}
|
|
Else {
|
|
Move-Item $File.FullName -Destination $FolderLotB
|
|
}
|
|
|
|
$Compteur = $Compteur + 1
|
|
}
|
|
|
|
#---------------------------------------------------------[Fin Du Script]----------------------------------------------------------
|
|
|
|
Stop-Transcript |