2 Commits

Author SHA1 Message Date
01cc073e09 update changelog
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
continuous-integration/drone/tag Build is passing
2022-07-15 12:06:40 +02:00
273c45906a add Changelog template 2022-07-15 12:05:39 +02:00
26 changed files with 1936 additions and 1858 deletions

18
CHANGELOG.md Normal file
View File

@ -0,0 +1,18 @@
# Changelog
<!-- insertMark -->
## `v1.1.0-dev1`
- (273c459) add Changelog template
- (ae62ccc) switch to GNU AGPLv3 license (#64)
- (a66e824) adds community contribution for CiscoUCS connection fix (#63)
- (3d90d91) fix lint (PSScriptAnalyzer) issues (#62)
- (d0b7e53) adds DroneHelper (#61)
- (d4b00a5) Migrates to Pester5+ tests (#59)
- (e340466) update references (#60)
- (88743e9) fix pester verbosity config (#58)
- (c31ee79) Update issue templates (#57)
- (c45490a) Update issue templates (#56)
- (4abfec5) adds PR template (#55)
- (7708df9) Update pwsh style to latest community standards (#52)

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---
@ -36,35 +35,30 @@ Connect-To -RemoteHost "ucs.myside.local" -Type CiscoUcs
### EXAMPLE 2
```
Connect-To -RemoteHost "ucscentral.myside.local" -Type 'CiscoUcsCentral'
Connect-To -RemoteHost "ftp.myside.local" -Type FTP
```
### EXAMPLE 3
```
Connect-To -RemoteHost "ftp.myside.local" -Type FTP
Connect-To -RemoteHost "fas.myside.local" -Type NetAppFAS
```
### EXAMPLE 4
```
Connect-To -RemoteHost "fas.myside.local" -Type NetAppFAS
Connect-To -RemoteHost "esx01.myside.local" -Type VMware
```
### EXAMPLE 5
```
Connect-To -RemoteHost "esx01.myside.local" -Type VMware
Connect-To -RemoteHost "vCenter.myside.local" -Type CisServer
```
### EXAMPLE 6
```
Connect-To -RemoteHost "vCenter.myside.local" -Type CisServer
```
### EXAMPLE 7
```
Connect-To -RemoteHost "exchange01.myside.local" -Type ExchangeHTTP
```
### EXAMPLE 8
### EXAMPLE 7
```
Connect-To -RemoteHost "exchange01.myside.local" -Type ExchangeHTTPS
```
@ -172,16 +166,7 @@ Accept wildcard characters: False
### -Type
Specify the host type of the target.
Currently implemented targets are: Possible connection values are:
- CiscoUcs
- CiscoUcsCentral
- CisServer
- ExchangeHTTP
- ExchangeHTTPS
- FTP
- NetAppFAS
- SCP
- VMware
CiscoUcs, FTP, NetAppFAS, VMware, CisServer, ExchangeHTTP, ExchangeHTTPS, SCP.
```yaml
Type: String

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---
@ -95,17 +94,8 @@ Accept wildcard characters: False
### -Type
Specify the host type of the target.
Currently implemented targets are:
- CiscoUcs
- CiscoUcsCentral
- FTP
- NetAppFAS
- VMware
- CisServer
- ExchangeHTTP
- ExchangeHTTPS
- SCP
Currently implemented targets are: CiscoUcs, FTP, NetAppFAS, VMware,
CisServer, ExchangeHTTP, ExchangeHTTPS, SCP.
```yaml
Type: String

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---
@ -24,15 +23,7 @@ Defines the certificate related properties for an upcoming New-PfxCertificate ex
### EXAMPLE 1
```
$AttribParams = @{
Country = 'DE'
State = 'BW'
City = 'Karlsruhe'
Organization ='AwesomeIT'
OrganizationalUnitName ='PSCredentialStore'
CommonName ='MyPrivateCert'
}
New-CSCertAttribute @AttribParams
New-CSCertAttribute -Country 'DE' -State 'BW' -City 'Karlsruhe' -Organization 'AwesomeIT' -OrganizationalUnitName '' -CommonName 'MyPrivateCert'
```
## PARAMETERS

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---
@ -124,8 +123,8 @@ Accept wildcard characters: False
### -SkipPFXCertCreation
You can skip the pfx certificate creation process.
This makes sense if you have a previously created cert
or want to import a cert in cross-platform environments.
This makes sense if you have a previously created cert or want to
import a cert in cross-platform environments.
```yaml
Type: SwitchParameter
@ -140,10 +139,10 @@ Accept wildcard characters: False
```
### -UseCertStore
Instead of using a plain pfx file beside your CredentialStore file you can import it into the user or
machine certificate store.
In this case the system itself secures the cert and you don't hat to set custom
NTFS permissions so secure your shared certificate.
Instead of using a plain pfx file beside your CredentialStore file you can import it into the user or machine
certificate store.
In this case the system itself secures the cert and you don't hat to set custom NTFS
permissions so secure your shared certificate.
```yaml
Type: SwitchParameter

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---

View File

@ -1,6 +1,6 @@
---
Module Name: PSCredentialStore
Module Guid: 6800e192-9df8-4e30-b253-eb2c799bbe84
Module Guid: 6800e192-9df8-4e30-b253-eb2c799bbe84 6800e192-9df8-4e30-b253-eb2c799bbe84
Download Help Link: {{ Update Download Link }}
Help Version: {{ Please enter version of help manually (X.X.X.X) format }}
Locale: en-US
@ -8,7 +8,7 @@ Locale: en-US
# PSCredentialStore Module
## Description
See global Readme file for usage instructions.
{{ Fill in the Description }}
## PSCredentialStore Cmdlets
### [Connect-To](Connect-To.md)

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---
@ -28,11 +27,6 @@ Use this cmdlet for basic checks with a single item.
Check the item first with this function before
you try to interact with it.
Breaking Change for \`v1.1.0+\`:
Test-CredentialStoreItem will return \`$false\` even if the store doesn't exist.
We removed the terminating
error and replaced it with a warning message.
## EXAMPLES
### EXAMPLE 1

View File

@ -1,7 +1,6 @@
---
external help file: ModuleRoot-help.xml
external help file: PSCredentialStore-help.xml
Module Name: PSCredentialStore
online version:
schema: 2.0.0
---

38
resources/Dependency.json Normal file
View File

@ -0,0 +1,38 @@
{
"Version": 0.1,
"Mandatory": {},
"Optional": [
{
"Name": "foobar2000",
"Modules": [
"foobar2000"
]
},
{
"Name": "foo",
"Modules": [
"foo",
"bar"
]
},
{
"Name": "bar",
"Modules": [
"bar"
]
},
{
"Name": "Existing",
"Modules": [
"PowerShellGet"
]
},
{
"Name": "PSGetMixed",
"Modules": [
"PowerShellGet",
"foobar2000"
]
}
]
}

View File

@ -15,16 +15,7 @@ function Connect-To {
.PARAMETER Type
Specify the host type of the target. Currently implemented targets are: Possible connection values are:
- CiscoUcs
- CiscoUcsCentral
- CisServer
- ExchangeHTTP
- ExchangeHTTPS
- FTP
- NetAppFAS
- SCP
- VMware
CiscoUcs, FTP, NetAppFAS, VMware, CisServer, ExchangeHTTP, ExchangeHTTPS, SCP.
.PARAMETER Credentials
Use this parameter to bypass the stored credentials. Without this parameter Connect-To tries to read the
@ -50,9 +41,6 @@ function Connect-To {
.EXAMPLE
Connect-To -RemoteHost "ucs.myside.local" -Type CiscoUcs
.EXAMPLE
Connect-To -RemoteHost "ucscentral.myside.local" -Type 'CiscoUcsCentral'
.EXAMPLE
Connect-To -RemoteHost "ftp.myside.local" -Type FTP
@ -91,7 +79,6 @@ function Connect-To {
[Parameter(Mandatory = $true, ParameterSetName = 'Private')]
[ValidateSet(
'CiscoUcs',
'CiscoUcsCentral',
'FTP',
'NetAppFAS',
'VMware',
@ -130,6 +117,12 @@ function Connect-To {
}
}
# First check the optional modules
if (-not (Resolve-Dependency -Name $Type)) {
Write-Error -Message (
"Could not resolve the optional dependencies defined for {0}" -f $Type
) -ErrorAction 'Stop'
}
switch ($Type) {
"VMware" {
# Disable the yellow certificate warning, since we haven't replaced the SSL certs for vCenter/ESXi
@ -196,20 +189,6 @@ function Connect-To {
Write-Error @MessageParams
}
}
"CiscoUcsCentral" {
try {
$handle = Connect-UcsCentral -Name $RemoteHost -Credential $creds -NotDefault
$ExecutionContext.SessionState.PSVariable.Set('DefaultUcsCentral', $handle)
}
catch {
$MessageParams = @{
Message = ('Unable to connect to {0} using {1}' -f $RemoteHost, $Type)
ErrorAction = 'Stop'
}
Write-Error @MessageParams
}
}
"FTP" {
# First establish the FTP session
$WinSCPConParams = @{

View File

@ -14,17 +14,8 @@ function Disconnect-From {
same hostname.
.PARAMETER Type
Specify the host type of the target. Currently implemented targets are:
- CiscoUcs
- CiscoUcsCentral
- FTP
- NetAppFAS
- VMware
- CisServer
- ExchangeHTTP
- ExchangeHTTPS
- SCP
Specify the host type of the target. Currently implemented targets are: CiscoUcs, FTP, NetAppFAS, VMware,
CisServer, ExchangeHTTP, ExchangeHTTPS, SCP.
.PARAMETER Force
Force the disconnect, even if the disconnect would fail.
@ -73,7 +64,6 @@ function Disconnect-From {
[Parameter(Mandatory = $true)]
[ValidateSet(
'CiscoUcs',
'CiscoUcsCentral',
'FTP',
'NetAppFAS',
'VMware',
@ -95,10 +85,10 @@ function Disconnect-From {
"VMware" {
try {
if ($Force) {
Disconnect-VIServer -Server $RemoteHost -Confirm:$false -ErrorAction 'Stop' -Force:$true
Disconnect-VIServer -Server $RemoteHost -Confirm:$false -ErrorAction Stop -Force:$true
}
else {
Disconnect-VIServer -Server $RemoteHost -Confirm:$false -ErrorAction 'Stop'
Disconnect-VIServer -Server $RemoteHost -Confirm:$false -ErrorAction Stop
}
}
@ -114,10 +104,10 @@ function Disconnect-From {
"CisServer" {
try {
if ($Force) {
Disconnect-CisServer -Server $RemoteHost -Confirm:$false -ErrorAction 'Stop' -Force:$true
Disconnect-CisServer -Server $RemoteHost -Confirm:$false -ErrorAction Stop -Force:$true
}
else {
Disconnect-CisServer -Server $RemoteHost -Confirm:$false -ErrorAction 'Stop'
Disconnect-CisServer -Server $RemoteHost -Confirm:$false -ErrorAction Stop
}
}
@ -181,24 +171,10 @@ function Disconnect-From {
Write-Error @MessageParams
}
}
"CiscoUCSCentral" {
try {
$handle = Connect-UcsCentral -Name $RemoteHost -Credential $creds -NotDefault
$ExecutionContext.SessionState.PSVariable.Set('DefaultUcsCentral', $handle)
}
catch {
$MessageParams = @{
Message = "Unable to disconnect from {0} using Type {1}." -f $RemoteHost, $Type
ErrorAction = 'Stop'
}
Write-Error @MessageParams
}
}
"ExchangeHTTP*" {
try {
Get-Variable -Name 'PSExchangeRemote' -Scope 'Global' -ErrorAction 'Stop'
Remove-PSSession -Session $Global:PSExchangeRemote -ErrorAction 'Stop'
Get-Variable -Name 'PSExchangeRemote' -Scope Global -ErrorAction Stop
Remove-PSSession -Session $Global:PSExchangeRemote -ErrorAction Stop
}
catch {
$MessageParams = @{
@ -230,4 +206,6 @@ function Disconnect-From {
}
}
}
end {}
}

View File

@ -7,10 +7,6 @@ function Test-CredentialStoreItem {
Use this cmdlet for basic checks with a single item. Check the item first with this function before
you try to interact with it.
Breaking Change for `v1.1.0+`:
Test-CredentialStoreItem will return `$false` even if the store doesn't exist. We removed the terminating
error and replaced it with a warning message.
.PARAMETER Path
Define a custom credential store you try to read from. Without the `-Path` parameter
`Test-CredentialStoreItem` tries to read from the default private store.
@ -92,10 +88,10 @@ function Test-CredentialStoreItem {
}
else {
$MsgParams = @{
Message = "The given credential store ({0}) does not exist!" -f $Path
ErrorAction = 'Stop'
Message = "The given credential store ({0}) does not exist!" -f $Path
}
Write-Warning @MsgParams
return $false
Write-Error @MsgParams
}
}

View File

@ -143,32 +143,7 @@
# RequireLicenseAcceptance = $false
# External dependent modules of this module
ExternalModuleDependencies = @(
@{
ModuleName = 'VMware.VimAutomation.Core'
ModuleVersion = '6.5.2.6234650'
},
@{
ModuleName = 'VMware.VimAutomation.Cis.Core'
ModuleVersion = '6.5.4.6983166'
},
@{
ModuleName = 'Cisco.UCS.Core'
ModuleVersion = '2.3.1.5'
},
@{
ModuleName = 'Cisco.UCSManager'
ModuleVersion = '2.5.2.2'
},
@{
ModuleName = 'WinSCP'
ModuleVersion = '5.17.8.1'
},
@{
ModuleName = 'DataONTAP'
ModuleVersion = '9.7.1.1'
}
)
# ExternalModuleDependencies = @()
} # End of PSData hashtable

View File

@ -0,0 +1,60 @@
BeforeAll {
$ManifestFile = (Get-Item -Path "./src/*.psd1").FullName
Import-Module $ManifestFile -Force
$PrivateFunctions = (Get-ChildItem -Path "./src/Private/*.ps1" | Where-Object {
$_.BaseName -notmatch '.Tests'
}
).FullName
foreach ( $func in $PrivateFunctions) {
. $func
}
}
Describe "Resolve-Dependency" {
Context "Basic syntax check" {
BeforeAll {
Mock Get-ModuleBase {
return (Join-Path -Path $PWD -ChildPath '/resources')
}
Mock Test-Module {
return $true
}
}
It "Test1: Should not throw" {
{ Resolve-Dependency -Name 'foobar2000' } | Should -Not -Throw
}
It "Test2: Output type should be bool" {
Resolve-Dependency -Name 'foobar2000' | Should -BeOfType bool
}
}
Context "Enforce Error" {
# Return incorrect module base to enforce there is no config file.
Mock Get-ModuleBase {
if ($IsWindows) { return "C:\" }
elseif ($isLinux) { return "/" }
}
It "Missing dependency file should not cause an error" {
{ Resolve-Dependency -Name 'awesome' } | Should -Not -Throw
}
It "Missing dependency file should return true" {
Resolve-Dependency -Name 'awesome' | Should -Be $true
}
}
Context "Testing input variations" {
It "Should return true if all given dependencies exist" {
Mock Get-ModuleBase {
return (Join-Path -Path $PWD -ChildPath '/resources')
}
Resolve-Dependency -Name 'Existing' | Should -Be $true
}
It "Mixed results should return false" {
Mock Get-ModuleBase {
return (Join-Path -Path $PWD -ChildPath '/resources')
}
Resolve-Dependency -Name 'PSGetMixed' | Should -Be $false
}
}
}

View File

@ -0,0 +1,87 @@
function Resolve-Dependency {
<#
.SYNOPSIS
Tests defined optional dependencies and returns the result as bool.
.DESCRIPTION
Use this function to test for optional modules. You can use it if you provide functions which needs special
modules but you don't want to make them required.
Place a file called Dependency.json in your module root dir. The default format is:
{
"Version": 0.1,
"Mandatory": {},
"Optional": [
{
"Name": "VMware",
"Modules": [
"VMware.VimAutomation.Core"
]
},
{
"Name": "CiscoUCS",
"Modules": []
}
]
}
.PARAMETER Name
Select the dependency item name you defined in the dependency.json.
.INPUTS
[None]
.OUTPUTS
[bool]
.EXAMPLE
If (-not (Resolve-Dependency -Name 'VMware')) {
Write-Error -Message (
"Could not resolve the optional dependencies defined for {0}" -f 'VMware'
) -ErrorAction 'Stop'
}
#>
[OutputType([bool])]
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$Name
)
begin {
$ModuleRootDir = Get-ModuleBase
$DepFilePath = Join-Path -Path $ModuleRootDir -ChildPath "Dependency.json"
if (Test-Path -Path $DepFilePath) {
$Dependency = Get-Content -Path $DepFilePath -Raw -Encoding UTF8 | ConvertFrom-Json
}
else {
Write-Warning ("Could not find the dependency file: {0}" -f $DepFilePath)
}
}
process {
# ScriptAnalyzer issue workaround (unused var)
$null = $Name
$SelectedDependency = $Dependency.Optional | Where-Object { $_.Name -match $Name }
# return true if there is no dependency defined
if ($null -eq $SelectedDependency) {
return $true
}
$res = @()
foreach ($Module in $SelectedDependency.Modules) {
$res += Test-Module -Name $Module
}
# return false if there was not module at all
if (($res -contains $false) -or ($res.Count -eq 0)) {
return $false
}
else {
return $true
}
}
end {}
}