PSGpfsApi/Public/GpfsConfiguration.ps1

228 lines
5.7 KiB
PowerShell

function Get-GpfsConfiguration {
[CmdletBinding()]
param(
[Parameter()]
[string]$Path = (Join-Path $env:USERPROFILE '.PSGpfsApi\config.json'),
[Parameter()]
[string]$Profile
)
if (-not (Test-Path $Path)) {
throw "Configuration file not found: $Path"
}
$config = Get-Content $Path -Raw | ConvertFrom-Json
if ($Profile) {
$profileObj = $config.Profiles.$Profile
if (-not $profileObj) {
throw "Profile '$Profile' not found in configuration."
}
return $profileObj
}
return $config
}
function Set-GpfsConfiguration {
[CmdletBinding(SupportsShouldProcess)]
param(
[Parameter(Mandatory)]
[string]$ProfileName,
[Parameter(Mandatory)]
[string]$Server,
[Parameter()]
[int]$Port = 443,
[Parameter()]
[ValidateSet('v2')]
[string]$ApiVersion = 'v2',
[Parameter()]
[bool]$UseSsl = $true,
[Parameter()]
[bool]$SkipCertificateCheck = $false,
[Parameter()]
[int]$TimeoutSeconds = 30,
[Parameter()]
[string]$Username,
[Parameter()]
[string]$Path = (Join-Path $env:USERPROFILE '.PSGpfsApi\config.json'),
[Parameter()]
[switch]$SetActive
)
$dir = Split-Path $Path -Parent
if (-not (Test-Path $dir)) {
New-Item -ItemType Directory -Path $dir -Force | Out-Null
}
if (Test-Path $Path) {
$config = Get-Content $Path -Raw | ConvertFrom-Json
}
else {
$config = [PSCustomObject]@{
Profiles = [PSCustomObject]@{}
ActiveProfile = 'default'
}
}
$profileData = [PSCustomObject]@{
Server = $Server
Port = $Port
ApiVersion = $ApiVersion
UseSsl = $UseSsl
SkipCertificateCheck = $SkipCertificateCheck
TimeoutSeconds = $TimeoutSeconds
Username = $Username
}
$config.Profiles | Add-Member -NotePropertyName $ProfileName -NotePropertyValue $profileData -Force
if ($SetActive) {
$config.ActiveProfile = $ProfileName
}
if ($PSCmdlet.ShouldProcess($Path, 'Write configuration')) {
$config | ConvertTo-Json -Depth 10 | Set-Content $Path -Encoding UTF8
Write-Verbose "Configuration saved: $Path (profile: $ProfileName)"
}
}
function Import-GpfsConfiguration {
[CmdletBinding()]
param(
[Parameter()]
[string]$Path = (Join-Path $env:USERPROFILE '.PSGpfsApi\config.json'),
[Parameter()]
[string]$Profile,
[Parameter(Mandatory)]
[PSCredential]$Credential,
[Parameter()]
[switch]$SkipCertificateCheck
)
if (-not (Test-Path $Path)) {
throw "Configuration file not found: $Path"
}
$config = Get-Content $Path -Raw | ConvertFrom-Json
$profileName = if ($Profile) { $Profile } else { $config.ActiveProfile }
$profileObj = $config.Profiles.$profileName
if (-not $profileObj) {
throw "Profile '$profileName' not found in configuration."
}
$connectParams = @{
Server = $profileObj.Server
Port = $profileObj.Port
ApiVersion = $profileObj.ApiVersion
TimeoutSeconds = $profileObj.TimeoutSeconds
Credential = $Credential
}
if ($profileObj.UseSsl) {
$connectParams['UseSsl'] = $true
}
if ($profileObj.SkipCertificateCheck -or $SkipCertificateCheck) {
$connectParams['SkipCertificateCheck'] = $true
}
Connect-GpfsServer @connectParams
}
function Export-GpfsConfiguration {
[CmdletBinding(SupportsShouldProcess)]
param(
[Parameter(Mandatory)]
[string]$Path
)
$defaultPath = Join-Path $env:USERPROFILE '.PSGpfsApi\config.json'
if (-not (Test-Path $defaultPath)) {
throw "No configuration found at default path: $defaultPath"
}
if ($PSCmdlet.ShouldProcess($Path, 'Export configuration')) {
Copy-Item -Path $defaultPath -Destination $Path -Force
Write-Verbose "Configuration exported to: $Path"
}
}
function New-GpfsConfigurationProfile {
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string]$Name,
[Parameter(Mandatory)]
[string]$Server,
[Parameter()]
[int]$Port = 443,
[Parameter()]
[string]$Username,
[Parameter()]
[bool]$SkipCertificateCheck = $false,
[Parameter()]
[switch]$SetActive
)
$setParams = @{
ProfileName = $Name
Server = $Server
Port = $Port
SkipCertificateCheck = $SkipCertificateCheck
SetActive = $SetActive
}
if ($Username) {
$setParams['Username'] = $Username
}
Set-GpfsConfiguration @setParams
}
function Select-GpfsConfigurationProfile {
[CmdletBinding(SupportsShouldProcess)]
param(
[Parameter(Mandatory, Position = 0)]
[string]$Profile,
[Parameter()]
[string]$Path = (Join-Path $env:USERPROFILE '.PSGpfsApi\config.json')
)
if (-not (Test-Path $Path)) {
throw "Configuration file not found: $Path"
}
$config = Get-Content $Path -Raw | ConvertFrom-Json
if (-not $config.Profiles.$Profile) {
throw "Profile '$Profile' not found in configuration."
}
if ($PSCmdlet.ShouldProcess($Profile, 'Set active profile')) {
$config.ActiveProfile = $Profile
$config | ConvertTo-Json -Depth 10 | Set-Content $Path -Encoding UTF8
Write-Verbose "Active profile set to: $Profile"
}
}